diff --git a/TIAM.Database.Test/TIAM.Database.Test.csproj b/TIAM.Database.Test/TIAM.Database.Test.csproj index 218e8c8a..23c47fb9 100644 --- a/TIAM.Database.Test/TIAM.Database.Test.csproj +++ b/TIAM.Database.Test/TIAM.Database.Test.csproj @@ -30,8 +30,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/TIAM.Services.Server.Tests/TIAM.Services.Server.Tests.csproj b/TIAM.Services.Server.Tests/TIAM.Services.Server.Tests.csproj index 422381ba..889235d8 100644 --- a/TIAM.Services.Server.Tests/TIAM.Services.Server.Tests.csproj +++ b/TIAM.Services.Server.Tests/TIAM.Services.Server.Tests.csproj @@ -28,8 +28,8 @@ - - + + diff --git a/TIAMMobileApp/MauiProgram.cs b/TIAMMobileApp/MauiProgram.cs index 14895811..84c454c1 100644 --- a/TIAMMobileApp/MauiProgram.cs +++ b/TIAMMobileApp/MauiProgram.cs @@ -47,31 +47,31 @@ namespace TIAMMobileApp builder.Services.AddDevExpressBlazor(configure => configure.BootstrapVersion = BootstrapVersion.v5); - builder.Services.AddScoped(); - builder.Services.AddScoped(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); builder.Services.AddSingleton(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); builder.Services.AddSingleton(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); builder.Services.AddSingleton(x => new ResourceManager("TIAMWebApp.Shared.Application.Resources", typeof(Main).Assembly)); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddAuthorizationCore(); builder.Services.Configure(Guid.NewGuid().ToString(), c => { }); diff --git a/TIAMMobileApp/Services/SessionServiceMobile.cs b/TIAMMobileApp/Services/SessionServiceMobile.cs index be8eaeff..798c1340 100644 --- a/TIAMMobileApp/Services/SessionServiceMobile.cs +++ b/TIAMMobileApp/Services/SessionServiceMobile.cs @@ -1,4 +1,6 @@ -using System.Net; +using AyCode.Interfaces.StorageHandlers; +using Microsoft.AspNetCore.Components.Authorization; +using System.Net; using TIAM.Core.Consts; using TIAM.Entities.Products; using TIAM.Entities.Users; @@ -10,16 +12,17 @@ using static System.Runtime.InteropServices.JavaScript.JSType; namespace TIAMMobileApp.Services { - public class SessionServiceMobile : SessionServiceClientBase + public class SessionServiceMobile(ISecureStorageHandler secureStorageHandler, AuthenticationStateProvider authStateProvider) + : SessionServiceClientBase(secureStorageHandler, authStateProvider) { public override List GetHotels() { return base.GetHotels(); } - public override void ClearAll() + public override Task ClearAll() { - base.ClearAll(); + return base.ClearAll(); } } } diff --git a/TIAMMobileApp/Services/UserDataServiceMobile.cs b/TIAMMobileApp/Services/UserDataServiceMobile.cs index dba4f1e3..9189b73a 100644 --- a/TIAMMobileApp/Services/UserDataServiceMobile.cs +++ b/TIAMMobileApp/Services/UserDataServiceMobile.cs @@ -17,7 +17,7 @@ using TIAMWebApp.Shared.Application.Utility; namespace TIAMMobileApp.Services { - public class UserDataServiceMobile(HttpClient http, AdminSignalRClient adminSignalRClient, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) + public class UserDataServiceMobile(HttpClient http, AdminSignalRClient adminSignalRClient, ISessionServiceClient sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) : UserDataServiceClientBase(http, adminSignalRClient, sessionService, secureStorageHandler, serviceProviderDataService, logWriters); } diff --git a/TIAMSharedUI/Pages/AppLaunchComponent.razor b/TIAMSharedUI/Pages/AppLaunchComponent.razor index 820d6cd3..0a00f18c 100644 --- a/TIAMSharedUI/Pages/AppLaunchComponent.razor +++ b/TIAMSharedUI/Pages/AppLaunchComponent.razor @@ -15,6 +15,7 @@ @using AyCode.Core.Helpers @using AyCode.Core.Loggers @using AyCode.Services.Loggers +@using AyCode.Utils.Extensions @using TIAM.Core.Loggers @using TIAM.Models @using TIAM.Services @@ -26,7 +27,7 @@ @inject IUserDataService UserDataService @inject IServiceProviderDataService ServiceProviderDataService @inject ISecureStorageHandler SecureStorageHandler -@inject ISessionService sessionService; +@inject ISessionServiceClient sessionService; @inject HttpClient http; @inject IComponentUpdateService ComponentUpdateService @inject AuthenticationStateProvider AuthStateProvider @@ -213,17 +214,22 @@ private async Task SignOut() { - _logger.Info("SignOut called"); + _logger.Info("Applaunch->SignOut called"); - var userBasicDetail = userDetailsStr.JsonTo(); + // var userBasicDetail = userDetailsStr.JsonTo(); - await AuthStateProvider.GetAuthenticationStateAsync(); - await SecureStorageHandler.ClearAllSecureStorageAsync(); - - sessionService.ClearAll(); - ComponentUpdateService.CallRequestRefreshAll(); + // if (userBasicDetail != null && !userBasicDetail.RefreshToken.IsNullOrWhiteSpace()) + // await UserDataService.Logout(userBasicDetail.RefreshToken); - UserDataService.Logout(userBasicDetail?.RefreshToken).Forget(); + // await SecureStorageHandler.ClearAllSecureStorageAsync(); + // await AuthStateProvider.GetAuthenticationStateAsync(); + + //sessionService.ClearAll(); + + await UserDataService.SignOut(); + + //navigationManager.NavigateTo("/"); + ComponentUpdateService.CallRequestRefreshAll(); } CultureInfo Culture diff --git a/TIAMSharedUI/Pages/Auction.razor b/TIAMSharedUI/Pages/Auction.razor index be2660c4..875752b3 100644 --- a/TIAMSharedUI/Pages/Auction.razor +++ b/TIAMSharedUI/Pages/Auction.razor @@ -1,7 +1,7 @@ @page "/auction" @using TIAMSharedUI.Pages.Components @using TIAMWebApp.Shared.Application.Interfaces; -@inject ISessionService sessionService +@inject ISessionServiceClient sessionService

Auction

diff --git a/TIAMSharedUI/Pages/Components/AuctionStep0.razor b/TIAMSharedUI/Pages/Components/AuctionStep0.razor index 587f3b21..a40c1247 100644 --- a/TIAMSharedUI/Pages/Components/AuctionStep0.razor +++ b/TIAMSharedUI/Pages/Components/AuctionStep0.razor @@ -1,7 +1,7 @@ @using TIAMWebApp.Shared.Application.Interfaces; @using TIAMWebApp.Shared.Application.Models.PageModels; @using TIAMWebApp.Shared.Application.Models; -@inject ISessionService sessionService; +@inject ISessionServiceClient sessionService; diff --git a/TIAMSharedUI/Pages/Components/AuctionStep1.razor b/TIAMSharedUI/Pages/Components/AuctionStep1.razor index cd8fb15e..599d028e 100644 --- a/TIAMSharedUI/Pages/Components/AuctionStep1.razor +++ b/TIAMSharedUI/Pages/Components/AuctionStep1.razor @@ -1,7 +1,7 @@ @using TIAMWebApp.Shared.Application.Models.PageModels; @using TIAMWebApp.Shared.Application.Models; @using TIAMWebApp.Shared.Application.Interfaces; -@inject ISessionService sessionService; +@inject ISessionServiceClient sessionService; diff --git a/TIAMSharedUI/Pages/Components/AuthComponent.razor.cs b/TIAMSharedUI/Pages/Components/AuthComponent.razor.cs index 3054a159..a4242f4f 100644 --- a/TIAMSharedUI/Pages/Components/AuthComponent.razor.cs +++ b/TIAMSharedUI/Pages/Components/AuthComponent.razor.cs @@ -18,7 +18,7 @@ namespace TIAMSharedUI.Pages.Components public required IEnumerable LogWriters { get; set; } [Inject] - public ISessionService sessionService { get; set; } + public ISessionServiceClient sessionService { get; set; } public bool IsLoggedIn = false; [Inject] public IComponentUpdateService componentUpdateService { get; set; } diff --git a/TIAMSharedUI/Pages/Components/EditComponents/DynamicEditForm.razor b/TIAMSharedUI/Pages/Components/EditComponents/DynamicEditForm.razor index c16cc6c8..5c89977b 100644 --- a/TIAMSharedUI/Pages/Components/EditComponents/DynamicEditForm.razor +++ b/TIAMSharedUI/Pages/Components/EditComponents/DynamicEditForm.razor @@ -11,7 +11,7 @@ @using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Utility @inject IEnumerable LogWriters -@inject ISessionService _sessionService +@inject ISessionServiceClient _sessionService @if (isEditing) { diff --git a/TIAMSharedUI/Pages/Components/InputWizard.razor.cs b/TIAMSharedUI/Pages/Components/InputWizard.razor.cs index 8f3f874a..87565e05 100644 --- a/TIAMSharedUI/Pages/Components/InputWizard.razor.cs +++ b/TIAMSharedUI/Pages/Components/InputWizard.razor.cs @@ -28,7 +28,7 @@ namespace TIAMSharedUI.Pages.Components IStringLocalizer localizer { get; set; } [Inject] - public ISessionService sessionService { get; set; } + public ISessionServiceClient sessionService { get; set; } public Dictionary FormSteps { get; set; } = new Dictionary(); public int CurrentStep { get; set; } = 0; diff --git a/TIAMSharedUI/Pages/Components/TransferStep0.razor b/TIAMSharedUI/Pages/Components/TransferStep0.razor index a8995e26..053393c5 100644 --- a/TIAMSharedUI/Pages/Components/TransferStep0.razor +++ b/TIAMSharedUI/Pages/Components/TransferStep0.razor @@ -1,6 +1,6 @@ @using TIAMWebApp.Shared.Application.Interfaces; @using TIAMWebApp.Shared.Application.Models; -@inject ISessionService sessionService; +@inject ISessionServiceClient sessionService; diff --git a/TIAMSharedUI/Pages/Components/TransferStep1.razor b/TIAMSharedUI/Pages/Components/TransferStep1.razor index 675b7d31..1978b025 100644 --- a/TIAMSharedUI/Pages/Components/TransferStep1.razor +++ b/TIAMSharedUI/Pages/Components/TransferStep1.razor @@ -1,6 +1,6 @@ @using TIAMWebApp.Shared.Application.Models; @using TIAMWebApp.Shared.Application.Interfaces; -@inject ISessionService sessionService; +@inject ISessionServiceClient sessionService; diff --git a/TIAMSharedUI/Pages/Formula1.razor b/TIAMSharedUI/Pages/Formula1.razor index 922047c8..1d6744d3 100644 --- a/TIAMSharedUI/Pages/Formula1.razor +++ b/TIAMSharedUI/Pages/Formula1.razor @@ -17,7 +17,7 @@ @inject IUserDataService UserDataService; @inject IJSRuntime jsRuntime; @inject ISecureStorageHandler SecureStorageHandler -@inject ISessionService sessionService; +@inject ISessionServiceClient sessionService; @inject IStringLocalizer localizer; @inject NavigationManager navManager @inject IAcLogWriterClientBase BrowserConsoleLogWriter diff --git a/TIAMSharedUI/Pages/Index.razor b/TIAMSharedUI/Pages/Index.razor index c2e934da..dedf634c 100644 --- a/TIAMSharedUI/Pages/Index.razor +++ b/TIAMSharedUI/Pages/Index.razor @@ -14,7 +14,7 @@ @inject IUserDataService UserDataService; @inject IJSRuntime jsRuntime; @inject ISecureStorageHandler SecureStorageHandler -@inject ISessionService sessionService; +@inject ISessionServiceClient sessionService; @inject IStringLocalizer localizer; @inject NavigationManager navManager @inject IAcLogWriterClientBase BrowserConsoleLogWriter diff --git a/TIAMSharedUI/Pages/Login.razor.cs b/TIAMSharedUI/Pages/Login.razor.cs index 3bef497a..5b571bcc 100644 --- a/TIAMSharedUI/Pages/Login.razor.cs +++ b/TIAMSharedUI/Pages/Login.razor.cs @@ -39,7 +39,7 @@ namespace TIAMSharedUI.Pages [Inject] public AuthenticationStateProvider AuthStateProvider { get; set; } [Inject] public IComponentUpdateService componentUpdateService { get; set; } - [Inject] public ISessionService sessionService { get; set; } + [Inject] public ISessionServiceClient sessionService { get; set; } //fill loginmodel with fake but valid data //LoginModel loginModel = new(); diff --git a/TIAMSharedUI/Pages/PublicCreateAndManageTransfer.razor b/TIAMSharedUI/Pages/PublicCreateAndManageTransfer.razor index df50869e..4afedf3a 100644 --- a/TIAMSharedUI/Pages/PublicCreateAndManageTransfer.razor +++ b/TIAMSharedUI/Pages/PublicCreateAndManageTransfer.razor @@ -16,7 +16,7 @@ @using AyCode.Core.Extensions @layout AdminLayout @inject IPopulationStructureDataProvider DataProvider -@inject ISessionService SessionService +@inject ISessionServiceClient SessionService @inject IUserDataService UserDataService @inject IEnumerable LogWriters @inject AdminSignalRClient _adminSignalRClient diff --git a/TIAMSharedUI/Pages/Settings.razor.cs b/TIAMSharedUI/Pages/Settings.razor.cs index 57b45548..3e17e29d 100644 --- a/TIAMSharedUI/Pages/Settings.razor.cs +++ b/TIAMSharedUI/Pages/Settings.razor.cs @@ -17,7 +17,7 @@ namespace TIAMSharedUI.Pages public IStringLocalizer? localizer { get; set; } [Inject] - public ISessionService SessionService { get; set; } + public ISessionServiceClient SessionService { get; set; } public string Language { get; set; } = "en-US"; diff --git a/TIAMSharedUI/Pages/User/Drivers/DriverManageCars.razor b/TIAMSharedUI/Pages/User/Drivers/DriverManageCars.razor index 93fe5222..fb41b291 100644 --- a/TIAMSharedUI/Pages/User/Drivers/DriverManageCars.razor +++ b/TIAMSharedUI/Pages/User/Drivers/DriverManageCars.razor @@ -17,7 +17,7 @@ @layout AdminLayout @inject IEnumerable LogWriters @inject IStringLocalizer Localizer -@inject ISessionService SessionService +@inject ISessionServiceClient SessionService @inject IWizardProcessor WizardProcessor @inject IUserDataService UserDataService Car list diff --git a/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor b/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor index b6c9d782..832dc177 100644 --- a/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor @@ -34,7 +34,7 @@ @inject IStringLocalizer localizer @inject IWizardProcessor wizardProcessor @inject ITransferDataService transferDataService; -@inject ISessionService sessionService; +@inject ISessionServiceClient sessionService; @inject AdminSignalRClient AdminSignalRClient; Transfers diff --git a/TIAMSharedUI/Pages/User/Hotels/HotelComponent.razor.cs b/TIAMSharedUI/Pages/User/Hotels/HotelComponent.razor.cs index 2f4e150e..a6e1ba3b 100644 --- a/TIAMSharedUI/Pages/User/Hotels/HotelComponent.razor.cs +++ b/TIAMSharedUI/Pages/User/Hotels/HotelComponent.razor.cs @@ -37,7 +37,7 @@ namespace TIAMSharedUI.Pages.User.Hotels [Inject] IEnumerable LogWriters { get; set; } - [Inject] ISessionService SessionService { get; set; } + [Inject] ISessionServiceClient SessionService { get; set; } private LoggerClient _logger; diff --git a/TIAMSharedUI/Pages/User/Hotels/ManageIncome.razor b/TIAMSharedUI/Pages/User/Hotels/ManageIncome.razor index 57aaa2f1..e7984c01 100644 --- a/TIAMSharedUI/Pages/User/Hotels/ManageIncome.razor +++ b/TIAMSharedUI/Pages/User/Hotels/ManageIncome.razor @@ -29,7 +29,7 @@ @inject IStringLocalizer localizer @inject IWizardProcessor wizardProcessor @inject ITransferDataService transferDataService -@inject ISessionService sessionService +@inject ISessionServiceClient sessionService @inject AdminSignalRClient AdminSignalRClient; Transfers diff --git a/TIAMSharedUI/Pages/User/ManageAccount.razor b/TIAMSharedUI/Pages/User/ManageAccount.razor index 6b8132f2..7e5f1769 100644 --- a/TIAMSharedUI/Pages/User/ManageAccount.razor +++ b/TIAMSharedUI/Pages/User/ManageAccount.razor @@ -33,7 +33,7 @@ @inject IStringLocalizer localizer @inject IWizardProcessor wizardProcessor @inject ITransferDataService transferDataService -@inject ISessionService sessionService +@inject ISessionServiceClient sessionService @inject AdminSignalRClient AdminSignalRClient; Transfers diff --git a/TIAMSharedUI/Pages/User/ManageMyServiceProvider.razor b/TIAMSharedUI/Pages/User/ManageMyServiceProvider.razor index b118ba27..134ac545 100644 --- a/TIAMSharedUI/Pages/User/ManageMyServiceProvider.razor +++ b/TIAMSharedUI/Pages/User/ManageMyServiceProvider.razor @@ -19,7 +19,7 @@ @inject IStringLocalizer localizer @inject IServiceProviderDataService serviceProviderDataService @inject IUserDataService userDataService -@inject ISessionService sessionService +@inject ISessionServiceClient sessionService @inject AdminSignalRClient AdminSignalRClient; Admin - Companies diff --git a/TIAMSharedUI/Pages/User/Messages.razor b/TIAMSharedUI/Pages/User/Messages.razor index 7e422a7a..671fc5b5 100644 --- a/TIAMSharedUI/Pages/User/Messages.razor +++ b/TIAMSharedUI/Pages/User/Messages.razor @@ -5,7 +5,7 @@ @using TIAMSharedUI.Pages.User.SysAdmins @using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Services -@inject ISessionService sessionService; +@inject ISessionServiceClient sessionService; @inject AdminSignalRClient AdminSignalRClient; @inject IJSRuntime jsRuntime diff --git a/TIAMSharedUI/Pages/User/MyServiceProviders.razor b/TIAMSharedUI/Pages/User/MyServiceProviders.razor index e958d92f..0deeff6f 100644 --- a/TIAMSharedUI/Pages/User/MyServiceProviders.razor +++ b/TIAMSharedUI/Pages/User/MyServiceProviders.razor @@ -19,7 +19,7 @@ @layout AdminLayout @inject IEnumerable LogWriters @inject IStringLocalizer localizer -@inject ISessionService SessionService +@inject ISessionServiceClient SessionService @inject IServiceProviderDataService ServiceProviderDataService @inject AdminSignalRClient AdminSignalRClient; User permissions diff --git a/TIAMSharedUI/Pages/User/ServiceProvider.razor b/TIAMSharedUI/Pages/User/ServiceProvider.razor index 6a1ccb3e..1eb4ab1a 100644 --- a/TIAMSharedUI/Pages/User/ServiceProvider.razor +++ b/TIAMSharedUI/Pages/User/ServiceProvider.razor @@ -16,7 +16,7 @@ @inject IStringLocalizer localizer @inject IServiceProviderDataService serviceProviderDataService @inject IUserDataService userDataService -@inject ISessionService sessionService +@inject ISessionServiceClient sessionService @inject AdminSignalRClient AdminSignalRClient; Admin - Companies diff --git a/TIAMSharedUI/Pages/User/SysAdmins/LogViewer.razor b/TIAMSharedUI/Pages/User/SysAdmins/LogViewer.razor index 694a1b89..fcb3c351 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/LogViewer.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/LogViewer.razor @@ -15,7 +15,7 @@ @layout AdminLayout @inject IEnumerable LogWriters @inject IStringLocalizer Localizer -@inject ISessionService SessionService +@inject ISessionServiceClient SessionService User permissions diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageDrivers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageDrivers.razor index 30e92d14..b33730a7 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageDrivers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageDrivers.razor @@ -13,7 +13,7 @@ @using TIAM.Core.Consts @layout AdminLayout @inject IStringLocalizer Localizer -@inject ISessionService SessionService +@inject ISessionServiceClient SessionService @using TIAMSharedUI.Shared.Components.BaseComponents @inherits UserBasePageComponent diff --git a/TIAMSharedUI/Pages/User/SysAdmins/MessageDetailGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/MessageDetailGridComponent.razor index aeaf0d62..881a4f31 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/MessageDetailGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/MessageDetailGridComponent.razor @@ -25,7 +25,7 @@ @inherits UserBasePageComponent @inject IEnumerable LogWriters @inject AdminSignalRClient AdminSignalRClient; -@inject ISessionService sessionService +@inject ISessionServiceClient sessionService @inject IComponentUpdateService ComponentUpdateService localizer @inject IWizardProcessor wizardProcessor @inject ITransferDataService transferDataService -@inject ISessionService sessionService +@inject ISessionServiceClient sessionService @inject AdminSignalRClient AdminSignalRClient; Transfers diff --git a/TIAMSharedUI/Shared/AdminLayout.razor b/TIAMSharedUI/Shared/AdminLayout.razor index d5a1d5e7..777fea80 100644 --- a/TIAMSharedUI/Shared/AdminLayout.razor +++ b/TIAMSharedUI/Shared/AdminLayout.razor @@ -10,7 +10,7 @@ @inject NavigationManager NavManager @inject IJSRuntime jsRuntime @inject ISecureStorageHandler SecureStorageHandler -@inject ISessionService sessionService +@inject ISessionServiceClient sessionService @inject IEnumerable LogWriters @inject IUserDataService userDataService @attribute [Authorize] diff --git a/TIAMSharedUI/Shared/Components/BaseComponents/BasePageComponent.cs b/TIAMSharedUI/Shared/Components/BaseComponents/BasePageComponent.cs index 27abd721..8571a12b 100644 --- a/TIAMSharedUI/Shared/Components/BaseComponents/BasePageComponent.cs +++ b/TIAMSharedUI/Shared/Components/BaseComponents/BasePageComponent.cs @@ -29,10 +29,10 @@ namespace TIAMSharedUI.Shared.Components.BaseComponents protected IStringLocalizer _localizer { get; set; } [Inject] - protected ISessionService _sessionService { get; set; } + protected ISessionServiceClient _sessionService { get; set; } private LoggerClient _logger = null!; - public BasePageComponent(NavigationManager navManager, PageHistoryState pageState, IEnumerable logWriters, IStringLocalizer localizer,ISessionService sessionService) + public BasePageComponent(NavigationManager navManager, PageHistoryState pageState, IEnumerable logWriters, IStringLocalizer localizer,ISessionServiceClient sessionService) { _navManager = navManager; _pageState = pageState; diff --git a/TIAMSharedUI/Shared/Components/Navbar.razor.cs b/TIAMSharedUI/Shared/Components/Navbar.razor.cs index e06a816f..c092ba77 100644 --- a/TIAMSharedUI/Shared/Components/Navbar.razor.cs +++ b/TIAMSharedUI/Shared/Components/Navbar.razor.cs @@ -32,7 +32,7 @@ namespace TIAMSharedUI.Shared.Components [Inject] public ISecureStorageHandler SecureStorageHandler { get; set; } - [Inject] public ISessionService sessionService { get; set; } + [Inject] public ISessionServiceClient sessionService { get; set; } [Inject] public IStringLocalizer localizer { get; set; } [Inject] public NavigationManager navigationManager { get; set; } @@ -90,21 +90,26 @@ namespace TIAMSharedUI.Shared.Components private async Task SignOut() { + _logger.Info("Navbar->SignOut called"); + //SiteViewModel.ClearAll(); - bool serverResult; - string userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails)); + //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); - } + //if (!string.IsNullOrEmpty(userDetailsStr)) + //{ + // var userBasicDetail = JsonConvert.DeserializeObject(userDetailsStr); + // serverResult = await UserDataService.Logout(userBasicDetail?.RefreshToken); + //} - await SecureStorageHandler.ClearAllSecureStorageAsync(); - var result = await AuthStateProvider.GetAuthenticationStateAsync(); + //await SecureStorageHandler.ClearAllSecureStorageAsync(); + //var result = await AuthStateProvider.GetAuthenticationStateAsync(); + + //sessionService.ClearAll(); + + await UserDataService.SignOut(); - sessionService.ClearAll(); navigationManager.NavigateTo("/"); myUser = false; } diff --git a/TIAMSharedUI/Shared/Users/AdminNavMenu.razor b/TIAMSharedUI/Shared/Users/AdminNavMenu.razor index 3079ac10..5d99b997 100644 --- a/TIAMSharedUI/Shared/Users/AdminNavMenu.razor +++ b/TIAMSharedUI/Shared/Users/AdminNavMenu.razor @@ -6,7 +6,7 @@ @using AyCode.Interfaces.StorageHandlers; @using TIAMWebApp.Shared.Application.Utility @inject ISecureStorageHandler SecureStorageHandler -@inject ISessionService SessionService +@inject ISessionServiceClient SessionService @inject IUserDataService UserDataService @inject AuthenticationStateProvider AuthStateProvider @inject NavigationManager NavigationManager @@ -234,7 +234,7 @@ await SecureStorageHandler.ClearAllSecureStorageAsync(); var result = await AuthStateProvider.GetAuthenticationStateAsync(); - SessionService.ClearAll(); + await SessionService.ClearAll(); NavigationManager.NavigateTo("/"); } } diff --git a/TIAMWebApp/Client/Program.cs b/TIAMWebApp/Client/Program.cs index 4be83f19..a5705df7 100644 --- a/TIAMWebApp/Client/Program.cs +++ b/TIAMWebApp/Client/Program.cs @@ -15,6 +15,7 @@ using System.Net; using Microsoft.AspNetCore.Components.Authorization; using TIAM.Models; using TIAM.Models.PageViewModels; +using Microsoft.Extensions.DependencyInjection; var builder = WebAssemblyHostBuilder.CreateDefault(args); @@ -22,23 +23,23 @@ var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("#app"); builder.RootComponents.Add("head::after"); builder.Services.AddLocalization(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddBlazoredLocalStorage(); -builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddBlazoredLocalStorageAsSingleton(); +builder.Services.AddSingleton(); builder.Services.AddSingleton(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); //WebSpecific -builder.Services.AddScoped(); +builder.Services.AddSingleton(); builder.Services.AddSingleton(x => new ResourceManager("TIAMWebApp.Client.Resources.MyResources", typeof(Program).Assembly)); #if DEBUG @@ -50,13 +51,13 @@ builder.Services.AddSingleton builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); -builder.Services.AddScoped(); +builder.Services.AddSingleton(); builder.Services.AddAuthorizationCore(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddSingleton(); -//builder.Services.AddScoped(); +//builder.Services.AddSingleton(); //WebSpecific end diff --git a/TIAMWebApp/Client/Services/SessionServiceWeb.cs b/TIAMWebApp/Client/Services/SessionServiceWeb.cs index 7bee0118..6ea78efd 100644 --- a/TIAMWebApp/Client/Services/SessionServiceWeb.cs +++ b/TIAMWebApp/Client/Services/SessionServiceWeb.cs @@ -1,4 +1,6 @@ -using System.Net; +using AyCode.Interfaces.StorageHandlers; +using Microsoft.AspNetCore.Components.Authorization; +using System.Net; using TIAM.Entities.Products; using TIAM.Models; using TIAMWebApp.Shared.Application.Interfaces; @@ -7,16 +9,17 @@ using TIAMWebApp.Shared.Application.Services; namespace TIAMWebApp.Client.Services { - public class SessionServiceWeb : SessionServiceClientBase + public class SessionServiceWeb(ISecureStorageHandler secureStorageHandler, AuthenticationStateProvider authStateProvider) + : SessionServiceClientBase(secureStorageHandler, authStateProvider) { public override List GetHotels() { return base.GetHotels(); } - public override void ClearAll() + public override Task ClearAll() { - base.ClearAll(); + return base.ClearAll(); } } } diff --git a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs index 6a9e8d63..fa5a974e 100644 --- a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs +++ b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs @@ -19,7 +19,7 @@ using TIAMWebApp.Shared.Application.Services; namespace TIAMWebApp.Client.Services { - public class UserDataServiceWeb(HttpClient http, AdminSignalRClient adminSignalRClient, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) + public class UserDataServiceWeb(HttpClient http, AdminSignalRClient adminSignalRClient, ISessionServiceClient sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) : UserDataServiceClientBase(http, adminSignalRClient, sessionService, secureStorageHandler, serviceProviderDataService, logWriters); } diff --git a/TIAMWebApp/Server/Services/AcWebSignalRHubWithSessionBase.cs b/TIAMWebApp/Server/Services/AcWebSignalRHubWithSessionBase.cs new file mode 100644 index 00000000..974ba5d1 --- /dev/null +++ b/TIAMWebApp/Server/Services/AcWebSignalRHubWithSessionBase.cs @@ -0,0 +1,42 @@ +using AyCode.Blazor.Components.Services; +using AyCode.Core.Loggers; +using AyCode.Services.SignalRs; +using TIAM.Database.DataLayers.Users; +using TIAM.Services; +using TIAM.Services.Server.Logins; + +namespace TIAMWebApp.Server.Services; + +public class AcWebSignalRHubWithSessionBase(IConfiguration configuration, UserDal userDal, SessionService sessionService, TLogger logger) + : AcWebSignalRHubBase(configuration, logger) where TSignalRTags : AcSignalRTags where TLogger : AcLoggerBase//Hub, IAcSignalRHubServer +{ + protected readonly UserDal UserDal = userDal; + protected SessionService SessionService = sessionService; + + public override async Task OnConnectedAsync() + { + await base.OnConnectedAsync(); + + SessionService.Sessions.TryAdd(Context.ConnectionId, new SessionItem(Context.ConnectionId, new LoginService(UserDal, Configuration))); + Logger.Info($"_sessionService.Sessions count: {SessionService.Sessions.Count}"); + + ////insert or updatde them into database. + //var CId = _context.UserIdToCId.Find(userId); + //CId.ConnectionId = connectionid; + //_context.Update(CId); + //await _context.SaveChangesAsync(); + //await base.OnConnectedAsync(); + ////await Groups.AddToGroupAsync(Context.ConnectionId, "SignalR Users"); + } + + public override async Task OnDisconnectedAsync(Exception? exception) + { + await base.OnDisconnectedAsync(exception); + + if (SessionService.Sessions.TryRemove(Context.ConnectionId, out var sessionItem)) sessionItem.LoginService.Logout(); + Logger.Info($"_sessionService.Sessions count: {SessionService.Sessions.Count}"); + + //await Groups.RemoveFromGroupAsync(Context.ConnectionId, "SignalR Users"); + } + +} \ No newline at end of file diff --git a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs index 5c654122..c9acfea4 100644 --- a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs +++ b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs @@ -1,192 +1,39 @@ -using AyCode.Core.Extensions; +using AyCode.Blazor.Models.Server.Models; +using AyCode.Core.Extensions; using AyCode.Core.Loggers; using AyCode.Services.SignalRs; -using Microsoft.AspNetCore.SignalR; using TIAM.Database.DataLayers.Admins; -using MessagePack.Resolvers; -using AyCode.Services.Server.SignalRs; using TIAM.Services; using TIAMWebApp.Server.Controllers; -using MessagePack; using TIAM.Entities.Addresses; -using System.Linq.Expressions; -using AyCode.Core.Helpers; -using Profile = TIAM.Entities.Profiles.Profile; -using Serialize.Linq.Serializers; -using System.Security.Claims; -using AyCode.Core; -using AyCode.Blazor.Components.Services; using TIAM.Database.DataLayers.Users; -using TIAM.Services.Server.Logins; -using TIAMWebApp.Shared.Application.Interfaces; +using TIAM.Entities.Profiles; +using TIAM.Core.Loggers; namespace TIAMWebApp.Server.Services; -public class DevAdminSignalRHub : Hub, IAcSignalRHubServer +public class DevAdminSignalRHub : AcWebSignalRHubWithSessionBase> { - private readonly List> _dynamicMethodCallModels = []; - private readonly TIAM.Core.Loggers.Logger _logger; - - private SessionService _sessionService; - private IConfiguration _configuration; - private readonly AdminDal _adminDal; - private readonly UserDal _userDal; - //private readonly ServiceProviderAPIController _serviceProviderApiController; - //private readonly TransferDataAPIController _transferDataApiController; - public DevAdminSignalRHub(IConfiguration configuration, AdminDal adminDal, UserDal userDal, UserAPIController userApiController, ServiceProviderAPIController serviceProviderApiController, TransferDataAPIController transferDataApiController, MessageAPIController messageApiController, ProfileAPIController profileApiController, LoggerApiController loggerApiController, SessionService sessionService, IEnumerable logWriters) + public DevAdminSignalRHub(IConfiguration configuration, AdminDal adminDal, UserDal userDal, UserAPIController userApiController, ServiceProviderAPIController serviceProviderApiController, TransferDataAPIController transferDataApiController, MessageAPIController messageApiController, ProfileAPIController profileApiController, LoggerApiController loggerApiController, SessionService sessionService, IEnumerable logWriters) + : base(configuration, userDal, sessionService, new TIAM.Core.Loggers.Logger(logWriters.ToArray())) { _adminDal = adminDal; - _userDal = userDal; - _configuration = configuration; - - //_serviceProviderApiController = serviceProviderApiController; - //_transferDataApiController = transferDataApiController; - - _logger = new(logWriters.ToArray()); - _sessionService = sessionService; - - _dynamicMethodCallModels.Add(new DynamicMethodCallModel(userApiController)); - _dynamicMethodCallModels.Add(new DynamicMethodCallModel(serviceProviderApiController)); - _dynamicMethodCallModels.Add(new DynamicMethodCallModel(transferDataApiController)); - _dynamicMethodCallModels.Add(new DynamicMethodCallModel(messageApiController)); - _dynamicMethodCallModels.Add(new DynamicMethodCallModel(profileApiController)); - _dynamicMethodCallModels.Add(new DynamicMethodCallModel(loggerApiController)); + DynamicMethodCallModels.Add(new DynamicMethodCallModel(userApiController)); + DynamicMethodCallModels.Add(new DynamicMethodCallModel(serviceProviderApiController)); + DynamicMethodCallModels.Add(new DynamicMethodCallModel(transferDataApiController)); + DynamicMethodCallModels.Add(new DynamicMethodCallModel(messageApiController)); + DynamicMethodCallModels.Add(new DynamicMethodCallModel(profileApiController)); + DynamicMethodCallModels.Add(new DynamicMethodCallModel(loggerApiController)); //_dynamicMethodCallModels.Add(new DynamicMethodCallModel(typeof(AdminDal))); - } - // https://docs.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-3.1#strongly-typed-hubs - public override async Task OnConnectedAsync() + public override Task OnReceiveMessage(int messageTag, byte[]? message, int? requestId) { - _logger.Debug($"Server OnConnectedAsync; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}"); - - LogContextUserNameAndId(); - - _sessionService.Sessions.TryAdd(Context.ConnectionId, new SessionItem(Context.ConnectionId, new LoginService(_userDal, _configuration))); - _logger.Info($"_sessionService.Sessions count: {_sessionService.Sessions.Count}"); - - ////insert or updatde them into database. - //var CId = _context.UserIdToCId.Find(userId); - //CId.ConnectionId = connectionid; - //_context.Update(CId); - //await _context.SaveChangesAsync(); - //await base.OnConnectedAsync(); - ////await Groups.AddToGroupAsync(Context.ConnectionId, "SignalR Users"); - - await base.OnConnectedAsync(); - - //Clients.Caller.ConnectionId = Context.ConnectionId; - //Clients.Caller.UserIdentifier = Context.UserIdentifier; - } - - public override async Task OnDisconnectedAsync(Exception? exception) - { - var logText = $"Server OnDisconnectedAsync; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier};"; - - if (exception == null) _logger.Debug(logText); - else _logger.Error(logText, exception); - - LogContextUserNameAndId(); - - if (_sessionService.Sessions.TryRemove(Context.ConnectionId, out var sessionItem)) sessionItem.LoginService.Logout(); - _logger.Info($"_sessionService.Sessions count: {_sessionService.Sessions.Count}"); - - //await Groups.RemoveFromGroupAsync(Context.ConnectionId, "SignalR Users"); - await base.OnDisconnectedAsync(exception); - } - - public async Task OnReceiveMessage(int messageTag, byte[]? message, int? requestId) - { - var tagName = ConstHelper.NameByValue(messageTag); - var logText = $"Server OnReceiveMessage; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; {tagName}"; - - if (message is { Length: 0 }) _logger.Warning($"message.Length == 0! {logText}"); - else _logger.Info($"[{message?.Length:N0}b] {logText}"); - - try + return ProcessOnReceiveMessage(messageTag, message, requestId, async tagName => { - if (AcDomain.IsDeveloperVersion) LogContextUserNameAndId(); - - foreach (var methodsByDeclaringObject in _dynamicMethodCallModels) - { - if (!methodsByDeclaringObject.MethodsByMessageTag.TryGetValue(messageTag, out var methodInfoModel)) continue; - - object[]? paramValues = null; - - logText = $"Found dynamic method for the tag! method: {methodsByDeclaringObject.InstanceObject.GetType().Name}.{methodInfoModel.MethodInfo.Name}"; - - if (methodInfoModel.ParamInfos is { Length: > 0 }) - { - _logger.Debug($"{logText}({string.Join(", ", methodInfoModel.ParamInfos.Select(x => x.Name))}); {tagName}"); - - paramValues = new object[methodInfoModel.ParamInfos.Length]; - - var firstParamType = methodInfoModel.ParamInfos[0].ParameterType; - if (methodInfoModel.ParamInfos.Length > 1 || firstParamType == typeof(string) || firstParamType.IsEnum || firstParamType.IsValueType || firstParamType == typeof(DateTime)) - { - var msg = message!.MessagePackTo>(); - - for (var i = 0; i < msg.PostData.Ids.Count; i++) - { - //var obj = (string)msg.PostData.Ids[i]; - //if (msg.PostData.Ids[i] is Guid id) - //{ - // if (id.IsNullOrEmpty()) throw new NullReferenceException($"PostData.Id.IsNullOrEmpty(); Ids: {msg.PostData.Ids}"); - // paramValues[i] = id; - //} - //else if (Guid.TryParse(obj, out id)) - //{ - // if (id.IsNullOrEmpty()) throw new NullReferenceException($"PostData.Id.IsNullOrEmpty(); Ids: {msg.PostData.Ids}"); - // paramValues[i] = id; - //} - //else if (Enum.TryParse(methodInfoModel.ParameterType, obj, out var enumObj)) - //{ - // paramValues[i] = enumObj; - //} - //else paramValues[i] = Convert.ChangeType(obj, methodInfoModel.ParameterType); - - var obj = msg.PostData.Ids[i]; - //var config = new MapperConfiguration(cfg => - //{ - // cfg.CreateMap(obj.GetType(), methodInfoModel.ParameterType); - //}); - - //var mapper = new Mapper(config); - //paramValues[i] = mapper.Map(obj, methodInfoModel.ParameterType); - - //paramValues[i] = obj; - - var a = Array.CreateInstance(methodInfoModel.ParamInfos[i].ParameterType, 1); - - if (methodInfoModel.ParamInfos[i].ParameterType == typeof(Expression)) - { - var serializer = new ExpressionSerializer(new JsonSerializer()); - paramValues[i] = serializer.DeserializeText((string)(obj.JsonTo(a.GetType()) as Array)?.GetValue(0)!); - } - else paramValues[i] = (obj.JsonTo(a.GetType()) as Array)?.GetValue(0)!; - - } - } - else paramValues[0] = message!.MessagePackTo>(MessagePackSerializerOptions.Standard).PostDataJson.JsonTo(firstParamType)!; - } - else _logger.Debug($"{logText}(); {tagName}"); - - var responseDataJson = new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, methodInfoModel.MethodInfo.InvokeMethod(methodsByDeclaringObject.InstanceObject, paramValues)); - var responseDataJsonKiloBytes = System.Text.Encoding.Unicode.GetByteCount(responseDataJson.ResponseData!) / 1024; - - //File.WriteAllText(Path.Combine("h:", $"{requestId}.json"), responseDataJson.ResponseData); - - _logger.Info($"[{responseDataJsonKiloBytes}kb] responseData serialized to json"); - await ResponseToCaller(messageTag, responseDataJson, requestId); - - return; - } - - _logger.Debug($"Not found dynamic method for the tag! {tagName}"); - switch (messageTag) { case SignalRTags.GetAddress: @@ -257,54 +104,9 @@ public class DevAdminSignalRHub : Hub, IAcSignalRHubServe // return; default: - _logger.Error($"Server OnReceiveMessage; messageTag not found! {tagName}"); + Logger.Error($"Server OnReceiveMessage; messageTag not found! {tagName}"); break; } - } - catch (Exception ex) - { - _logger.Error($"Server OnReceiveMessage; {ex.Message}; {tagName}", ex); - } - - await ResponseToCaller(messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Error), requestId); + }); } - - protected async Task ResponseToCaller(int messageTag, ISignalRMessage message, int? requestId) - => await SendMessageToClient(Clients.Caller, messageTag, message, requestId); - - public async Task SendMessageToUserId(string userId, int messageTag, ISignalRMessage message, int? requestId) - => await SendMessageToClient(Clients.User(userId), messageTag, message, requestId); - - public async Task SendMessageToConnectionId(string connectionId, int messageTag, ISignalRMessage message, int? requestId) - => await SendMessageToClient(Clients.Client(Context.ConnectionId), messageTag, message, requestId); - - protected async Task SendMessageToClient(ISignalRHubItemServer sendTo, int messageTag, ISignalRMessage message, int? requestId = null) - { - var responseDataMessagePack = message.ToMessagePack(ContractlessStandardResolver.Options); - _logger.Info($"[{(responseDataMessagePack.Length/1024)}kb] Server sending responseDataMessagePack to client; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; {ConstHelper.NameByValue(messageTag)}"); - - await sendTo.OnReceiveMessage(messageTag, responseDataMessagePack, requestId); - } - - public async Task SendMessageToGroup(string groupId, int messageTag, string message) - { - //await Clients.Group(groupId).Post("", messageTag, message); - } - - //[Conditional("DEBUG")] - private void LogContextUserNameAndId() - { - string? userName = null; - var userId = Guid.Empty; - - if (Context.User != null) - { - userName = Context.User.Identity?.Name; - Guid.TryParse(Context.User.FindFirstValue(ClaimTypes.NameIdentifier), out userId); - } - - if (AcDomain.IsDeveloperVersion) _logger.WarningConditional($"SignalR.Context; userName: {userName}; userId: {userId}"); - else _logger.Debug($"SignalR.Context; userName: {userName}; userId: {userId}"); - } - } \ No newline at end of file diff --git a/TIAMWebApp/Server/Services/DynamicMethodCallModel.cs b/TIAMWebApp/Server/Services/DynamicMethodCallModel.cs deleted file mode 100644 index 67e5e11b..00000000 --- a/TIAMWebApp/Server/Services/DynamicMethodCallModel.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Concurrent; -using System.Reflection; -using AyCode.Services.SignalRs; - -namespace TIAMWebApp.Server.Services; - -public class DynamicMethodCallModel where TAttribute : TagAttribute -{ - public object InstanceObject { get; init; } - public ConcurrentDictionary> MethodsByMessageTag { get; init; } = new(); - - - public DynamicMethodCallModel(Type instanceObjectType) : this(instanceObjectType, null!) - { - } - - public DynamicMethodCallModel(Type instanceObjectType, params object[] constructorParams) : this(Activator.CreateInstance(instanceObjectType, constructorParams)!) - { - } - - public DynamicMethodCallModel(object instanceObject) - { - InstanceObject = instanceObject; - - foreach (var methodInfo in instanceObject.GetType().GetMethods()) - { - if (methodInfo.GetCustomAttribute(typeof(TAttribute)) is not TAttribute attribute) continue; - - if (MethodsByMessageTag.ContainsKey(attribute.MessageTag)) - throw new Exception($"Multiple SignaRMessageTag! messageTag: {attribute.MessageTag}; methodName: {methodInfo.Name}"); - - MethodsByMessageTag[attribute.MessageTag] = new MethodInfoModel(attribute, methodInfo!); - } - } -} \ No newline at end of file diff --git a/TIAMWebApp/Server/Services/ExtensionMethods.cs b/TIAMWebApp/Server/Services/ExtensionMethods.cs deleted file mode 100644 index 82746e71..00000000 --- a/TIAMWebApp/Server/Services/ExtensionMethods.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -namespace TIAMWebApp.Server.Services; - -public static class ExtensionMethods -{ - public static object? InvokeMethod(this MethodInfo methodInfo, object obj, params object[]? parameters) - { - if (methodInfo.GetCustomAttribute(typeof(AsyncStateMachineAttribute)) is AsyncStateMachineAttribute isAsyncTask) - { - dynamic awaitable = methodInfo.Invoke(obj, parameters)!; - return awaitable.GetAwaiter().GetResult(); - } - - return methodInfo.Invoke(obj, parameters); - } -} \ No newline at end of file diff --git a/TIAMWebApp/Server/Services/MethodInfoModel.cs b/TIAMWebApp/Server/Services/MethodInfoModel.cs deleted file mode 100644 index decf6fd3..00000000 --- a/TIAMWebApp/Server/Services/MethodInfoModel.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Reflection; -using AyCode.Services.SignalRs; - -namespace TIAMWebApp.Server.Services; - -public class MethodInfoModel where TAttribute : TagAttribute -{ - public ParameterInfo[]? ParamInfos { get; init; } = null; - public TAttribute Attribute { get; init; } - public MethodInfo MethodInfo { get; init; } - - public MethodInfoModel(TAttribute attribute, MethodInfo methodInfo) - { - Attribute = attribute; - MethodInfo = methodInfo; - - var parameters = methodInfo.GetParameters(); - - //if (parameters.Length > 1) - // throw new Exception("MethodInfoModel; parameters.Length > 1"); - - ParamInfos = parameters; - } -} \ No newline at end of file diff --git a/TIAMWebApp/Shared/Interfaces/IAcWebSessionServiceClient.cs b/TIAMWebApp/Shared/Interfaces/IAcWebSessionServiceClient.cs new file mode 100644 index 00000000..b6f132b8 --- /dev/null +++ b/TIAMWebApp/Shared/Interfaces/IAcWebSessionServiceClient.cs @@ -0,0 +1,20 @@ +using System.Net; +using TIAM.Models; +using TIAMWebApp.Shared.Application.Models; + +namespace TIAMWebApp.Shared.Application.Interfaces; + +public interface IAcWebSessionServiceClient +{ + public string? SessionId { get; set; } + + public SiteViewModel SiteViewModel { get; } + + public UserSessionModel? User { get; set; } + public IPAddress? IpAddress { get; set; } + public bool IsAuthenticated { get; set; } + public bool IsDevAdmin { get; set; } + public bool IsSysAdmin { get; set; } + + public Task ClearAll(); +} \ No newline at end of file diff --git a/TIAMWebApp/Shared/Interfaces/ISessionService.cs b/TIAMWebApp/Shared/Interfaces/ISessionService.cs deleted file mode 100644 index 0bc60780..00000000 --- a/TIAMWebApp/Shared/Interfaces/ISessionService.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Net; -using TIAM.Entities.Products; -using TIAM.Models; -using TIAMWebApp.Shared.Application.Models; - -namespace TIAMWebApp.Shared.Application.Interfaces -{ - public interface ISessionService - { - public string? SessionId { get; set; } - - public SiteViewModel SiteViewModel { get; } - - public UserSessionModel? User { get; set; } - public IPAddress? IPAddress { get; set; } - public bool IsAuthenticated { get; set; } - public bool HasCompany { get; set; } - public bool IsDriver { get; set; } - public bool IsDevAdmin { get; set; } - public bool IsSysAdmin { get; set; } - public List GetHotels(); - public Guid DriverPersmissionId { get; set; } - public void ClearAll(); - } -} diff --git a/TIAMWebApp/Shared/Interfaces/ISessionServiceClient.cs b/TIAMWebApp/Shared/Interfaces/ISessionServiceClient.cs new file mode 100644 index 00000000..ef70f17e --- /dev/null +++ b/TIAMWebApp/Shared/Interfaces/ISessionServiceClient.cs @@ -0,0 +1,13 @@ +using TIAM.Entities.Products; + +namespace TIAMWebApp.Shared.Application.Interfaces +{ + public interface ISessionServiceClient : IAcWebSessionServiceClient + { + public bool HasCompany { get; set; } + public bool IsDriver { get; set; } + + public List GetHotels(); + public Guid DriverPersmissionId { get; set; } + } +} diff --git a/TIAMWebApp/Shared/Interfaces/IUserDataService.cs b/TIAMWebApp/Shared/Interfaces/IUserDataService.cs index 72cbd3dd..be066281 100644 --- a/TIAMWebApp/Shared/Interfaces/IUserDataService.cs +++ b/TIAMWebApp/Shared/Interfaces/IUserDataService.cs @@ -5,7 +5,8 @@ using TIAMWebApp.Shared.Application.Models.PageModels; namespace TIAMWebApp.Shared.Application.Interfaces { public interface IUserDataService - { + { + public Task SignOut(); public Task IsLoggedInAsync(Guid id); public Task AuthenticateUser(LoginModel loginModel); diff --git a/TIAMWebApp/Shared/Services/AcWebSessionServiceClientBase.cs b/TIAMWebApp/Shared/Services/AcWebSessionServiceClientBase.cs new file mode 100644 index 00000000..7a0f02a2 --- /dev/null +++ b/TIAMWebApp/Shared/Services/AcWebSessionServiceClientBase.cs @@ -0,0 +1,36 @@ +using System.Net; +using AyCode.Interfaces.StorageHandlers; +using Microsoft.AspNetCore.Components.Authorization; +using TIAM.Models; +using TIAMWebApp.Shared.Application.Interfaces; +using TIAMWebApp.Shared.Application.Models; + +namespace TIAMWebApp.Shared.Application.Services; + +public abstract class AcWebSessionServiceClientBase(ISecureStorageHandler secureStorageHandler, AuthenticationStateProvider authStateProvider) : IAcWebSessionServiceClient +{ + public string? SessionId { get; set; } + public SiteViewModel SiteViewModel { get; } = new(); + + public UserSessionModel? User { get; set; } + public IPAddress? IpAddress { get; set; } + public bool IsAuthenticated { get; set; } = false; + public bool IsDevAdmin { get; set; } = false; + public bool IsSysAdmin { get; set; } = false; + + + public virtual async Task ClearAll() + { + await secureStorageHandler.ClearAllSecureStorageAsync(); + await authStateProvider.GetAuthenticationStateAsync(); + + SessionId = string.Empty; + User = null; + IpAddress = null; + IsAuthenticated = false; + IsDevAdmin = false; + IsSysAdmin = false; + + SiteViewModel.ClearAll(); + } +} \ No newline at end of file diff --git a/TIAMWebApp/Shared/Services/SessionServiceClientBase.cs b/TIAMWebApp/Shared/Services/SessionServiceClientBase.cs index d5014e7f..a9a681f6 100644 --- a/TIAMWebApp/Shared/Services/SessionServiceClientBase.cs +++ b/TIAMWebApp/Shared/Services/SessionServiceClientBase.cs @@ -1,24 +1,20 @@ -using System.Net; +using AyCode.Core.Extensions; +using AyCode.Interfaces.StorageHandlers; +using AyCode.Utils.Extensions; +using Microsoft.AspNetCore.Components.Authorization; +using Newtonsoft.Json; using TIAM.Core.Enums; using TIAM.Entities.Products; -using TIAM.Models; using TIAMWebApp.Shared.Application.Interfaces; -using TIAMWebApp.Shared.Application.Models; +using TIAMWebApp.Shared.Application.Models.ClientSide; namespace TIAMWebApp.Shared.Application.Services; -public abstract class SessionServiceClientBase : ISessionService +public abstract class SessionServiceClientBase(ISecureStorageHandler secureStorageHandler, AuthenticationStateProvider authStateProvider) + : AcWebSessionServiceClientBase(secureStorageHandler, authStateProvider), ISessionServiceClient { - public string? SessionId { get; set; } - public SiteViewModel SiteViewModel { get; } = new(); - - public UserSessionModel? User { get; set; } - public IPAddress? IPAddress { get; set; } - public bool IsAuthenticated { get; set; } = false; public bool HasCompany { get; set; } = false; public bool IsDriver { get; set; } = false; - public bool IsDevAdmin { get; set; } = false; - public bool IsSysAdmin { get; set; } = false; public Guid DriverPersmissionId { get; set; } = Guid.Empty; @@ -27,18 +23,12 @@ public abstract class SessionServiceClientBase : ISessionService return User != null ? User.UserModelDto.Products.Where(x => x.ProductType == ProductType.Hotel).ToList() : []; } - public virtual void ClearAll() + public override async Task ClearAll() { - SessionId = string.Empty; - User = null; - IPAddress = null; - IsAuthenticated = false; HasCompany = false; IsDriver = false; - IsDevAdmin = false; - IsSysAdmin = false; DriverPersmissionId = Guid.Empty; - SiteViewModel.ClearAll(); + await base.ClearAll(); } } \ No newline at end of file diff --git a/TIAMWebApp/Shared/Services/UserDataServiceClientBase.cs b/TIAMWebApp/Shared/Services/UserDataServiceClientBase.cs index 715d576d..3099cec9 100644 --- a/TIAMWebApp/Shared/Services/UserDataServiceClientBase.cs +++ b/TIAMWebApp/Shared/Services/UserDataServiceClientBase.cs @@ -4,6 +4,7 @@ using System.Text.Json; using AyCode.Core.Extensions; using AyCode.Interfaces.StorageHandlers; using AyCode.Services.Loggers; +using AyCode.Utils.Extensions; using Microsoft.IdentityModel.Tokens; using Newtonsoft.Json; using TIAM.Models.Dtos.Users; @@ -22,12 +23,12 @@ public abstract class UserDataServiceClientBase : IUserDataService protected readonly LoggerClient Logger; protected readonly AdminSignalRClient AdminSignalRClient; - protected readonly ISessionService SessionService; + protected readonly ISessionServiceClient SessionService; protected readonly ISecureStorageHandler SecureStorageHandler; protected readonly IServiceProviderDataService ServiceProviderDataService; - protected UserDataServiceClientBase(HttpClient http, AdminSignalRClient adminSignalRClient, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) + protected UserDataServiceClientBase(HttpClient http, AdminSignalRClient adminSignalRClient, ISessionServiceClient sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) { Http = http; AdminSignalRClient = adminSignalRClient; @@ -40,6 +41,21 @@ public abstract class UserDataServiceClientBase : IUserDataService } + public virtual async Task SignOut() + { + var userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails)); + + if (!string.IsNullOrEmpty(userDetailsStr)) + { + var userBasicDetail = JsonConvert.DeserializeObject(userDetailsStr); + + if (userBasicDetail != null && !userBasicDetail.RefreshToken.IsNullOrWhiteSpace()) + await Logout(userBasicDetail.RefreshToken); + } + + await SessionService.ClearAll(); + } + public async Task IsLoggedInAsync(Guid id) { //api call to get user diff --git a/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj b/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj index 5d2426bb..6a544f7b 100644 --- a/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj +++ b/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj @@ -63,5 +63,8 @@ ..\..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Services.dll + + ..\..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Utils.dll + diff --git a/Tiam.Services.Client.Tests/Tiam.Services.Client.Tests.csproj b/Tiam.Services.Client.Tests/Tiam.Services.Client.Tests.csproj index 3717880d..3b49387a 100644 --- a/Tiam.Services.Client.Tests/Tiam.Services.Client.Tests.csproj +++ b/Tiam.Services.Client.Tests/Tiam.Services.Client.Tests.csproj @@ -15,8 +15,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - - + +