namespace IOL.GreatOffice.Api.Endpoints.Internal.PasswordResetRequests; public class CreateResetRequestRoute : RouteBaseAsync.WithRequest.WithActionResult { private readonly ILogger _logger; private readonly PasswordResetService _passwordResetService; private readonly MainAppDatabase _database; public CreateResetRequestRoute(ILogger logger, PasswordResetService passwordResetService, MainAppDatabase database) { _logger = logger; _passwordResetService = passwordResetService; _database = database; } public class Payload { public string Username { get; set; } } [AllowAnonymous] [HttpPost("~/_/password-reset-request/create")] public override async Task HandleAsync(Payload request, CancellationToken cancellationToken = default) { if (!request.Username.IsValidEmailAddress()) { _logger.LogInformation("Username is invalid, not doing request for password change"); return KnownProblem("Invalid email address", request.Username + " looks like an invalid email address"); } var tz = GetRequestTimeZone(_logger); _logger.LogInformation("Creating forgot password request with local date time: " + tz.LocalDateTime.ToString("u")); try { var user = _database.Users.SingleOrDefault(c => c.Username.Equals(request.Username)); if (user != default) { await _passwordResetService.AddRequestAsync(user, tz.TimeZoneInfo, cancellationToken); return Ok(); } _logger.LogInformation("User was not found, not doing request for password change"); return Ok(); } catch (Exception e) { _logger.LogError(e, "_/password-reset-request/create threw an exception"); return Ok(); } } }