This commit is contained in:
Adam 2024-09-01 09:25:01 +02:00
commit 64d38174be
15 changed files with 176 additions and 119 deletions

View File

@ -5,7 +5,7 @@ namespace TIAM.Services;
public class SignalRTags : AcSignalRTags public class SignalRTags : AcSignalRTags
{ {
public const int GetSiteViewModelByUserId = 999; public const int GetSiteViewModelByUserId = int.MaxValue;
public const int GetTransfer = 1; public const int GetTransfer = 1;
public const int GetTransfers = 2; public const int GetTransfers = 2;
@ -132,5 +132,8 @@ public class SignalRTags : AcSignalRTags
public const int DriverUpdateTransfer = 151; public const int DriverUpdateTransfer = 151;
public const int AuthenticateUser = 160; public const int AuthenticateUser = 160;
public const int RefreshToken = 200;
public const int GetAllLogItemsByFilterText = 1000; public const int GetAllLogItemsByFilterText = 1000;
} }

View File

@ -11,6 +11,7 @@
@using AyCode.Interfaces.StorageHandlers; @using AyCode.Interfaces.StorageHandlers;
@using System.Globalization; @using System.Globalization;
@using AyCode.Core.Enums @using AyCode.Core.Enums
@using AyCode.Core.Extensions
@using AyCode.Core.Helpers @using AyCode.Core.Helpers
@using AyCode.Core.Loggers @using AyCode.Core.Loggers
@using AyCode.Services.Loggers @using AyCode.Services.Loggers
@ -104,7 +105,7 @@
else else
{ {
_logger.Info("Couldn't refresh token"); _logger.Info("Couldn't refresh token");
SignOut(); await SignOut();
//NavManager.NavigateTo("/"); //NavManager.NavigateTo("/");
return; return;
} }
@ -210,14 +211,19 @@
return (userDetailsStr, locale); return (userDetailsStr, locale);
} }
private void SignOut() private async Task SignOut()
{ {
var userBasicDetail = JsonConvert.DeserializeObject<UserBasicDetails>(userDetailsStr); _logger.Info("SignOut called");
UserDataService.Logout(userBasicDetail?.RefreshToken); var userBasicDetail = userDetailsStr.JsonTo<UserBasicDetails>();
AuthStateProvider.GetAuthenticationStateAsync();
SecureStorageHandler.ClearAllSecureStorageAsync(); await AuthStateProvider.GetAuthenticationStateAsync();
await SecureStorageHandler.ClearAllSecureStorageAsync();
sessionService.ClearAll(); sessionService.ClearAll();
ComponentUpdateService.CallRequestRefreshAll();
UserDataService.Logout(userBasicDetail?.RefreshToken).Forget();
} }
CultureInfo Culture CultureInfo Culture

View File

