From 7d9c3eb1d7a8bb913e6b7bfe224817ac575f76df Mon Sep 17 00:00:00 2001
From: Rory&
Date: Mon, 14 Apr 2025 23:42:38 +0200
Subject: Refactor session store (WIP)
---
MatrixUtils.Web/Classes/RMUStorageWrapper.cs | 156 -------------
MatrixUtils.Web/Classes/RmuSessionStore.cs | 254 +++++++++++++++++++++
MatrixUtils.Web/Pages/Dev/DevOptions.razor | 8 +-
MatrixUtils.Web/Pages/Dev/DevUtilities.razor | 2 +-
MatrixUtils.Web/Pages/Dev/WellKnownRes.razor | 2 +-
MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor | 2 +-
.../Pages/HSAdmin/HSE/ManageExternalProfiles.razor | 6 +-
.../Pages/HSAdmin/Synapse/BackgroundJobs.razor | 2 +-
.../Pages/HSAdmin/Synapse/BlockMedia.razor | 2 +-
.../Pages/HSAdmin/Synapse/RoomQuery.razor | 2 +-
MatrixUtils.Web/Pages/Index.razor | 78 ++++---
MatrixUtils.Web/Pages/InvalidSession.razor | 50 ++--
MatrixUtils.Web/Pages/Labs/Client/Index.razor | 6 +-
MatrixUtils.Web/Pages/Labs/DMSpace/DMSpace.razor | 2 +-
MatrixUtils.Web/Pages/Labs/Rooms2/Index2.razor | 2 +-
MatrixUtils.Web/Pages/LoginPage.razor | 18 +-
.../Pages/Moderation/UserRoomHistory.razor | 8 +-
MatrixUtils.Web/Pages/Rooms/Create.razor | 2 +-
MatrixUtils.Web/Pages/Rooms/Index.razor | 2 +-
MatrixUtils.Web/Pages/Rooms/PolicyList.razor | 2 +-
MatrixUtils.Web/Pages/Rooms/PolicyList2.razor | 2 +-
MatrixUtils.Web/Pages/Rooms/PolicyLists.razor | 2 +-
MatrixUtils.Web/Pages/Rooms/Space.razor | 2 +-
MatrixUtils.Web/Pages/Rooms/StateEditor.razor | 4 +-
MatrixUtils.Web/Pages/Rooms/StateViewer.razor | 4 +-
MatrixUtils.Web/Pages/Rooms/Timeline.razor | 2 +-
MatrixUtils.Web/Pages/StreamTest.razor | 2 +-
MatrixUtils.Web/Pages/Tools/Debug/LeaveRoom.razor | 2 +-
.../Pages/Tools/Debug/MigrateRoom.razor | 6 +-
MatrixUtils.Web/Pages/Tools/Debug/SpaceDebug.razor | 2 +-
.../Pages/Tools/Info/KnownHomeserverList.razor | 2 +-
.../Pages/Tools/Info/PolicyListActivity.razor | 2 +-
.../Pages/Tools/Info/SessionCount.razor | 14 +-
MatrixUtils.Web/Pages/Tools/InviteCounter.razor | 2 +-
MatrixUtils.Web/Pages/Tools/MassCMEBan.razor | 2 +-
.../Draupnir/DraupnirProtectedRoomsEditor.razor | 2 +-
.../Draupnir/DraupnirProtectionsEditor.razor | 2 +-
.../Draupnir/DraupnirWatchedListsEditor.razor | 2 +-
.../Pages/Tools/Moderation/FindUsersByRegex.razor | 2 +-
.../Pages/Tools/Moderation/InviteCounter.razor | 2 +-
.../Pages/Tools/Moderation/MassCMEBan.razor | 2 +-
.../Pages/Tools/Moderation/MembershipHistory.razor | 2 +-
.../Pages/Tools/Moderation/RoomIntersections.razor | 2 +-
.../Pages/Tools/Moderation/UserTrace.razor | 10 +-
.../Pages/Tools/Room/SpaceRestrictedJoins.razor | 2 +-
.../Pages/Tools/User/CopyPowerlevel.razor | 8 +-
.../Pages/Tools/User/MassJoinRoom.razor | 8 +-
.../Pages/Tools/User/ViewAccountData.razor | 2 +-
MatrixUtils.Web/Pages/User/DMManager.razor | 2 +-
MatrixUtils.Web/Pages/User/Profile.razor | 2 +-
MatrixUtils.Web/Program.cs | 2 +-
MatrixUtils.Web/Shared/MainLayout.razor | 49 ++--
.../PolicyEditorComponents/PolicyEditorModal.razor | 2 +-
MatrixUtils.Web/Shared/RoomListItem.razor | 2 +-
MatrixUtils.Web/Shared/UserListItem.razor | 2 +-
MatrixUtils.Web/_Imports.razor | 2 +-
56 files changed, 441 insertions(+), 324 deletions(-)
delete mode 100644 MatrixUtils.Web/Classes/RMUStorageWrapper.cs
create mode 100644 MatrixUtils.Web/Classes/RmuSessionStore.cs
diff --git a/MatrixUtils.Web/Classes/RMUStorageWrapper.cs b/MatrixUtils.Web/Classes/RMUStorageWrapper.cs
deleted file mode 100644
index 1fc4dd1..0000000
--- a/MatrixUtils.Web/Classes/RMUStorageWrapper.cs
+++ /dev/null
@@ -1,156 +0,0 @@
-using LibMatrix;
-using LibMatrix.Homeservers;
-using LibMatrix.Services;
-using Microsoft.AspNetCore.Components;
-
-namespace MatrixUtils.Web.Classes;
-
-public class RMUStorageWrapper(
- ILogger logger,
- TieredStorageService storageService,
- HomeserverProviderService homeserverProviderService,
- NavigationManager navigationManager) {
- public async Task?> GetAllTokens() {
- logger.LogTrace("Getting all tokens.");
- return await storageService.DataStorageProvider.LoadObjectAsync>("rmu.tokens") ??
- new List();
- }
-
- public async Task GetCurrentToken(bool log = true) {
- if (log) logger.LogTrace("Getting current token.");
- var currentToken = await storageService.DataStorageProvider.LoadObjectAsync("rmu.token");
- var allTokens = await GetAllTokens();
- if (allTokens is null or { Count: 0 }) {
- await SetCurrentToken(null);
- return null;
- }
-
- if (currentToken is null) {
- await SetCurrentToken(currentToken = allTokens[0]);
- }
-
- if (currentToken is null) {
- await SetCurrentToken(currentToken = allTokens[0]);
- }
-
- if (!allTokens.Any(x => x.AccessToken == currentToken.AccessToken)) {
- await SetCurrentToken(currentToken = allTokens[0]);
- }
-
- return currentToken;
- }
-
- public async Task AddToken(UserAuth UserAuth) {
- logger.LogTrace("Adding token.");
- var tokens = await GetAllTokens() ?? new List();
-
- tokens.Add(UserAuth);
- await storageService.DataStorageProvider.SaveObjectAsync("rmu.tokens", tokens);
- }
-
- private async Task GetCurrentSession(bool log = true) {
- if (log) logger.LogTrace("Getting current session.");
- var token = await GetCurrentToken(log: false);
- if (token == null) {
- return null;
- }
-
- return await GetSession(token);
- }
-
- public async Task GetSession(UserAuth userAuth, bool log = true) {
- if (log) logger.LogTrace("Getting session.");
- AuthenticatedHomeserverGeneric hs;
- try {
- hs = await homeserverProviderService.GetAuthenticatedWithToken(userAuth.Homeserver, userAuth.AccessToken, userAuth.Proxy);
- }
- catch (Exception e) {
- logger.LogError("Failed to get info for {0} via {1}: {2}", userAuth.UserId, userAuth.Homeserver, e);
- logger.LogError("Continuing with server-less session");
- hs = await homeserverProviderService.GetAuthenticatedWithToken(userAuth.Homeserver, userAuth.AccessToken, userAuth.Proxy, useGeneric: true, enableServer: false);
- }
-
- return hs;
- }
-
- public async Task GetCurrentSessionOrNavigate(bool log = true) {
- if (log) logger.LogTrace("Getting current session or navigating.");
- AuthenticatedHomeserverGeneric? session = null;
-
- try {
- //catch if the token is invalid
- session = await GetCurrentSession();
- }
- catch (MatrixException e) {
- if (e.ErrorCode == "M_UNKNOWN_TOKEN") {
- var token = await GetCurrentToken();
- logger.LogWarning("Encountered invalid token for {user} on {homeserver}", token.UserId, token.Homeserver);
- navigationManager.NavigateTo("/InvalidSession?ctx=" + token.AccessToken);
- return null;
- }
-
- throw;
- }
-
- if (session is null) {
- logger.LogInformation("No session found. Navigating to login.");
- navigationManager.NavigateTo("/Login");
- }
-
- return session;
- }
-
- public class Settings {
- public DeveloperSettings DeveloperSettings { get; set; } = new();
- }
-
- public class DeveloperSettings {
- public bool EnableLogViewers { get; set; }
- public bool EnableConsoleLogging { get; set; } = true;
- public bool EnablePortableDevtools { get; set; }
- }
-
- public async Task RemoveToken(UserAuth auth) {
- logger.LogTrace("Removing token.");
- var tokens = await GetAllTokens();
- if (tokens == null) {
- return;
- }
-
- tokens.RemoveAll(x => x.AccessToken == auth.AccessToken);
- await storageService.DataStorageProvider.SaveObjectAsync("rmu.tokens", tokens);
- }
-
- public async Task SetCurrentToken(UserAuth? auth) {
- logger.LogTrace("Setting current token.");
- await storageService.DataStorageProvider.SaveObjectAsync("rmu.token", auth);
- }
-
- public async Task MigrateFromMRU() {
- logger.LogInformation("Migrating from MRU token namespace!");
- var dsp = storageService.DataStorageProvider!;
- if (await dsp.ObjectExistsAsync("token")) {
- var oldToken = await dsp.LoadObjectAsync("token");
- if (oldToken != null) {
- await dsp.SaveObjectAsync("rmu.token", oldToken);
- await dsp.DeleteObjectAsync("tokens");
- }
- }
-
- if (await dsp.ObjectExistsAsync("tokens")) {
- var oldTokens = await dsp.LoadObjectAsync>("tokens");
- if (oldTokens != null) {
- await dsp.SaveObjectAsync("rmu.tokens", oldTokens);
- await dsp.DeleteObjectAsync("tokens");
- }
- }
-
- if (await dsp.ObjectExistsAsync("mru.tokens")) {
- var oldTokens = await dsp.LoadObjectAsync>("mru.tokens");
- if (oldTokens != null) {
- await dsp.SaveObjectAsync("rmu.tokens", oldTokens);
- await dsp.DeleteObjectAsync("mru.tokens");
- }
- }
- }
-}
\ No newline at end of file
diff --git a/MatrixUtils.Web/Classes/RmuSessionStore.cs b/MatrixUtils.Web/Classes/RmuSessionStore.cs
new file mode 100644
index 0000000..14aa1db
--- /dev/null
+++ b/MatrixUtils.Web/Classes/RmuSessionStore.cs
@@ -0,0 +1,254 @@
+using System.Text.Json;
+using System.Text.Json.Nodes;
+using LibMatrix;
+using LibMatrix.Homeservers;
+using LibMatrix.Services;
+using Microsoft.AspNetCore.Components;
+
+namespace MatrixUtils.Web.Classes;
+
+public class RmuSessionStore(
+ ILogger logger,
+ TieredStorageService storageService,
+ HomeserverProviderService homeserverProviderService,
+ NavigationManager navigationManager) {
+ private SessionInfo? CurrentSession { get; set; }
+ private Dictionary SessionCache { get; set; } = [];
+
+ private bool _isInitialized = false;
+ private static readonly SemaphoreSlim InitSemaphore = new(1, 1);
+
+ public async Task EnsureInitialized() {
+ if (_isInitialized) return;
+ await InitSemaphore.WaitAsync();
+ if (_isInitialized) {
+ InitSemaphore.Release();
+ return;
+ }
+
+ try {
+ await RunMigrations();
+ SessionCache = (await GetAllSessions())
+ .Select(x => (x.Key, Value: new SessionInfo {
+ SessionId = x.Key,
+ Auth = x.Value.Auth
+ })).ToDictionary(x => x.Key, x => x.Value);
+ CurrentSession = await GetCurrentSession();
+ }
+ catch (Exception e) {
+ logger.LogError("Failed to initialize RmuSessionStore: {e}", e);
+ }
+ finally {
+ _isInitialized = true;
+ InitSemaphore.Release();
+ }
+ }
+
+#region Sessions
+
+#region Session implementation details
+
+#endregion
+
+ public async Task> GetAllSessions() {
+ logger.LogTrace("Getting all tokens.");
+ return SessionCache;
+ }
+
+ public async Task GetSession(string sessionId) {
+ if (SessionCache.TryGetValue(sessionId, out var cachedSession))
+ return cachedSession;
+
+ logger.LogWarning("Session {sessionId} not found in all tokens.", sessionId);
+ return null;
+ }
+
+ public async Task GetCurrentSession(bool log = true) {
+ if (log) logger.LogTrace("Getting current token.");
+ if (CurrentSession is not null) return CurrentSession;
+
+ var currentSessionId = await storageService.DataStorageProvider!.LoadObjectAsync("rmu.session");
+ return await GetSession(currentSessionId);
+ }
+
+ public async Task AddSession(UserAuth auth) {
+ logger.LogTrace("Adding token.");
+ // var sessions = await GetAllSessions() ?? [];
+
+ var sessionId = auth.GetHashCode().ToString();
+ // sessions.Add(sessionId, auth);
+ SessionCache[sessionId] = new() {
+ Auth = auth,
+ SessionId = sessionId
+ };
+ await storageService.DataStorageProvider!.SaveObjectAsync("rmu.sessions",
+ SessionCache.ToDictionary(
+ x => x.Key,
+ x => x.Value.Auth
+ )
+ );
+
+ if (CurrentSession == null) await SetCurrentSession(sessionId);
+
+ return sessionId;
+ }
+
+ public async Task RemoveSession(string sessionId) {
+ logger.LogTrace("Removing session {sessionId}.", sessionId);
+ var tokens = await GetAllSessions();
+ if (tokens == null) {
+ return;
+ }
+
+ if ((await GetCurrentSession())?.SessionId == sessionId)
+ await SetCurrentSession(tokens.First(x => x.Key != sessionId).Key);
+
+ if (tokens.Remove(sessionId))
+ await storageService.DataStorageProvider!.SaveObjectAsync("rmu.tokens", tokens);
+ }
+
+ public async Task SetCurrentSession(string? sessionId) {
+ logger.LogTrace("Setting current session to {sessionId}.", sessionId);
+ CurrentSession = await GetSession(sessionId);
+ await storageService.DataStorageProvider!.SaveObjectAsync("rmu.session", sessionId);
+ }
+
+#endregion
+
+#region Homeservers
+
+ public async Task GetHomeserver(string session, bool log = true) {
+ if (log) logger.LogTrace("Getting session.");
+ if (!SessionCache.TryGetValue(session, out var cachedSession)) return null;
+ if (cachedSession.Homeserver is not null) return cachedSession.Homeserver;
+
+ try {
+ cachedSession.Homeserver =
+ await homeserverProviderService.GetAuthenticatedWithToken(cachedSession.Auth.Homeserver, cachedSession.Auth.AccessToken, cachedSession.Auth.Proxy);
+ }
+ catch (Exception e) {
+ logger.LogError("Failed to get info for {0} via {1}: {2}", cachedSession.Auth.UserId, cachedSession.Auth.Homeserver, e);
+ logger.LogError("Continuing with server-less session");
+ cachedSession.Homeserver = await homeserverProviderService.GetAuthenticatedWithToken(cachedSession.Auth.Homeserver, cachedSession.Auth.AccessToken,
+ cachedSession.Auth.Proxy, useGeneric: true, enableServer: false);
+ }
+
+ return cachedSession.Homeserver;
+ }
+
+ public async Task GetCurrentHomeserver(bool log = true, bool navigateOnFailure = false) {
+ if (log) logger.LogTrace("Getting current session.");
+ if (CurrentSession?.Homeserver is not null) return CurrentSession.Homeserver;
+
+ var currentSession = CurrentSession ??= await GetCurrentSession(log: false);
+ if (currentSession == null) {
+ if (navigateOnFailure) {
+ logger.LogInformation("No session found. Navigating to login.");
+ navigationManager.NavigateTo("/Login");
+ }
+
+ return null;
+ }
+
+ try {
+ return currentSession.Homeserver ??= await GetHomeserver(currentSession.SessionId);
+ }
+ catch (MatrixException e) {
+ if (e.ErrorCode == "M_UNKNOWN_TOKEN" && navigateOnFailure) {
+ logger.LogWarning("Encountered invalid token for {user} on {homeserver}", currentSession.Auth.UserId, currentSession.Auth.Homeserver);
+ if (navigateOnFailure) {
+ navigationManager.NavigateTo("/InvalidSession?ctx=" + currentSession.SessionId);
+ }
+ }
+
+ throw;
+ }
+ }
+
+#endregion
+
+#region Internal
+
+ public async Task RunMigrations() {
+ await MigrateFromMRU();
+ await MigrateAccountsToKeyedStorage();
+ }
+
+#region Migrations
+
+ 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("token");
+ if (oldToken != null) {
+ await dsp.SaveObjectAsync("rmu.token", oldToken);
+ await dsp.DeleteObjectAsync("tokens");
+ }
+ }
+
+ if (await dsp.ObjectExistsAsync("tokens")) {
+ var oldTokens = await dsp.LoadObjectAsync>("tokens");
+ if (oldTokens != null) {
+ await dsp.SaveObjectAsync("rmu.tokens", oldTokens);
+ await dsp.DeleteObjectAsync("tokens");
+ }
+ }
+
+ if (await dsp.ObjectExistsAsync("mru.tokens")) {
+ var oldTokens = await dsp.LoadObjectAsync>("mru.tokens");
+ if (oldTokens != null) {
+ await dsp.SaveObjectAsync("rmu.tokens", oldTokens);
+ await dsp.DeleteObjectAsync("mru.tokens");
+ }
+ }
+ }
+
+ private async Task MigrateAccountsToKeyedStorage() {
+ logger.LogInformation("Migrating accounts to keyed storage!");
+ var dsp = storageService.DataStorageProvider!;
+ if (await dsp.ObjectExistsAsync("rmu.tokens")) {
+ var tokens = await dsp.LoadObjectAsync("rmu.tokens") ?? throw new Exception("Failed to load tokens");
+ if (tokens is JsonArray array) {
+ var keyedTokens = array
+ .Deserialize()!
+ .ToDictionary(x => x.GetHashCode().ToString(), x => x);
+ await dsp.SaveObjectAsync("rmu.sessions", keyedTokens);
+ await dsp.DeleteObjectAsync("rmu.tokens");
+ }
+ }
+
+ if (await dsp.ObjectExistsAsync("rmu.token")) {
+ var token = await dsp.LoadObjectAsync("rmu.token") ?? throw new Exception("Failed to load tokens");
+ var sessionId = (await GetAllSessions())
+ .FirstOrDefault(x => x.Value.Equals(token)).Key;
+
+ if (sessionId is not null) {
+ await dsp.SaveObjectAsync("rmu.session", sessionId);
+ }
+ else AddSession(token);
+
+ await dsp.DeleteObjectAsync("rmu.token");
+ }
+ }
+
+#endregion
+
+#endregion
+
+ public class Settings {
+ public DeveloperSettings DeveloperSettings { get; set; } = new();
+ }
+
+ public class DeveloperSettings {
+ public bool EnableLogViewers { get; set; }
+ public bool EnableConsoleLogging { get; set; } = true;
+ public bool EnablePortableDevtools { get; set; }
+ }
+
+ public class SessionInfo {
+ public required string SessionId { get; set; }
+ public required UserAuth Auth { get; set; }
+ public AuthenticatedHomeserverGeneric? Homeserver { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/MatrixUtils.Web/Pages/Dev/DevOptions.razor b/MatrixUtils.Web/Pages/Dev/DevOptions.razor
index e94cf76..33e577f 100644
--- a/MatrixUtils.Web/Pages/Dev/DevOptions.razor
+++ b/MatrixUtils.Web/Pages/Dev/DevOptions.razor
@@ -19,6 +19,10 @@
Export local storage:
+
+ Manage local sessions
+
+
@if (userSettings is not null) {
@@ -35,9 +39,9 @@
@code {
- private RMUStorageWrapper.Settings? userSettings { get; set; }
+ private RmuSessionStore.Settings? userSettings { get; set; }
protected override async Task OnInitializedAsync() {
- // userSettings = await TieredStorage.DataStorageProvider.LoadObjectAsync("rmu.settings");
+ // userSettings = await TieredStorage.DataStorageProvider.LoadObjectAsync("rmu.settings");
await base.OnInitializedAsync();
}
diff --git a/MatrixUtils.Web/Pages/Dev/DevUtilities.razor b/MatrixUtils.Web/Pages/Dev/DevUtilities.razor
index 636c0f9..3b2d533 100644
--- a/MatrixUtils.Web/Pages/Dev/DevUtilities.razor
+++ b/MatrixUtils.Web/Pages/Dev/DevUtilities.razor
@@ -39,7 +39,7 @@ else {
protected override async Task OnInitializedAsync() {
await base.OnInitializedAsync();
- hs = await RmuStorage.GetCurrentSessionOrNavigate();
+ hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true);
if (hs == null) return;
Rooms = (await hs.GetJoinedRooms()).Select(x => x.RoomId).ToList();
Console.WriteLine("Fetched joined rooms!");
diff --git a/MatrixUtils.Web/Pages/Dev/WellKnownRes.razor b/MatrixUtils.Web/Pages/Dev/WellKnownRes.razor
index 9dc9556..1906dd8 100644
--- a/MatrixUtils.Web/Pages/Dev/WellKnownRes.razor
+++ b/MatrixUtils.Web/Pages/Dev/WellKnownRes.razor
@@ -56,7 +56,7 @@
AuthenticatedHomeserverGeneric? hs { get; set; }
protected override async Task OnInitializedAsync() {
- hs = await RmuStorage.GetCurrentSessionOrNavigate();
+ hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true);
if (hs is null) return;
if (RoomId is not null) {
diff --git a/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor b/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor
index 6ccdce4..e1b46e2 100644
--- a/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor
+++ b/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor
@@ -30,7 +30,7 @@ else {
public ServerVersionResponse? ServerVersionResponse { get; set; }
protected override async Task OnInitializedAsync() {
- Homeserver = await RmuStorage.GetCurrentSessionOrNavigate();
+ Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true);
if (Homeserver is null) return;
ServerVersionResponse = await (Homeserver.FederationClient?.GetServerVersionAsync() ?? Task.FromResult(null));
await base.OnInitializedAsync();
diff --git a/MatrixUtils.Web/Pages/HSAdmin/HSE/ManageExternalProfiles.razor b/MatrixUtils.Web/Pages/HSAdmin/HSE/ManageExternalProfiles.razor
index 6d492a7..87600c6 100644
--- a/MatrixUtils.Web/Pages/HSAdmin/HSE/ManageExternalProfiles.razor
+++ b/MatrixUtils.Web/Pages/HSAdmin/HSE/ManageExternalProfiles.razor
@@ -17,7 +17,7 @@
protected override async Task OnInitializedAsync()
{
- Homeserver = await RmuStorage.GetCurrentSessionOrNavigate();
+ Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true);
if (Homeserver is null) return;
await LoadProfiles();
await base.OnInitializedAsync();
@@ -33,9 +33,9 @@
private async Task AddAllLocalProfiles() {
if(Homeserver is AuthenticatedHomeserverHSE hse) {
- var sessions = await RmuStorage.GetAllTokens();
+ var sessions = await sessionStore.GetAllSessions();
foreach(var session in sessions) {
- await hse.SetExternalProfile(session.UserId, session);
+ await hse.SetExternalProfile(session.Value.Auth.UserId, session.Value.Auth);
}
await LoadProfiles();
}
diff --git a/MatrixUtils.Web/Pages/HSAdmin/Synapse/BackgroundJobs.razor b/MatrixUtils.Web/Pages/HSAdmin/Synapse/BackgroundJobs.razor
index 02bf88f..d855cba 100644
--- a/MatrixUtils.Web/Pages/HSAdmin/Synapse/BackgroundJobs.razor
+++ b/MatrixUtils.Web/Pages/HSAdmin/Synapse/BackgroundJobs.razor
@@ -10,7 +10,7 @@
private SynapseAdminBackgroundUpdateStatusResponse? BackgroundJobStatus { get; set; }
protected override async Task OnInitializedAsync() {
- var hs = await RmuStorage.GetCurrentSessionOrNavigate() as AuthenticatedHomeserverSynapse;
+ var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true) as AuthenticatedHomeserverSynapse;
if (hs is null) return;
Homeserver = hs;
diff --git a/MatrixUtils.Web/Pages/HSAdmin/Synapse/BlockMedia.razor b/MatrixUtils.Web/Pages/HSAdmin/Synapse/BlockMedia.razor
index 6de4e4d..d07ff08 100644
--- a/MatrixUtils.Web/Pages/HSAdmin/Synapse/BlockMedia.razor
+++ b/MatrixUtils.Web/Pages/HSAdmin/Synapse/BlockMedia.razor
@@ -77,7 +77,7 @@
private AuthenticatedHomeserverSynapse? Homeserver { get; set; }
protected override async Task OnInitializedAsync() {
- var hs = await RmuStorage.GetCurrentSessionOrNavigate() as AuthenticatedHomeserverSynapse;
+ var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true) as AuthenticatedHomeserverSynapse;
if (hs is null) return;
Homeserver = hs;
diff --git a/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor b/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor
index 0a93df8..79e7357 100644
--- a/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor
+++ b/MatrixUtils.Web/Pages/HSAdmin/Synapse/RoomQuery.razor
@@ -293,7 +293,7 @@
private async Task Search() {
Results.Clear();
- var hs = await RmuStorage.GetCurrentSessionOrNavigate();
+ var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true);
if (hs is AuthenticatedHomeserverSynapse synapse) {
Homeserver = synapse;
var searchRooms = synapse.Admin.SearchRoomsAsync(orderBy: OrderBy!, dir: Ascending ? "f" : "b", searchTerm: SearchTerm, localFilter: Filter).GetAsyncEnumerator();
diff --git a/MatrixUtils.Web/Pages/Index.razor b/MatrixUtils.Web/Pages/Index.razor
index b9d3233..7103dc5 100644
--- a/MatrixUtils.Web/Pages/Index.razor
+++ b/MatrixUtils.Web/Pages/Index.razor
@@ -22,7 +22,7 @@ Small collection of tools to do not-so-everyday things.