aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/src/Services
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2022-11-14 05:04:36 +0100
committerivarlovlie <git@ivarlovlie.no>2022-11-14 05:05:09 +0100
commit04a2b73805fc1213df42ef9af4cdcf27ff7c86db (patch)
tree818df6112e2b74ce3af6f2d9ce7535915967feed /code/api/src/Services
parent94da43fd4e2c625babcf7cdabc5e82a47bcab2a5 (diff)
downloadgreatoffice-04a2b73805fc1213df42ef9af4cdcf27ff7c86db.tar.xz
greatoffice-04a2b73805fc1213df42ef9af4cdcf27ff7c86db.zip
refactor: Password reset service
- Use FulfillPasswordResetRequestResult to indicate fulfillment result - Rename db names forgot_password_requests > password_reset_requests
Diffstat (limited to 'code/api/src/Services')
-rw-r--r--code/api/src/Services/PasswordResetService.cs36
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}.");
}