From 1beca653b772cf10586c417b2c25df03a67df8a2 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Mon, 17 Jul 2023 00:21:24 +0200 Subject: Handle external logouts --- MatrixRoomUtils.Web/Classes/MRUStorageWrapper.cs | 40 ++++++++++++++++++------ 1 file changed, 31 insertions(+), 9 deletions(-) (limited to 'MatrixRoomUtils.Web/Classes/MRUStorageWrapper.cs') diff --git a/MatrixRoomUtils.Web/Classes/MRUStorageWrapper.cs b/MatrixRoomUtils.Web/Classes/MRUStorageWrapper.cs index 41f604d..d4b256b 100644 --- a/MatrixRoomUtils.Web/Classes/MRUStorageWrapper.cs +++ b/MatrixRoomUtils.Web/Classes/MRUStorageWrapper.cs @@ -21,8 +21,10 @@ public class MRUStorageWrapper { } public async Task?> GetAllTokens() { - return await _storageService.DataStorageProvider.LoadObjectAsync>("mru.tokens") ?? new List(); + return await _storageService.DataStorageProvider.LoadObjectAsync>("mru.tokens") ?? + new List(); } + public async Task GetCurrentToken() { var currentToken = await _storageService.DataStorageProvider.LoadObjectAsync("token"); var allTokens = await GetAllTokens(); @@ -30,12 +32,15 @@ public class MRUStorageWrapper { await SetCurrentToken(null); return null; } + if (currentToken is null) { await SetCurrentToken(currentToken = allTokens[0]); } - if(!allTokens.Any(x=>x.AccessToken == currentToken.AccessToken)) { + + if (!allTokens.Any(x => x.AccessToken == currentToken.AccessToken)) { await SetCurrentToken(currentToken = allTokens[0]); } + return currentToken; } @@ -49,22 +54,39 @@ public class MRUStorageWrapper { await _storageService.DataStorageProvider.SaveObjectAsync("mru.tokens", tokens); } - public async Task GetCurrentSession() { + private async Task GetCurrentSession() { var token = await GetCurrentToken(); if (token == null) { return null; } - - return await _homeserverProviderService.GetAuthenticatedWithToken(token.Homeserver, token.AccessToken); + + return await _homeserverProviderService.GetAuthenticatedWithToken(token.Homeserver, token.AccessToken); } public async Task GetCurrentSessionOrNavigate() { - var session = await GetCurrentSession(); - if (session == null) { + AuthenticatedHomeServer? 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(); + _navigationManager.NavigateTo("/InvalidSession?ctx=" + token.AccessToken); + return null; + } + + throw; + } + + if (session is null) { _navigationManager.NavigateTo("/Login"); } + return session; } + public class Settings { public DeveloperSettings DeveloperSettings { get; set; } = new(); } @@ -81,11 +103,11 @@ public class MRUStorageWrapper { return; } - tokens.RemoveAll(x=>x.AccessToken == auth.AccessToken); + tokens.RemoveAll(x => x.AccessToken == auth.AccessToken); await _storageService.DataStorageProvider.SaveObjectAsync("mru.tokens", tokens); } public async Task SetCurrentToken(LoginResponse? auth) { _storageService.DataStorageProvider.SaveObjectAsync("token", auth); } -} \ No newline at end of file +} -- cgit 1.5.1