diff options
Diffstat (limited to 'code/api/src/Services/PasswordResetService.cs')
| -rw-r--r-- | code/api/src/Services/PasswordResetService.cs | 36 |
1 files changed, 14 insertions, 22 deletions
diff --git a/code/api/src/Services/PasswordResetService.cs b/code/api/src/Services/PasswordResetService.cs index 76eb2fe..d4889bc 100644 --- a/code/api/src/Services/PasswordResetService.cs +++ b/code/api/src/Services/PasswordResetService.cs @@ -19,8 +19,8 @@ public class PasswordResetService _mailService = mailService; } - public async Task<ForgotPasswordRequest> GetRequestAsync(Guid id, CancellationToken cancellationToken = default) { - var request = await _database.ForgotPasswordRequests + public async Task<PasswordResetRequest> GetRequestAsync(Guid id, CancellationToken cancellationToken = default) { + var request = await _database.PasswordResetRequests .Include(c => c.User) .SingleOrDefaultAsync(c => c.Id == id, cancellationToken); if (request == default) { @@ -30,31 +30,24 @@ public class PasswordResetService _logger.LogInformation($"Found password reset request for user: {request.User.Username}, expires at {request.ExpirationDate} (in {request.ExpirationDate.Subtract(AppDateTime.UtcNow).Minutes} minutes)."); return request; } - - public async Task<bool> FullFillRequestAsync(Guid id, string newPassword, CancellationToken cancellationToken = default) { - var request = await GetRequestAsync(id, cancellationToken); - if (request == default) { - throw new ForgotPasswordRequestNotFoundException("Request with id: " + id + " was not found"); - } - - var user = _database.Users.SingleOrDefault(c => c.Id == request.User.Id); - if (user == default) { - throw new UserNotFoundException("User with id: " + request.User.Id + " was not found"); - } + public async Task<FulfillPasswordResetRequestResult> FulfillRequestAsync(Guid id, string newPassword, CancellationToken cancellationToken = default) { + var request = await GetRequestAsync(id, cancellationToken); + if (request == default) return FulfillPasswordResetRequestResult.REQUEST_NOT_FOUND; + var user = _database.Users.FirstOrDefault(c => c.Id == request.User.Id); + if (user == default) return FulfillPasswordResetRequestResult.USER_NOT_FOUND; user.HashAndSetPassword(newPassword); _database.Users.Update(user); await _database.SaveChangesAsync(cancellationToken); _logger.LogInformation($"Fullfilled password reset request for user: {request.User.Username}"); await DeleteRequestsForUserAsync(user.Id, cancellationToken); - return true; + return FulfillPasswordResetRequestResult.FULFILLED; } - public async Task AddRequestAsync(User user, TimeZoneInfo requestTz, CancellationToken cancellationToken = default) { await DeleteRequestsForUserAsync(user.Id, cancellationToken); - var request = new ForgotPasswordRequest(user); - _database.ForgotPasswordRequests.Add(request); + var request = new PasswordResetRequest(user); + _database.PasswordResetRequests.Add(request); await _database.SaveChangesAsync(cancellationToken); var portalUrl = _configuration.PORTAL_URL; var emailFromAddress = _configuration.EMAIL_FROM_ADDRESS; @@ -88,22 +81,21 @@ If you did not request a password reset, no action is required. } public async Task DeleteRequestsForUserAsync(Guid userId, CancellationToken cancellationToken = default) { - var requestsToRemove = _database.ForgotPasswordRequests.Where(c => c.UserId == userId).ToList(); + var requestsToRemove = _database.PasswordResetRequests.Where(c => c.UserId == userId).ToList(); if (!requestsToRemove.Any()) return; - _database.ForgotPasswordRequests.RemoveRange(requestsToRemove); + _database.PasswordResetRequests.RemoveRange(requestsToRemove); await _database.SaveChangesAsync(cancellationToken); _logger.LogInformation($"Deleted {requestsToRemove.Count} password reset requests for user: {userId}."); } - public async Task DeleteStaleRequestsAsync(CancellationToken cancellationToken = default) { var deleteCount = 0; - foreach (var request in _database.ForgotPasswordRequests.Where(c => c.IsExpired)) { + foreach (var request in _database.PasswordResetRequests.Where(c => c.IsExpired)) { if (!request.IsExpired) { continue; } - _database.ForgotPasswordRequests.Remove(request); + _database.PasswordResetRequests.Remove(request); deleteCount++; _logger.LogInformation($"Marking password reset request with id: {request.Id} for deletion, expiration date was {request.ExpirationDate}."); } |
