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