diff options
Diffstat (limited to 'code/api/src/Endpoints/Internal/PasswordResetRequests')
| -rw-r--r-- | code/api/src/Endpoints/Internal/PasswordResetRequests/CreateResetRequestPayload.cs (renamed from code/api/src/Endpoints/Internal/PasswordResetRequests/Create/RequestModel.cs) | 4 | ||||
| -rw-r--r-- | code/api/src/Endpoints/Internal/PasswordResetRequests/CreateResetRequestRoute.cs (renamed from code/api/src/Endpoints/Internal/PasswordResetRequests/Create/Route.cs) | 33 | ||||
| -rw-r--r-- | code/api/src/Endpoints/Internal/PasswordResetRequests/FulfillResetRequestRoute.cs | 51 | ||||
| -rw-r--r-- | code/api/src/Endpoints/Internal/PasswordResetRequests/IsResetRequestValidRoute.cs | 42 |
4 files changed, 57 insertions, 73 deletions
diff --git a/code/api/src/Endpoints/Internal/PasswordResetRequests/Create/RequestModel.cs b/code/api/src/Endpoints/Internal/PasswordResetRequests/CreateResetRequestPayload.cs index 236c650..1adb344 100644 --- a/code/api/src/Endpoints/Internal/PasswordResetRequests/Create/RequestModel.cs +++ b/code/api/src/Endpoints/Internal/PasswordResetRequests/CreateResetRequestPayload.cs @@ -1,6 +1,6 @@ -namespace IOL.GreatOffice.Api.Endpoints.Internal.PasswordResetRequests.Create; +namespace IOL.GreatOffice.Api.Endpoints.Internal.PasswordResetRequests; -public class RequestModel +public class CreateResetRequestPayload { public string Username { get; set; } }
\ No newline at end of file diff --git a/code/api/src/Endpoints/Internal/PasswordResetRequests/Create/Route.cs b/code/api/src/Endpoints/Internal/PasswordResetRequests/CreateResetRequestRoute.cs index f837fc0..bb72d38 100644 --- a/code/api/src/Endpoints/Internal/PasswordResetRequests/Create/Route.cs +++ b/code/api/src/Endpoints/Internal/PasswordResetRequests/CreateResetRequestRoute.cs @@ -1,15 +1,15 @@ -namespace IOL.GreatOffice.Api.Endpoints.Internal.PasswordResetRequests.Create; +namespace IOL.GreatOffice.Api.Endpoints.Internal.PasswordResetRequests; -public class Route : RouteBaseAsync.WithRequest<RequestModel>.WithActionResult +public class Route : RouteBaseAsync.WithRequest<CreateResetRequestPayload>.WithActionResult { private readonly ILogger<Route> _logger; private readonly PasswordResetService _passwordResetService; - private readonly AppDbContext _context; - - public Route(ILogger<Route> logger, PasswordResetService passwordResetService, AppDbContext context) { + private readonly MainAppDatabase _database; + + public Route(ILogger<Route> logger, PasswordResetService passwordResetService, MainAppDatabase database) { _logger = logger; _passwordResetService = passwordResetService; - _context = context; + _database = database; } /// <summary> @@ -20,30 +20,19 @@ public class Route : RouteBaseAsync.WithRequest<RequestModel>.WithActionResult /// <returns></returns> [AllowAnonymous] [HttpPost("~/_/password-reset-request/create")] - public override async Task<ActionResult> HandleAsync(RequestModel request, CancellationToken cancellationToken = default) { + public override async Task<ActionResult> HandleAsync(CreateResetRequestPayload 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"); } - Request.Headers.TryGetValue(AppHeaders.BROWSER_TIME_ZONE, out var timeZoneHeader); - var tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneHeader.ToString().HasValue() ? timeZoneHeader.ToString() : "UTC"); - var offset = tz.BaseUtcOffset.Hours; - - // this is fine as long as the client is not connecting from Australia: Lord Howe Island - // according to https://en.wikipedia.org/wiki/Daylight_saving_time_by_country - if (tz.IsDaylightSavingTime(AppDateTime.UtcNow)) { - offset++; - } - - _logger.LogInformation("Request time zone (" + tz.Id + ") offset is: " + offset + " hours"); - var requestDateTime = TimeZoneInfo.ConvertTimeFromUtc(AppDateTime.UtcNow, tz); - _logger.LogInformation("Creating forgot password request with date time: " + requestDateTime.ToString("u")); + var tz = GetRequestTimeZone(_logger); + _logger.LogInformation("Creating forgot password request with local date time: " + tz.LocalDateTime.ToString("u")); try { - var user = _context.Users.SingleOrDefault(c => c.Username.Equals(request.Username)); + var user = _database.Users.SingleOrDefault(c => c.Username.Equals(request.Username)); if (user != default) { - await _passwordResetService.AddRequestAsync(user, tz, cancellationToken); + await _passwordResetService.AddRequestAsync(user, tz.TimeZoneInfo, cancellationToken); return Ok(); } diff --git a/code/api/src/Endpoints/Internal/PasswordResetRequests/FulfillResetRequestRoute.cs b/code/api/src/Endpoints/Internal/PasswordResetRequests/FulfillResetRequestRoute.cs index a0ad4d0..6f71b2f 100644 --- a/code/api/src/Endpoints/Internal/PasswordResetRequests/FulfillResetRequestRoute.cs +++ b/code/api/src/Endpoints/Internal/PasswordResetRequests/FulfillResetRequestRoute.cs @@ -1,34 +1,31 @@ - namespace IOL.GreatOffice.Api.Endpoints.Internal.PasswordResetRequests; -/// <inheritdoc /> public class FulfillResetRequestRoute : RouteBaseAsync.WithRequest<FulfillResetRequestPayload>.WithActionResult { - private readonly PasswordResetService _passwordResetService; + private readonly PasswordResetService _passwordResetService; - /// <inheritdoc /> - public FulfillResetRequestRoute(PasswordResetService passwordResetService) { - _passwordResetService = passwordResetService; - } + public FulfillResetRequestRoute(PasswordResetService passwordResetService) { + _passwordResetService = passwordResetService; + } - /// <summary> - /// Fulfill a password reset request. - /// </summary> - /// <param name="request"></param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - [AllowAnonymous] - [HttpPost("~/_/password-reset-request/fulfill")] - public override async Task<ActionResult> HandleAsync(FulfillResetRequestPayload request, CancellationToken cancellationToken = default) { - try { - var fulfilled = await _passwordResetService.FullFillRequestAsync(request.Id, request.NewPassword, cancellationToken); - return Ok(fulfilled); - } catch (Exception e) { - if (e is ForgotPasswordRequestNotFoundException or UserNotFoundException) { - return NotFound(); - } + /// <summary> + /// Fulfill a password reset request. + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + [AllowAnonymous] + [HttpPost("~/_/password-reset-request/fulfill")] + public override async Task<ActionResult> HandleAsync(FulfillResetRequestPayload request, CancellationToken cancellationToken = default) { + try { + var fulfilled = await _passwordResetService.FullFillRequestAsync(request.Id, request.NewPassword, cancellationToken); + return Ok(fulfilled); + } catch (Exception e) { + if (e is ForgotPasswordRequestNotFoundException or UserNotFoundException) { + return NotFound(); + } - throw; - } - } -} + throw; + } + } +}
\ No newline at end of file diff --git a/code/api/src/Endpoints/Internal/PasswordResetRequests/IsResetRequestValidRoute.cs b/code/api/src/Endpoints/Internal/PasswordResetRequests/IsResetRequestValidRoute.cs index 917c4f0..687cef6 100644 --- a/code/api/src/Endpoints/Internal/PasswordResetRequests/IsResetRequestValidRoute.cs +++ b/code/api/src/Endpoints/Internal/PasswordResetRequests/IsResetRequestValidRoute.cs @@ -1,29 +1,27 @@ namespace IOL.GreatOffice.Api.Endpoints.Internal.PasswordResetRequests; -/// <inheritdoc /> public class IsResetRequestValidRoute : RouteBaseAsync.WithRequest<Guid>.WithActionResult { - private readonly PasswordResetService _passwordResetService; + private readonly PasswordResetService _passwordResetService; - /// <inheritdoc /> - public IsResetRequestValidRoute(PasswordResetService passwordResetService) { - _passwordResetService = passwordResetService; - } + public IsResetRequestValidRoute(PasswordResetService passwordResetService) { + _passwordResetService = passwordResetService; + } - /// <summary> - /// Check if a given password reset request is still valid. - /// </summary> - /// <param name="id"></param> - /// <param name="cancellationToken"></param> - /// <returns></returns> - [AllowAnonymous] - [HttpGet("~/_/password-reset-request/is-valid")] - public override async Task<ActionResult> HandleAsync(Guid id, CancellationToken cancellationToken = default) { - var request = await _passwordResetService.GetRequestAsync(id, cancellationToken); - if (request == default) { - return NotFound(); - } + /// <summary> + /// Check if a given password reset request is still valid. + /// </summary> + /// <param name="id"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + [AllowAnonymous] + [HttpGet("~/_/password-reset-request/is-valid")] + public override async Task<ActionResult> HandleAsync(Guid id, CancellationToken cancellationToken = default) { + var request = await _passwordResetService.GetRequestAsync(id, cancellationToken); + if (request == default) { + return NotFound(); + } - return Ok(request.IsExpired == false); - } -} + return Ok(request.IsExpired == false); + } +}
\ No newline at end of file |
