diff --git a/back/src/Kyoo.Abstractions/Models/Resources/JwtToken.cs b/back/src/Kyoo.Abstractions/Models/Resources/JwtToken.cs index aa0c5e45..d2c8eacd 100644 --- a/back/src/Kyoo.Abstractions/Models/Resources/JwtToken.cs +++ b/back/src/Kyoo.Abstractions/Models/Resources/JwtToken.cs @@ -60,7 +60,7 @@ public class JwtToken(string accessToken, string refreshToken, TimeSpan expireIn /// [JsonProperty("expire_in")] [JsonPropertyName("expire_in")] - public TimeSpan ExpireIn { get; set; } = expireIn; + public TimeSpan ExpireIn => ExpireAt.Subtract(DateTime.UtcNow); /// /// The exact date at which the access token will expire. diff --git a/back/src/Kyoo.Core/Controllers/Repositories/UserRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/UserRepository.cs index 451b6a91..7d6a7369 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/UserRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/UserRepository.cs @@ -43,18 +43,13 @@ public class UserRepository( IThumbnailsManager thumbs ) : LocalRepository(database, thumbs) { - /// - /// The database handle - /// - private readonly DatabaseContext _database = database; - /// public override async Task> Search( string query, Include? include = default ) { - return await AddIncludes(_database.Users, include) + return await AddIncludes(database.Users, include) .Where(x => EF.Functions.ILike(x.Username, $"%{query}%")) .Take(20) .ToListAsync(); @@ -64,7 +59,7 @@ public class UserRepository( public override async Task Create(User obj) { // If no users exists, the new one will be an admin. Give it every permissions. - if (!await _database.Users.AnyAsync()) + if (!await database.Users.AnyAsync()) { obj.Permissions = Enum.GetNames() .Where(x => x != nameof(Group.None)) @@ -74,8 +69,8 @@ public class UserRepository( .ToArray(); } await base.Create(obj); - _database.Entry(obj).State = EntityState.Added; - await _database.SaveChangesAsync(() => Get(obj.Slug)); + database.Entry(obj).State = EntityState.Added; + await database.SaveChangesAsync(() => Get(obj.Slug)); await IRepository.OnResourceCreated(obj); return obj; } @@ -83,8 +78,8 @@ public class UserRepository( /// public override async Task Delete(User obj) { - _database.Entry(obj).State = EntityState.Deleted; - await _database.SaveChangesAsync(); + database.Entry(obj).State = EntityState.Deleted; + await database.SaveChangesAsync(); await base.Delete(obj); } @@ -114,6 +109,8 @@ public class UserRepository( { User user = await GetWithTracking(userId); user.ExternalId[provider] = token; + // without that, the change tracker does not find the modification. /shrug + database.Entry(user).Property(x => x.ExternalId).IsModified = true; await database.SaveChangesAsync(); return user; } @@ -122,6 +119,8 @@ public class UserRepository( { User user = await GetWithTracking(userId); user.ExternalId.Remove(provider); + // without that, the change tracker does not find the modification. /shrug + database.Entry(user).Property(x => x.ExternalId).IsModified = true; await database.SaveChangesAsync(); return user; }