diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2022-10-30 16:40:03 +0100 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2022-10-30 16:40:03 +0100 |
| commit | 0725e4f7cf4c6f723264b6d461b91c660d144cb7 (patch) | |
| tree | aae5876b5760c80679161d918c34d753ec0e2582 /code/api/src/Services/PasswordResetService.cs | |
| parent | d76c180c9631df015d37138045c79a46cca350e8 (diff) | |
| download | greatoffice-0725e4f7cf4c6f723264b6d461b91c660d144cb7.tar.xz greatoffice-0725e4f7cf4c6f723264b6d461b91c660d144cb7.zip | |
feat: Apiwork
Diffstat (limited to 'code/api/src/Services/PasswordResetService.cs')
| -rw-r--r-- | code/api/src/Services/PasswordResetService.cs | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/code/api/src/Services/PasswordResetService.cs b/code/api/src/Services/PasswordResetService.cs index 1b4f147..76eb2fe 100644 --- a/code/api/src/Services/PasswordResetService.cs +++ b/code/api/src/Services/PasswordResetService.cs @@ -2,26 +2,25 @@ namespace IOL.GreatOffice.Api.Services; public class PasswordResetService { - private readonly AppDbContext _context; + private readonly MainAppDatabase _database; private readonly MailService _mailService; private readonly AppConfiguration _configuration; private readonly ILogger<PasswordResetService> _logger; - public PasswordResetService( - AppDbContext context, + MainAppDatabase database, VaultService vaultService, ILogger<PasswordResetService> logger, MailService mailService ) { - _context = context; + _database = database; _configuration = vaultService.GetCurrentAppConfiguration(); _logger = logger; _mailService = mailService; } public async Task<ForgotPasswordRequest> GetRequestAsync(Guid id, CancellationToken cancellationToken = default) { - var request = await _context.ForgotPasswordRequests + var request = await _database.ForgotPasswordRequests .Include(c => c.User) .SingleOrDefaultAsync(c => c.Id == id, cancellationToken); if (request == default) { @@ -31,21 +30,21 @@ 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 = _context.Users.SingleOrDefault(c => c.Id == request.User.Id); + 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"); } user.HashAndSetPassword(newPassword); - _context.Users.Update(user); - await _context.SaveChangesAsync(cancellationToken); + _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; @@ -55,8 +54,8 @@ public class PasswordResetService public async Task AddRequestAsync(User user, TimeZoneInfo requestTz, CancellationToken cancellationToken = default) { await DeleteRequestsForUserAsync(user.Id, cancellationToken); var request = new ForgotPasswordRequest(user); - _context.ForgotPasswordRequests.Add(request); - await _context.SaveChangesAsync(cancellationToken); + _database.ForgotPasswordRequests.Add(request); + await _database.SaveChangesAsync(cancellationToken); var portalUrl = _configuration.PORTAL_URL; var emailFromAddress = _configuration.EMAIL_FROM_ADDRESS; var emailFromDisplayName = _configuration.EMAIL_FROM_DISPLAY_NAME; @@ -89,27 +88,27 @@ If you did not request a password reset, no action is required. } public async Task DeleteRequestsForUserAsync(Guid userId, CancellationToken cancellationToken = default) { - var requestsToRemove = _context.ForgotPasswordRequests.Where(c => c.UserId == userId).ToList(); + var requestsToRemove = _database.ForgotPasswordRequests.Where(c => c.UserId == userId).ToList(); if (!requestsToRemove.Any()) return; - _context.ForgotPasswordRequests.RemoveRange(requestsToRemove); - await _context.SaveChangesAsync(cancellationToken); + _database.ForgotPasswordRequests.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 _context.ForgotPasswordRequests.Where(c => c.IsExpired)) { + foreach (var request in _database.ForgotPasswordRequests.Where(c => c.IsExpired)) { if (!request.IsExpired) { continue; } - _context.ForgotPasswordRequests.Remove(request); + _database.ForgotPasswordRequests.Remove(request); deleteCount++; _logger.LogInformation($"Marking password reset request with id: {request.Id} for deletion, expiration date was {request.ExpirationDate}."); } - await _context.SaveChangesAsync(cancellationToken); + await _database.SaveChangesAsync(cancellationToken); _logger.LogInformation($"Deleted {deleteCount} stale password reset requests."); } }
\ No newline at end of file |
