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.
@foreach (var session in _sessions.OrderByDescending(x => x.UserInfo.RoomCount)) { - var auth = session.UserAuth; + var auth = session.Auth; @@ -79,16 +80,16 @@ Small collection of tools to do not-so-everyday things. } @@ -108,19 +109,19 @@ Small collection of tools to do not-so-everyday things. } @@ -136,34 +137,34 @@ Small collection of tools to do not-so-everyday things. private const bool _debug = false; #endif - private class AuthInfo { - public UserAuth? UserAuth { get; set; } + private class HomepageSessionInfo : RmuSessionStore.SessionInfo { public UserInfo? UserInfo { get; set; } public ServerVersionResponse? ServerVersion { get; set; } public AuthenticatedHomeserverGeneric? Homeserver { get; set; } } - private readonly List _sessions = []; - private readonly List _offlineSessions = []; - private readonly List _invalidSessions = []; - private LoginResponse? _currentSession; + private readonly List _sessions = []; + private readonly List _offlineSessions = []; + private readonly List _invalidSessions = []; + private RmuSessionStore.SessionInfo? _currentSession; int scannedSessions, totalSessions = 1; private SvgIdenticonGenerator _identiconGenerator = new(); protected override async Task OnInitializedAsync() { Console.WriteLine("Index.OnInitializedAsync"); logger.LogDebug("Initialising index page"); - _currentSession = await RmuStorage.GetCurrentToken(); + await sessionStore.RunMigrations(); + + _currentSession = await sessionStore.GetCurrentSession(); _sessions.Clear(); _offlineSessions.Clear(); - var tokens = await RmuStorage.GetAllTokens(); + var tokens = await sessionStore.GetAllSessions(); scannedSessions = 0; totalSessions = tokens.Count; logger.LogDebug("Found {0} tokens", totalSessions); if (tokens is not { Count: > 0 }) { Console.WriteLine("No tokens found, trying migration from MRU..."); - await RmuStorage.MigrateFromMRU(); - tokens = await RmuStorage.GetAllTokens(); + tokens = await sessionStore.GetAllSessions(); if (tokens is not { Count: > 0 }) { Console.WriteLine("No tokens found"); return; @@ -173,8 +174,9 @@ Small collection of tools to do not-so-everyday things. List offlineServers = []; var sema = new SemaphoreSlim(8, 8); var updateSw = Stopwatch.StartNew(); - var tasks = tokens.Select(async token => { + var tasks = tokens.Select(async session => { await sema.WaitAsync(); + var token = session.Value.Auth; AuthenticatedHomeserverGeneric hs; try { @@ -197,14 +199,15 @@ Small collection of tools to do not-so-everyday things. var joinedRoomsTask = hs.GetJoinedRooms(); var profileTask = hs.GetProfileAsync(hs.WhoAmI.UserId); _sessions.Add(new() { + Auth = token, + SessionId = session.Value.SessionId, + Homeserver = hs, UserInfo = new() { AvatarUrl = (await profileTask).AvatarUrl, RoomCount = (await joinedRoomsTask).Count, DisplayName = (await profileTask).DisplayName ?? hs.WhoAmI.UserId }, - UserAuth = token, ServerVersion = await (serverVersionTask ?? Task.FromResult(null)!), - Homeserver = hs }); if (updateSw.ElapsedMilliseconds > 25) { updateSw.Restart(); @@ -214,7 +217,7 @@ Small collection of tools to do not-so-everyday things. catch (MatrixException e) { if (e is { ErrorCode: "M_UNKNOWN_TOKEN" }) { logger.LogWarning("Got unknown token error for {0} via {1}", token.UserId, token.Homeserver); - _invalidSessions.Add(token); + _invalidSessions.Add(session.Value); } else { logger.LogError("Failed to get info for {0} via {1}: {2}", token.UserId, token.Homeserver, e); @@ -248,9 +251,10 @@ Small collection of tools to do not-so-everyday things. internal int RoomCount { get; set; } } - private async Task RemoveUser(UserAuth auth, bool logout = false) { + private async Task RemoveUser(string sessionId, bool logout = false) { try { if (logout) { + var auth = (await sessionStore.GetSession(sessionId))?.Auth; await (await HsProvider.GetAuthenticatedWithToken(auth.Homeserver, auth.AccessToken, auth.Proxy)).Logout(); } } @@ -263,21 +267,19 @@ Small collection of tools to do not-so-everyday things. Console.WriteLine(e); } - await RmuStorage.RemoveToken(auth); - if ((await RmuStorage.GetCurrentToken())?.AccessToken == auth.AccessToken) - await RmuStorage.SetCurrentToken((await RmuStorage.GetAllTokens() ?? throw new InvalidOperationException()).FirstOrDefault()); + await sessionStore.RemoveSession(sessionId); StateHasChanged(); } - private async Task SwitchSession(UserAuth auth) { - Console.WriteLine($"Switching to {auth.Homeserver} {auth.UserId} via {auth.Proxy}"); - await RmuStorage.SetCurrentToken(auth); - _currentSession = auth; + private async Task SwitchSession(string sessionId) { + Console.WriteLine($"Switching to {sessionId}"); + await sessionStore.SetCurrentSession(sessionId); + _currentSession = await sessionStore.GetCurrentSession(); StateHasChanged(); } - private async Task ManageUser(UserAuth auth) { - await SwitchSession(auth); + private async Task ManageUser(string sessionId) { + await sessionStore.SetCurrentSession(sessionId); NavigationManager.NavigateTo("/User/Profile"); } } \ No newline at end of file diff --git a/MatrixUtils.Web/Pages/InvalidSession.razor b/MatrixUtils.Web/Pages/InvalidSession.razor index b63c14f..1ec99f6 100644 --- a/MatrixUtils.Web/Pages/InvalidSession.razor +++ b/MatrixUtils.Web/Pages/InvalidSession.razor @@ -6,14 +6,15 @@

