private PasswordVerificationResult VerifyPassword(AuthenticateUserCredentialsQuery query, User dbUser)
        {
            if (dbUser == null)
            {
                throw new ArgumentNullException(nameof(dbUser));
            }
            var verificationResult = _userAuthenticationHelper.VerifyPassword(dbUser, query.Password);

            switch (verificationResult)
            {
            case PasswordVerificationResult.Failed:
                _logger.LogDebug("Authentication failed for user {UserId}", dbUser.UserId);
                break;

            case PasswordVerificationResult.SuccessRehashNeeded:
                _logger.LogDebug("Authentication success for user {UserId} (rehash needed)", dbUser.UserId);
                break;

            case PasswordVerificationResult.Success:
                _logger.LogDebug("Authentication success for user {UserId}", dbUser.UserId);
                break;

            default:
                throw new InvalidOperationException("Unrecognised PasswordVerificationResult: " + verificationResult);
            }

            return(verificationResult);
        }
Example #2
0
        private async Task AuthenticateAsync(UpdateCurrentUserPasswordCommand command, User user)
        {
            if (_userAuthenticationHelper.VerifyPassword(user, command.OldPassword) == PasswordVerificationResult.Failed)
            {
                var logFailedAttemptCommand = new LogFailedAuthenticationAttemptCommand(user.UserAreaCode, user.Username);
                await _domainRepository.ExecuteCommandAsync(logFailedAttemptCommand);

                UserValidationErrors.Authentication.InvalidPassword.Throw(nameof(command.OldPassword));
            }
        }