about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-04-16 01:39:35 +0200
committerRory& <root@rory.gay>2025-04-16 01:39:35 +0200
commitb23d464fe1019c6058402342d7166386f7295a95 (patch)
tree80a7edbc1f49229c86f6f19d41c3656bb04c84c7
parentFix session store (diff)
downloadMatrixUtils-b23d464fe1019c6058402342d7166386f7295a95.tar.xz
Fix migration from non-keyed sessions HEAD main
-rw-r--r--MatrixUtils.Web/Classes/RmuSessionStore.cs45
-rw-r--r--MatrixUtils.Web/Pages/Index.razor1
2 files changed, 19 insertions, 27 deletions
diff --git a/MatrixUtils.Web/Classes/RmuSessionStore.cs b/MatrixUtils.Web/Classes/RmuSessionStore.cs

index 7e5b155..746f68a 100644 --- a/MatrixUtils.Web/Classes/RmuSessionStore.cs +++ b/MatrixUtils.Web/Classes/RmuSessionStore.cs
@@ -142,10 +142,13 @@ public class RmuSessionStore( private async Task LoadStorage(bool hasMigrated = false) { if (!await storageService.DataStorageProvider!.ObjectExistsAsync("rmu.sessions") || !await storageService.DataStorageProvider.ObjectExistsAsync("rmu.session")) { - if (!hasMigrated) - await MigrateFromMRU(); + if (!hasMigrated) { + await RunMigrations(); + await LoadStorage(true); + } else logger.LogWarning("No sessions found in storage."); + return; } @@ -184,20 +187,18 @@ public class RmuSessionStore( #region Migrations public async Task RunMigrations() { - await LoadStorage(); - await MigrateFromMRU(); + await MigrateFromMru(); await MigrateAccountsToKeyedStorage(); } - private async Task MigrateFromMRU() { - await LoadStorage(); + private async Task MigrateFromMru() { logger.LogInformation("Migrating from MRU token namespace!"); var dsp = storageService.DataStorageProvider!; if (await dsp.ObjectExistsAsync("token")) { var oldToken = await dsp.LoadObjectAsync<UserAuth>("token"); if (oldToken != null) { await dsp.SaveObjectAsync("rmu.token", oldToken); - await dsp.DeleteObjectAsync("tokens"); + await dsp.DeleteObjectAsync("token"); } } @@ -219,32 +220,24 @@ public class RmuSessionStore( } private async Task MigrateAccountsToKeyedStorage() { - await LoadStorage(); - logger.LogInformation("Migrating accounts to keyed storage!"); var dsp = storageService.DataStorageProvider!; - if (await dsp.ObjectExistsAsync("rmu.tokens")) { - var tokens = await dsp.LoadObjectAsync<JsonNode>("rmu.tokens") ?? throw new Exception("Failed to load tokens"); - if (tokens is JsonArray array) { - var keyedTokens = array - .Deserialize<UserAuth[]>()! - .ToDictionary(x => x.GetHashCode().ToString(), x => x); - await dsp.SaveObjectAsync("rmu.sessions", keyedTokens); - await dsp.DeleteObjectAsync("rmu.tokens"); - } - } + if (!await dsp.ObjectExistsAsync("rmu.tokens")) return; + logger.LogInformation("Migrating accounts to keyed storage!"); + var tokens = await dsp.LoadObjectAsync<UserAuth[]>("rmu.tokens") ?? throw new Exception("Failed to load tokens"); + Dictionary<string, UserAuth> keyedTokens = tokens.ToDictionary(x => x.GetHashCode().ToString(), x => x); if (await dsp.ObjectExistsAsync("rmu.token")) { - var token = await dsp.LoadObjectAsync<UserAuth>("rmu.token") ?? throw new Exception("Failed to load tokens"); - var sessionId = (await GetAllSessions()) - .FirstOrDefault(x => x.Value.Equals(token)).Key; + var token = await dsp.LoadObjectAsync<UserAuth>("rmu.token") ?? throw new Exception("Failed to load token"); + var sessionId = keyedTokens.FirstOrDefault(x => x.Value.Equals(token)).Key; - if (sessionId is not null) { - await dsp.SaveObjectAsync("rmu.session", sessionId); - } - else AddSession(token); + if (sessionId is null) keyedTokens.Add(sessionId = token.GetHashCode().ToString(), token); + await dsp.SaveObjectAsync("rmu.session", sessionId); await dsp.DeleteObjectAsync("rmu.token"); } + + await dsp.SaveObjectAsync("rmu.sessions", keyedTokens); + await dsp.DeleteObjectAsync("rmu.tokens"); } #endregion diff --git a/MatrixUtils.Web/Pages/Index.razor b/MatrixUtils.Web/Pages/Index.razor
index 7de4613..cefd7d5 100644 --- a/MatrixUtils.Web/Pages/Index.razor +++ b/MatrixUtils.Web/Pages/Index.razor
@@ -153,7 +153,6 @@ Small collection of tools to do not-so-everyday things. protected override async Task OnInitializedAsync() { Console.WriteLine("Index.OnInitializedAsync"); logger.LogDebug("Initialising index page"); - await sessionStore.RunMigrations(); _currentSession = await sessionStore.GetCurrentSession(); _sessions.Clear();