Rory&::MatrixUtils - Invalid session encountered

A session was encountered that is no longer valid. This can happen if you have logged out of the account on another device, or if the access token has expired.

-@if (_login is not null) { -

It appears that the affected user is @_login.UserId (@_login.DeviceId) on @_login.Homeserver!

+@if (_auth is not null) { +

It appears that the affected user is @_auth.UserId (@_auth.DeviceId) on @_auth.Homeserver!

Refresh token Remove @if (_showRefreshDialog) { - -
+ + +
Log in @if (_loginException is not null) {
@_loginException.RawContent
@@ -29,9 +30,9 @@ else { { [Parameter] [SupplyParameterFromQuery(Name = "ctx")] - public string Context { get; set; } + public string SessionId { get; set; } - private UserAuth? _login { get; set; } + private UserAuth? _auth { get; set; } private bool _showRefreshDialog { get; set; } @@ -40,25 +41,21 @@ else { private MatrixException? _loginException { get; set; } protected override async Task OnInitializedAsync() { - var tokens = await RmuStorage.GetAllTokens(); - if (tokens is null || tokens.Count == 0) { + var tokens = await sessionStore.GetAllSessions(); + if (tokens.Count == 0) { NavigationManager.NavigateTo("/Login"); return; } - _login = tokens.FirstOrDefault(x => x.AccessToken == Context); - - if (_login is null) { - Console.WriteLine($"Could not find {_login} in stored tokens!"); - } + if (tokens.TryGetValue(SessionId, out var session)) + _auth = session.Auth; + else Console.WriteLine($"Could not find {SessionId} in stored sessions!"); await base.OnInitializedAsync(); } private async Task RemoveUser() { - await RmuStorage.RemoveToken(_login!); - if ((await RmuStorage.GetCurrentToken())!.AccessToken == _login!.AccessToken) - await RmuStorage.SetCurrentToken((await RmuStorage.GetAllTokens())?.FirstOrDefault()); + await sessionStore.RemoveSession(SessionId); await OnInitializedAsync(); } @@ -68,30 +65,29 @@ else { await Task.CompletedTask; } - private async Task SwitchSession(UserAuth auth) { - Console.WriteLine($"Switching to {auth.Homeserver} {auth.AccessToken} {auth.UserId}"); - await RmuStorage.SetCurrentToken(auth); + private async Task SwitchSession(string sessionId) { + Console.WriteLine($"Switching to session {sessionId}"); + await sessionStore.SetCurrentSession(sessionId); await OnInitializedAsync(); } private async Task TryLogin() { - if(_login is null) throw new NullReferenceException("Login is null!"); + if (_auth is null) throw new NullReferenceException("Login is null!"); try { - var result = new UserAuth(await HsProvider.Login(_login.Homeserver, _login.UserId, _password)); + var result = new UserAuth(await HsProvider.Login(_auth.Homeserver, _auth.UserId, _password)); if (result is null) { - Console.WriteLine($"Failed to login to {_login.Homeserver} as {_login.UserId}!"); + Console.WriteLine($"Failed to login to {_auth.Homeserver} as {_auth.UserId}!"); return; } + Console.WriteLine($"Obtained access token for {result.UserId}!"); - await RemoveUser(); - await RmuStorage.AddToken(result); - if (result.UserId == (await RmuStorage.GetCurrentToken())?.UserId) - await RmuStorage.SetCurrentToken(result); + await sessionStore.RemoveSession(SessionId); + await sessionStore.AddSession(result); NavigationManager.NavigateTo("/"); } catch (MatrixException e) { - Console.WriteLine($"Failed to login to {_login.Homeserver} as {_login.UserId}!"); + Console.WriteLine($"Failed to login to {_auth.Homeserver} as {_auth.UserId}!"); Console.WriteLine(e); _loginException = e; StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Labs/Client/Index.razor b/MatrixUtils.Web/Pages/Labs/Client/Index.razor index 4656fcb..c6e7d1a 100644 --- a/MatrixUtils.Web/Pages/Labs/Client/Index.razor +++ b/MatrixUtils.Web/Pages/Labs/Client/Index.razor @@ -40,11 +40,11 @@ } protected override async Task OnInitializedAsync() { - var tokens = await RmuStorage.GetAllTokens(); - var tasks = tokens.Select(async token => { + var tokens = await sessionStore.GetAllSessions(); + var tasks = tokens.Keys.Select(async token => { try { var cc = new ClientContext() { - Homeserver = await RmuStorage.GetSession(token) + Homeserver = await sessionStore.GetHomeserver(token) }; cc.SyncWrapper = new ClientSyncWrapper(cc.Homeserver); diff --git a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpace.razor b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpace.razor index a382729..f81afe5 100644 --- a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpace.razor +++ b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpace.razor @@ -52,7 +52,7 @@ NavigationManager.NavigateTo(NavigationManager.Uri.Replace("stage=", ""), true); //"/User/DMSpace/Setup" } DMSpaceRootPage = this; - SetupData.Homeserver ??= await RmuStorage.GetCurrentSessionOrNavigate(); + SetupData.Homeserver ??= await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (SetupData.Homeserver is null) return; try { SetupData.DmSpaceConfiguration = await SetupData.Homeserver.GetAccountDataAsync("gay.rory.dm_space"); diff --git a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2.razor b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2.razor index f9da6eb..441752b 100644 --- a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2.razor +++ b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2.razor @@ -55,7 +55,7 @@ public RoomListViewData Data { get; set; } = new RoomListViewData(); protected override async Task OnInitializedAsync() { - Data.Homeserver = await RmuStorage.GetCurrentSessionOrNavigate(); + Data.Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (Data.Homeserver is null) return; var rooms = await Data.Homeserver.GetJoinedRooms(); Data.GlobalProfile = await Data.Homeserver.GetProfileAsync(Data.Homeserver.WhoAmI.UserId); diff --git a/MatrixUtils.Web/Pages/LoginPage.razor b/MatrixUtils.Web/Pages/LoginPage.razor index bc989c2..88577a2 100644 --- a/MatrixUtils.Web/Pages/LoginPage.razor +++ b/MatrixUtils.Web/Pages/LoginPage.razor @@ -68,7 +68,7 @@ @foreach (var record in records) { var r = record; -
+ @@ -108,7 +108,7 @@ readonly List records = new(); private LoginStruct newRecordInput = new(); - List? LoggedInSessions { get; set; } = new(); + Dictionary LoggedInSessions { get; set; } = new(); async Task LoginAll() { var loginTasks = records.Select(Login); @@ -118,7 +118,7 @@ async Task Login(LoginStruct record) { if (!records.Contains(record)) records.Add(record); - if (LoggedInSessions.Any(x => x.UserId == $"@{record.Username}:{record.Homeserver}" && x.Proxy == record.Proxy)) return; + if (LoggedInSessions.Any(x => x.Value.Auth.UserId == $"@{record.Username}:{record.Homeserver}" && x.Value.Auth.UserId == record.Proxy)) return; StateHasChanged(); try { var result = new UserAuth(await HsProvider.Login(record.Homeserver, record.Username, record.Password, record.Proxy)) { @@ -131,8 +131,8 @@ Console.WriteLine($"Obtained access token for {result.UserId}!"); - await RmuStorage.AddToken(result); - LoggedInSessions = await RmuStorage.GetAllTokens(); + await sessionStore.AddSession(result); + LoggedInSessions = await sessionStore.GetAllSessions(); } catch (Exception e) { Console.WriteLine($"Failed to login to {record.Homeserver} as {record.Username}!"); @@ -144,7 +144,7 @@ } private async Task FileChanged(InputFileChangeEventArgs obj) { - LoggedInSessions = await RmuStorage.GetAllTokens(); + LoggedInSessions = await sessionStore.GetAllSessions(); Console.WriteLine(JsonSerializer.Serialize(obj, new JsonSerializerOptions { WriteIndented = true })); @@ -162,7 +162,7 @@ } private async Task AddRecord() { - LoggedInSessions = await RmuStorage.GetAllTokens(); + LoggedInSessions = await sessionStore.GetAllSessions(); records.Add(newRecordInput); newRecordInput = new(); } @@ -185,13 +185,13 @@ return; } - await RmuStorage.AddToken(new UserAuth() { + await sessionStore.AddSession(new UserAuth() { UserId = session.WhoAmI.UserId, AccessToken = session.AccessToken, Proxy = record.Proxy, DeviceId = session.WhoAmI.DeviceId }); - LoggedInSessions = await RmuStorage.GetAllTokens(); + LoggedInSessions = await sessionStore.GetAllSessions(); } catch (Exception e) { Console.WriteLine($"Failed to login to {record.Homeserver} as {record.Username}!"); diff --git a/MatrixUtils.Web/Pages/Moderation/UserRoomHistory.razor b/MatrixUtils.Web/Pages/Moderation/UserRoomHistory.razor index 9bb20f0..e30adf6 100644 --- a/MatrixUtils.Web/Pages/Moderation/UserRoomHistory.razor +++ b/MatrixUtils.Web/Pages/Moderation/UserRoomHistory.razor @@ -44,11 +44,11 @@ else { private AuthenticatedHomeserverGeneric? currentHs { get; set; } protected override async Task OnInitializedAsync() { - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; - var sessions = await RmuStorage.GetAllTokens(); - foreach (var userAuth in sessions) { - var session = await RmuStorage.GetSession(userAuth); + var sessions = await sessionStore.GetAllSessions(); + foreach (var userAuth in sessions.Keys) { + var session = await sessionStore.GetHomeserver(userAuth); if (session is not null) { hss.Add(session); StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Rooms/Create.razor b/MatrixUtils.Web/Pages/Rooms/Create.razor index a36ccf8..021ad18 100644 --- a/MatrixUtils.Web/Pages/Rooms/Create.razor +++ b/MatrixUtils.Web/Pages/Rooms/Create.razor @@ -258,7 +258,7 @@ private RoomAvatarEventContent? roomAvatarEvent => creationEvent?["m.room.avatar"].TypedContent as RoomAvatarEventContent; protected override async Task OnInitializedAsync() { - Homeserver = await RmuStorage.GetCurrentSessionOrNavigate(); + Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (Homeserver is null) return; foreach (var x in Assembly.GetExecutingAssembly().GetTypes().Where(x => x.IsClass && !x.IsAbstract && x.GetInterfaces().Contains(typeof(IRoomCreationTemplate))).ToList()) { diff --git a/MatrixUtils.Web/Pages/Rooms/Index.razor b/MatrixUtils.Web/Pages/Rooms/Index.razor index 45219c7..0373a46 100644 --- a/MatrixUtils.Web/Pages/Rooms/Index.razor +++ b/MatrixUtils.Web/Pages/Rooms/Index.razor @@ -66,7 +66,7 @@ // SyncHelper profileSyncHelper; protected override async Task OnInitializedAsync() { - Homeserver = await RmuStorage.GetCurrentSessionOrNavigate(); + Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (Homeserver is null) return; // var rooms = await Homeserver.GetJoinedRooms(); // SemaphoreSlim _semaphore = new(160, 160); diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyList.razor b/MatrixUtils.Web/Pages/Rooms/PolicyList.razor index 3d78f4a..9c35673 100644 --- a/MatrixUtils.Web/Pages/Rooms/PolicyList.razor +++ b/MatrixUtils.Web/Pages/Rooms/PolicyList.razor @@ -216,7 +216,7 @@ else { protected override async Task OnInitializedAsync() { var sw = Stopwatch.StartNew(); await base.OnInitializedAsync(); - Homeserver = (await RmuStorage.GetCurrentSessionOrNavigate())!; + Homeserver = (await sessionStore.GetCurrentHomeserver(navigateOnFailure: true))!; if (Homeserver is null) return; Room = Homeserver.GetRoom(RoomId!); await Task.WhenAll([ diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor b/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor index 664551a..982fc5a 100644 --- a/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor +++ b/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor @@ -173,7 +173,7 @@ else { protected override async Task OnInitializedAsync() { var sw = Stopwatch.StartNew(); await base.OnInitializedAsync(); - Homeserver = (await RmuStorage.GetCurrentSessionOrNavigate())!; + Homeserver = (await sessionStore.GetCurrentHomeserver(navigateOnFailure: true))!; if (Homeserver is null) return; Room = Homeserver.GetRoom(RoomId!); PowerLevels = (await Room.GetPowerLevelsAsync())!; diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyLists.razor b/MatrixUtils.Web/Pages/Rooms/PolicyLists.razor index 4f06822..2903ab8 100644 --- a/MatrixUtils.Web/Pages/Rooms/PolicyLists.razor +++ b/MatrixUtils.Web/Pages/Rooms/PolicyLists.razor @@ -62,7 +62,7 @@ private AuthenticatedHomeserverGeneric? Homeserver { get; set; } protected override async Task OnInitializedAsync() { - Homeserver = await RmuStorage.GetCurrentSessionOrNavigate(); + Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (Homeserver is null) return; Status = "Fetching rooms..."; diff --git a/MatrixUtils.Web/Pages/Rooms/Space.razor b/MatrixUtils.Web/Pages/Rooms/Space.razor index e3bb4e4..46e39ed 100644 --- a/MatrixUtils.Web/Pages/Rooms/Space.razor +++ b/MatrixUtils.Web/Pages/Rooms/Space.razor @@ -36,7 +36,7 @@ private string? NewRoomId { get; set; } protected override async Task OnInitializedAsync() { - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; Room = hs.GetRoom(RoomId.Replace('~', '.')); diff --git a/MatrixUtils.Web/Pages/Rooms/StateEditor.razor b/MatrixUtils.Web/Pages/Rooms/StateEditor.razor index 4d24d47..51cb265 100644 --- a/MatrixUtils.Web/Pages/Rooms/StateEditor.razor +++ b/MatrixUtils.Web/Pages/Rooms/StateEditor.razor @@ -43,7 +43,7 @@ protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; RoomId = RoomId.Replace('~', '.'); await LoadStatesAsync(); @@ -53,7 +53,7 @@ private DateTime _lastUpdate = DateTime.Now; private async Task LoadStatesAsync() { - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); var StateLoaded = 0; var response = (hs.GetRoom(RoomId)).GetFullStateAsync(); diff --git a/MatrixUtils.Web/Pages/Rooms/StateViewer.razor b/MatrixUtils.Web/Pages/Rooms/StateViewer.razor index 565d97f..c8b87d3 100644 --- a/MatrixUtils.Web/Pages/Rooms/StateViewer.razor +++ b/MatrixUtils.Web/Pages/Rooms/StateViewer.razor @@ -70,7 +70,7 @@ protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; await LoadStatesAsync(); Console.WriteLine("Policy list editor initialized!"); @@ -80,7 +80,7 @@ private async Task LoadStatesAsync() { var StateLoaded = 0; - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; var response = (hs.GetRoom(RoomId)).GetFullStateAsync(); await foreach (var _ev in response) { diff --git a/MatrixUtils.Web/Pages/Rooms/Timeline.razor b/MatrixUtils.Web/Pages/Rooms/Timeline.razor index a064956..108581c 100644 --- a/MatrixUtils.Web/Pages/Rooms/Timeline.razor +++ b/MatrixUtils.Web/Pages/Rooms/Timeline.razor @@ -27,7 +27,7 @@ protected override async Task OnInitializedAsync() { Console.WriteLine("RoomId: " + RoomId); - Homeserver = await RmuStorage.GetCurrentSessionOrNavigate(); + Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (Homeserver is null) return; var room = Homeserver.GetRoom(RoomId); MessagesResponse? msgs = null; diff --git a/MatrixUtils.Web/Pages/StreamTest.razor b/MatrixUtils.Web/Pages/StreamTest.razor index aae1f17..8b9735e 100644 --- a/MatrixUtils.Web/Pages/StreamTest.razor +++ b/MatrixUtils.Web/Pages/StreamTest.razor @@ -35,7 +35,7 @@ public List Streams { get; set; } = new(); protected override async Task OnInitializedAsync() { - Homeserver = await RmuStorage.GetCurrentSessionOrNavigate(); + Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); //await InitOld(); await Init2(); diff --git a/MatrixUtils.Web/Pages/Tools/Debug/LeaveRoom.razor b/MatrixUtils.Web/Pages/Tools/Debug/LeaveRoom.razor index 8782dbe..9a56fc0 100644 --- a/MatrixUtils.Web/Pages/Tools/Debug/LeaveRoom.razor +++ b/MatrixUtils.Web/Pages/Tools/Debug/LeaveRoom.razor @@ -17,7 +17,7 @@ public string? RoomId { get; set; } protected override async Task OnInitializedAsync() { - hs = await RmuStorage.GetCurrentSessionOrNavigate(); + hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; Log.CollectionChanged += (sender, args) => StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/Debug/MigrateRoom.razor b/MatrixUtils.Web/Pages/Tools/Debug/MigrateRoom.razor index f21bac2..0943216 100644 --- a/MatrixUtils.Web/Pages/Tools/Debug/MigrateRoom.razor +++ b/MatrixUtils.Web/Pages/Tools/Debug/MigrateRoom.razor @@ -39,7 +39,7 @@ private string newRoomId { get; set; } protected override async Task OnInitializedAsync() { - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; StateHasChanged(); @@ -48,7 +48,7 @@ } private async Task Execute() { - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; var oldRoom = hs.GetRoom(roomId); var newRoom = hs.GetRoom(newRoomId); @@ -90,7 +90,7 @@ private async Task TryFetchUsers() { try { - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; var room = hs.GetRoom(roomId); var members = await room.GetMembersListAsync(); diff --git a/MatrixUtils.Web/Pages/Tools/Debug/SpaceDebug.razor b/MatrixUtils.Web/Pages/Tools/Debug/SpaceDebug.razor index 70ae27d..7abb3d2 100644 --- a/MatrixUtils.Web/Pages/Tools/Debug/SpaceDebug.razor +++ b/MatrixUtils.Web/Pages/Tools/Debug/SpaceDebug.razor @@ -45,7 +45,7 @@ protected override async Task OnInitializedAsync() { Status = "Getting homeserver..."; - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; var syncHelper = new SyncHelper(hs) { diff --git a/MatrixUtils.Web/Pages/Tools/Info/KnownHomeserverList.razor b/MatrixUtils.Web/Pages/Tools/Info/KnownHomeserverList.razor index 296852a..acad827 100644 --- a/MatrixUtils.Web/Pages/Tools/Info/KnownHomeserverList.razor +++ b/MatrixUtils.Web/Pages/Tools/Info/KnownHomeserverList.razor @@ -36,7 +36,7 @@ int RoomCount { get; set; } = 0; protected override async Task OnInitializedAsync() { - hs = await RmuStorage.GetCurrentSessionOrNavigate(); + hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; var ss = new SemaphoreSlim(32, 32); var rooms = await hs.GetJoinedRooms(); diff --git a/MatrixUtils.Web/Pages/Tools/Info/PolicyListActivity.razor b/MatrixUtils.Web/Pages/Tools/Info/PolicyListActivity.razor index 4506c39..f8d1d31 100644 --- a/MatrixUtils.Web/Pages/Tools/Info/PolicyListActivity.razor +++ b/MatrixUtils.Web/Pages/Tools/Info/PolicyListActivity.razor @@ -38,7 +38,7 @@ else protected override async Task OnInitializedAsync() { var sw = Stopwatch.StartNew(); await base.OnInitializedAsync(); - Homeserver = (await RmuStorage.GetCurrentSessionOrNavigate())!; + Homeserver = (await sessionStore.GetCurrentHomeserver(navigateOnFailure: true))!; if (Homeserver is null) return; var rooms = await Homeserver.GetJoinedRooms(); diff --git a/MatrixUtils.Web/Pages/Tools/Info/SessionCount.razor b/MatrixUtils.Web/Pages/Tools/Info/SessionCount.razor index 1adb440..ce3513b 100644 --- a/MatrixUtils.Web/Pages/Tools/Info/SessionCount.razor +++ b/MatrixUtils.Web/Pages/Tools/Info/SessionCount.razor @@ -73,20 +73,20 @@ protected override async Task OnInitializedAsync() { log.CollectionChanged += (sender, args) => StateHasChanged(); - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; rooms.CollectionChanged += (sender, args) => StateHasChanged(); - var sessions = await RmuStorage.GetAllTokens(); + var sessions = await sessionStore.GetAllSessions(); foreach (var userAuth in sessions) { - var session = await RmuStorage.GetSession(userAuth); - if (session is not null) { - var sessionRooms = await session.GetJoinedRooms(); + var homeserver = await sessionStore.GetHomeserver(userAuth.Key); + if (homeserver is not null) { + var sessionRooms = await homeserver.GetJoinedRooms(); foreach (var room in sessionRooms) { rooms.Add(room); } StateHasChanged(); - log.Add($"Got {sessionRooms.Count} rooms for {userAuth.UserId}"); + log.Add($"Got {sessionRooms.Count} rooms for {userAuth.Value.Auth.UserId}"); } } @@ -106,7 +106,7 @@ log.Add($"Done fetching members!"); - UserIDs.RemoveAll(x => sessions.Any(y => y.UserId == x)); + UserIDs.RemoveAll(x => sessions.Any(y => y.Value.Auth.UserId == x)); StateHasChanged(); Console.WriteLine("Rerendered!"); diff --git a/MatrixUtils.Web/Pages/Tools/InviteCounter.razor b/MatrixUtils.Web/Pages/Tools/InviteCounter.razor index fa94f18..2313884 100644 --- a/MatrixUtils.Web/Pages/Tools/InviteCounter.razor +++ b/MatrixUtils.Web/Pages/Tools/InviteCounter.razor @@ -35,7 +35,7 @@ protected override async Task OnInitializedAsync() { log.CollectionChanged += (sender, args) => StateHasChanged(); - hs = await RmuStorage.GetCurrentSessionOrNavigate(); + hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/MassCMEBan.razor b/MatrixUtils.Web/Pages/Tools/MassCMEBan.razor index 547c586..a252e6b 100644 --- a/MatrixUtils.Web/Pages/Tools/MassCMEBan.razor +++ b/MatrixUtils.Web/Pages/Tools/MassCMEBan.razor @@ -27,7 +27,7 @@ protected override async Task OnInitializedAsync() { log.CollectionChanged += (sender, args) => StateHasChanged(); - hs = await RmuStorage.GetCurrentSessionOrNavigate(); + hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectedRoomsEditor.razor b/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectedRoomsEditor.razor index 953a1e6..b0d5a65 100644 --- a/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectedRoomsEditor.razor +++ b/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectedRoomsEditor.razor @@ -62,7 +62,7 @@ private AuthenticatedHomeserverGeneric hs { get; set; } protected override async Task OnInitializedAsync() { - hs = await RmuStorage.GetCurrentSessionOrNavigate(); + hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; data = await hs.GetAccountDataAsync(DraupnirProtectedRoomsData.EventId); StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectionsEditor.razor b/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectionsEditor.razor index b4a9d35..ea39c9a 100644 --- a/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectionsEditor.razor +++ b/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectionsEditor.razor @@ -58,7 +58,7 @@ private AuthenticatedHomeserverGeneric hs { get; set; } protected override async Task OnInitializedAsync() { - hs = await RmuStorage.GetCurrentSessionOrNavigate(); + hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; data = await hs.GetAccountDataAsync("org.matrix.mjolnir.protected_rooms"); StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirWatchedListsEditor.razor b/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirWatchedListsEditor.razor index 1384a2a..9e70687 100644 --- a/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirWatchedListsEditor.razor +++ b/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirWatchedListsEditor.razor @@ -58,7 +58,7 @@ private AuthenticatedHomeserverGeneric hs { get; set; } protected override async Task OnInitializedAsync() { - hs = await RmuStorage.GetCurrentSessionOrNavigate(); + hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; data = await hs.GetAccountDataAsync("org.matrix.mjolnir.protected_rooms"); StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/FindUsersByRegex.razor b/MatrixUtils.Web/Pages/Tools/Moderation/FindUsersByRegex.razor index 4b2af68..b62cf57 100644 --- a/MatrixUtils.Web/Pages/Tools/Moderation/FindUsersByRegex.razor +++ b/MatrixUtils.Web/Pages/Tools/Moderation/FindUsersByRegex.razor @@ -63,7 +63,7 @@ protected override async Task OnInitializedAsync() { log.CollectionChanged += (sender, args) => StateHasChanged(); log.Add("Authenticating"); - hs = await RmuStorage.GetCurrentSessionOrNavigate(); + hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor b/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor index cb1328c..5c5946f 100644 --- a/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor +++ b/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor @@ -35,7 +35,7 @@ protected override async Task OnInitializedAsync() { log.CollectionChanged += (sender, args) => StateHasChanged(); - hs = await RmuStorage.GetCurrentSessionOrNavigate(); + hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/MassCMEBan.razor b/MatrixUtils.Web/Pages/Tools/Moderation/MassCMEBan.razor index b5e5edb..8fdad84 100644 --- a/MatrixUtils.Web/Pages/Tools/Moderation/MassCMEBan.razor +++ b/MatrixUtils.Web/Pages/Tools/Moderation/MassCMEBan.razor @@ -28,7 +28,7 @@ protected override async Task OnInitializedAsync() { log.CollectionChanged += (sender, args) => StateHasChanged(); - hs = await RmuStorage.GetCurrentSessionOrNavigate(); + hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor b/MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor index d9503ee..1ec3cd0 100644 --- a/MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor +++ b/MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor @@ -407,7 +407,7 @@ protected override async Task OnInitializedAsync() { Log.CollectionChanged += (sender, args) => StateHasChanged(); - Homeserver = await RmuStorage.GetCurrentSessionOrNavigate(); + Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (Homeserver is null) return; StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/RoomIntersections.razor b/MatrixUtils.Web/Pages/Tools/Moderation/RoomIntersections.razor index 15eea15..736e59a 100644 --- a/MatrixUtils.Web/Pages/Tools/Moderation/RoomIntersections.razor +++ b/MatrixUtils.Web/Pages/Tools/Moderation/RoomIntersections.razor @@ -113,7 +113,7 @@ protected override async Task OnInitializedAsync() { Log.CollectionChanged += (sender, args) => StateHasChanged(); - hs = await RmuStorage.GetCurrentSessionOrNavigate(); + hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor b/MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor index 73818c6..c3cc09c 100644 --- a/MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor +++ b/MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor @@ -66,19 +66,19 @@ protected override async Task OnInitializedAsync() { log.CollectionChanged += (sender, args) => StateHasChanged(); - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; - var sessions = await RmuStorage.GetAllTokens(); + var sessions = await sessionStore.GetAllSessions(); var tasks = sessions.Select(async session => { try { - var _hs = await RmuStorage.GetSession(session); + var _hs = await sessionStore.GetHomeserver(session.Key); if (_hs is not null) { try { var _rooms = await _hs.GetJoinedRooms(); if (!_rooms.Any()) return; // Check if homeserver supports `?format=event`: - await _rooms.First().GetStateEventAsync(RoomMemberEventContent.EventId, session.UserId); + await _rooms.First().GetStateEventAsync(RoomMemberEventContent.EventId, session.Value.Auth.UserId); rooms.AddRange(_rooms); log.Add($"Got {_rooms.Count} rooms for {_hs.UserId}, total {rooms.Count}"); } @@ -90,7 +90,7 @@ } } catch (Exception e) { - log.Add($"Failed to fetch rooms for {session.UserId}! {e}"); + log.Add($"Failed to fetch rooms for {session.Value.Auth.UserId}! {e}"); } }); await Task.WhenAll(tasks); diff --git a/MatrixUtils.Web/Pages/Tools/Room/SpaceRestrictedJoins.razor b/MatrixUtils.Web/Pages/Tools/Room/SpaceRestrictedJoins.razor index b57810a..ac3c651 100644 --- a/MatrixUtils.Web/Pages/Tools/Room/SpaceRestrictedJoins.razor +++ b/MatrixUtils.Web/Pages/Tools/Room/SpaceRestrictedJoins.razor @@ -31,7 +31,7 @@ protected override async Task OnInitializedAsync() { log.CollectionChanged += (sender, args) => StateHasChanged(); - hs = await RmuStorage.GetCurrentSessionOrNavigate(); + hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/User/CopyPowerlevel.razor b/MatrixUtils.Web/Pages/Tools/User/CopyPowerlevel.razor index 64dbfcf..e5ffd5b 100644 --- a/MatrixUtils.Web/Pages/Tools/User/CopyPowerlevel.razor +++ b/MatrixUtils.Web/Pages/Tools/User/CopyPowerlevel.razor @@ -23,11 +23,11 @@ List hss { get; set; } = new(); protected override async Task OnInitializedAsync() { - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; - var sessions = await RmuStorage.GetAllTokens(); - foreach (var userAuth in sessions) { - var session = await RmuStorage.GetSession(userAuth); + var sessions = await sessionStore.GetAllSessions(); + foreach (var userAuth in sessions.Keys) { + var session = await sessionStore.GetHomeserver(userAuth); if (session is not null) { hss.Add(session); StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/User/MassJoinRoom.razor b/MatrixUtils.Web/Pages/Tools/User/MassJoinRoom.razor index e352c91..c373a37 100644 --- a/MatrixUtils.Web/Pages/Tools/User/MassJoinRoom.razor +++ b/MatrixUtils.Web/Pages/Tools/User/MassJoinRoom.razor @@ -25,11 +25,11 @@ string roomId { get; set; } protected override async Task OnInitializedAsync() { - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; - var sessions = await RmuStorage.GetAllTokens(); - foreach (var userAuth in sessions) { - var session = await RmuStorage.GetSession(userAuth); + var sessions = await sessionStore.GetAllSessions(); + foreach (var userAuth in sessions.Keys) { + var session = await sessionStore.GetHomeserver(userAuth); if (session is not null) { hss.Add(session); StateHasChanged(); diff --git a/MatrixUtils.Web/Pages/Tools/User/ViewAccountData.razor b/MatrixUtils.Web/Pages/Tools/User/ViewAccountData.razor index b73b5ac..a393d2e 100644 --- a/MatrixUtils.Web/Pages/Tools/User/ViewAccountData.razor +++ b/MatrixUtils.Web/Pages/Tools/User/ViewAccountData.razor @@ -16,7 +16,7 @@ Dictionary perRoomAccountData = new(); protected override async Task OnInitializedAsync() { - var hs = await RmuStorage.GetCurrentSessionOrNavigate(); + var hs = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (hs is null) return; perRoomAccountData = await hs.EnumerateAccountDataPerRoom(); globalAccountData = await hs.EnumerateAccountData(); diff --git a/MatrixUtils.Web/Pages/User/DMManager.razor b/MatrixUtils.Web/Pages/User/DMManager.razor index fe45eb8..4b8b7c2 100644 --- a/MatrixUtils.Web/Pages/User/DMManager.razor +++ b/MatrixUtils.Web/Pages/User/DMManager.razor @@ -29,7 +29,7 @@ } protected override async Task OnInitializedAsync() { - Homeserver = await RmuStorage.GetCurrentSessionOrNavigate(); + Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (Homeserver is null) return; Status = "Loading global profile..."; if (Homeserver.WhoAmI?.UserId is null) return; diff --git a/MatrixUtils.Web/Pages/User/Profile.razor b/MatrixUtils.Web/Pages/User/Profile.razor index b6ac1d4..ccd3e7b 100644 --- a/MatrixUtils.Web/Pages/User/Profile.razor +++ b/MatrixUtils.Web/Pages/User/Profile.razor @@ -80,7 +80,7 @@ private Dictionary RoomNames { get; set; } = new(); protected override async Task OnInitializedAsync() { - Homeserver = await RmuStorage.GetCurrentSessionOrNavigate(); + Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); if (Homeserver is null) return; Status = "Loading global profile..."; if (Homeserver.WhoAmI?.UserId is null) return; diff --git a/MatrixUtils.Web/Program.cs b/MatrixUtils.Web/Program.cs index 8cab0fb..14cf2fc 100644 --- a/MatrixUtils.Web/Program.cs +++ b/MatrixUtils.Web/Program.cs @@ -78,6 +78,6 @@ builder.Services.AddScoped(x => ); builder.Services.AddRoryLibMatrixServices(); -builder.Services.AddScoped(); +builder.Services.AddScoped(); // await builder.Build().RunAsync(); await builder.Build().BlazorJSRunAsync(); \ No newline at end of file diff --git a/MatrixUtils.Web/Shared/MainLayout.razor b/MatrixUtils.Web/Shared/MainLayout.razor index 0392d9a..c06fe5a 100644 --- a/MatrixUtils.Web/Shared/MainLayout.razor +++ b/MatrixUtils.Web/Shared/MainLayout.razor @@ -1,24 +1,41 @@ @inherits LayoutComponentBase -
- + protected override async Task OnInitializedAsync() { + await sessionStore.EnsureInitialized(); + _isLoaded = true; + } - \ No newline at end of file +} \ No newline at end of file diff --git a/MatrixUtils.Web/Shared/PolicyEditorComponents/PolicyEditorModal.razor b/MatrixUtils.Web/Shared/PolicyEditorComponents/PolicyEditorModal.razor index a1d870c..5819bee 100644 --- a/MatrixUtils.Web/Shared/PolicyEditorComponents/PolicyEditorModal.razor +++ b/MatrixUtils.Web/Shared/PolicyEditorComponents/PolicyEditorModal.razor @@ -56,7 +56,7 @@ break; case Type t when t == typeof(DateTime): if (!isNullable) { - {e}"); setter?.Invoke(PolicyData, [e]); PolicyEvent.TypedContent = PolicyData; StateHasChanged(); })"> + @* {e}"); setter?.Invoke(PolicyData, [e]); PolicyEvent.TypedContent = PolicyData; StateHasChanged(); })"> *@ } else { var value = getter?.Invoke(PolicyData, null) as DateTime?; diff --git a/MatrixUtils.Web/Shared/RoomListItem.razor b/MatrixUtils.Web/Shared/RoomListItem.razor index 46daaa2..2d85f64 100644 --- a/MatrixUtils.Web/Shared/RoomListItem.razor +++ b/MatrixUtils.Web/Shared/RoomListItem.razor @@ -141,7 +141,7 @@ else { protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); - // hs ??= await RmuStorage.GetCurrentSessionOrNavigate(); + // hs ??= await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); // if (hs is null) return; if (Homeserver is null) { diff --git a/MatrixUtils.Web/Shared/UserListItem.razor b/MatrixUtils.Web/Shared/UserListItem.razor index 8ce2868..5084807 100644 --- a/MatrixUtils.Web/Shared/UserListItem.razor +++ b/MatrixUtils.Web/Shared/UserListItem.razor @@ -29,7 +29,7 @@ private SvgIdenticonGenerator _identiconGenerator = new(); protected override async Task OnInitializedAsync() { - // _homeserver = await RmuStorage.GetCurrentSessionOrNavigate(); + // _homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true); // if (_homeserver is null) return; if (User == null) { diff --git a/MatrixUtils.Web/_Imports.razor b/MatrixUtils.Web/_Imports.razor index 47c8b36..b5a1316 100644 --- a/MatrixUtils.Web/_Imports.razor +++ b/MatrixUtils.Web/_Imports.razor @@ -13,7 +13,7 @@ @using Microsoft.JSInterop @inject NavigationManager NavigationManager -@inject RMUStorageWrapper RmuStorage +@inject RmuSessionStore sessionStore @inject HomeserverProviderService HsProvider @inject TieredStorageService TieredStorage @inject HomeserverResolverService HsResolver -- cgit 1.5.1
@if (!string.IsNullOrWhiteSpace(@session.UserInfo?.AvatarUrl)) { @@ -36,7 +36,7 @@ Small collection of tools to do not-so-everyday things.

- Manage - Remove - Log out + Manage + Remove + Log out

@{ - string[] parts = session.UserId.Split(':'); + string[] parts = session.Auth.UserId.Split(':'); } @parts[0][1..] on @parts[1] - @if (!string.IsNullOrWhiteSpace(session.Proxy)) { - (proxied via @session.Proxy) + @if (!string.IsNullOrWhiteSpace(session.Auth.Proxy)) { + (proxied via @session.Auth.Proxy) }

- Remove + Remove

@{ - string[] parts = session.UserId.Split(':'); + string[] parts = session.Auth.UserId.Split(':'); } @parts[0][1..] on @parts[1] - @if (!string.IsNullOrWhiteSpace(session.Proxy)) { - (proxied via @session.Proxy) + @if (!string.IsNullOrWhiteSpace(session.Auth.Proxy)) { + (proxied via @session.Auth.Proxy) }

- Re-login + Re-login - Remove + Remove