public async Task <ActionResponse> AuthenticatePasswordAsync(AuthenticatePasswordInputModel model)
        {
            var user = await _userStore.GetUserByEmailAsync(model.Username); //todo: handle non-email addresses

            if (user == null)
            {
                return(Unauthenticated("The email address or password wasn't right"));
            }
            else
            {
                var checkPasswordResult = await _passwordService.CheckPasswordAsync(user.SubjectId, model.Password);

                switch (checkPasswordResult)
                {
                case CheckPasswordResult.NotFound:
                case CheckPasswordResult.PasswordIncorrect:
                    return(Unauthenticated("The email address or password wasn't right"));

                case CheckPasswordResult.TemporarilyLocked:
                    return(Unauthenticated("Your password is temporarily locked. Use a one time code to sign in."));

                case CheckPasswordResult.Success:
                    return(Redirect(ValidatedNextUrl(model.NextUrl)));

                case CheckPasswordResult.ServiceFailure:
                default:
                    return(ServerError("Hmm. Something went wrong. Please try again."));
                }
            }
        }
        public async Task <ActionResponse> AuthenticateAsync(AuthenticatePasswordInputModel model)
        {
            var oneTimeCode = model.Password.Replace(" ", "");

            if (oneTimeCode.Length == 6 && oneTimeCode.All(Char.IsDigit))
            {
                var input = new AuthenticateInputModel()
                {
                    Username     = model.Username,
                    OneTimeCode  = oneTimeCode,
                    StaySignedIn = model.StaySignedIn
                };
                return(await AuthenticateCodeAsyc(input));
            }
            else
            {
                return(await AuthenticatePasswordAsync(model));
            }
        }