async public Task <string> AddSuspicousUserAndGenerateCaptchaCodeAsync(string username)
        {
            var suspiciousUser = SuspiciousUser.FromStringOrDefault(await _cache.GetStringAsync(username), username);

            suspiciousUser.CountFailes++;

            Random rand    = new Random();
            int    maxRand = _options.CaptchaCodeLetters.Length - 1;

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < _options.CaptchaCodeLength; i++)
            {
                int index = rand.Next(maxRand);
                sb.Append(_options.CaptchaCodeLetters[index]);
            }

            string code = sb.ToString();

            suspiciousUser.CaptchaCode = code;
            suspiciousUser.TimeStamp   = DateTime.Now;

            await _cache.SetStringAsync(username, suspiciousUser.ToString());

            return(code);
        }
        async public Task AddSuspiciousUserAsync(string username)
        {
            var suspiciousUser = SuspiciousUser.FromStringOrDefault(await _cache.GetStringAsync(username), username);

            suspiciousUser.TimeStamp = DateTime.Now;
            suspiciousUser.CountFailes++;

            await _cache.SetStringAsync(username, suspiciousUser.ToString());
        }
        async public Task <bool> VerifyCaptchaCodeAsync(string username, string code)
        {
            var suspiciousUser = SuspiciousUser.FromStringOrDefault(await _cache.GetStringAsync(username), username);

            return(code != null && code.Equals(suspiciousUser.CaptchaCode, StringComparison.InvariantCultureIgnoreCase));
        }