From b4e7f617ecd9dd86a03ff55e6cc267b63d00a1a5 Mon Sep 17 00:00:00 2001 From: Loretta Date: Mon, 26 Aug 2024 16:35:06 +0200 Subject: [PATCH 1/3] improvements --- TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs b/TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs index 7054d754..4d535a65 100644 --- a/TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs +++ b/TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs @@ -30,7 +30,7 @@ namespace TIAMWebApp.Shared.Application.Utility await _hubConnection.StartAsync(); if (_hubConnection.State != HubConnectionState.Connected) - await TaskHelper.WaitToAsync(() => _hubConnection.State == HubConnectionState.Connected, 3000, 100); + await TaskHelper.WaitToAsync(() => _hubConnection.State == HubConnectionState.Connected, 10000, 10, 25); } public async Task StopConnection() From 87240cb77d668ee1cdbcd8844204d1b9c46e7807 Mon Sep 17 00:00:00 2001 From: Loretta Date: Mon, 26 Aug 2024 19:15:28 +0200 Subject: [PATCH 2/3] SessionServiceClientBase; improvements, fixes, etc... --- .../Services/SessionServiceMobile.cs | 38 +++-------- .../Services/UserDataServiceMobile.cs | 54 +++++++-------- TIAMSharedUI/Pages/AppLaunchComponent.razor | 9 ++- TIAMSharedUI/Pages/Login.razor.cs | 8 +-- .../User/Drivers/DriverManageTransfers.razor | 7 +- .../MessageDetailGridComponent.razor | 4 +- TIAMSharedUI/Shared/Components/Navbar.razor | 2 +- .../Shared/Components/Navbar.razor.cs | 39 +++++------ TIAMSharedUI/Shared/Users/AdminNavMenu.razor | 10 +-- TIAMWebApp/Client/Program.cs | 1 - .../Client/Services/SessionServiceWeb.cs | 41 +++--------- .../Client/Services/UserDataServiceWeb.cs | 67 +++++++++---------- .../Shared/Interfaces/ISessionService.cs | 6 +- .../Shared/Interfaces/IUserDataService.cs | 8 ++- .../Services/SessionServiceClientBase.cs | 48 +++++++++++++ 15 files changed, 171 insertions(+), 171 deletions(-) create mode 100644 TIAMWebApp/Shared/Services/SessionServiceClientBase.cs diff --git a/TIAMMobileApp/Services/SessionServiceMobile.cs b/TIAMMobileApp/Services/SessionServiceMobile.cs index e8f4bdb6..be8eaeff 100644 --- a/TIAMMobileApp/Services/SessionServiceMobile.cs +++ b/TIAMMobileApp/Services/SessionServiceMobile.cs @@ -2,44 +2,24 @@ using TIAM.Core.Consts; using TIAM.Entities.Products; using TIAM.Entities.Users; +using TIAM.Models; using TIAMWebApp.Shared.Application.Interfaces; using TIAMWebApp.Shared.Application.Models; +using TIAMWebApp.Shared.Application.Services; using static System.Runtime.InteropServices.JavaScript.JSType; namespace TIAMMobileApp.Services { - public class SessionServiceMobile : ISessionService + public class SessionServiceMobile : SessionServiceClientBase { - public string? SessionId { get; set; } - 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 List GetHotels() + public override List GetHotels() { - if (User.UserModelDto.Products.Count > 0) - { - return User.UserModelDto.Products.Where(x => x.ProductType == TIAM.Core.Enums.ProductType.Hotel).ToList(); - } - else return new List(); - } - public Guid DriverPersmissionId { get; set; } = Guid.Empty; - - public async Task ClearAll() - { - SessionId = ""; - User = null; - IPAddress = null; - IsAuthenticated = false; - HasCompany = false; - IsDriver = false; - IsDevAdmin = false; - IsSysAdmin = false; - DriverPersmissionId = Guid.Empty; + return base.GetHotels(); } + public override void ClearAll() + { + base.ClearAll(); + } } } diff --git a/TIAMMobileApp/Services/UserDataServiceMobile.cs b/TIAMMobileApp/Services/UserDataServiceMobile.cs index 432247db..902f35e5 100644 --- a/TIAMMobileApp/Services/UserDataServiceMobile.cs +++ b/TIAMMobileApp/Services/UserDataServiceMobile.cs @@ -20,17 +20,17 @@ namespace TIAMMobileApp.Services public class UserDataServiceMobile : IUserDataService { private readonly HttpClient _http; - private readonly SiteViewModel _siteViewModel; - private readonly ISecureStorageHandler _secureStorageHandler; + private readonly ISessionService _sessionService; + private readonly ISecureStorageHandler _secureStorageHandler; private readonly IServiceProviderDataService _serviceProviderDataService; private readonly LoggerClient _logger; - public UserDataServiceMobile(HttpClient http, SiteViewModel siteViewModel, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) + public UserDataServiceMobile(HttpClient http, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) { _http = http; + _sessionService = sessionService; _secureStorageHandler = secureStorageHandler; - _siteViewModel = siteViewModel; //this._browserConsoleLogWriter = new BrowserConsoleLogWriter(jsRuntime); _serviceProviderDataService = serviceProviderDataService; @@ -46,19 +46,19 @@ namespace TIAMMobileApp.Services if (userModelDto != null) { - Dictionary userProperties = new Dictionary(); + var userProperties = new Dictionary(); //get user's properties - bool hasProperties = userModelDto.ServiceProviders.Count > 0 ? true : userModelDto.ServiceProviders.Count == 0 ? false : false; + var hasProperties = userModelDto.ServiceProviders.Count > 0 ? true : userModelDto.ServiceProviders.Count == 0 ? false : false; if (hasProperties) { //var Properties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id); var Properties = userModelDto.ServiceProviders; - + _logger.Info($"{Properties.Count} properties found"); - foreach ( var property in Properties ) + foreach (var property in Properties) { - userProperties.Add(property.Id, property.Name); + userProperties.Add(property.Id, property.Name); } } @@ -85,7 +85,7 @@ namespace TIAMMobileApp.Services public async Task AuthenticateUser(LoginModel loginModel) { - string result = string.Empty; + var result = string.Empty; var url = $"{Setting.ApiBaseUrl}/{APIUrls.AuthenticateUser}"; var response = await _http.PostAsJsonAsync(url, loginModel); @@ -116,8 +116,8 @@ namespace TIAMMobileApp.Services public async Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel) { - bool isSuccess = true; - string result = string.Empty; + var isSuccess = true; + var result = string.Empty; var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateUser}"; _logger.Info("CreateUser url: " + url); var response = await _http.PostAsJsonAsync(url, regModel); @@ -140,9 +140,9 @@ namespace TIAMMobileApp.Services public async Task<(bool isSuccess, UserModelDto? user)> CreateGuestUser(RegistrationModel regModel) { - bool isSuccess = false; - string result = string.Empty; - UserModelDto? user = new UserModelDto(); + var isSuccess = false; + var result = string.Empty; + var user = new UserModelDto(); var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}"; _logger.Info("CreateGuestUser url: " + url); var response = await _http.PostAsJsonAsync(url, regModel); @@ -257,7 +257,7 @@ namespace TIAMMobileApp.Services public async Task RefreshToken() { _logger.Info("RefreshToken() called"); - bool isTokenRefreshed = false; + var isTokenRefreshed = false; var url = $"{Setting.ApiBaseUrl}/{APIUrls.RefreshToken}"; //var url = APIUrls.RefreshToken; @@ -274,7 +274,7 @@ namespace TIAMMobileApp.Services var response = await _http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json")); if (response.IsSuccessStatusCode) { - string contentStr = await response.Content.ReadAsStringAsync(); + var contentStr = await response.Content.ReadAsStringAsync(); var mainResponse = JsonConvert.DeserializeObject(contentStr); if (mainResponse.IsSuccess) { @@ -282,7 +282,7 @@ namespace TIAMMobileApp.Services Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken; Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken; - string userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails); + var userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails); await _secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr); isTokenRefreshed = true; } @@ -290,7 +290,7 @@ namespace TIAMMobileApp.Services } catch (Exception ex) { - string msg = ex.Message; + var msg = ex.Message; _logger.Error("Refreshtoken exception: " + ex.Message, ex); } @@ -298,18 +298,16 @@ namespace TIAMMobileApp.Services return isTokenRefreshed; } - public async Task Logout(string refreshToken) + public async Task Logout(string? refreshToken) { - _logger.Info("Logout() called"); - - _siteViewModel.ClearAll(); + _logger.Info($"Logout called; refreshToken: {refreshToken}"); var url = $"{Setting.ApiBaseUrl}/{APIUrls.LogoutUser}"; - bool result = false; - var response = await _http.PostAsJsonAsync(url, RefreshToken); + var result = false; + var response = await _http.PostAsJsonAsync(url, refreshToken); if (response.IsSuccessStatusCode) { - string resultMessage = await response.Content.ReadAsStringAsync(); + var resultMessage = await response.Content.ReadAsStringAsync(); _logger.Detail($"Logout response: {resultMessage}"); if (resultMessage == "OK") { @@ -343,7 +341,7 @@ namespace TIAMMobileApp.Services public async Task ValidateForgotPasswordToken(Guid userId, string token) { - string? result = ""; + var result = ""; _logger.Info("ValidateForgotPasswordToken() called"); var url = $"{Setting.ApiBaseUrl}/{APIUrls.ValidateForgottenPasswordToken}"; @@ -359,7 +357,7 @@ namespace TIAMMobileApp.Services public async Task SetEmailConfirmed(Guid userId) { - bool result = false; + var result = false; _logger.Info("SetEmailConfirmed() called"); var url = $"{Setting.ApiBaseUrl}/{APIUrls.SetEmailConfirmed}"; diff --git a/TIAMSharedUI/Pages/AppLaunchComponent.razor b/TIAMSharedUI/Pages/AppLaunchComponent.razor index 0fcef43d..d96aa410 100644 --- a/TIAMSharedUI/Pages/AppLaunchComponent.razor +++ b/TIAMSharedUI/Pages/AppLaunchComponent.razor @@ -30,7 +30,6 @@ @inject IComponentUpdateService ComponentUpdateService @inject AuthenticationStateProvider AuthStateProvider @inject AdminSignalRClient _adminSignalRClient; -@inject SiteViewModel _siteViewModel; @{ if (string.IsNullOrWhiteSpace(TrackingId)) @@ -130,8 +129,8 @@ _adminSignalRClient.GetByIdAsync(SignalRTags.GetSiteViewModelByUserId, signalResponseMessage => { - _siteViewModel.Initialize(signalResponseMessage.ResponseData!); - _logger.Debug($"UnreadMessages: {_siteViewModel.UnreadMessagesCount}"); + sessionService.SiteViewModel.Initialize(signalResponseMessage.ResponseData!); + _logger.Debug($"UnreadMessages: {sessionService.SiteViewModel.UnreadMessagesCount}"); ComponentUpdateService.CallRequestRefresh(); return Task.CompletedTask; @@ -215,10 +214,10 @@ { var userBasicDetail = JsonConvert.DeserializeObject(userDetailsStr); - UserDataService.Logout(userBasicDetail.RefreshToken); + UserDataService.Logout(userBasicDetail?.RefreshToken); AuthStateProvider.GetAuthenticationStateAsync(); SecureStorageHandler.ClearAllSecureStorageAsync(); - sessionService.ClearAll().Forget(); + sessionService.ClearAll(); } CultureInfo Culture diff --git a/TIAMSharedUI/Pages/Login.razor.cs b/TIAMSharedUI/Pages/Login.razor.cs index 8dbfc736..1ecd54ee 100644 --- a/TIAMSharedUI/Pages/Login.razor.cs +++ b/TIAMSharedUI/Pages/Login.razor.cs @@ -23,8 +23,7 @@ namespace TIAMSharedUI.Pages public partial class Login : BasePageComponent { [Inject] private AdminSignalRClient _adminSignalRClient { get; set; } - [Inject] private SiteViewModel _siteViewModel { get; set; } - + [Inject] public NavigationManager navManager { get; set; } [Inject] @@ -39,6 +38,7 @@ namespace TIAMSharedUI.Pages [Inject] public AuthenticationStateProvider AuthStateProvider { get; set; } [Inject] public IComponentUpdateService componentUpdateService { get; set; } + [Inject] public ISessionService sessionService { get; set; } //fill loginmodel with fake but valid data //LoginModel loginModel = new(); @@ -125,8 +125,8 @@ namespace TIAMSharedUI.Pages _adminSignalRClient.GetByIdAsync(SignalRTags.GetSiteViewModelByUserId, signalResponseMessage => { - _siteViewModel.Initialize(signalResponseMessage.ResponseData!); - BrowserConsoleLogWriter.Debug($"UnreadMessages: {_siteViewModel.UnreadMessages.Count}"); + sessionService.SiteViewModel.Initialize(signalResponseMessage.ResponseData!); + BrowserConsoleLogWriter.Debug($"UnreadMessages: {sessionService.SiteViewModel.UnreadMessages.Count}"); componentUpdateService.CallRequestRefreshAll(); return Task.CompletedTask; diff --git a/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor b/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor index 4253cc19..b51b7cd3 100644 --- a/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor @@ -33,9 +33,8 @@ @inject IEnumerable LogWriters @inject IStringLocalizer localizer @inject IWizardProcessor wizardProcessor -@inject ITransferDataService transferDataService -@inject ISessionService sessionService -@inject SiteViewModel SiteViewModel; +@inject ITransferDataService transferDataService; +@inject ISessionService sessionService; @inject AdminSignalRClient AdminSignalRClient; Transfers @@ -406,7 +405,7 @@ protected override async Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); - _pageModel = SiteViewModel.DriverManageTransfersPageModel; + _pageModel = sessionService.SiteViewModel.DriverManageTransfersPageModel; InitializePageAsync(DriverId).Forget(); diff --git a/TIAMSharedUI/Pages/User/SysAdmins/MessageDetailGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/MessageDetailGridComponent.razor index 1deda6e8..aeaf0d62 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 SiteViewModel SiteViewModel; +@inject ISessionService sessionService @inject IComponentUpdateService ComponentUpdateService x.Id == emailMessage.Id); + sessionService.SiteViewModel.UnreadMessages.RemoveAll(x => x.Id == emailMessage.Id); ComponentUpdateService.CallRequestRefreshAll(); //InvokeAsync(StateHasChanged).ContinueWith(x => _messageGrid.UpdateDataItemAsync(emailMessage).Forget()); } diff --git a/TIAMSharedUI/Shared/Components/Navbar.razor b/TIAMSharedUI/Shared/Components/Navbar.razor index f106075b..eb6bc0a6 100644 --- a/TIAMSharedUI/Shared/Components/Navbar.razor +++ b/TIAMSharedUI/Shared/Components/Navbar.razor @@ -80,7 +80,7 @@ @{ string url3 = $"user/messages/{userId}"; - @(" (" + SiteViewModel.UnreadMessagesCount + ")") + @(" (" + sessionService.SiteViewModel.UnreadMessagesCount + ")") } diff --git a/TIAMSharedUI/Shared/Components/Navbar.razor.cs b/TIAMSharedUI/Shared/Components/Navbar.razor.cs index d7040c39..4fb17e6f 100644 --- a/TIAMSharedUI/Shared/Components/Navbar.razor.cs +++ b/TIAMSharedUI/Shared/Components/Navbar.razor.cs @@ -28,31 +28,22 @@ namespace TIAMSharedUI.Shared.Components { public partial class Navbar : ComponentBase { - [Inject] - public required IEnumerable LogWriters { get; set; } + [Inject] public required IEnumerable LogWriters { get; set; } - [Inject] - public ISecureStorageHandler SecureStorageHandler { get; set; } + [Inject] public ISecureStorageHandler SecureStorageHandler { get; set; } - [Inject] - public ISessionService sessionService { get; set; } - [Inject] - public IStringLocalizer localizer { get; set; } + [Inject] public ISessionService sessionService { get; set; } + [Inject] public IStringLocalizer localizer { get; set; } - [Inject] - public NavigationManager navigationManager { get; set; } + [Inject] public NavigationManager navigationManager { get; set; } - [Inject] - public IComponentUpdateService componentUpdateService { get; set; } + [Inject] public IComponentUpdateService componentUpdateService { get; set; } - [Inject] - private IUserDataService UserDataService { get; set; } + [Inject] private IUserDataService UserDataService { get; set; } - [Inject] - private IJSRuntime JsRuntime { get; set; } + [Inject] private IJSRuntime JsRuntime { get; set; } [Inject] AuthenticationStateProvider AuthStateProvider { get; set; } - [Inject] SiteViewModel SiteViewModel { get; set; } private bool enableLogin = true; private bool enableEvents = false; @@ -102,15 +93,17 @@ namespace TIAMSharedUI.Shared.Components 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); + serverResult = await UserDataService.Logout(userBasicDetail?.RefreshToken); } + await SecureStorageHandler.ClearAllSecureStorageAsync(); var result = await AuthStateProvider.GetAuthenticationStateAsync(); - await sessionService.ClearAll(); + sessionService.ClearAll(); navigationManager.NavigateTo("/"); myUser = false; } @@ -118,12 +111,12 @@ namespace TIAMSharedUI.Shared.Components protected override void OnInitialized() { - + base.OnInitialized(); navigationManager.LocationChanged += OnLocationChanged; _logger = new LoggerClient(LogWriters.ToArray()); - + _logger.Debug($"Navbar OnInit {DateTime.Now} "); InitUser(); @@ -132,7 +125,7 @@ namespace TIAMSharedUI.Shared.Components private void OnLocationChanged(object sender, LocationChangedEventArgs e) { // Collapse the navbar on navigation - collapseNavMenu=true; + collapseNavMenu = true; _logger.Debug($"{NavMenuCssClass}"); //JsRuntime.InvokeVoidAsync("toggleBootstrapNavMenu", false); StateHasChanged(); @@ -179,7 +172,7 @@ namespace TIAMSharedUI.Shared.Components if (properties == null) return; - + hasProperty = properties.Count > 0; isSysAdmin = sessionService.IsSysAdmin; isDevAdmin = sessionService.IsDevAdmin; diff --git a/TIAMSharedUI/Shared/Users/AdminNavMenu.razor b/TIAMSharedUI/Shared/Users/AdminNavMenu.razor index 972c4c3b..6c23d578 100644 --- a/TIAMSharedUI/Shared/Users/AdminNavMenu.razor +++ b/TIAMSharedUI/Shared/Users/AdminNavMenu.razor @@ -205,6 +205,7 @@ { userHasHotels = true; } + if (SessionService.User != null) { userId = SessionService.User.UserId; @@ -215,6 +216,7 @@ userFullName = SessionService.User.UserModelDto.ProfileDto.FullName; } } + await base.OnInitializedAsync(); } @@ -232,17 +234,17 @@ { 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); + serverResult = await UserDataService.Logout(userBasicDetail?.RefreshToken); } + await SecureStorageHandler.ClearAllSecureStorageAsync(); var result = await AuthStateProvider.GetAuthenticationStateAsync(); - await SessionService.ClearAll(); + SessionService.ClearAll(); NavigationManager.NavigateTo("/"); - } - } diff --git a/TIAMWebApp/Client/Program.cs b/TIAMWebApp/Client/Program.cs index b22fa4ba..c3de9452 100644 --- a/TIAMWebApp/Client/Program.cs +++ b/TIAMWebApp/Client/Program.cs @@ -31,7 +31,6 @@ builder.Services.AddScoped(); builder.Services.AddBlazoredLocalStorage(); builder.Services.AddSingleton(); -builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddScoped(); diff --git a/TIAMWebApp/Client/Services/SessionServiceWeb.cs b/TIAMWebApp/Client/Services/SessionServiceWeb.cs index 01ae7b45..7bee0118 100644 --- a/TIAMWebApp/Client/Services/SessionServiceWeb.cs +++ b/TIAMWebApp/Client/Services/SessionServiceWeb.cs @@ -1,47 +1,22 @@ using System.Net; using TIAM.Entities.Products; +using TIAM.Models; using TIAMWebApp.Shared.Application.Interfaces; using TIAMWebApp.Shared.Application.Models; +using TIAMWebApp.Shared.Application.Services; namespace TIAMWebApp.Client.Services { - public class SessionServiceWeb : ISessionService + public class SessionServiceWeb : SessionServiceClientBase { - public string? SessionId { get; set; } - 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 List GetHotels() - { - if(User != null) - { - if(User.UserModelDto.Products.Count > 0) - { - return User.UserModelDto.Products.Where(x => x.ProductType == TIAM.Core.Enums.ProductType.Hotel).ToList(); - } - else return new List(); - } - else return new List(); + public override List GetHotels() + { + return base.GetHotels(); } - public Guid DriverPersmissionId { get; set; } = Guid.Empty; - - public async Task ClearAll() + public override void ClearAll() { - SessionId = ""; - User = null; - IPAddress = null; - IsAuthenticated = false; - HasCompany = false; - IsDriver = false; - IsDevAdmin = false; - IsSysAdmin = false; - DriverPersmissionId = Guid.Empty; + base.ClearAll(); } } } diff --git a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs index ed70444e..367e5fbe 100644 --- a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs +++ b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs @@ -13,6 +13,7 @@ using System.Net.Http; using AyCode.Core.Extensions; using System.Text.Json; using TIAM.Models; +using AyCode.Blazor.Components.Services; namespace TIAMWebApp.Client.Services @@ -20,28 +21,28 @@ namespace TIAMWebApp.Client.Services public class UserDataServiceWeb : IUserDataService { private readonly HttpClient _http; - private readonly SiteViewModel _siteViewModel; + private readonly ISessionService _sessionService; + private readonly ISecureStorageHandler _secureStorageHandler; + //private readonly BrowserConsoleLogWriter _browserConsoleLogWriter; private readonly IServiceProviderDataService _serviceProviderDataService; private readonly LoggerClient _logger; - - - public UserDataServiceWeb(HttpClient http, SiteViewModel siteViewModel, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) - //public UserDataServiceWeb(HttpClient http, ISecureStorageHandler secureStorageHandler, IJSRuntime jSRuntime, IServiceProviderDataService serviceProviderDataService, HttpClientLogItemWriter logWriter) + public UserDataServiceWeb(HttpClient http, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) + //public UserDataServiceWeb(HttpClient http, ISecureStorageHandler secureStorageHandler, IJSRuntime jSRuntime, IServiceProviderDataService serviceProviderDataService, HttpClientLogItemWriter logWriter) { _http = http; - _siteViewModel = siteViewModel; + _sessionService = sessionService; _secureStorageHandler = secureStorageHandler; - + //this._browserConsoleLogWriter = new BrowserConsoleLogWriter(jsRuntime); _serviceProviderDataService = serviceProviderDataService; _logger = new LoggerClient(logWriters.ToArray()); //_logger = new TIAM.Core.Loggers.Logger(AppType.Web, LogLevel.Info, logWriters.ToArray()); //_logger = new TIAM.Core.Loggers.Logger(AppType.Web, LogLevel.Info, logWriter); } - + public async Task IsLoggedInAsync(Guid id) { @@ -58,11 +59,11 @@ namespace TIAMWebApp.Client.Services //var Properties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id); var properties = userModelDto.ServiceProviders; - + _logger.Info($"{properties.Count} properties found"); - foreach ( var property in properties ) + foreach (var property in properties) { - userProperties.Add(property.Id, property.Name); + userProperties.Add(property.Id, property.Name); } } @@ -90,7 +91,7 @@ namespace TIAMWebApp.Client.Services public async Task AuthenticateUser(LoginModel loginModel) { - string result = string.Empty; + var result = string.Empty; var url = $"{Setting.ApiBaseUrl}/{APIUrls.AuthenticateUser}"; var response = await _http.PostAsJsonAsync(url, loginModel); @@ -121,8 +122,8 @@ namespace TIAMWebApp.Client.Services public async Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel) { - bool isSuccess = true; - string result = string.Empty; + var isSuccess = true; + var result = string.Empty; var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateUser}"; _logger.Info("CreateUser url: " + url); var response = await _http.PostAsJsonAsync(url, regModel); @@ -145,13 +146,13 @@ namespace TIAMWebApp.Client.Services public async Task<(bool isSuccess, UserModelDto? user)> CreateGuestUser(RegistrationModel regModel) { - bool isSuccess = false; - string result = string.Empty; - UserModelDto? user = new UserModelDto(); + var isSuccess = false; + var result = string.Empty; + var user = new UserModelDto(); var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}"; _logger.Info("CreateGuestUser url: " + url); var response = await _http.PostAsJsonAsync(url, regModel); - + if (response.IsSuccessStatusCode) { @@ -191,7 +192,7 @@ namespace TIAMWebApp.Client.Services public async Task GetUserByEmailAsync(string email) { - + try { @@ -263,7 +264,7 @@ namespace TIAMWebApp.Client.Services public async Task RefreshToken() { _logger.Info("RefreshToken() called"); - bool isTokenRefreshed = false; + var isTokenRefreshed = false; var url = $"{Setting.ApiBaseUrl}/{APIUrls.RefreshToken}"; //var url = APIUrls.RefreshToken; @@ -280,7 +281,7 @@ namespace TIAMWebApp.Client.Services var response = await _http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json")); if (response.IsSuccessStatusCode) { - string contentStr = await response.Content.ReadAsStringAsync(); + var contentStr = await response.Content.ReadAsStringAsync(); var mainResponse = JsonConvert.DeserializeObject(contentStr); if (mainResponse.IsSuccess) { @@ -288,7 +289,7 @@ namespace TIAMWebApp.Client.Services Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken; Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken; - string userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails); + var userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails); await _secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr); isTokenRefreshed = true; } @@ -296,7 +297,7 @@ namespace TIAMWebApp.Client.Services } catch (Exception ex) { - string msg = ex.Message; + var msg = ex.Message; _logger.Error("Refreshtoken exception: " + ex.Message, ex); } @@ -305,20 +306,18 @@ namespace TIAMWebApp.Client.Services return isTokenRefreshed; } - public async Task Logout(string refreshToken) + public async Task Logout(string? refreshToken) { - _logger.Info("Logout() called"); - - _siteViewModel.ClearAll(); + _logger.Info($"Logout called; refreshToken: {refreshToken}"); var url = $"{Setting.ApiBaseUrl}/{APIUrls.LogoutUser}"; - bool result = false; + var result = false; var response = await _http.PostAsJsonAsync(url, refreshToken); if (response.IsSuccessStatusCode) { - string resultMessage = await response.Content.ReadAsStringAsync(); - _logger.Detail($"Logout response: {resultMessage}"); - if(resultMessage == "OK") + var resultMessage = await response.Content.ReadAsStringAsync(); + _logger.Detail($"Logout response: {resultMessage}"); + if (resultMessage == "OK") { result = true; } @@ -350,7 +349,7 @@ namespace TIAMWebApp.Client.Services public async Task ValidateForgotPasswordToken(Guid userId, string token) { - string? result = ""; + var result = ""; _logger.Info("ValidateForgotPasswordToken() called"); var url = $"{Setting.ApiBaseUrl}/{APIUrls.ValidateForgottenPasswordToken}"; @@ -366,11 +365,11 @@ namespace TIAMWebApp.Client.Services public async Task SetEmailConfirmed(Guid userId) { - bool result = false; + var result = false; _logger.Info("SetEmailConfirmed() called"); var url = $"{Setting.ApiBaseUrl}/{APIUrls.SetEmailConfirmed}"; - + var response = await _http.PostAsJsonAsync(url, userId); result = await response.Content.ReadFromJsonAsync(); diff --git a/TIAMWebApp/Shared/Interfaces/ISessionService.cs b/TIAMWebApp/Shared/Interfaces/ISessionService.cs index 7dc1cc3b..0bc60780 100644 --- a/TIAMWebApp/Shared/Interfaces/ISessionService.cs +++ b/TIAMWebApp/Shared/Interfaces/ISessionService.cs @@ -1,5 +1,6 @@ using System.Net; using TIAM.Entities.Products; +using TIAM.Models; using TIAMWebApp.Shared.Application.Models; namespace TIAMWebApp.Shared.Application.Interfaces @@ -7,6 +8,9 @@ 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; } @@ -16,6 +20,6 @@ namespace TIAMWebApp.Shared.Application.Interfaces public bool IsSysAdmin { get; set; } public List GetHotels(); public Guid DriverPersmissionId { get; set; } - public Task ClearAll(); + public void ClearAll(); } } diff --git a/TIAMWebApp/Shared/Interfaces/IUserDataService.cs b/TIAMWebApp/Shared/Interfaces/IUserDataService.cs index f2d44f5f..5f342705 100644 --- a/TIAMWebApp/Shared/Interfaces/IUserDataService.cs +++ b/TIAMWebApp/Shared/Interfaces/IUserDataService.cs @@ -4,9 +4,13 @@ using TIAMWebApp.Shared.Application.Models.PageModels; namespace TIAMWebApp.Shared.Application.Interfaces { + public abstract class UserDataService : IUserDataService + { + + } + public interface IUserDataService { - public Task IsLoggedInAsync(Guid id); public Task AuthenticateUser(LoginModel loginModel); @@ -25,7 +29,7 @@ namespace TIAMWebApp.Shared.Application.Interfaces public Task GetUserByEmailAsync(string email); Task RefreshToken(); - public Task Logout(string refreshToken); + public Task Logout(string? refreshToken); public Task SendForgottenPasswordMail(string emailAddress); diff --git a/TIAMWebApp/Shared/Services/SessionServiceClientBase.cs b/TIAMWebApp/Shared/Services/SessionServiceClientBase.cs new file mode 100644 index 00000000..1159d3b9 --- /dev/null +++ b/TIAMWebApp/Shared/Services/SessionServiceClientBase.cs @@ -0,0 +1,48 @@ +using System.Net; +using TIAM.Entities.Products; +using TIAM.Models; +using TIAMWebApp.Shared.Application.Interfaces; +using TIAMWebApp.Shared.Application.Models; + +namespace TIAMWebApp.Shared.Application.Services; + +public abstract class SessionServiceClientBase : ISessionService +{ + 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; + + public virtual List GetHotels() + { + if (User != null) + { + return User.UserModelDto.Products.Count > 0 ? User.UserModelDto.Products.Where(x => x.ProductType == TIAM.Core.Enums.ProductType.Hotel).ToList() : []; + } + + return []; + } + + public virtual void ClearAll() + { + SessionId = string.Empty; + User = null; + IPAddress = null; + IsAuthenticated = false; + HasCompany = false; + IsDriver = false; + IsDevAdmin = false; + IsSysAdmin = false; + DriverPersmissionId = Guid.Empty; + + SiteViewModel.ClearAll(); + } +} \ No newline at end of file From 76b6c157469a4c53b5f7aadaab65cc8606d9765b Mon Sep 17 00:00:00 2001 From: Loretta Date: Mon, 26 Aug 2024 20:10:09 +0200 Subject: [PATCH 3/3] implement UserDataServiceClientBase; --- .../Services/ComponentUpdateServiceWeb.cs | 2 + .../Services/UserDataServiceMobile.cs | 388 +---------------- .../Services/ComponentUpdateServiceWeb.cs | 2 + .../Client/Services/UserDataServiceWeb.cs | 395 +---------------- .../Interfaces/IComponentUpdateService.cs | 31 -- .../Shared/Interfaces/IUserDataService.cs | 5 - .../Services/ComponentUpdateServiceBase.cs | 35 ++ .../Services/UserDataServiceClientBase.cs | 401 ++++++++++++++++++ 8 files changed, 445 insertions(+), 814 deletions(-) create mode 100644 TIAMWebApp/Shared/Services/ComponentUpdateServiceBase.cs create mode 100644 TIAMWebApp/Shared/Services/UserDataServiceClientBase.cs diff --git a/TIAMMobileApp/Services/ComponentUpdateServiceWeb.cs b/TIAMMobileApp/Services/ComponentUpdateServiceWeb.cs index 5f437213..caae34d2 100644 --- a/TIAMMobileApp/Services/ComponentUpdateServiceWeb.cs +++ b/TIAMMobileApp/Services/ComponentUpdateServiceWeb.cs @@ -1,4 +1,6 @@ using TIAMWebApp.Shared.Application.Interfaces; +using TIAMWebApp.Shared.Application.Services; + namespace TIAMMobileApp.Services { public class ComponentUpdateServiceMobile : ComponentUpdateServiceBase diff --git a/TIAMMobileApp/Services/UserDataServiceMobile.cs b/TIAMMobileApp/Services/UserDataServiceMobile.cs index 902f35e5..07f5ae4f 100644 --- a/TIAMMobileApp/Services/UserDataServiceMobile.cs +++ b/TIAMMobileApp/Services/UserDataServiceMobile.cs @@ -17,391 +17,7 @@ using TIAMWebApp.Shared.Application.Utility; namespace TIAMMobileApp.Services { - public class UserDataServiceMobile : IUserDataService - { - private readonly HttpClient _http; - private readonly ISessionService _sessionService; - private readonly ISecureStorageHandler _secureStorageHandler; - private readonly IServiceProviderDataService _serviceProviderDataService; - private readonly LoggerClient _logger; - - - public UserDataServiceMobile(HttpClient http, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) - { - _http = http; - _sessionService = sessionService; - _secureStorageHandler = secureStorageHandler; - - //this._browserConsoleLogWriter = new BrowserConsoleLogWriter(jsRuntime); - _serviceProviderDataService = serviceProviderDataService; - _logger = new LoggerClient(logWriters.ToArray()); - //_logger = new TIAM.Core.Loggers.Logger(AppType.Web, LogLevel.Info, logWriters.ToArray()); - //_logger = new TIAM.Core.Loggers.Logger(AppType.Web, LogLevel.Info, logWriter); - } - - public async Task IsLoggedInAsync(Guid id) - { - //api call to get user - var userModelDto = await GetUserDetailByIdAsync(id); - - if (userModelDto != null) - { - var userProperties = new Dictionary(); - //get user's properties - var hasProperties = userModelDto.ServiceProviders.Count > 0 ? true : userModelDto.ServiceProviders.Count == 0 ? false : false; - if (hasProperties) - { - - //var Properties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id); - var Properties = userModelDto.ServiceProviders; - - _logger.Info($"{Properties.Count} properties found"); - foreach (var property in Properties) - { - userProperties.Add(property.Id, property.Name); - } - } - - //create user session model - var user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto, userProperties, 1); - return user; - } - else - { - - return null; - } - } - - public async Task TestUserApi(int Param) - { - var url = $"{Setting.ApiBaseUrl}/{APIUrls.UserTest}"; - - - var response = await _http.PostAsJsonAsync(url, Param); - var result = await response.Content.ReadAsStringAsync(); - return result; - } - - public async Task AuthenticateUser(LoginModel loginModel) - { - var result = string.Empty; - var url = $"{Setting.ApiBaseUrl}/{APIUrls.AuthenticateUser}"; - - var response = await _http.PostAsJsonAsync(url, loginModel); - - //try - //{ - // Logger.Detail("Login started: " + "Email: " + loginModel.Email + ", Password: " + loginModel.Password); - //} - //catch (Exception ex) - //{ - // _logger.Error(ex.Message, ex); - //} - - if (response.IsSuccessStatusCode) - { - result = await response.Content.ReadAsStringAsync(); - } - else - { - result = await response.Content.ReadAsStringAsync(); - } - - //result = await response.Content.ReadAsStringAsync(); - return result; - - } - - public async Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel) - { - - var isSuccess = true; - var result = string.Empty; - var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateUser}"; - _logger.Info("CreateUser url: " + url); - var response = await _http.PostAsJsonAsync(url, regModel); - result = await response.Content.ReadAsStringAsync(); - /*if (response.IsSuccessStatusCode) - { - isSuccess = true; - result = await response.Content.ReadAsStringAsync(); - } - else - { - isSuccess = false; - result = await response.Content.ReadAsStringAsync(); - }*/ - - - return (isSuccess, result); - } - - public async Task<(bool isSuccess, UserModelDto? user)> CreateGuestUser(RegistrationModel regModel) - { - - var isSuccess = false; - var result = string.Empty; - var user = new UserModelDto(); - var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}"; - _logger.Info("CreateGuestUser url: " + url); - var response = await _http.PostAsJsonAsync(url, regModel); - - - if (response.IsSuccessStatusCode) - { - isSuccess = true; - result = await response.Content.ReadAsStringAsync(); - _logger.Info("CreateGuestUser result: " + result); - user = JsonConvert.DeserializeObject(result); - } - else - { - isSuccess = false; - result = await response.Content.ReadAsStringAsync(); - user = null; - } - - - return (isSuccess, user); - } - - public async Task?> GetUsersAsync() - { - return await _http.GetFromJsonAsync>(APIUrls.GetUsers); - } - - public async Task?> GetUsersWithDetailsAsync() - { - - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUsersWithDetails}"; - _logger.Info("GetUserByEmailAsync url: " + url + "!"); - var response = await _http.GetFromJsonAsync>(APIUrls.GetUsersWithDetails); - //var result = await response.Content.ReadAsStringAsync(); - //var user = JsonConvert.DeserializeObject(result); - return response; - - } - - public async Task GetUserByEmailAsync(string email) - { - - - try - { - var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserByEmail}/{email}"; - _logger.Info("GetUserByEmailAsync url: " + url + ", " + email); - var response = await _http.GetAsync(url); - - response.EnsureSuccessStatusCode(); - if (response.Content != null) - { - var jsonResponse = await response.Content.ReadAsStringAsync(); - var user = System.Text.Json.JsonSerializer.Deserialize(jsonResponse, new JsonSerializerOptions - { - PropertyNameCaseInsensitive = true - }); - return user; - } - - else - { - return null; - } - - } - catch (HttpRequestException httpRequestException) - { - // Handle specific HTTP request exceptions - _logger.DebugConditional($"Request error: {httpRequestException.Message}"); - throw; - } - catch (Exception ex) - { - // Handle other possible exceptions - _logger.DebugConditional($"An error occurred: {ex.Message}"); - throw; - } - - - - } - - public async Task GetUserByIdAsync(Guid id) - { - var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserById}"; - _logger.Info("GetUserByIdAsync url: " + url + ", " + id.ToString()); - - var response = await _http.PostAsJsonAsync(url, id); - var result = await response.Content.ReadAsStringAsync(); - var user = JsonConvert.DeserializeObject(result); - - return user; - } - - public async Task GetUserDetailByIdAsync(Guid id) - { - _logger.Info("GetUserDetailByIdAsync", "GLOBAL_LOGGER"); - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserDetailById}"; - _logger.Info("GetUserDetailByIdAsync url: " + url + ", " + id.ToString()); - - var response = await _http.PostAsJsonAsync(url, id); - var result = await response.Content.ReadAsStringAsync(); - var user = JsonConvert.DeserializeObject(result); - - return user; - } - - public async Task RefreshToken() - { - _logger.Info("RefreshToken() called"); - var isTokenRefreshed = false; - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.RefreshToken}"; - //var url = APIUrls.RefreshToken; - - var serializedStr = JsonConvert.SerializeObject(new AuthenticateRequestAndResponse - { - RefreshToken = Setting.UserBasicDetails.RefreshToken, - AccessToken = Setting.UserBasicDetails.AccessToken - }); - - try - { - _logger.Info("Refreshtoken url: " + url); - var response = await _http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json")); - if (response.IsSuccessStatusCode) - { - var contentStr = await response.Content.ReadAsStringAsync(); - var mainResponse = JsonConvert.DeserializeObject(contentStr); - if (mainResponse.IsSuccess) - { - var tokenDetails = JsonConvert.DeserializeObject(mainResponse.Content.ToString()); - Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken; - Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken; - - var userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails); - await _secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr); - isTokenRefreshed = true; - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error("Refreshtoken exception: " + ex.Message, ex); - } - - - return isTokenRefreshed; - } - - public async Task Logout(string? refreshToken) - { - _logger.Info($"Logout called; refreshToken: {refreshToken}"); - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.LogoutUser}"; - var result = false; - var response = await _http.PostAsJsonAsync(url, refreshToken); - if (response.IsSuccessStatusCode) - { - var resultMessage = await response.Content.ReadAsStringAsync(); - _logger.Detail($"Logout response: {resultMessage}"); - if (resultMessage == "OK") - { - result = true; - } - else - { - result = false; - } - } - else - { - result = false; - } - - _logger.Detail($"Logout: {result}"); - return result; - } - - public async Task SendForgottenPasswordMail(string emailAddress) - { - _logger.Info("SendForgottenPasswordMail() called"); - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendForgottenPasswordMail}"; - var response = await _http.PostAsJsonAsync(url, emailAddress); - var success = await response.Content.ReadFromJsonAsync(); - - _logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}"); - return success; - } - - public async Task ValidateForgotPasswordToken(Guid userId, string token) - { - var result = ""; - _logger.Info("ValidateForgotPasswordToken() called"); - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.ValidateForgottenPasswordToken}"; - var parameters = new[] { userId.ToString(), token }; - - var response = await _http.PostAsJsonAsync(url, parameters); - result = await response.Content.ReadAsStringAsync(); - - _logger.Detail($"ValidateForgotPasswordToken(): {result}"); - - return result; - } - - public async Task SetEmailConfirmed(Guid userId) - { - var result = false; - _logger.Info("SetEmailConfirmed() called"); - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.SetEmailConfirmed}"; - - var response = await _http.PostAsJsonAsync(url, userId); - result = await response.Content.ReadFromJsonAsync(); - - _logger.Detail($"ValidateForgotPasswordToken(): {result.ToString()}"); - - return result; - } - - public async Task SendWelcomeMail(string emailAddress) - { - _logger.Info("SendWelcomeMail() called"); - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendWelcomeMail}"; - var response = await _http.PostAsJsonAsync(url, emailAddress); - var success = await response.Content.ReadFromJsonAsync(); - - _logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}"); - return success; - } - - //public Task> GetUserRolesAsync(UserModel userModel) - //{ - // //TODO Finish this - // //get the userModel's roles - // var role = userModel.UserRoles; - - // foreach (var roleType in roleTypes) - // { - // if ((role & roleType.Id) == roleType.Id) - // { - - // //add the role to the dictionary - // userRoleTypes.Add(roleType.Id, roleType.RoleName); - - // } - // } - // return Task.FromResult(userRoleTypes); - - //} - - } + public class UserDataServiceMobile(HttpClient http, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) + : UserDataServiceClientBase(http, sessionService, secureStorageHandler, serviceProviderDataService, logWriters); } diff --git a/TIAMWebApp/Client/Services/ComponentUpdateServiceWeb.cs b/TIAMWebApp/Client/Services/ComponentUpdateServiceWeb.cs index dbb092c1..84df2b92 100644 --- a/TIAMWebApp/Client/Services/ComponentUpdateServiceWeb.cs +++ b/TIAMWebApp/Client/Services/ComponentUpdateServiceWeb.cs @@ -1,4 +1,6 @@ using TIAMWebApp.Shared.Application.Interfaces; +using TIAMWebApp.Shared.Application.Services; + namespace TIAMWebApp.Client.Services { public class ComponentUpdateServiceWeb : ComponentUpdateServiceBase diff --git a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs index 367e5fbe..71268bf4 100644 --- a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs +++ b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs @@ -14,401 +14,12 @@ using AyCode.Core.Extensions; using System.Text.Json; using TIAM.Models; using AyCode.Blazor.Components.Services; +using TIAMWebApp.Shared.Application.Services; namespace TIAMWebApp.Client.Services { - public class UserDataServiceWeb : IUserDataService - { - private readonly HttpClient _http; - private readonly ISessionService _sessionService; - - private readonly ISecureStorageHandler _secureStorageHandler; - - //private readonly BrowserConsoleLogWriter _browserConsoleLogWriter; - private readonly IServiceProviderDataService _serviceProviderDataService; - private readonly LoggerClient _logger; - - public UserDataServiceWeb(HttpClient http, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) - //public UserDataServiceWeb(HttpClient http, ISecureStorageHandler secureStorageHandler, IJSRuntime jSRuntime, IServiceProviderDataService serviceProviderDataService, HttpClientLogItemWriter logWriter) - { - _http = http; - _sessionService = sessionService; - _secureStorageHandler = secureStorageHandler; - - //this._browserConsoleLogWriter = new BrowserConsoleLogWriter(jsRuntime); - _serviceProviderDataService = serviceProviderDataService; - _logger = new LoggerClient(logWriters.ToArray()); - //_logger = new TIAM.Core.Loggers.Logger(AppType.Web, LogLevel.Info, logWriters.ToArray()); - //_logger = new TIAM.Core.Loggers.Logger(AppType.Web, LogLevel.Info, logWriter); - } - - - public async Task IsLoggedInAsync(Guid id) - { - //api call to get user - var userModelDto = await GetUserDetailByIdAsync(id); - - if (userModelDto != null) - { - var userProperties = new Dictionary(); - //get user's properties - var hasProperties = userModelDto.ServiceProviders.Count > 0 ? true : (userModelDto.ServiceProviders.Count == 0 ? false : false); - if (hasProperties) - { - - //var Properties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id); - var properties = userModelDto.ServiceProviders; - - _logger.Info($"{properties.Count} properties found"); - foreach (var property in properties) - { - userProperties.Add(property.Id, property.Name); - } - } - - //create user session model - var user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto, userProperties, 1); - return user; - } - else - { - - return null; - } - - } - - public async Task TestUserApi(int Param) - { - var url = $"{Setting.ApiBaseUrl}/{APIUrls.UserTest}"; - - - var response = await _http.PostAsJsonAsync(url, Param); - var result = await response.Content.ReadAsStringAsync(); - return result; - } - - public async Task AuthenticateUser(LoginModel loginModel) - { - var result = string.Empty; - var url = $"{Setting.ApiBaseUrl}/{APIUrls.AuthenticateUser}"; - - var response = await _http.PostAsJsonAsync(url, loginModel); - - //try - //{ - // Logger.Detail("Login started: " + "Email: " + loginModel.Email + ", Password: " + loginModel.Password); - //} - //catch (Exception ex) - //{ - // _logger.Error(ex.Message, ex); - //} - - if (response.IsSuccessStatusCode) - { - result = await response.Content.ReadAsStringAsync(); - } - else - { - result = await response.Content.ReadAsStringAsync(); - } - - //result = await response.Content.ReadAsStringAsync(); - return result; - - } - - public async Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel) - { - - var isSuccess = true; - var result = string.Empty; - var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateUser}"; - _logger.Info("CreateUser url: " + url); - var response = await _http.PostAsJsonAsync(url, regModel); - result = await response.Content.ReadAsStringAsync(); - /*if (response.IsSuccessStatusCode) - { - isSuccess = true; - result = await response.Content.ReadAsStringAsync(); - } - else - { - isSuccess = false; - result = await response.Content.ReadAsStringAsync(); - }*/ - - - return (isSuccess, result); - } - - public async Task<(bool isSuccess, UserModelDto? user)> CreateGuestUser(RegistrationModel regModel) - { - - var isSuccess = false; - var result = string.Empty; - var user = new UserModelDto(); - var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}"; - _logger.Info("CreateGuestUser url: " + url); - var response = await _http.PostAsJsonAsync(url, regModel); - - - if (response.IsSuccessStatusCode) - { - isSuccess = true; - result = await response.Content.ReadAsStringAsync(); - _logger.Info("CreateGuestUser result: " + result); - user = JsonConvert.DeserializeObject(result); - } - else - { - isSuccess = false; - result = await response.Content.ReadAsStringAsync(); - user = null; - } - - - return (isSuccess, user); - } - - - public async Task?> GetUsersAsync() - { - return await _http.GetFromJsonAsync>(APIUrls.GetUsers); - } - - public async Task> GetUsersWithDetailsAsync() - { - var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUsersWithDetails}"; - - _logger.Info("GetUserByEmailAsync url: " + url + "!"); - var response = await _http.GetFromJsonAsync>(APIUrls.GetUsersWithDetails); - //var result = await response.Content.ReadAsStringAsync(); - //var user = JsonConvert.DeserializeObject(result); - return response ?? []; - - } - - public async Task GetUserByEmailAsync(string email) - { - - - try - { - var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserByEmail}/{email}"; - _logger.Info("GetUserByEmailAsync url: " + url + ", " + email); - var response = await _http.GetAsync(url); - - response.EnsureSuccessStatusCode(); - if (response.Content != null) - { - var jsonResponse = await response.Content.ReadAsStringAsync(); - var user = System.Text.Json.JsonSerializer.Deserialize(jsonResponse, new JsonSerializerOptions - { - PropertyNameCaseInsensitive = true - }); - return user; - } - - else - { - return null; - } - - } - catch (HttpRequestException httpRequestException) - { - // Handle specific HTTP request exceptions - _logger.DebugConditional($"Request error: {httpRequestException.Message}"); - throw; - } - catch (Exception ex) - { - // Handle other possible exceptions - _logger.DebugConditional($"An error occurred: {ex.Message}"); - throw; - } - - - - } - - public async Task GetUserByIdAsync(Guid id) - { - var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserById}"; - _logger.Info("GetUserByIdAsync url: " + url + ", " + id.ToString()); - - var response = await _http.PostAsJsonAsync(url, id); - var result = await response.Content.ReadAsStringAsync(); - var user = JsonConvert.DeserializeObject(result); - - return user; - } - - public async Task GetUserDetailByIdAsync(Guid id) - { - _logger.Info("GetUserDetailByIdAsync", "GLOBAL_LOGGER"); - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserDetailById}"; - _logger.Info("GetUserDetailByIdAsync url: " + url + ", " + id.ToString()); - - var response = await _http.PostAsJsonAsync(url, id); - //var result = await response.Content.ReadAsStringAsync(); - var result = await response.Content.ReadFromJsonAsync(); - //var user = JsonConvert.DeserializeObject(result); - - return result; - } - - public async Task RefreshToken() - { - _logger.Info("RefreshToken() called"); - var isTokenRefreshed = false; - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.RefreshToken}"; - //var url = APIUrls.RefreshToken; - - var serializedStr = JsonConvert.SerializeObject(new AuthenticateRequestAndResponse - { - RefreshToken = Setting.UserBasicDetails.RefreshToken, - AccessToken = Setting.UserBasicDetails.AccessToken - }); - - try - { - _logger.Info("Refreshtoken url: " + url); - var response = await _http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json")); - if (response.IsSuccessStatusCode) - { - var contentStr = await response.Content.ReadAsStringAsync(); - var mainResponse = JsonConvert.DeserializeObject(contentStr); - if (mainResponse.IsSuccess) - { - var tokenDetails = JsonConvert.DeserializeObject(mainResponse.Content.ToString()); - Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken; - Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken; - - var userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails); - await _secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr); - isTokenRefreshed = true; - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error("Refreshtoken exception: " + ex.Message, ex); - } - - - - return isTokenRefreshed; - } - - public async Task Logout(string? refreshToken) - { - _logger.Info($"Logout called; refreshToken: {refreshToken}"); - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.LogoutUser}"; - var result = false; - var response = await _http.PostAsJsonAsync(url, refreshToken); - if (response.IsSuccessStatusCode) - { - var resultMessage = await response.Content.ReadAsStringAsync(); - _logger.Detail($"Logout response: {resultMessage}"); - if (resultMessage == "OK") - { - result = true; - } - else - { - result = false; - } - } - else - { - result = false; - } - - _logger.Detail($"Logout: {result}"); - return result; - } - - public async Task SendForgottenPasswordMail(string emailAddress) - { - _logger.Info("SendForgottenPasswordMail() called"); - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendForgottenPasswordMail}"; - var response = await _http.PostAsJsonAsync(url, emailAddress); - var success = await response.Content.ReadFromJsonAsync(); - - _logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}"); - return success; - } - - public async Task ValidateForgotPasswordToken(Guid userId, string token) - { - var result = ""; - _logger.Info("ValidateForgotPasswordToken() called"); - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.ValidateForgottenPasswordToken}"; - var parameters = new[] { userId.ToString(), token }; - - var response = await _http.PostAsJsonAsync(url, parameters); - result = await response.Content.ReadAsStringAsync(); - - _logger.Detail($"ValidateForgotPasswordToken(): {result}"); - - return result; - } - - public async Task SetEmailConfirmed(Guid userId) - { - var result = false; - _logger.Info("SetEmailConfirmed() called"); - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.SetEmailConfirmed}"; - - var response = await _http.PostAsJsonAsync(url, userId); - result = await response.Content.ReadFromJsonAsync(); - - _logger.Detail($"ValidateForgotPasswordToken(): {result.ToString()}"); - - return result; - } - - public async Task SendWelcomeMail(string emailAddress) - { - _logger.Info("SendWelcomeMail() called"); - - var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendWelcomeMail}"; - var response = await _http.PostAsJsonAsync(url, emailAddress); - var success = await response.Content.ReadFromJsonAsync(); - - _logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}"); - return success; - } - - /*public Task> GetUserRolesAsync(UserModel userModel) - { - //TODO: finish this - //get the userModel's roles - int role = userModel.UserRoles; - - foreach (var roleType in roleTypes) - { - if ((role & roleType.Id) == roleType.Id) - { - - //add the role to the dictionary - userRoleTypes.Add(roleType.Id, roleType.RoleName); - - } - } - return Task.FromResult(userRoleTypes); - - }*/ - } + public class UserDataServiceWeb(HttpClient http, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) + : UserDataServiceClientBase(http, sessionService, secureStorageHandler, serviceProviderDataService, logWriters); } diff --git a/TIAMWebApp/Shared/Interfaces/IComponentUpdateService.cs b/TIAMWebApp/Shared/Interfaces/IComponentUpdateService.cs index 434ac3ca..0b16510a 100644 --- a/TIAMWebApp/Shared/Interfaces/IComponentUpdateService.cs +++ b/TIAMWebApp/Shared/Interfaces/IComponentUpdateService.cs @@ -2,37 +2,6 @@ namespace TIAMWebApp.Shared.Application.Interfaces { - public abstract class ComponentUpdateServiceBase : IComponentUpdateService - { - protected Dictionary ComponentsByType = []; - - public virtual void CallRequestRefreshAll() - { - foreach (var component in ComponentsByType.Values) - component.CallRequestRefresh(); - } - - public void CallRequestRefresh() where T : class, IComponent - { - if (ComponentsByType.TryGetValue(typeof(T), out var componentUpdateItem)) - componentUpdateItem.CallRequestRefresh(); - - } - - public IComponentUpdateItem GetOrAddComponent() where T : class, IComponent - { - var componentType = typeof(T); - - if (ComponentsByType.TryGetValue(componentType, out var componentUpdateItem)) - return componentUpdateItem; - - componentUpdateItem = new ComponentUpdateItem(); - ComponentsByType.Add(componentType, componentUpdateItem); - - return componentUpdateItem; - } - } - public class ComponentUpdateItem : IComponentUpdateItem { public event Action? RefreshRequested; diff --git a/TIAMWebApp/Shared/Interfaces/IUserDataService.cs b/TIAMWebApp/Shared/Interfaces/IUserDataService.cs index 5f342705..202a5ae0 100644 --- a/TIAMWebApp/Shared/Interfaces/IUserDataService.cs +++ b/TIAMWebApp/Shared/Interfaces/IUserDataService.cs @@ -4,11 +4,6 @@ using TIAMWebApp.Shared.Application.Models.PageModels; namespace TIAMWebApp.Shared.Application.Interfaces { - public abstract class UserDataService : IUserDataService - { - - } - public interface IUserDataService { public Task IsLoggedInAsync(Guid id); diff --git a/TIAMWebApp/Shared/Services/ComponentUpdateServiceBase.cs b/TIAMWebApp/Shared/Services/ComponentUpdateServiceBase.cs new file mode 100644 index 00000000..c7d485ef --- /dev/null +++ b/TIAMWebApp/Shared/Services/ComponentUpdateServiceBase.cs @@ -0,0 +1,35 @@ +using Microsoft.AspNetCore.Components; +using TIAMWebApp.Shared.Application.Interfaces; + +namespace TIAMWebApp.Shared.Application.Services; + +public abstract class ComponentUpdateServiceBase : IComponentUpdateService +{ + protected Dictionary ComponentsByType = []; + + public virtual void CallRequestRefreshAll() + { + foreach (var component in ComponentsByType.Values) + component.CallRequestRefresh(); + } + + public void CallRequestRefresh() where T : class, IComponent + { + if (ComponentsByType.TryGetValue(typeof(T), out var componentUpdateItem)) + componentUpdateItem.CallRequestRefresh(); + + } + + public IComponentUpdateItem GetOrAddComponent() where T : class, IComponent + { + var componentType = typeof(T); + + if (ComponentsByType.TryGetValue(componentType, out var componentUpdateItem)) + return componentUpdateItem; + + componentUpdateItem = new ComponentUpdateItem(); + ComponentsByType.Add(componentType, componentUpdateItem); + + return componentUpdateItem; + } +} \ No newline at end of file diff --git a/TIAMWebApp/Shared/Services/UserDataServiceClientBase.cs b/TIAMWebApp/Shared/Services/UserDataServiceClientBase.cs new file mode 100644 index 00000000..d591ae7b --- /dev/null +++ b/TIAMWebApp/Shared/Services/UserDataServiceClientBase.cs @@ -0,0 +1,401 @@ +using System.Net.Http.Json; +using System.Text; +using System.Text.Json; +using AyCode.Interfaces.StorageHandlers; +using AyCode.Services.Loggers; +using Newtonsoft.Json; +using TIAM.Models.Dtos.Users; +using TIAMWebApp.Shared.Application.Interfaces; +using TIAMWebApp.Shared.Application.Models; +using TIAMWebApp.Shared.Application.Models.ClientSide; +using TIAMWebApp.Shared.Application.Models.PageModels; +using TIAMWebApp.Shared.Application.Utility; + +namespace TIAMWebApp.Shared.Application.Services; + +public abstract class UserDataServiceClientBase : IUserDataService +{ + protected readonly HttpClient Http; + protected readonly LoggerClient Logger; + + protected readonly ISessionService SessionService; + protected readonly ISecureStorageHandler SecureStorageHandler; + protected readonly IServiceProviderDataService ServiceProviderDataService; + + + protected UserDataServiceClientBase(HttpClient http, ISessionService sessionService, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) + { + Http = http; + SessionService = sessionService; + SecureStorageHandler = secureStorageHandler; + + ServiceProviderDataService = serviceProviderDataService; + Logger = new LoggerClient(this.GetType().Name, logWriters.ToArray()); + } + + + public async Task IsLoggedInAsync(Guid id) + { + //api call to get user + var userModelDto = await GetUserDetailByIdAsync(id); + + if (userModelDto != null) + { + var userProperties = new Dictionary(); + //get user's properties + var hasProperties = userModelDto.ServiceProviders.Count > 0 ? true : (userModelDto.ServiceProviders.Count == 0 ? false : false); + if (hasProperties) + { + + //var Properties = await serviceProviderDataService.GetPropertiesByOwnerIdAsync(userModelDto.Id); + var properties = userModelDto.ServiceProviders; + + Logger.Info($"{properties.Count} properties found"); + foreach (var property in properties) + { + userProperties.Add(property.Id, property.Name); + } + } + + //create user session model + var user = new UserSessionModel(userModelDto.Id, UserType.User, userModelDto, userProperties, 1); + return user; + } + else + { + + return null; + } + + } + + public async Task TestUserApi(int Param) + { + var url = $"{Setting.ApiBaseUrl}/{APIUrls.UserTest}"; + + + var response = await Http.PostAsJsonAsync(url, Param); + var result = await response.Content.ReadAsStringAsync(); + return result; + } + + public async Task AuthenticateUser(LoginModel loginModel) + { + var result = string.Empty; + var url = $"{Setting.ApiBaseUrl}/{APIUrls.AuthenticateUser}"; + + var response = await Http.PostAsJsonAsync(url, loginModel); + + //try + //{ + // Logger.Detail("Login started: " + "Email: " + loginModel.Email + ", Password: " + loginModel.Password); + //} + //catch (Exception ex) + //{ + // _logger.Error(ex.Message, ex); + //} + + if (response.IsSuccessStatusCode) + { + result = await response.Content.ReadAsStringAsync(); + } + else + { + result = await response.Content.ReadAsStringAsync(); + } + + //result = await response.Content.ReadAsStringAsync(); + return result; + + } + + public async Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel) + { + + var isSuccess = true; + var result = string.Empty; + var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateUser}"; + Logger.Info("CreateUser url: " + url); + var response = await Http.PostAsJsonAsync(url, regModel); + result = await response.Content.ReadAsStringAsync(); + /*if (response.IsSuccessStatusCode) + { + isSuccess = true; + result = await response.Content.ReadAsStringAsync(); + } + else + { + isSuccess = false; + result = await response.Content.ReadAsStringAsync(); + }*/ + + + return (isSuccess, result); + } + + public async Task<(bool isSuccess, UserModelDto? user)> CreateGuestUser(RegistrationModel regModel) + { + var isSuccess = false; + var result = string.Empty; + var user = new UserModelDto(); + var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}"; + Logger.Info("CreateGuestUser url: " + url); + var response = await Http.PostAsJsonAsync(url, regModel); + + + if (response.IsSuccessStatusCode) + { + isSuccess = true; + result = await response.Content.ReadAsStringAsync(); + Logger.Info("CreateGuestUser result: " + result); + user = JsonConvert.DeserializeObject(result); + } + else + { + isSuccess = false; + result = await response.Content.ReadAsStringAsync(); + user = null; + } + + + return (isSuccess, user); + } + + + public async Task?> GetUsersAsync() + { + return await Http.GetFromJsonAsync>(APIUrls.GetUsers); + } + + public async Task> GetUsersWithDetailsAsync() + { + var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUsersWithDetails}"; + + Logger.Info("GetUserByEmailAsync url: " + url + "!"); + var response = await Http.GetFromJsonAsync>(APIUrls.GetUsersWithDetails); + //var result = await response.Content.ReadAsStringAsync(); + //var user = JsonConvert.DeserializeObject(result); + return response ?? []; + + } + + public async Task GetUserByEmailAsync(string email) + { + + + try + { + var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserByEmail}/{email}"; + Logger.Info("GetUserByEmailAsync url: " + url + ", " + email); + var response = await Http.GetAsync(url); + + response.EnsureSuccessStatusCode(); + if (response.Content != null) + { + var jsonResponse = await response.Content.ReadAsStringAsync(); + var user = System.Text.Json.JsonSerializer.Deserialize(jsonResponse, new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true + }); + return user; + } + + else + { + return null; + } + + } + catch (HttpRequestException httpRequestException) + { + // Handle specific HTTP request exceptions + Logger.DebugConditional($"Request error: {httpRequestException.Message}"); + throw; + } + catch (Exception ex) + { + // Handle other possible exceptions + Logger.DebugConditional($"An error occurred: {ex.Message}"); + throw; + } + + + + } + + public async Task GetUserByIdAsync(Guid id) + { + var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserById}"; + Logger.Info("GetUserByIdAsync url: " + url + ", " + id.ToString()); + + var response = await Http.PostAsJsonAsync(url, id); + var result = await response.Content.ReadAsStringAsync(); + var user = JsonConvert.DeserializeObject(result); + + return user; + } + + public async Task GetUserDetailByIdAsync(Guid id) + { + Logger.Info("GetUserDetailByIdAsync", "GLOBAL_LOGGER"); + + var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserDetailById}"; + Logger.Info("GetUserDetailByIdAsync url: " + url + ", " + id.ToString()); + + var response = await Http.PostAsJsonAsync(url, id); + //var result = await response.Content.ReadAsStringAsync(); + var result = await response.Content.ReadFromJsonAsync(); + //var user = JsonConvert.DeserializeObject(result); + + return result; + } + + public async Task RefreshToken() + { + Logger.Info("RefreshToken() called"); + var isTokenRefreshed = false; + + var url = $"{Setting.ApiBaseUrl}/{APIUrls.RefreshToken}"; + //var url = APIUrls.RefreshToken; + + var serializedStr = JsonConvert.SerializeObject(new AuthenticateRequestAndResponse + { + RefreshToken = Setting.UserBasicDetails.RefreshToken, + AccessToken = Setting.UserBasicDetails.AccessToken + }); + + try + { + Logger.Info("Refreshtoken url: " + url); + var response = await Http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json")); + if (response.IsSuccessStatusCode) + { + var contentStr = await response.Content.ReadAsStringAsync(); + var mainResponse = JsonConvert.DeserializeObject(contentStr); + if (mainResponse.IsSuccess) + { + var tokenDetails = JsonConvert.DeserializeObject(mainResponse.Content.ToString()); + Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken; + Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken; + + var userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails); + await SecureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr); + isTokenRefreshed = true; + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + Logger.Error("Refreshtoken exception: " + ex.Message, ex); + } + + + + return isTokenRefreshed; + } + + public async Task Logout(string? refreshToken) + { + Logger.Info($"Logout called; refreshToken: {refreshToken}"); + + var url = $"{Setting.ApiBaseUrl}/{APIUrls.LogoutUser}"; + var result = false; + var response = await Http.PostAsJsonAsync(url, refreshToken); + if (response.IsSuccessStatusCode) + { + var resultMessage = await response.Content.ReadAsStringAsync(); + Logger.Detail($"Logout response: {resultMessage}"); + if (resultMessage == "OK") + { + result = true; + } + else + { + result = false; + } + } + else + { + result = false; + } + + Logger.Detail($"Logout: {result}"); + return result; + } + + public async Task SendForgottenPasswordMail(string emailAddress) + { + Logger.Info("SendForgottenPasswordMail() called"); + + var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendForgottenPasswordMail}"; + var response = await Http.PostAsJsonAsync(url, emailAddress); + var success = await response.Content.ReadFromJsonAsync(); + + Logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}"); + return success; + } + + public async Task ValidateForgotPasswordToken(Guid userId, string token) + { + var result = ""; + Logger.Info("ValidateForgotPasswordToken() called"); + + var url = $"{Setting.ApiBaseUrl}/{APIUrls.ValidateForgottenPasswordToken}"; + var parameters = new[] { userId.ToString(), token }; + + var response = await Http.PostAsJsonAsync(url, parameters); + result = await response.Content.ReadAsStringAsync(); + + Logger.Detail($"ValidateForgotPasswordToken(): {result}"); + + return result; + } + + public async Task SetEmailConfirmed(Guid userId) + { + var result = false; + Logger.Info("SetEmailConfirmed() called"); + + var url = $"{Setting.ApiBaseUrl}/{APIUrls.SetEmailConfirmed}"; + + var response = await Http.PostAsJsonAsync(url, userId); + result = await response.Content.ReadFromJsonAsync(); + + Logger.Detail($"ValidateForgotPasswordToken(): {result.ToString()}"); + + return result; + } + + public async Task SendWelcomeMail(string emailAddress) + { + Logger.Info("SendWelcomeMail() called"); + + var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendWelcomeMail}"; + var response = await Http.PostAsJsonAsync(url, emailAddress); + var success = await response.Content.ReadFromJsonAsync(); + + Logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}"); + return success; + } + + /*public Task> GetUserRolesAsync(UserModel userModel) + { + //TODO: finish this + //get the userModel's roles + int role = userModel.UserRoles; + + foreach (var roleType in roleTypes) + { + if ((role & roleType.Id) == roleType.Id) + { + + //add the role to the dictionary + userRoleTypes.Add(roleType.Id, roleType.RoleName); + + } + } + return Task.FromResult(userRoleTypes); + + }*/ +} \ No newline at end of file