From 9efe9ad2507f87f9a84a1c1f1a8f9b9ef98ad3ee Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 20 May 2024 21:52:06 +0200 Subject: [PATCH] Logout Api call --- .../Services/UserDataServiceMobile.cs | 28 +++++++++++++++++++ TIAMSharedUI/Pages/AppLaunchComponent.razor | 3 ++ TIAMSharedUI/Pages/Login.razor.cs | 2 +- .../User/SysAdmins/ManageTransfers.razor | 2 +- .../Shared/Components/Navbar.razor.cs | 21 ++++++++++---- TIAMSharedUI/Shared/MainLayout.razor | 2 +- .../Client/Services/UserDataServiceWeb.cs | 28 +++++++++++++++++++ .../Server/Controllers/UserAPIController.cs | 6 ++-- .../Shared/Interfaces/IUserDataService.cs | 2 ++ 9 files changed, 84 insertions(+), 10 deletions(-) diff --git a/TIAMMobileApp/Services/UserDataServiceMobile.cs b/TIAMMobileApp/Services/UserDataServiceMobile.cs index 3e3b98b1..3324798f 100644 --- a/TIAMMobileApp/Services/UserDataServiceMobile.cs +++ b/TIAMMobileApp/Services/UserDataServiceMobile.cs @@ -255,6 +255,34 @@ namespace TIAMMobileApp.Services return isTokenRefreshed; } + public async Task Logout(string refreshToken) + { + _logger.Info("Logout() called"); + + var url = $"{Setting.ApiBaseUrl}/{APIUrls.LogoutUser}"; + bool result = false; + var response = await http.PostAsJsonAsync(url, RefreshToken); + if (response.IsSuccessStatusCode) + { + string resultMessage = await response.Content.ReadAsStringAsync(); + _logger.Detail($"Logout response: {resultMessage}"); + if (resultMessage == "OK") + { + result = true; + } + else + { + result = false; + } + } + else + { + result = false; + } + + _logger.Detail($"Logout: {result}"); + return result; + } //public Task> GetUserRolesAsync(UserModel userModel) //{ diff --git a/TIAMSharedUI/Pages/AppLaunchComponent.razor b/TIAMSharedUI/Pages/AppLaunchComponent.razor index 7907a499..8ba65f5b 100644 --- a/TIAMSharedUI/Pages/AppLaunchComponent.razor +++ b/TIAMSharedUI/Pages/AppLaunchComponent.razor @@ -126,6 +126,9 @@ private void SignOut() { + var userBasicDetail = JsonConvert.DeserializeObject(userDetailsStr); + + UserDataService.Logout(userBasicDetail.RefreshToken); SecureStorageHandler.ClearAllSecureStorageAsync(); sessionService.User = null; sessionService.IsAuthenticated = false; diff --git a/TIAMSharedUI/Pages/Login.razor.cs b/TIAMSharedUI/Pages/Login.razor.cs index ce55e3b9..d0fdbbfb 100644 --- a/TIAMSharedUI/Pages/Login.razor.cs +++ b/TIAMSharedUI/Pages/Login.razor.cs @@ -119,7 +119,7 @@ namespace TIAMSharedUI.Pages var user = await userDataService.IsLoggedInAsync(myId); SaveToSessionInfo(user); user.UserType = UserType.Admin; - navManager.NavigateTo("index"); + navManager.NavigateTo("/"); } } diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor index 1fef1d5b..23a39d8e 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor @@ -241,7 +241,7 @@ void SendMail(Transfer item) { _logger.Info($"Sending mail to {item.ContactEmail}, {item.Id}"); - + _messageWizardModel.ReceiverId = item.UserId; _messageWizardModel.ContextId = item.Id; _messageWizardModel.SenderEmailAddress = "info@touriam.com"; _messageWizardModel.ReceiverEmailAddress = item.ContactEmail; diff --git a/TIAMSharedUI/Shared/Components/Navbar.razor.cs b/TIAMSharedUI/Shared/Components/Navbar.razor.cs index 68b81005..5e7349ff 100644 --- a/TIAMSharedUI/Shared/Components/Navbar.razor.cs +++ b/TIAMSharedUI/Shared/Components/Navbar.razor.cs @@ -14,6 +14,8 @@ using TIAMSharedUI.Resources; using TIAMWebApp.Shared.Application.Interfaces; using TIAMWebApp.Shared.Application.Utility; using TIAMSharedUI.Pages.Components; +using TIAMWebApp.Shared.Application.Models.ClientSide; +using Newtonsoft.Json; namespace TIAMSharedUI.Shared.Components { @@ -36,8 +38,8 @@ namespace TIAMSharedUI.Shared.Components [Inject] public IComponentUpdateService componentUpdateService { get; set; } - - + [Inject] + private IUserDataService UserDataService { get; set; } private bool enableLogin = true; private bool enableEvents = false; @@ -46,7 +48,6 @@ namespace TIAMSharedUI.Shared.Components private bool enableApi = true; private bool enableChat = true; - private bool collapseNavMenu = true; private bool myUser = false; private bool hasProperty = false; @@ -78,11 +79,21 @@ namespace TIAMSharedUI.Shared.Components } - private void SignOut() + private async Task SignOut() { - SecureStorageHandler.ClearAllSecureStorageAsync(); + bool serverResult; + string userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails)); + if (!string.IsNullOrEmpty(userDetailsStr)) + { + var userBasicDetail = JsonConvert.DeserializeObject(userDetailsStr); + serverResult = await UserDataService.Logout(userBasicDetail.RefreshToken); + } + + await SecureStorageHandler.ClearAllSecureStorageAsync(); sessionService.User = null; sessionService.IsAuthenticated = false; + navigationManager.NavigateTo("/"); + myUser = false; } private void ThrowSomeError() diff --git a/TIAMSharedUI/Shared/MainLayout.razor b/TIAMSharedUI/Shared/MainLayout.razor index 931ed968..193972f5 100644 --- a/TIAMSharedUI/Shared/MainLayout.razor +++ b/TIAMSharedUI/Shared/MainLayout.razor @@ -56,7 +56,7 @@ private ILogger _logger; public PopupMessageBox PopupMessageBox { get; private set; } = default!; - + protected override void OnInitialized() { diff --git a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs index 9d062a92..448b6cf3 100644 --- a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs +++ b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs @@ -266,6 +266,34 @@ namespace TIAMWebApp.Client.Services return isTokenRefreshed; } + public async Task Logout(string refreshToken) + { + _logger.Info("Logout() called"); + + var url = $"{Setting.ApiBaseUrl}/{APIUrls.LogoutUser}"; + bool result = false; + var response = await http.PostAsJsonAsync(url, refreshToken); + if (response.IsSuccessStatusCode) + { + string resultMessage = await response.Content.ReadAsStringAsync(); + _logger.Detail($"Logout response: {resultMessage}"); + if(resultMessage == "OK") + { + result = true; + } + else + { + result = false; + } + } + else + { + result = false; + } + + _logger.Detail($"Logout: {result}"); + return result; + } /*public Task> GetUserRolesAsync(UserModel userModel) { diff --git a/TIAMWebApp/Server/Controllers/UserAPIController.cs b/TIAMWebApp/Server/Controllers/UserAPIController.cs index ea64e017..1e7cb9ac 100644 --- a/TIAMWebApp/Server/Controllers/UserAPIController.cs +++ b/TIAMWebApp/Server/Controllers/UserAPIController.cs @@ -76,12 +76,14 @@ namespace TIAMWebApp.Server.Controllers [AllowAnonymous] [HttpPost] [Route(APIUrls.LogoutUserRouteName)] - public IActionResult LogoutUser() + public async Task LogoutUser([FromBody] string refreshToken) { + _logger.Info(@"LogoutUser called"); + _logger.Info($"refreshtoken: {refreshToken}"); _loginService.Logout(); //TODO: Implementálni a Logout-ot kliens és szerver oldalon is! - J. - return new RedirectToActionResult(APIUrls.BaseUrlWithSlashAndVersion, null, null); + return Ok("OK"); } [AllowAnonymous] diff --git a/TIAMWebApp/Shared/Interfaces/IUserDataService.cs b/TIAMWebApp/Shared/Interfaces/IUserDataService.cs index bc1039fe..93fa11e0 100644 --- a/TIAMWebApp/Shared/Interfaces/IUserDataService.cs +++ b/TIAMWebApp/Shared/Interfaces/IUserDataService.cs @@ -31,5 +31,7 @@ namespace TIAMWebApp.Shared.Application.Interfaces public Task GetUserDetailByIdAsync(Guid id); public Task GetUserByEmailAsync(string email); Task RefreshToken(); + + public Task Logout(string refreshToken); } } \ No newline at end of file