Editor/Core/SteamTokenVerification.cs
using System;
namespace TeamCreate;
public enum SteamTokenVerdict
{
Verified,
TokenMissing,
TokenMalformed,
SteamIdMismatch,
ServiceUnavailable,
ServiceRejected
}
public static class SteamTokenRules
{
public const int MaxTokenLength = 4096;
public static bool IsPlausibleToken(string token)
{
if (string.IsNullOrWhiteSpace(token) || token.Length > 4096)
{
return false;
}
foreach (char c in token)
{
if (c < '!' || c > '~')
{
return false;
}
}
return true;
}
public static SteamTokenVerdict Decide(long claimedSteamId, string token, int? httpStatus, long? verifiedSteamId, string serviceStatus)
{
if (string.IsNullOrWhiteSpace(token))
{
return SteamTokenVerdict.TokenMissing;
}
if (!IsPlausibleToken(token))
{
return SteamTokenVerdict.TokenMalformed;
}
if (!httpStatus.HasValue)
{
return SteamTokenVerdict.ServiceUnavailable;
}
if (httpStatus != 200)
{
return SteamTokenVerdict.ServiceRejected;
}
if (!string.Equals(serviceStatus, "ok", StringComparison.OrdinalIgnoreCase))
{
return SteamTokenVerdict.ServiceRejected;
}
if (!verifiedSteamId.HasValue || verifiedSteamId.Value != claimedSteamId)
{
return SteamTokenVerdict.SteamIdMismatch;
}
if (claimedSteamId <= 0)
{
return SteamTokenVerdict.SteamIdMismatch;
}
return SteamTokenVerdict.Verified;
}
}