Refactoring Login, SignalR, etc...
This commit is contained in:
parent
f6bc09c661
commit
da24b45f5d
|
|
@ -30,8 +30,8 @@
|
|||
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.6.1" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.6.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.6.2" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.6.2" />
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.2">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@
|
|||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="8.0.10" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.6.1" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.6.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.6.2" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.6.2" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -47,31 +47,31 @@ namespace TIAMMobileApp
|
|||
|
||||
builder.Services.AddDevExpressBlazor(configure => configure.BootstrapVersion = BootstrapVersion.v5);
|
||||
|
||||
builder.Services.AddScoped<IWeatherForecastService, WeatherForecastService>();
|
||||
builder.Services.AddScoped<ITransferDataService, TransferDataService>();
|
||||
builder.Services.AddSingleton<IWeatherForecastService, WeatherForecastService>();
|
||||
builder.Services.AddSingleton<ITransferDataService, TransferDataService>();
|
||||
|
||||
builder.Services.AddSingleton<IAcLogWriterClientBase, SignaRClientLogItemWriter>();
|
||||
|
||||
builder.Services.AddScoped<IPopulationStructureDataProvider, PopulationStructureDataProvider>();
|
||||
builder.Services.AddScoped<ISupplierService, SupplierService>();
|
||||
builder.Services.AddScoped<IUserDataService, UserDataServiceMobile>();
|
||||
builder.Services.AddScoped<ISecureStorageHandler, SecureStorageHandler>();
|
||||
builder.Services.AddSingleton<ISessionService, SessionServiceMobile>();
|
||||
builder.Services.AddSingleton<IPopulationStructureDataProvider, PopulationStructureDataProvider>();
|
||||
builder.Services.AddSingleton<ISupplierService, SupplierService>();
|
||||
builder.Services.AddSingleton<IUserDataService, UserDataServiceMobile>();
|
||||
builder.Services.AddSingleton<ISecureStorageHandler, SecureStorageHandler>();
|
||||
builder.Services.AddSingleton<ISessionServiceClient, SessionServiceMobile>();
|
||||
builder.Services.AddSingleton<IComponentUpdateService, ComponentUpdateServiceMobile>();
|
||||
builder.Services.AddScoped<IServiceProviderDataService, ServiceProviderDataService>();
|
||||
builder.Services.AddScoped<IClientNoticeSenderService, ClientNoticeSenderService>();
|
||||
builder.Services.AddScoped<IWizardProcessor, WizardProcessor>();
|
||||
builder.Services.AddScoped<IImageDataService, ImageDataService>();
|
||||
builder.Services.AddSingleton<IServiceProviderDataService, ServiceProviderDataService>();
|
||||
builder.Services.AddSingleton<IClientNoticeSenderService, ClientNoticeSenderService>();
|
||||
builder.Services.AddSingleton<IWizardProcessor, WizardProcessor>();
|
||||
builder.Services.AddSingleton<IImageDataService, ImageDataService>();
|
||||
builder.Services.AddSingleton(x => new ResourceManager("TIAMWebApp.Shared.Application.Resources", typeof(Main).Assembly));
|
||||
|
||||
builder.Services.AddSingleton<AdminSignalRClient>();
|
||||
|
||||
builder.Services.AddSingleton<SignalRService>();
|
||||
builder.Services.AddSingleton<SumupService>();
|
||||
builder.Services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();
|
||||
builder.Services.AddScoped<ExchangeRateService>();
|
||||
builder.Services.AddScoped<SmartyStreetsService>();
|
||||
builder.Services.AddScoped<GooglePlacesService>();
|
||||
builder.Services.AddSingleton<AuthenticationStateProvider, CustomAuthStateProvider>();
|
||||
builder.Services.AddSingleton<ExchangeRateService>();
|
||||
builder.Services.AddSingleton<SmartyStreetsService>();
|
||||
builder.Services.AddSingleton<GooglePlacesService>();
|
||||
builder.Services.AddSingleton<PageHistoryState>();
|
||||
builder.Services.AddAuthorizationCore();
|
||||
builder.Services.Configure<AnimationOptions>(Guid.NewGuid().ToString(), c => { });
|
||||
|
|
|
|||
|
|
@ -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<Product> GetHotels()
|
||||
{
|
||||
return base.GetHotels();
|
||||
}
|
||||
|
||||
public override void ClearAll()
|
||||
public override Task ClearAll()
|
||||
{
|
||||
base.ClearAll();
|
||||
return base.ClearAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<IAcLogWriterClientBase> logWriters)
|
||||
public class UserDataServiceMobile(HttpClient http, AdminSignalRClient adminSignalRClient, ISessionServiceClient sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable<IAcLogWriterClientBase> logWriters)
|
||||
: UserDataServiceClientBase(http, adminSignalRClient, sessionService, secureStorageHandler, serviceProviderDataService, logWriters);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<UserBasicDetails>();
|
||||
// var userBasicDetail = userDetailsStr.JsonTo<UserBasicDetails>();
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
@page "/auction"
|
||||
@using TIAMSharedUI.Pages.Components
|
||||
@using TIAMWebApp.Shared.Application.Interfaces;
|
||||
@inject ISessionService sessionService
|
||||
@inject ISessionServiceClient sessionService
|
||||
|
||||
<div class="container-fluid">
|
||||
<h1>Auction</h1>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
<EditForm Model="@auctionBidModel" OnValidSubmit="GoToNextStep">
|
||||
<DataAnnotationsValidator />
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
<EditForm Model="@auctionBidModel" OnValidSubmit="GoToNextStep">
|
||||
<DataAnnotationsValidator />
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ namespace TIAMSharedUI.Pages.Components
|
|||
public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
|
||||
|
||||
[Inject]
|
||||
public ISessionService sessionService { get; set; }
|
||||
public ISessionServiceClient sessionService { get; set; }
|
||||
public bool IsLoggedIn = false;
|
||||
[Inject]
|
||||
public IComponentUpdateService componentUpdateService { get; set; }
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
@using TIAMWebApp.Shared.Application.Interfaces
|
||||
@using TIAMWebApp.Shared.Application.Utility
|
||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||
@inject ISessionService _sessionService
|
||||
@inject ISessionServiceClient _sessionService
|
||||
|
||||
@if (isEditing)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ namespace TIAMSharedUI.Pages.Components
|
|||
IStringLocalizer<TIAMResources> localizer { get; set; }
|
||||
|
||||
[Inject]
|
||||
public ISessionService sessionService { get; set; }
|
||||
public ISessionServiceClient sessionService { get; set; }
|
||||
|
||||
public Dictionary<int, Guid> FormSteps { get; set; } = new Dictionary<int, Guid>();
|
||||
public int CurrentStep { get; set; } = 0;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
@using TIAMWebApp.Shared.Application.Interfaces;
|
||||
@using TIAMWebApp.Shared.Application.Models;
|
||||
@inject ISessionService sessionService;
|
||||
@inject ISessionServiceClient sessionService;
|
||||
|
||||
<EditForm Model="@auctionBidModel" OnValidSubmit="GoToNextStep">
|
||||
<DataAnnotationsValidator />
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
@using TIAMWebApp.Shared.Application.Models;
|
||||
@using TIAMWebApp.Shared.Application.Interfaces;
|
||||
@inject ISessionService sessionService;
|
||||
@inject ISessionServiceClient sessionService;
|
||||
|
||||
<EditForm Model="@auctionBidModel" OnValidSubmit="GoToNextStep">
|
||||
<DataAnnotationsValidator />
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
@inject IUserDataService UserDataService;
|
||||
@inject IJSRuntime jsRuntime;
|
||||
@inject ISecureStorageHandler SecureStorageHandler
|
||||
@inject ISessionService sessionService;
|
||||
@inject ISessionServiceClient sessionService;
|
||||
@inject IStringLocalizer<MyResources> localizer;
|
||||
@inject NavigationManager navManager
|
||||
@inject IAcLogWriterClientBase BrowserConsoleLogWriter
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
@inject IUserDataService UserDataService;
|
||||
@inject IJSRuntime jsRuntime;
|
||||
@inject ISecureStorageHandler SecureStorageHandler
|
||||
@inject ISessionService sessionService;
|
||||
@inject ISessionServiceClient sessionService;
|
||||
@inject IStringLocalizer<TIAMResources> localizer;
|
||||
@inject NavigationManager navManager
|
||||
@inject IAcLogWriterClientBase BrowserConsoleLogWriter
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
@using AyCode.Core.Extensions
|
||||
@layout AdminLayout
|
||||
@inject IPopulationStructureDataProvider DataProvider
|
||||
@inject ISessionService SessionService
|
||||
@inject ISessionServiceClient SessionService
|
||||
@inject IUserDataService UserDataService
|
||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||
@inject AdminSignalRClient _adminSignalRClient
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ namespace TIAMSharedUI.Pages
|
|||
public IStringLocalizer<MyResources>? localizer { get; set; }
|
||||
|
||||
[Inject]
|
||||
public ISessionService SessionService { get; set; }
|
||||
public ISessionServiceClient SessionService { get; set; }
|
||||
|
||||
public string Language { get; set; } = "en-US";
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
@layout AdminLayout
|
||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||
@inject IStringLocalizer<TIAMResources> Localizer
|
||||
@inject ISessionService SessionService
|
||||
@inject ISessionServiceClient SessionService
|
||||
@inject IWizardProcessor WizardProcessor
|
||||
@inject IUserDataService UserDataService
|
||||
<PageTitle>Car list</PageTitle>
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
@inject IStringLocalizer<TIAMResources> localizer
|
||||
@inject IWizardProcessor wizardProcessor
|
||||
@inject ITransferDataService transferDataService;
|
||||
@inject ISessionService sessionService;
|
||||
@inject ISessionServiceClient sessionService;
|
||||
@inject AdminSignalRClient AdminSignalRClient;
|
||||
<PageTitle>Transfers</PageTitle>
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ namespace TIAMSharedUI.Pages.User.Hotels
|
|||
|
||||
[Inject] IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
|
||||
|
||||
[Inject] ISessionService SessionService { get; set; }
|
||||
[Inject] ISessionServiceClient SessionService { get; set; }
|
||||
|
||||
private LoggerClient<HotelComponent> _logger;
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
@inject IStringLocalizer<TIAMResources> localizer
|
||||
@inject IWizardProcessor wizardProcessor
|
||||
@inject ITransferDataService transferDataService
|
||||
@inject ISessionService sessionService
|
||||
@inject ISessionServiceClient sessionService
|
||||
@inject AdminSignalRClient AdminSignalRClient;
|
||||
<PageTitle>Transfers</PageTitle>
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
@inject IStringLocalizer<TIAMResources> localizer
|
||||
@inject IWizardProcessor wizardProcessor
|
||||
@inject ITransferDataService transferDataService
|
||||
@inject ISessionService sessionService
|
||||
@inject ISessionServiceClient sessionService
|
||||
@inject AdminSignalRClient AdminSignalRClient;
|
||||
<PageTitle>Transfers</PageTitle>
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
@inject IStringLocalizer<TIAMResources> localizer
|
||||
@inject IServiceProviderDataService serviceProviderDataService
|
||||
@inject IUserDataService userDataService
|
||||
@inject ISessionService sessionService
|
||||
@inject ISessionServiceClient sessionService
|
||||
@inject AdminSignalRClient AdminSignalRClient;
|
||||
<PageTitle>Admin - Companies</PageTitle>
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
@layout AdminLayout
|
||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||
@inject IStringLocalizer<TIAMResources> localizer
|
||||
@inject ISessionService SessionService
|
||||
@inject ISessionServiceClient SessionService
|
||||
@inject IServiceProviderDataService ServiceProviderDataService
|
||||
@inject AdminSignalRClient AdminSignalRClient;
|
||||
<PageTitle>User permissions</PageTitle>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
@inject IStringLocalizer<TIAMResources> localizer
|
||||
@inject IServiceProviderDataService serviceProviderDataService
|
||||
@inject IUserDataService userDataService
|
||||
@inject ISessionService sessionService
|
||||
@inject ISessionServiceClient sessionService
|
||||
@inject AdminSignalRClient AdminSignalRClient;
|
||||
<PageTitle>Admin - Companies</PageTitle>
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
@layout AdminLayout
|
||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||
@inject IStringLocalizer<TIAMResources> Localizer
|
||||
@inject ISessionService SessionService
|
||||
@inject ISessionServiceClient SessionService
|
||||
|
||||
<PageTitle>User permissions</PageTitle>
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
@using TIAM.Core.Consts
|
||||
@layout AdminLayout
|
||||
@inject IStringLocalizer<TIAMResources> Localizer
|
||||
@inject ISessionService SessionService
|
||||
@inject ISessionServiceClient SessionService
|
||||
@using TIAMSharedUI.Shared.Components.BaseComponents
|
||||
@inherits UserBasePageComponent
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
@inherits UserBasePageComponent
|
||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||
@inject AdminSignalRClient AdminSignalRClient;
|
||||
@inject ISessionService sessionService
|
||||
@inject ISessionServiceClient sessionService
|
||||
@inject IComponentUpdateService ComponentUpdateService
|
||||
|
||||
<MessageDetailGrid CssClass="my-grid" @ref="_messageGrid"
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
@inject IStringLocalizer<TIAMResources> localizer
|
||||
@inject IWizardProcessor wizardProcessor
|
||||
@inject ITransferDataService transferDataService
|
||||
@inject ISessionService sessionService
|
||||
@inject ISessionServiceClient sessionService
|
||||
@inject AdminSignalRClient AdminSignalRClient;
|
||||
<PageTitle>Transfers</PageTitle>
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
@inject NavigationManager NavManager
|
||||
@inject IJSRuntime jsRuntime
|
||||
@inject ISecureStorageHandler SecureStorageHandler
|
||||
@inject ISessionService sessionService
|
||||
@inject ISessionServiceClient sessionService
|
||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||
@inject IUserDataService userDataService
|
||||
@attribute [Authorize]
|
||||
|
|
|
|||
|
|
@ -29,10 +29,10 @@ namespace TIAMSharedUI.Shared.Components.BaseComponents
|
|||
protected IStringLocalizer<TIAMResources> _localizer { get; set; }
|
||||
|
||||
[Inject]
|
||||
protected ISessionService _sessionService { get; set; }
|
||||
protected ISessionServiceClient _sessionService { get; set; }
|
||||
|
||||
private LoggerClient<BasePageComponent> _logger = null!;
|
||||
public BasePageComponent(NavigationManager navManager, PageHistoryState pageState, IEnumerable<IAcLogWriterClientBase> logWriters, IStringLocalizer<TIAMResources> localizer,ISessionService sessionService)
|
||||
public BasePageComponent(NavigationManager navManager, PageHistoryState pageState, IEnumerable<IAcLogWriterClientBase> logWriters, IStringLocalizer<TIAMResources> localizer,ISessionServiceClient sessionService)
|
||||
{
|
||||
_navManager = navManager;
|
||||
_pageState = pageState;
|
||||
|
|
|
|||
|
|
@ -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<TIAMResources> 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<UserBasicDetails>(userDetailsStr);
|
||||
serverResult = await UserDataService.Logout(userBasicDetail?.RefreshToken);
|
||||
}
|
||||
//if (!string.IsNullOrEmpty(userDetailsStr))
|
||||
//{
|
||||
// var userBasicDetail = JsonConvert.DeserializeObject<UserBasicDetails>(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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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("/");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>("#app");
|
||||
builder.RootComponents.Add<HeadOutlet>("head::after");
|
||||
builder.Services.AddLocalization();
|
||||
builder.Services.AddScoped<IWeatherForecastService, WeatherForecastService>();
|
||||
builder.Services.AddScoped<ITransferDataService, TransferDataService>();
|
||||
builder.Services.AddScoped<IPopulationStructureDataProvider, PopulationStructureDataProvider>();
|
||||
builder.Services.AddScoped<ISupplierService, SupplierService>();
|
||||
builder.Services.AddScoped<IUserDataService, UserDataServiceWeb>();
|
||||
builder.Services.AddScoped<ISecureStorageHandler, SecureStorageHandler>();
|
||||
builder.Services.AddBlazoredLocalStorage();
|
||||
builder.Services.AddSingleton<ISessionService, SessionServiceWeb>();
|
||||
builder.Services.AddSingleton<IWeatherForecastService, WeatherForecastService>();
|
||||
builder.Services.AddSingleton<ITransferDataService, TransferDataService>();
|
||||
builder.Services.AddSingleton<IPopulationStructureDataProvider, PopulationStructureDataProvider>();
|
||||
builder.Services.AddSingleton<ISupplierService, SupplierService>();
|
||||
builder.Services.AddSingleton<IUserDataService, UserDataServiceWeb>();
|
||||
builder.Services.AddSingleton<ISecureStorageHandler, SecureStorageHandler>();
|
||||
builder.Services.AddBlazoredLocalStorageAsSingleton();
|
||||
builder.Services.AddSingleton<ISessionServiceClient, SessionServiceWeb>();
|
||||
|
||||
builder.Services.AddSingleton<IComponentUpdateService, ComponentUpdateServiceWeb>();
|
||||
|
||||
builder.Services.AddScoped<IServiceProviderDataService, ServiceProviderDataService>();
|
||||
builder.Services.AddScoped<IClientNoticeSenderService, ClientNoticeSenderService>();
|
||||
builder.Services.AddScoped<IWizardProcessor, WizardProcessor>();
|
||||
builder.Services.AddScoped<IImageDataService, ImageDataService>();
|
||||
builder.Services.AddSingleton<IServiceProviderDataService, ServiceProviderDataService>();
|
||||
builder.Services.AddSingleton<IClientNoticeSenderService, ClientNoticeSenderService>();
|
||||
builder.Services.AddSingleton<IWizardProcessor, WizardProcessor>();
|
||||
builder.Services.AddSingleton<IImageDataService, ImageDataService>();
|
||||
//WebSpecific
|
||||
builder.Services.AddScoped<SessionStorageAccessor>();
|
||||
builder.Services.AddSingleton<SessionStorageAccessor>();
|
||||
builder.Services.AddSingleton(x => new ResourceManager("TIAMWebApp.Client.Resources.MyResources", typeof(Program).Assembly));
|
||||
|
||||
#if DEBUG
|
||||
|
|
@ -50,13 +51,13 @@ builder.Services.AddSingleton<IAcLogWriterClientBase, SignaRClientLogItemWriter>
|
|||
builder.Services.AddSingleton<AdminSignalRClient>();
|
||||
builder.Services.AddSingleton<SignalRService>();
|
||||
builder.Services.AddSingleton<SumupService>();
|
||||
builder.Services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();
|
||||
builder.Services.AddSingleton<AuthenticationStateProvider, CustomAuthStateProvider>();
|
||||
builder.Services.AddAuthorizationCore();
|
||||
builder.Services.AddScoped<ExchangeRateService>();
|
||||
builder.Services.AddScoped<SmartyStreetsService>();
|
||||
builder.Services.AddScoped<GooglePlacesService>();
|
||||
builder.Services.AddSingleton<ExchangeRateService>();
|
||||
builder.Services.AddSingleton<SmartyStreetsService>();
|
||||
builder.Services.AddSingleton<GooglePlacesService>();
|
||||
builder.Services.AddSingleton<PageHistoryState>();
|
||||
//builder.Services.AddScoped<BrowserConsoleLogWriter>();
|
||||
//builder.Services.AddSingleton<BrowserConsoleLogWriter>();
|
||||
|
||||
//WebSpecific end
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Product> GetHotels()
|
||||
{
|
||||
return base.GetHotels();
|
||||
}
|
||||
|
||||
public override void ClearAll()
|
||||
public override Task ClearAll()
|
||||
{
|
||||
base.ClearAll();
|
||||
return base.ClearAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<IAcLogWriterClientBase> logWriters)
|
||||
public class UserDataServiceWeb(HttpClient http, AdminSignalRClient adminSignalRClient, ISessionServiceClient sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable<IAcLogWriterClientBase> logWriters)
|
||||
: UserDataServiceClientBase(http, adminSignalRClient, sessionService, secureStorageHandler, serviceProviderDataService, logWriters);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<TSignalRTags, TLogger>(IConfiguration configuration, UserDal userDal, SessionService sessionService, TLogger logger)
|
||||
: AcWebSignalRHubBase<TSignalRTags, TLogger>(configuration, logger) where TSignalRTags : AcSignalRTags where TLogger : AcLoggerBase//Hub<ISignalRHubItemServer>, 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");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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<ISignalRHubItemServer>, IAcSignalRHubServer
|
||||
public class DevAdminSignalRHub : AcWebSignalRHubWithSessionBase<SignalRTags, TIAM.Core.Loggers.Logger<DevAdminSignalRHub>>
|
||||
{
|
||||
private readonly List<DynamicMethodCallModel<SignalRAttribute>> _dynamicMethodCallModels = [];
|
||||
private readonly TIAM.Core.Loggers.Logger<DevAdminSignalRHub> _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<IAcLogWriterBase> logWriters)
|
||||
public DevAdminSignalRHub(IConfiguration configuration, AdminDal adminDal, UserDal userDal, UserAPIController userApiController, ServiceProviderAPIController serviceProviderApiController, TransferDataAPIController transferDataApiController, MessageAPIController messageApiController, ProfileAPIController profileApiController, LoggerApiController loggerApiController, SessionService sessionService, IEnumerable<IAcLogWriterBase> logWriters)
|
||||
: base(configuration, userDal, sessionService, new TIAM.Core.Loggers.Logger<DevAdminSignalRHub>(logWriters.ToArray()))
|
||||
{
|
||||
_adminDal = adminDal;
|
||||
_userDal = userDal;
|
||||
|
||||
_configuration = configuration;
|
||||
|
||||
//_serviceProviderApiController = serviceProviderApiController;
|
||||
//_transferDataApiController = transferDataApiController;
|
||||
|
||||
_logger = new(logWriters.ToArray());
|
||||
_sessionService = sessionService;
|
||||
|
||||
_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(userApiController));
|
||||
_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(serviceProviderApiController));
|
||||
_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(transferDataApiController));
|
||||
_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(messageApiController));
|
||||
_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(profileApiController));
|
||||
_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(loggerApiController));
|
||||
DynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(userApiController));
|
||||
DynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(serviceProviderApiController));
|
||||
DynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(transferDataApiController));
|
||||
DynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(messageApiController));
|
||||
DynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(profileApiController));
|
||||
DynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(loggerApiController));
|
||||
//_dynamicMethodCallModels.Add(new DynamicMethodCallModel<SignalRAttribute>(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<SignalRTags>(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<SignalPostJsonDataMessage<IdMessage>>();
|
||||
|
||||
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<SignalPostJsonDataMessage<object>>(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<ISignalRHubItemServer>, 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<SignalRTags>(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}");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
using System.Collections.Concurrent;
|
||||
using System.Reflection;
|
||||
using AyCode.Services.SignalRs;
|
||||
|
||||
namespace TIAMWebApp.Server.Services;
|
||||
|
||||
public class DynamicMethodCallModel<TAttribute> where TAttribute : TagAttribute
|
||||
{
|
||||
public object InstanceObject { get; init; }
|
||||
public ConcurrentDictionary<int, MethodInfoModel<TAttribute>> 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<TAttribute>(attribute, methodInfo!);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
using System.Reflection;
|
||||
using AyCode.Services.SignalRs;
|
||||
|
||||
namespace TIAMWebApp.Server.Services;
|
||||
|
||||
public class MethodInfoModel<TAttribute> 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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<Product> GetHotels();
|
||||
public Guid DriverPersmissionId { get; set; }
|
||||
public void ClearAll();
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Product> GetHotels();
|
||||
public Guid DriverPersmissionId { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -5,7 +5,8 @@ using TIAMWebApp.Shared.Application.Models.PageModels;
|
|||
namespace TIAMWebApp.Shared.Application.Interfaces
|
||||
{
|
||||
public interface IUserDataService
|
||||
{
|
||||
{
|
||||
public Task SignOut();
|
||||
public Task<UserSessionModel> IsLoggedInAsync(Guid id);
|
||||
|
||||
public Task<MainResponse?> AuthenticateUser(LoginModel loginModel);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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<IAcLogWriterClientBase> logWriters)
|
||||
protected UserDataServiceClientBase(HttpClient http, AdminSignalRClient adminSignalRClient, ISessionServiceClient sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable<IAcLogWriterClientBase> 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<UserBasicDetails>(userDetailsStr);
|
||||
|
||||
if (userBasicDetail != null && !userBasicDetail.RefreshToken.IsNullOrWhiteSpace())
|
||||
await Logout(userBasicDetail.RefreshToken);
|
||||
}
|
||||
|
||||
await SessionService.ClearAll();
|
||||
}
|
||||
|
||||
public async Task<UserSessionModel> IsLoggedInAsync(Guid id)
|
||||
{
|
||||
//api call to get user
|
||||
|
|
|
|||
|
|
@ -63,5 +63,8 @@
|
|||
<Reference Include="AyCode.Services">
|
||||
<HintPath>..\..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Services.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="AyCode.Utils">
|
||||
<HintPath>..\..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Utils.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@
|
|||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.6.1" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.6.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.6.2" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.6.2" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
Loading…
Reference in New Issue