237 lines
8.0 KiB
Plaintext
237 lines
8.0 KiB
Plaintext
@* @page "/"; *@
|
|
@using Microsoft.AspNetCore.Components.Authorization
|
|
@using TIAM.Core.Consts
|
|
@using TIAM.Entities.Users
|
|
@using TIAMWebApp.Shared.Application.Interfaces
|
|
@using TIAMWebApp.Shared.Application.Models
|
|
@using TIAMWebApp.Shared.Application.Utility
|
|
@using Newtonsoft.Json
|
|
@using System.IdentityModel.Tokens.Jwt
|
|
@using TIAMWebApp.Shared.Application.Models.ClientSide
|
|
@using AyCode.Interfaces.StorageHandlers;
|
|
@using System.Globalization;
|
|
@using AyCode.Core.Enums
|
|
@using AyCode.Core.Helpers
|
|
@using AyCode.Core.Loggers
|
|
@using AyCode.Services.Loggers
|
|
@using TIAM.Core.Loggers
|
|
@using TIAM.Models
|
|
@using TIAM.Services
|
|
@using TIAMWebApp.Shared.Application.Services
|
|
@inject NavigationManager NavManager
|
|
@inject IJSRuntime JSRuntime
|
|
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
|
@inject IUserDataService UserDataService
|
|
@inject IServiceProviderDataService ServiceProviderDataService
|
|
@inject ISecureStorageHandler SecureStorageHandler
|
|
@inject ISessionService sessionService;
|
|
@inject HttpClient http;
|
|
@inject IComponentUpdateService ComponentUpdateService
|
|
@inject AuthenticationStateProvider AuthStateProvider
|
|
@inject AdminSignalRClient _adminSignalRClient;
|
|
@inject SiteViewModel _siteViewModel;
|
|
|
|
@{
|
|
if (string.IsNullOrWhiteSpace(TrackingId))
|
|
{
|
|
TrackingId = "";
|
|
// <p>Loading...</p>
|
|
}
|
|
else
|
|
{
|
|
<p>Loading with trackingId: @TrackingId</p>
|
|
}
|
|
}
|
|
|
|
|
|
@code {
|
|
|
|
[Parameter]
|
|
public string TrackingId { get; set; }
|
|
|
|
string userDetailsStr;
|
|
string locale;
|
|
ILogger _logger;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
_logger = new LoggerClient<AppLaunchComponent>(LogWriters.ToArray());
|
|
|
|
var (_userDetailStr, _locale) = await GetLocalSettings();
|
|
|
|
userDetailsStr = _userDetailStr;
|
|
|
|
if(_locale != null)
|
|
{
|
|
locale = _locale;
|
|
Culture = new CultureInfo(locale);
|
|
_logger.Info("Locale from settings: " + locale);
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("Default locale:" + Culture.Name);
|
|
}
|
|
|
|
//_logger = new _logger(JSRuntime);
|
|
//wait for 5 seconds
|
|
//await Task.Delay(1000);
|
|
|
|
if (!string.IsNullOrWhiteSpace(userDetailsStr))
|
|
{
|
|
_logger.Info(userDetailsStr);
|
|
var userBasicDetail = JsonConvert.DeserializeObject<UserBasicDetails>(userDetailsStr);
|
|
|
|
var handler = new JwtSecurityTokenHandler();
|
|
var jsontoken = handler.ReadToken(userBasicDetail?.AccessToken) as JwtSecurityToken;
|
|
|
|
if(userBasicDetail!= null)
|
|
Setting.UserBasicDetails = userBasicDetail;
|
|
|
|
var isSuccess = false;
|
|
if (jsontoken?.ValidTo < DateTime.UtcNow)
|
|
{
|
|
_logger.Info("Token needs to be refreshed");
|
|
bool isTokenRefreshed = await UserDataService.RefreshToken();
|
|
|
|
if (isTokenRefreshed)
|
|
{
|
|
await AuthStateProvider.GetAuthenticationStateAsync();
|
|
_logger.Info("Token refreshed");
|
|
|
|
isSuccess = true;
|
|
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("Couldn't refresh token");
|
|
SignOut();
|
|
//NavManager.NavigateTo("/");
|
|
return;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("Valid token found");
|
|
await AuthStateProvider.GetAuthenticationStateAsync();
|
|
|
|
isSuccess = true;
|
|
}
|
|
|
|
string _userId = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.NameId).Value;
|
|
string _email = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.Email).Value;
|
|
var user = await UserDataService.IsLoggedInAsync(Guid.Parse(_userId));
|
|
|
|
if (isSuccess)
|
|
{
|
|
await SaveToSessionInfo(user);
|
|
_logger.Info($"Saved user in db is: {user.DisplayName}, setting autenthicated state");
|
|
|
|
_adminSignalRClient.GetByIdAsync<SiteViewModel>(SignalRTags.GetSiteViewModelByUserId, signalResponseMessage =>
|
|
{
|
|
_siteViewModel.Initialize(signalResponseMessage.ResponseData!);
|
|
_logger.Debug($"UnreadMessages: {_siteViewModel.UnreadMessages.Count}");
|
|
|
|
ComponentUpdateService.CallRequestRefreshAll();
|
|
return Task.CompletedTask;
|
|
}, user.UserId).Forget();
|
|
}
|
|
|
|
//NavManager.NavigateTo("/");
|
|
}
|
|
else
|
|
{
|
|
_logger.Info("No token stored yet");
|
|
//NavManager.NavigateTo("/");
|
|
}
|
|
|
|
//ComponentUpdateService.CallRequestRefresh();
|
|
}
|
|
|
|
protected async Task SaveToSessionInfo(UserSessionModel user)
|
|
{
|
|
sessionService.User = user;
|
|
sessionService.IsAuthenticated = true;
|
|
sessionService.HasCompany = user.UserModelDto.UserProductMappings.Count > 0;
|
|
_logger.Debug($"Checking driver for: {user.UserModelDto.UserProductMappings.Count} mapping");
|
|
sessionService.IsDriver = CheckIfDriver(user.UserModelDto.UserProductMappings);
|
|
if (user.UserModelDto.Id == TiamConstClient.DevAdminIds[0] || user.UserModelDto.Id == TiamConstClient.DevAdminIds[1])
|
|
{
|
|
sessionService.IsDevAdmin = true;
|
|
}
|
|
foreach (var guid in TiamConstClient.SysAdmins)
|
|
{
|
|
if (user.UserModelDto.Id == guid)
|
|
{
|
|
sessionService.IsSysAdmin = true;
|
|
}
|
|
}
|
|
_logger.Debug($"Saved to session: IsAuthenticated: {sessionService.IsAuthenticated}, HasCompany: {sessionService.HasCompany}, IsDriver: {sessionService.IsDriver}, IsDevAdmin: {sessionService.IsDevAdmin}, IsSysAdmin: {sessionService.IsSysAdmin}");
|
|
}
|
|
|
|
public bool CheckIfDriver(List<UserProductMapping> permissions)
|
|
{
|
|
bool isDriver = false;
|
|
|
|
foreach (UserProductMapping permission in permissions)
|
|
{
|
|
//var permissionToCheck = await ServiceProviderDataService.GetUserProductMappingByIdAsync(Permission.Id);
|
|
_logger.Debug($"calling IsPowerOf with values: {permission.Id}, {permission.Permissions}, {1}");
|
|
var driverPermissionResult = IsBitSet(permission.Permissions, 1);
|
|
if (driverPermissionResult)
|
|
{
|
|
isDriver = true;
|
|
sessionService.DriverPersmissionId = permission.Id;
|
|
}
|
|
}
|
|
|
|
return isDriver;
|
|
}
|
|
|
|
public bool IsBitSet(int number, int power)
|
|
{
|
|
_logger.Debug($"called IsBitSet with values: {number}, {power}");
|
|
|
|
int powerOfTwo = 1 << power; // Calculate 2^power
|
|
|
|
_logger.Debug($"powerOfTwo: {powerOfTwo}, {power}");
|
|
|
|
bool result = (number & powerOfTwo) != 0; // Check if the bit at position `power` is set
|
|
return result;
|
|
}
|
|
|
|
public async Task<(string, string)> GetLocalSettings()
|
|
{
|
|
string userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails));
|
|
string locale = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.Locale));
|
|
return (userDetailsStr, locale);
|
|
}
|
|
|
|
private void SignOut()
|
|
{
|
|
var userBasicDetail = JsonConvert.DeserializeObject<UserBasicDetails>(userDetailsStr);
|
|
|
|
UserDataService.Logout(userBasicDetail.RefreshToken);
|
|
AuthStateProvider.GetAuthenticationStateAsync();
|
|
SecureStorageHandler.ClearAllSecureStorageAsync();
|
|
sessionService.ClearAll().Forget();
|
|
}
|
|
|
|
CultureInfo Culture
|
|
{
|
|
get => CultureInfo.CurrentCulture;
|
|
set
|
|
{
|
|
if (!Equals(CultureInfo.CurrentCulture, value))
|
|
{
|
|
Thread.CurrentThread.CurrentCulture = value;
|
|
Thread.CurrentThread.CurrentUICulture = value;
|
|
CultureInfo.DefaultThreadCurrentCulture = value;
|
|
CultureInfo.DefaultThreadCurrentUICulture = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|