@ -94,23 +94,22 @@ namespace TIAMSharedUI.Pages
} }
else else
{ {
string authResponseJson = mainResponse.Content.ToJson(); //JsonSerializer.Serialize(mainResponse.Content); //var authResponseJson = mainResponse.Content.ToJson(); //JsonSerializer.Serialize(mainResponse.Content);
var authResponse = mainResponse.Content.ToJson().JsonTo<AuthenticationTokens>(); //JsonSerializer.Deserialize<AuthenticationResponse>(authResponseJson, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
var authResponse = authResponseJson.JsonTo<AuthenticationResponse>(); //JsonSerializer.Deserialize<AuthenticationResponse>(authResponseJson, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); var accessToken = authResponse.AccessToken;
string accessToken = authResponse.AccessToken;
var token = ProcessToken(accessToken); var token = ProcessToken(accessToken);
string userId = token.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.NameId).Value; var userId = token.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.NameId).Value;
string email = token.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.Email).Value; var email = token.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.Email).Value;
var myId = Guid.Parse(userId); var myId = Guid.Parse(userId);
//userDataService.User.Email = _email; //userDataService.User.Email = _email;
var userBasicDetails = new UserBasicDetails(userId, email, authResponse.AccessToken, authResponse.RefreshToken); var userBasicDetails = new UserBasicDetails(userId, email, authResponse.AccessToken, authResponse.RefreshToken);
string userBasicDetailsJson = JsonSerializer.Serialize(userBasicDetails); var userBasicDetailsJson = JsonSerializer.Serialize(userBasicDetails);
//save to local storage //save to local storage
@ -193,9 +192,9 @@ namespace TIAMSharedUI.Pages
public async Task<bool> CheckIfDriver(List<UserProductMapping> Permissions) public async Task<bool> CheckIfDriver(List<UserProductMapping> Permissions)
{ {
bool _isDriver = false; var _isDriver = false;
foreach (UserProductMapping Permission in Permissions) foreach (var Permission in Permissions)
{ {
//var permissionToCheck = await ServiceProviderDataService.GetUserProductMappingByIdAsync(Permission.Id); //var permissionToCheck = await ServiceProviderDataService.GetUserProductMappingByIdAsync(Permission.Id);
BrowserConsoleLogWriter.Debug($"calling IsPowerOf with values: {Permission.Id}, {Permission.Permissions}, {1}"); BrowserConsoleLogWriter.Debug($"calling IsPowerOf with values: {Permission.Id}, {Permission.Permissions}, {1}");
@ -213,11 +212,11 @@ namespace TIAMSharedUI.Pages
{ {
BrowserConsoleLogWriter.Debug($"called IsBitSet with values: {number}, {power}"); BrowserConsoleLogWriter.Debug($"called IsBitSet with values: {number}, {power}");
int powerOfTwo = 1 << power; // Calculate 2^power var powerOfTwo = 1 << power; // Calculate 2^power
BrowserConsoleLogWriter.Debug($"powerOfTwo: {powerOfTwo}, {power}"); BrowserConsoleLogWriter.Debug($"powerOfTwo: {powerOfTwo}, {power}");
bool result = (number & powerOfTwo) != 0; // Check if the bit at position `power` is set var result = (number & powerOfTwo) != 0; // Check if the bit at position `power` is set
return result; return result;
} }
} }

View File

@ -1,4 +1,4 @@
@page "/user/hoteladmin/{id:guid}" @page "/user/hoteladmin/{Id:guid}"
@using TIAMSharedUI.Shared @using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Interfaces; @using TIAMWebApp.Shared.Application.Interfaces;
@using TIAMSharedUI.Shared.Components.BaseComponents @using TIAMSharedUI.Shared.Components.BaseComponents
@ -16,7 +16,7 @@
<div class="container-fluid"> <div class="container-fluid">
<HotelComponent Id="@id"></HotelComponent> <HotelComponent Id="@Id"></HotelComponent>
<!-- Stats admin--> <!-- Stats admin-->
<hr /> <hr />
@ -25,24 +25,19 @@
@code { @code {
[Parameter] public Guid id { get; set; } [Parameter] public Guid Id { get; set; }
bool isUserLoggedIn; bool _isUserLoggedIn;
int userType = 0; int _userType = 0;
protected override void OnInitialized() protected override void OnInitialized()
{ {
//check if Id matches with userproductmapping //check if Id matches with userproductmapping
if (!_sessionService.IsAuthenticated) if (!_sessionService.IsAuthenticated) return;
{
return;
}
var check = _sessionService.User.UserModelDto.UserProductMappings.Any(x => x.ProductId == id);
if (!check)
{
return;
}
base.OnInitialized();
var check = _sessionService.User?.UserModelDto.UserProductMappings.Any(x => x.ProductId == Id) ?? false;
if (!check) return;
base.OnInitialized();
} }
} }

View File

@ -15,6 +15,7 @@ using TIAMWebApp.Shared.Application.Models;
using TIAMWebApp.Shared.Application.Models.ClientSide.UI; using TIAMWebApp.Shared.Application.Models.ClientSide.UI;
using TIAMWebApp.Shared.Application.Services; using TIAMWebApp.Shared.Application.Services;
using TIAMWebApp.Shared.Application.Utility; using TIAMWebApp.Shared.Application.Utility;
using System.Collections.Generic;
namespace TIAMSharedUI.Pages.User.Hotels namespace TIAMSharedUI.Pages.User.Hotels
{ {
@ -148,7 +149,9 @@ namespace TIAMSharedUI.Pages.User.Hotels
s.Phone s.Phone
}); });
var productOwner = await AdminSignalRClient.GetByIdAsync<List<Company>>(SignalRTags.GetCompaniesById, _hotel.ServiceProviderId); List<Company>? productOwner = null;
if (_hotel != null) productOwner = await AdminSignalRClient.GetByIdAsync<List<Company>>(SignalRTags.GetCompaniesById, _hotel.ServiceProviderId);
if (productOwner != null) if (productOwner != null)
{ {
ImageSource = await ServiceProviderDataService.GetQRCodeByProductIdAsync(productOwner[0].AffiliateId); ImageSource = await ServiceProviderDataService.GetQRCodeByProductIdAsync(productOwner[0].AffiliateId);

View File

@ -138,7 +138,7 @@
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
public async Task SubmitForm(object result) public void SubmitForm(object result)
{ {
//await WizardProcessor.ProcessWizardAsync(Result.GetType(), Result); //await WizardProcessor.ProcessWizardAsync(Result.GetType(), Result);
_logger.Info($"Submitted nested form: {result.GetType().FullName}"); _logger.Info($"Submitted nested form: {result.GetType().FullName}");
@ -162,7 +162,7 @@
_logger = new LoggerClient<MyServiceProviders>(LogWriters.ToArray()); _logger = new LoggerClient<MyServiceProviders>(LogWriters.ToArray());
var myId = SessionService.User!.UserId; var myId = SessionService.User!.UserId;
_logger.Debug(companies.Count().ToString()); _logger.Debug(companies.Count.ToString());
_contextIds = new Guid[1]; _contextIds = new Guid[1];
_contextIds[0] = myId; _contextIds[0] = myId;
var result = await AdminSignalRClient.GetByIdAsync<List<Company>>(SignalRTags.GetCompaniesByContextId, myId); var result = await AdminSignalRClient.GetByIdAsync<List<Company>>(SignalRTags.GetCompaniesByContextId, myId);

View File

@ -58,7 +58,7 @@ namespace TIAMSharedUI.Shared.Components.BaseComponents
var currentUrl = _navManager.ToBaseRelativePath(_navManager.Uri); var currentUrl = _navManager.ToBaseRelativePath(_navManager.Uri);
_pageState.AddPageToHistory(currentUrl); _pageState.AddPageToHistory(currentUrl);
_logger.Debug(_pageState.GetGoBackPage()); //_logger.Debug(_pageState.GetGoBackPage());
} }
} }
} }

