Merge branch 'master' of http://git2.aycode.com/Adam/TourIAm
This commit is contained in:
commit
64d38174be
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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} ");
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
namespace TIAMWebApp.Server.Models
|
|
||||||
{
|
|
||||||
public class RefreshTokenRequest
|
|
||||||
{
|
|
||||||
public string AccessToken { get; set; }
|
|
||||||
public string RefreshToken { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
|
|
||||||
namespace TIAMWebApp.Shared.Application.Models
|
|
||||||
{
|
|
||||||
public class AuthenticateRequestAndResponse
|
|
||||||
{
|
|
||||||
public string AccessToken { get; set; }
|
|
||||||
public string RefreshToken { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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; }
|
||||||
|
|
@ -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];
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue