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));
            }
        }