View File

@ -112,7 +112,6 @@ namespace TIAMSharedUI.Shared.Components
protected override void OnInitialized() protected override void OnInitialized()
{ {
base.OnInitialized(); base.OnInitialized();
navigationManager.LocationChanged += OnLocationChanged; navigationManager.LocationChanged += OnLocationChanged;
_logger = new LoggerClient<Navbar>(LogWriters.ToArray()); _logger = new LoggerClient<Navbar>(LogWriters.ToArray());
@ -120,7 +119,7 @@ namespace TIAMSharedUI.Shared.Components
_logger.Debug($"Navbar OnInit {DateTime.Now} "); _logger.Debug($"Navbar OnInit {DateTime.Now} ");
InitUser(); if (sessionService.IsAuthenticated) InitUser();
} }
private void OnLocationChanged(object sender, LocationChangedEventArgs e) private void OnLocationChanged(object sender, LocationChangedEventArgs e)
@ -157,6 +156,7 @@ namespace TIAMSharedUI.Shared.Components
myUser = true; myUser = true;
userId = sessionService.User.UserId; userId = sessionService.User.UserId;
userEmail = sessionService.User.Email; userEmail = sessionService.User.Email;
if (sessionService.User.UserModelDto.ProfileDto.FullName != null) if (sessionService.User.UserModelDto.ProfileDto.FullName != null)
{ {
userFullName = sessionService.User.UserModelDto.ProfileDto.FullName!; userFullName = sessionService.User.UserModelDto.ProfileDto.FullName!;
@ -169,15 +169,13 @@ namespace TIAMSharedUI.Shared.Components
} }
var properties = sessionService.User?.HasProperties; var properties = sessionService.User?.HasProperties;
if (properties == null) return;
if (properties == null)
return;
hasProperty = properties.Count > 0; hasProperty = properties.Count > 0;
isSysAdmin = sessionService.IsSysAdmin; isSysAdmin = sessionService.IsSysAdmin;
isDevAdmin = sessionService.IsDevAdmin; isDevAdmin = sessionService.IsDevAdmin;
isDriver = sessionService.IsDriver; isDriver = sessionService.IsDriver;
foreach (var property in properties) foreach (var property in properties)
{ {
_logger.Detail($"First property: {property.Value} "); _logger.Detail($"First property: {property.Value} ");

View File

@ -26,6 +26,7 @@ using TIAM.Services.Server.Logins;
using TIAMWebApp.Server.Services; using TIAMWebApp.Server.Services;
using AyCode.Core.Enums; using AyCode.Core.Enums;
using AyCode.Models.Enums; using AyCode.Models.Enums;
using AyCode.Utils.Extensions;
using TIAM.Models; using TIAM.Models;
namespace TIAMWebApp.Server.Controllers namespace TIAMWebApp.Server.Controllers
@ -119,7 +120,7 @@ namespace TIAMWebApp.Server.Controllers
var response = new MainResponse var response = new MainResponse
{ {
Content = new AuthenticationResponse Content = new AuthenticationTokens
{ {
RefreshToken = loggedInModel.LoggedInUser.RefreshToken, RefreshToken = loggedInModel.LoggedInUser.RefreshToken,
AccessToken = loggedInModel.AccessToken AccessToken = loggedInModel.AccessToken
@ -135,16 +136,87 @@ namespace TIAMWebApp.Server.Controllers
[AllowAnonymous] [AllowAnonymous]
[HttpPost] [HttpPost]
[Route(APIUrls.RefreshTokenRouteName)] [Route(APIUrls.RefreshTokenRouteName)]
public async Task<IActionResult> RefreshToken(RefreshTokenRequest? refreshTokenRequest) public async Task<IActionResult> RefreshToken(AuthenticationTokens? refreshTokenRequest)
{ {
_logger.Info(@"RefreshToken called"); var mainResponse = await RefreshTokenSignalR(refreshTokenRequest);
return mainResponse.IsSuccess ? Ok(mainResponse) : BadRequest(mainResponse);
//_logger.Info(@"RefreshToken called");
//var response = new MainResponse();
//if (refreshTokenRequest is null)
//{
// _logger.Info(@"RefreshTokenRequest is null");
// response.ErrorMessage = "Invalid request";
// return BadRequest(response);
//}
//var principal = _loginService.GetPrincipalFromExpiredToken(refreshTokenRequest.AccessToken);
//if (principal != null)
//{
// _logger.Info(@"Principal is not null");
// var email = principal.Claims.FirstOrDefault(f => f.Type == ClaimTypes.Email);
// //var userModel = await _userManager.FindByEmailAsync(email?.Value);
// //UserModel? user = users.FirstOrDefault(x => x.Email == email?.Value);
// User? dbUser = null;
// if (email != null)
// {
// //get user from db
// dbUser = await userDal.GetUserByEmailAsync(email.Value, true);
// _logger.Info($@"DbUser email: {dbUser?.EmailAddress}");
// }
// //mocking - update userModel with new refreshToken so it returns true after the check below
// //dbUser.RefreshToken = refreshTokenRequest.RefreshToken;
// if (dbUser is null || dbUser.RefreshToken != refreshTokenRequest.RefreshToken)
// {
// response.ErrorMessage = "Invalid Request";
// _logger.Info($@"{dbUser?.RefreshToken}, {refreshTokenRequest.RefreshToken}");
// return BadRequest(response);
// }
// var newAccessToken = _loginService.GenerateAccessToken(dbUser);
// var refreshToken = _loginService.GenerateRefreshToken();
// //mocking - update userModel with new refreshToken
// dbUser.RefreshToken = refreshToken;
// //TODO await _userManager.UpdateAsync(userModel);
// await userDal.UpdateJwtRefreshTokenAsync(dbUser.EmailAddress, dbUser.RefreshToken);
// response.IsSuccess = true;
// response.Content = new AuthenticationResponse
// {
// RefreshToken = refreshToken,
// AccessToken = newAccessToken
// };
// return Ok(response);
//}
//_logger.Info(@"Principal is null");
//return NotFound("Invalid Token Found");
}
[NonAction]
[SignalR(SignalRTags.RefreshToken)]
public async Task<MainResponse> RefreshTokenSignalR(AuthenticationTokens? refreshTokenRequest)
{
_logger.Info("RefreshToken called");
var response = new MainResponse(); var response = new MainResponse();
if (refreshTokenRequest is null) if (refreshTokenRequest is null)
{ {
_logger.Info(@"RefreshTokenRequest is null"); _logger.Info("RefreshTokenRequest is null");
response.ErrorMessage = "Invalid request";
return BadRequest(response); response.ErrorMessage = "Invalid request";
return response;
} }
var principal = _loginService.GetPrincipalFromExpiredToken(refreshTokenRequest.AccessToken); var principal = _loginService.GetPrincipalFromExpiredToken(refreshTokenRequest.AccessToken);
@ -152,49 +224,43 @@ namespace TIAMWebApp.Server.Controllers
if (principal != null) if (principal != null)
{ {
_logger.Info(@"Principal is not null"); _logger.Info(@"Principal is not null");
var email = principal.Claims.FirstOrDefault(f => f.Type == ClaimTypes.Email);
//var userModel = await _userManager.FindByEmailAsync(email?.Value);
//UserModel? user = users.FirstOrDefault(x => x.Email == email?.Value);
User? dbUser = null; User? dbUser = null;
if (email != null) var emailClaim = principal.Claims.FirstOrDefault(f => f.Type == ClaimTypes.Email);
if (emailClaim != null) dbUser = await userDal.GetUserByEmailAsync(emailClaim.Value, true);
if (dbUser is null || refreshTokenRequest.RefreshToken.IsNullOrWhiteSpace() || dbUser.RefreshToken != refreshTokenRequest.RefreshToken)
{ {
//get user from db response.ErrorMessage = "User not found or RefreshToken is not valid!";
dbUser = await userDal.GetUserByEmailAsync(email.Value, true); _logger.Info($"{response.ErrorMessage}; dbUser.RefreshToken: {dbUser?.RefreshToken}, refreshTokenRequest.RefreshToken: {refreshTokenRequest.RefreshToken}");
_logger.Info($@"DbUser email: {dbUser?.EmailAddress}");
return response;
} }
//mocking - update userModel with new refreshToken so it returns true after the check below _logger.Info($"DbUser email: {dbUser.EmailAddress}");
//dbUser.RefreshToken = refreshTokenRequest.RefreshToken;
if (dbUser is null || dbUser.RefreshToken != refreshTokenRequest.RefreshToken)
{
response.ErrorMessage = "Invalid Request";
_logger.Info($@"{dbUser?.RefreshToken}, {refreshTokenRequest.RefreshToken}");
return BadRequest(response);
}
var newAccessToken = _loginService.GenerateAccessToken(dbUser); var newAccessToken = _loginService.GenerateAccessToken(dbUser);
var refreshToken = _loginService.GenerateRefreshToken(); var refreshToken = _loginService.GenerateRefreshToken();
//mocking - update userModel with new refreshToken
dbUser.RefreshToken = refreshToken; dbUser.RefreshToken = refreshToken;
//TODO await _userManager.UpdateAsync(userModel);
await userDal.UpdateJwtRefreshTokenAsync(dbUser.EmailAddress, dbUser.RefreshToken); await userDal.UpdateJwtRefreshTokenAsync(dbUser.EmailAddress, dbUser.RefreshToken);
response.IsSuccess = true; response.Content = new AuthenticationTokens
response.Content = new AuthenticationResponse
{ {
RefreshToken = refreshToken, RefreshToken = refreshToken,
AccessToken = newAccessToken AccessToken = newAccessToken
}; };
return Ok(response); response.IsSuccess = true;
} }
else
_logger.Info(@"Principal is null"); {
return NotFound("Invalid Token Found"); _logger.Info($"Principal is null! AccessToken: {refreshTokenRequest.AccessToken}");
response.ErrorMessage = "Principal is null";
}
return response;
} }
[AllowAnonymous] [AllowAnonymous]

View File

@ -1,8 +0,0 @@
namespace TIAMWebApp.Server.Models
{
public class RefreshTokenRequest
{
public string AccessToken { get; set; }
public string RefreshToken { get; set; }
}
}

View File

@ -1,9 +0,0 @@

namespace TIAMWebApp.Shared.Application.Models
{
public class AuthenticateRequestAndResponse
{
public string AccessToken { get; set; }
public string RefreshToken { get; set; }
}
}

View File

@ -1,6 +1,6 @@
namespace TIAMWebApp.Shared.Application.Models namespace TIAMWebApp.Shared.Application.Models
{ {
public class AuthenticationResponse public class AuthenticationTokens
{ {
public string? AccessToken { get; set; } public string? AccessToken { get; set; }
public string? RefreshToken { get; set; } public string? RefreshToken { get; set; }

View File

@ -2,16 +2,10 @@
namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI
{ {
public class TransferStatusModel public class TransferStatusModel(TransferStatusType statusValue, string statusName)
{ {
public TransferStatusType StatusValue { get; set; } public TransferStatusType StatusValue { get; set; } = statusValue;
public string StatusName { get; set; } public string StatusName { get; set; } = statusName;
public TransferStatusModel(TransferStatusType statusValue, string statusName)
{
StatusValue = statusValue;
StatusName = statusName;
}
public static TransferStatusModel GetStatusModel(TransferStatusType transferStatusType) public static TransferStatusModel GetStatusModel(TransferStatusType transferStatusType)
=> AllStatuses[transferStatusType]; => AllStatuses[transferStatusType];

View File

@ -1,8 +1,10 @@
using System.Net.Http.Json; using System.Net.Http.Json;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using AyCode.Core.Extensions;
using AyCode.Interfaces.StorageHandlers; using AyCode.Interfaces.StorageHandlers;
using AyCode.Services.Loggers; using AyCode.Services.Loggers;
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json; using Newtonsoft.Json;
using TIAM.Models.Dtos.Users; using TIAM.Models.Dtos.Users;
using TIAM.Services; using TIAM.Services;
@ -265,38 +267,40 @@ public abstract class UserDataServiceClientBase : IUserDataService
Logger.Debug("RefreshToken() called"); Logger.Debug("RefreshToken() called");
var isTokenRefreshed = false; var isTokenRefreshed = false;
var url = $"{Setting.ApiBaseUrl}/{APIUrls.RefreshToken}"; MainResponse? mainResponse = null;
//var url = APIUrls.RefreshToken;
var serializedStr = JsonConvert.SerializeObject(new AuthenticateRequestAndResponse
{
RefreshToken = Setting.UserBasicDetails.RefreshToken,
AccessToken = Setting.UserBasicDetails.AccessToken
});
try try
{ {
Logger.Debug("Refreshtoken url: " + url); var postAuthenticationTokens = new AuthenticationTokens
var response = await Http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json"));
if (response.IsSuccessStatusCode)
{ {
var contentStr = await response.Content.ReadAsStringAsync(); RefreshToken = Setting.UserBasicDetails.RefreshToken,
var mainResponse = JsonConvert.DeserializeObject<MainResponse>(contentStr); AccessToken = Setting.UserBasicDetails.AccessToken
if (mainResponse.IsSuccess) };
mainResponse = await AdminSignalRClient.PostDataAsync<AuthenticationTokens, MainResponse>(SignalRTags.RefreshToken, postAuthenticationTokens);
if (mainResponse is { IsSuccess: true })
{
var tokenDetails = mainResponse.Content.ToJson().JsonTo<AuthenticationTokens>();
if (tokenDetails == null || string.IsNullOrWhiteSpace(tokenDetails.AccessToken) || string.IsNullOrWhiteSpace(tokenDetails.RefreshToken))
{
Logger.Error($"Refreshtoken error! tokenDetails == null || string.IsNullOrWhiteSpace(tokenDetails.AccessToken) || string.IsNullOrWhiteSpace(tokenDetails.RefreshToken); AccessToken: {tokenDetails?.AccessToken}; RefreshToken: {tokenDetails?.RefreshToken}");
}
else
{ {
var tokenDetails = JsonConvert.DeserializeObject<AuthenticateRequestAndResponse>(mainResponse.Content.ToString());
Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken; Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken;
Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken; Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken;
var userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails); var userDetailsStr = Setting.UserBasicDetails.ToJson(); //JsonConvert.SerializeObject(Setting.UserBasicDetails);
await SecureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr); await SecureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr);
isTokenRefreshed = true; isTokenRefreshed = true;
} }
} }
else Logger.Info($"Refreshtoken is not success! {mainResponse?.ErrorMessage ?? "mainResponse == null"}");
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.Error("Refreshtoken exception: " + ex.Message, ex); Logger.Error($"Refreshtoken, {mainResponse?.ErrorMessage ?? "mainResponse == null"}! exception: {ex.Message}", ex);
} }
return isTokenRefreshed; return isTokenRefreshed;

View File

@ -15,12 +15,18 @@ namespace TIAMWebApp.Shared.Application.Utility
public void AddPageToHistory(string pageUrl) public void AddPageToHistory(string pageUrl)
{ {
if (_previousPages.Count > 0 && _previousPages[^1] == pageUrl) return;
_previousPages.Add(pageUrl); _previousPages.Add(pageUrl);
} }
public string GetGoBackPage() public string GetGoBackPage()
{ {
return _previousPages.Count > 1 ? _previousPages[^2] : _previousPages.FirstOrDefault() ?? string.Empty; if (_previousPages.Count == 0) return string.Empty;
_previousPages.RemoveAt(_previousPages.Count - 1);
return _previousPages.Count > 0 ? _previousPages[^1] : string.Empty;
} }
public bool CanGoBack() public bool CanGoBack()