Beispiel #1
0
        public async Task <IActionResult> ResetPassword(ResetUserPasswordRequest request)
        {
            _logger.LogDebug("ResetPassword {username}", request.Username);

            const int POLLY_RETRIES = 5;

            var policy = Policy
                         .HandleResult(false)
                         .WaitAndRetryAsync(POLLY_RETRIES, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));

            if (request.Username.EndsWith(GetEjudDomain(), StringComparison.InvariantCultureIgnoreCase))
            {
                return(Ok(new UpdateUserResponse {
                    NewPassword = GetDefaultPassword()
                }));
            }

            try
            {
                var response = await policy.ExecuteAsync(async() => await _testApiClient.GetUserExistsInAdAsync(request.Username));

                if (response.Equals(false))
                {
                    return(NotFound());
                }

                _logger.LogDebug("User '{username}' successfully found in AAD", request.Username);
            }
            catch (TestApiException e)
            {
                _logger.LogError(e, "Unable to find user {username} to reset user password with error '{message}'", request.Username, e.Message);
                return(StatusCode(e.StatusCode, e.Response));
            }

            try
            {
                var response = await _testApiClient.ResetUserPasswordAsync(request);

                _logger.LogDebug("User '{username}' successfully reset", request.Username);
                return(Ok(response));
            }
            catch (TestApiException e)
            {
                _logger.LogError(e, "Unable to reset user password: {username} with error '{message}'", request.Username, e.Message);
                return(StatusCode(e.StatusCode, e.Response));
            }
        }