From 19bf17200dadc5d6d49ad8b20449480f7791d8a8 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 13 Sep 2025 16:33:43 +0800 Subject: [PATCH] :bug: Session auto renew --- .../Handlers/LastActiveFlushHandler.cs | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/DysonNetwork.Pass/Handlers/LastActiveFlushHandler.cs b/DysonNetwork.Pass/Handlers/LastActiveFlushHandler.cs index b9b95aa..e958322 100644 --- a/DysonNetwork.Pass/Handlers/LastActiveFlushHandler.cs +++ b/DysonNetwork.Pass/Handlers/LastActiveFlushHandler.cs @@ -18,7 +18,7 @@ public class LastActiveFlushHandler(IServiceProvider srp, ILogger items) { logger.LogInformation("Flushing {Count} LastActiveInfo items...", items.Count); - + using var scope = srp.CreateScope(); var db = scope.ServiceProvider.GetRequiredService(); @@ -38,13 +38,22 @@ public class LastActiveFlushHandler(IServiceProvider srp, ILogger g.Key, g => g.Last().SeenAt); var now = SystemClock.Instance.GetCurrentInstant(); - + var updatingSessions = sessionMap.Select(x => x.Key).ToList(); var sessionUpdates = await db.AuthSessions .Where(s => updatingSessions.Contains(s.Id)) - .ExecuteUpdateAsync(s => s.SetProperty(x => x.LastGrantedAt, now)); + .ExecuteUpdateAsync(s => + s.SetProperty(x => x.LastGrantedAt, now) + ); logger.LogInformation("Updated {Count} auth sessions according to LastActiveInfo", sessionUpdates); - + var newExpiration = now.Plus(Duration.FromDays(7)); + var keepAliveSessionUpdates = await db.AuthSessions + .Where(s => updatingSessions.Contains(s.Id) && s.ExpiredAt != null) + .ExecuteUpdateAsync(s => + s.SetProperty(x => x.ExpiredAt, newExpiration) + ); + logger.LogInformation("Updated {Count} auth sessions' duration according to LastActiveInfo", sessionUpdates); + var updatingAccounts = accountMap.Select(x => x.Key).ToList(); var profileUpdates = await db.AccountProfiles .Where(a => updatingAccounts.Contains(a.AccountId)) @@ -53,7 +62,8 @@ public class LastActiveFlushHandler(IServiceProvider srp, ILogger logger) : IJob +public class LastActiveFlushJob(FlushBufferService fbs, LastActiveFlushHandler hdl, ILogger logger) + : IJob { public async Task Execute(IJobExecutionContext context) { @@ -62,7 +72,8 @@ public class LastActiveFlushJob(FlushBufferService fbs, LastActiveFlushHandler h logger.LogInformation("Running LastActiveInfo flush job..."); await fbs.FlushAsync(hdl); logger.LogInformation("Completed LastActiveInfo flush job..."); - } catch (Exception ex) + } + catch (Exception ex) { logger.LogError(ex, "Error running LastActiveInfo job..."); }