Skip to content

Commit 13ff7e8

Browse files
committed
Fix password reset lifetime checks
1 parent 66d2182 commit 13ff7e8

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

API/Services/Account/AccountService.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -226,9 +226,9 @@ await Task.Delay(100,
226226
public async Task<OneOf<Success, NotFound, SecretInvalid>> PasswordResetExists(Guid passwordResetId, string secret,
227227
CancellationToken cancellationToken = default)
228228
{
229-
var validUntil = DateTime.UtcNow.Add(Duration.PasswordResetRequestLifetime);
229+
var validSince = DateTime.UtcNow - Duration.PasswordResetRequestLifetime;
230230
var reset = await _db.UserPasswordResets.FirstOrDefaultAsync(x =>
231-
x.Id == passwordResetId && x.UsedAt == null && x.CreatedAt < validUntil,
231+
x.Id == passwordResetId && x.UsedAt == null && x.CreatedAt >= validSince,
232232
cancellationToken: cancellationToken);
233233

234234
if (reset is null) return new NotFound();
@@ -242,12 +242,12 @@ public async Task<OneOf<Success, NotFound, SecretInvalid>> PasswordResetExists(G
242242
/// <inheritdoc />
243243
public async Task<OneOf<Success, TooManyPasswordResets, NotFound>> CreatePasswordReset(string email)
244244
{
245-
var validUntil = DateTime.UtcNow.Add(Duration.PasswordResetRequestLifetime);
245+
var validSince = DateTime.UtcNow - Duration.PasswordResetRequestLifetime;
246246
var lowerCaseEmail = email.ToLowerInvariant();
247247
var user = await _db.Users.Where(x => x.Email == lowerCaseEmail).Select(x => new
248248
{
249249
User = x,
250-
PasswordResetCount = x.PasswordResets.Count(y => y.UsedAt == null && y.CreatedAt < validUntil)
250+
PasswordResetCount = x.PasswordResets.Count(y => y.UsedAt == null && y.CreatedAt >= validSince)
251251
}).FirstOrDefaultAsync();
252252
if (user is null) return new NotFound();
253253
if (user.PasswordResetCount >= 3) return new TooManyPasswordResets();
@@ -273,10 +273,10 @@ await _emailService.PasswordReset(new Contact(user.User.Email, user.User.Name),
273273
public async Task<OneOf<Success, NotFound, SecretInvalid>> PasswordResetComplete(Guid passwordResetId,
274274
string secret, string newPassword)
275275
{
276-
var validUntil = DateTime.UtcNow.Add(Duration.PasswordResetRequestLifetime);
276+
var validSince = DateTime.UtcNow - Duration.PasswordResetRequestLifetime;
277277

278278
var reset = await _db.UserPasswordResets.Include(x => x.User).FirstOrDefaultAsync(x =>
279-
x.Id == passwordResetId && x.UsedAt == null && x.CreatedAt < validUntil);
279+
x.Id == passwordResetId && x.UsedAt == null && x.CreatedAt >= validSince);
280280

281281
if (reset is null) return new NotFound();
282282

0 commit comments

Comments
 (0)