@page "/"; @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; @inject NavigationManager NavManager @inject IJSRuntime JSRuntime @inject LogToBrowserConsole logToBrowserConsole @inject IUserDataService UserDataService @inject ISecureStorageHandler SecureStorageHandler @inject ISessionService sessionService; @inject HttpClient http;

AppLaunch

Loading.... @code { string userDetailsStr; string locale; protected async override Task OnInitializedAsync() { var (_userDetailStr, _locale) = await GetLocalSettings(); userDetailsStr = _userDetailStr; if(_locale != null) { locale = _locale; Culture = new CultureInfo(locale); logToBrowserConsole.LogToBC("Locale from settings: " + locale); } else { logToBrowserConsole.LogToBC("Default locale:" + Culture.Name); } logToBrowserConsole = new LogToBrowserConsole(JSRuntime); //wait for 5 seconds await Task.Delay(1000); if (!string.IsNullOrWhiteSpace(userDetailsStr)) { logToBrowserConsole.LogToBC(userDetailsStr); var userBasicDetail = JsonConvert.DeserializeObject(userDetailsStr); var handler = new JwtSecurityTokenHandler(); var jsontoken = handler.ReadToken(userBasicDetail?.AccessToken) as JwtSecurityToken; if(userBasicDetail!= null) Setting.UserBasicDetails = userBasicDetail; if (jsontoken?.ValidTo < DateTime.UtcNow) { logToBrowserConsole.LogToBC("Token needs to be refreshed"); bool isTokenRefreshed = await UserDataService.RefreshToken(); if (isTokenRefreshed) { logToBrowserConsole.LogToBC("Token refreshed"); } else { logToBrowserConsole.LogToBC("Couldn't refresh token"); SignOut(); NavManager.NavigateTo("/index"); return; } } else { logToBrowserConsole.LogToBC("Valid token found"); } 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)); sessionService.User = user; logToBrowserConsole.LogToBC($"Saved user in db is: {user.Email}, setting autenthicated state"); sessionService.IsAuthenticated = true; NavManager.NavigateTo("/index"); } else { logToBrowserConsole.LogToBC("No token stored yet"); NavManager.NavigateTo("/index"); } } 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() { SecureStorageHandler.ClearAllSecureStorageAsync(); sessionService.User = null; sessionService.IsAuthenticated = false; } CultureInfo Culture { get => CultureInfo.CurrentCulture; set { if (CultureInfo.CurrentCulture != value) { Thread.CurrentThread.CurrentCulture = value; Thread.CurrentThread.CurrentUICulture = value; CultureInfo.DefaultThreadCurrentCulture = value; CultureInfo.DefaultThreadCurrentUICulture = value; } } } }