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)); } }