internal async Task <SessionInfoWithError> VerifyTokenAsync(string token, bool force = false) { WebCache_Session s = await _db.Sessions.FirstOrDefaultAsync(a => a.Token == token); if (s == null) { return new SessionInfoWithError { Error = StatusCode(403, "Invalid Token") } } ; if (s.Expiration < DateTime.UtcNow) { //Lets reuse this call to kill em all, and do some database cleaning. _db.RemoveRange(_db.Sessions.Where(a => a.Expiration < DateTime.UtcNow)); await _db.SaveChangesAsync(); return(new SessionInfoWithError { Error = StatusCode(403, "Invalid Token") }); } if (s.Expiration.AddHours(-8) < DateTime.UtcNow || force) //Refresh Expiration if we have less than 8 hours left { s.Expiration = DateTime.UtcNow.AddHours(GetTokenExpirationInHours()); await _db.SaveChangesAsync(); } WebCache_Ban b = GetBan(s.AniDBUserId); if (b != null) { return new SessionInfoWithError { Error = StatusCode(403, "Banned: " + b.Reason + " Expiration:" + b.ExpirationUTC.ToLongDateString()) } } ; SessionInfoWithError si = new SessionInfoWithError { AniDBUserId = s.AniDBUserId, AniDBUserName = s.AniDBUserName, Expiration = s.Expiration, Token = s.Token }; si.Role = GetRole(s.AniDBUserId); si.Error = null; return(si); }
internal void SetBan(int AniDBUserId, string reason, int hours) { lock (_lock) { WebCache_Ban b = _db.Bans.FirstOrDefault(a => a.AniDBUserId == AniDBUserId); if (b == null) { b = new WebCache_Ban(); b.AniDBUserId = AniDBUserId; _db.Add(b); } b.Reason = reason; b.ExpirationUTC = DateTime.UtcNow.AddHours(hours); _db.SaveChanges(); Dictionary <int, WebCache_Ban> bans = _db.Bans.ToDictionary(a => a.AniDBUserId, a => a); _mc.Set("bans", bans, TimeSpan.FromSeconds(60)); } }