public async Task <ActionResult> Callback(string code)
        {
            try
            {
                var responseConfig = await ApiClientConfig.GetClientReponse(code);

                var tokenCookie = new HttpCookie("TokenGiven", responseConfig.AccessToken);
                var tokentime   = new HttpCookie("TokenTime", DateTime.Now.ToString());

                _cookiesManager.AddCookie(tokenCookie, Response);
                _cookiesManager.AddCookie(tokentime, Response);

                return(RedirectToAction("Index"));
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
                return(View(ERROR_MESSAGE_PATH));
            }
        }
        public async Task CacheNewCaptchaValidateAsync()
        {
            string token = GoliathHelper.GenerateSecureRandomNumber();

            _cookieManager.AddCookie(
                key: CookieKeys.ValidateCaptchaCookie,      // Name of the key.
                value: GoliathHash.HashStringSHA256(token), // A hash derived from token.
                expireTime: DateTime.UtcNow.AddMinutes(5)   // Expires in 5 minutes.
                );
            // Add the generated random number to the database.
            await _validTokens.AddTokenAsync(key : token);
        }
        public async Task CreateTokenAsync(string userName, string token)
        {
            string userId = (await _repository.GetUserByNameAsync(userName)).Id;

            if (await _context.TwoFactorTokens.FirstOrDefaultAsync(u => u.UserId.Equals(userId)) != null)
            {
                // Destroy the old token.
                await DisposeTokenAsync(userId);
            }
            // Add a new authorize token.
            await _context.TwoFactorTokens.AddAsync(new TwoFactorAuthorizeToken()
            {
                UserId         = userId,
                AuthorizeToken = token
            });

            _cookies.AddCookie(CookieKeys.TwoFactorAuthorizeCookie, GoliathHash.HashStringSHA256(token), DateTime.UtcNow.AddMinutes(10));
            await _context.SaveChangesAsync();
        }