static public bool ValidateAuthToken(string Secret, string Key, out Int64 UserId, out Int64 AuthTokenId) { try { Query qry = new Query(UserAuthToken.TableSchema).Where(UserAuthToken.Columns.Secret, Secret).AND(UserAuthToken.Columns.Key, Key); UserAuthTokenCollection coll = UserAuthTokenCollection.FetchByQuery(qry); if (coll.Count == 1) { UserAuthToken token = coll[0]; if (token.Expiry < DateTime.UtcNow || token.Key != EncodeKey(token.UserId, AuthTokenKeySalt_UserId)) { UserAuthToken.Delete(token.UserAuthTokenId); UserId = 0; AuthTokenId = 0; return(false); } else { UserId = token.UserId; AuthTokenId = token.UserAuthTokenId; DateTime newExpiry = DateTime.UtcNow.AddHours(AuthTokenLifeSpan_UserId); if (newExpiry > token.Expiry) { token.Expiry = newExpiry; } token.Save(); return(true); } } else { UserId = 0; AuthTokenId = 0; return(false); } } catch { UserId = 0; AuthTokenId = 0; return(false); } }
static public UserAuthToken GenerateAuthTokenForUserId(Int64 UserId, int LifeTimeInHours) { int tries = 3; UserAuthToken token = new UserAuthToken(); token.UserId = UserId; token.CreatedOn = DateTime.UtcNow; token.Expiry = token.CreatedOn.AddHours(LifeTimeInHours > 0 ? LifeTimeInHours : AuthTokenLifeSpan_UserId); token.Key = EncodeKey(UserId, AuthTokenKeySalt_UserId); while (tries > 0) { try { token.Secret = Guid.NewGuid(); token.Save(); return(token); } catch (System.Data.Common.DbException) { tries--; } } return(null); }