From ffa2d68a649dcd7f81ab1485fec210b6688a77ac Mon Sep 17 00:00:00 2001 From: Mateusz Skoczek Date: Mon, 2 Feb 2026 20:34:29 +0100 Subject: [PATCH] refresh token generation added --- .../AuthPassword/AuthPasswordHandler.cs | 3 ++- .../Helpers/ITokenGenerator.cs | 2 +- .../Helpers/TokenGenerator.cs | 23 +++++++++++++++++-- .../Model/Account.cs | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/TimetableDesigner.Backend.Services.Authentication.Core/Commands/AuthPassword/AuthPasswordHandler.cs b/TimetableDesigner.Backend.Services.Authentication.Core/Commands/AuthPassword/AuthPasswordHandler.cs index c9412d9..3b9e93e 100644 --- a/TimetableDesigner.Backend.Services.Authentication.Core/Commands/AuthPassword/AuthPasswordHandler.cs +++ b/TimetableDesigner.Backend.Services.Authentication.Core/Commands/AuthPassword/AuthPasswordHandler.cs @@ -33,8 +33,9 @@ public class AuthPasswordHandler : IRequestHandler GenerateRefreshTokenAsync(Account account); + Task GenerateRefreshTokenAsync(Account account, bool isExtendable); Task ExtendRefreshTokenAsync(); } \ No newline at end of file diff --git a/TimetableDesigner.Backend.Services.Authentication.Core/Helpers/TokenGenerator.cs b/TimetableDesigner.Backend.Services.Authentication.Core/Helpers/TokenGenerator.cs index 73658d7..3ece1b7 100644 --- a/TimetableDesigner.Backend.Services.Authentication.Core/Helpers/TokenGenerator.cs +++ b/TimetableDesigner.Backend.Services.Authentication.Core/Helpers/TokenGenerator.cs @@ -56,9 +56,28 @@ public class TokenGenerator : ITokenGenerator return handler.WriteToken(token); } - public async Task GenerateRefreshTokenAsync(Account account) + public async Task GenerateRefreshTokenAsync(Account account, bool isExtendable) { - return null; + string lifetimeSection = isExtendable ? "Extended" : "Normal"; + int lifetime = _configuration.GetSection("Tokens") + .GetSection("RefreshToken") + .GetSection("Lifetime") + .GetValue(lifetimeSection); + + Guid guid = Guid.NewGuid(); + DateTimeOffset expirationDate = DateTimeOffset.UtcNow.AddMinutes(lifetime); + + RefreshToken refreshToken = new RefreshToken + { + Token = guid, + ExpirationDate = expirationDate, + IsExtendable = isExtendable, + AccountId = account.Id, + }; + await _databaseContext.RefreshTokens.AddAsync(refreshToken); + await _databaseContext.SaveChangesAsync(); + + return guid.ToString(); } public async Task ExtendRefreshTokenAsync() diff --git a/TimetableDesigner.Backend.Services.Authentication.Database/Model/Account.cs b/TimetableDesigner.Backend.Services.Authentication.Database/Model/Account.cs index afd734a..875c65c 100644 --- a/TimetableDesigner.Backend.Services.Authentication.Database/Model/Account.cs +++ b/TimetableDesigner.Backend.Services.Authentication.Database/Model/Account.cs @@ -8,5 +8,5 @@ public class Account public string PasswordSalt { get; set; } = null!; public uint Version { get; set; } - public virtual IEnumerable RefreshTokens { get; set; } = new List(); + public virtual ICollection RefreshTokens { get; set; } = new List(); } \ No newline at end of file