Added RequireSession flag which, if false, removes session validation.

This commit is contained in:
Greg Edwards 2015-02-26 02:24:11 -05:00
parent b3e71f7496
commit 7ac3e6f1da
3 changed files with 13 additions and 10 deletions

View File

@ -19,7 +19,8 @@ namespace GamestatsBase
public class GamestatsHandler : IHttpHandler, IRequiresSessionState public class GamestatsHandler : IHttpHandler, IRequiresSessionState
{ {
public GamestatsHandler(String initString, GamestatsRequestVersions reqVersion, public GamestatsHandler(String initString, GamestatsRequestVersions reqVersion,
GamestatsResponseVersions respVersion, bool encryptedRequest = true) GamestatsResponseVersions respVersion, bool encryptedRequest = true,
bool requireSession = true)
{ {
if (initString.Length < 44) throw new FormatException(); if (initString.Length < 44) throw new FormatException();
@ -30,21 +31,21 @@ namespace GamestatsBase
uint hashMask = UInt32.Parse(initString.Substring(44, 8), NumberStyles.AllowHexSpecifier); uint hashMask = UInt32.Parse(initString.Substring(44, 8), NumberStyles.AllowHexSpecifier);
String gameId = initString.Substring(52); String gameId = initString.Substring(52);
Initialize(salt, rngMul, rngAdd, rngMask, hashMask, gameId, reqVersion, respVersion, encryptedRequest); Initialize(salt, rngMul, rngAdd, rngMask, hashMask, gameId, reqVersion, respVersion, encryptedRequest, requireSession);
} }
public GamestatsHandler(String salt, uint rngMul, uint rngAdd, uint rngMask, public GamestatsHandler(String salt, uint rngMul, uint rngAdd, uint rngMask,
uint hashMask, uint hashMask,
String gameId, GamestatsRequestVersions reqVersion, GamestatsResponseVersions respVersion, String gameId, GamestatsRequestVersions reqVersion, GamestatsResponseVersions respVersion,
bool encryptedRequest = true) bool encryptedRequest = true, bool requireSession = true)
{ {
Initialize(salt, rngMul, rngAdd, rngMask, hashMask, gameId, reqVersion, respVersion, encryptedRequest); Initialize(salt, rngMul, rngAdd, rngMask, hashMask, gameId, reqVersion, respVersion, encryptedRequest, requireSession);
} }
private void Initialize(String salt, uint rngMul, uint rngAdd, uint rngMask, private void Initialize(String salt, uint rngMul, uint rngAdd, uint rngMask,
uint hashMask, uint hashMask,
String gameId, GamestatsRequestVersions reqVersion, GamestatsResponseVersions respVersion, String gameId, GamestatsRequestVersions reqVersion, GamestatsResponseVersions respVersion,
bool encryptedRequest) bool encryptedRequest, bool requireSession)
{ {
if (salt.Length != 20) throw new FormatException(); if (salt.Length != 20) throw new FormatException();
Salt = salt; Salt = salt;
@ -56,6 +57,7 @@ namespace GamestatsBase
RequestVersion = reqVersion; RequestVersion = reqVersion;
ResponseVersion = respVersion; ResponseVersion = respVersion;
EncryptedRequest = encryptedRequest; EncryptedRequest = encryptedRequest;
RequireSession = requireSession;
} }
public String Salt { get; protected set; } public String Salt { get; protected set; }
@ -67,6 +69,7 @@ namespace GamestatsBase
public GamestatsRequestVersions RequestVersion { get; protected set; } public GamestatsRequestVersions RequestVersion { get; protected set; }
public GamestatsResponseVersions ResponseVersion { get; protected set; } public GamestatsResponseVersions ResponseVersion { get; protected set; }
public bool EncryptedRequest { get; protected set; } public bool EncryptedRequest { get; protected set; }
public bool RequireSession { get; protected set; }
public GamestatsSessionManager SessionManager public GamestatsSessionManager SessionManager
{ {
@ -115,7 +118,7 @@ namespace GamestatsBase
else if (form.Count >= 3) else if (form.Count >= 3)
{ {
// this is a main request // this is a main request
if (form["hash"] == null || if ((form["hash"] == null && RequireSession) ||
form["data"] == null || form["data"] == null ||
form["data"].Length < form["data"].Length <
((RequestVersion != GamestatsRequestVersions.Version3) ? 12 : 16)) ((RequestVersion != GamestatsRequestVersions.Version3) ? 12 : 16))
@ -138,7 +141,7 @@ namespace GamestatsBase
GamestatsSession session = null; GamestatsSession session = null;
if (SessionManager.Sessions.ContainsKey(form["hash"])) if (form["hash"] != null && SessionManager.Sessions.ContainsKey(form["hash"]))
{ {
session = SessionManager.Sessions[form["hash"]]; session = SessionManager.Sessions[form["hash"]];
if (session.GameId != GameId) if (session.GameId != GameId)
@ -148,7 +151,7 @@ namespace GamestatsBase
return; return;
} }
} }
else if (context.Request.HttpMethod == "GET") else if (RequireSession)
{ {
// session hash not matched // session hash not matched
ShowError(context, 400); ShowError(context, 400);

View File

@ -13,7 +13,7 @@ namespace Sample
{ {
public dummy() public dummy()
: base("00000000000000000000", 0, 0, 0, 0, "dummy", : base("00000000000000000000", 0, 0, 0, 0, "dummy",
GamestatsRequestVersions.Version1, GamestatsResponseVersions.Version1, false) GamestatsRequestVersions.Version1, GamestatsResponseVersions.Version1, false, false)
{ {
} }

View File

@ -16,7 +16,7 @@ namespace Sample.tetrisds
public class store : GamestatsHandler public class store : GamestatsHandler
{ {
public store() : base("Wo3vqrDoL56sAdveYeC1", 0, 0, 0, 0, "tetrisds", public store() : base("Wo3vqrDoL56sAdveYeC1", 0, 0, 0, 0, "tetrisds",
GamestatsRequestVersions.Version1, GamestatsResponseVersions.Version1, false) GamestatsRequestVersions.Version1, GamestatsResponseVersions.Version1, false, true)
{ {
} }