public void Authenticate(SessionAuth auth, SessionAuthOptions options) { Team team = _teamReg.GetTeam(auth.TeamName); string authCode = ""; if (team.Authenticate) { authCode = checkAuthCode(team, auth); if (!options.IsLoginFlow) { lock (_replayDetector) { _replayDetector.CheckAndStore(authCode); } } } ClientCode clientCode = auth.GetClientCode(); if (options.IsLoginFlow) { if (auth.SessionId != 0 || auth.SequenceNumber != 0) { throw new AuthException("For login calls, SessionId and SequenceNumber must be zero."); } } else { lock (_sessions) { ClientSession session; if (!_sessions.TryGetValue(clientCode, out session)) { session = new ClientSession(auth.SessionId, clientCode); _sessions[clientCode] = session; } if (session.SessionId != auth.SessionId) { session.Restart(auth.SessionId); } session.Update(); } } }
public void Authenticate(SessionAuth auth, SessionAuthOptions options) { Team team = _teamReg.GetTeam(auth.TeamName); if (team.Authenticate) { checkAuthCode(team, auth); } ClientCode clientCode = auth.GetClientCode(); if (options.IsLoginFlow) { if (auth.SessionId != 0 || auth.SequenceNumber != 0) { throw new AuthException("For login calls, SessionId and SequenceNumber must be zero."); } } else { lock (_sessions) { ClientSession session; if (!_sessions.TryGetValue(clientCode, out session)) { throw new AuthException("No active session for this client. Login first."); } if (session.SessionId != auth.SessionId) { throw new AuthException("Stale session id. Relogin or stop."); } if (team.Authenticate) { _replayDetector.CheckAndStore(auth.SessionId, auth.SequenceNumber); } session.Update(auth.SequenceNumber); } } }