@page "/login"
@using System.IdentityModel.Tokens.Jwt;
@using System.Security.Claims;
@using Newtonsoft.Json.Linq;
@using System.Text.Json;
@using System.Reflection;
@using TIAMWebApp.Shared.Application.Interfaces;
@using TIAMWebApp.Shared.Application.Models.PageModels;
@using TIAMSharedUI.Pages.Components;
@using TIAMWebApp.Shared.Application.Models.ClientSide;
@using TIAMWebApp.Shared.Application.Models;
@using TIAMWebApp.Shared.Application.Utility;
@using AyCode.Interfaces.StorageHandlers;
@inject NavigationManager navManager
@inject LogToBrowserConsole logToBrowserConsole
@inject IUserDataService userDataService
@inject IJSRuntime jsRuntime
@inject ISecureStorageHandler SecureStorageHandler
Login
Let's get you inside!
@currentStep
@{
if (!loggedIn)
{
@loginModel.Email
@loginModel.Password
}
}
No account yet?
Sign up here!
@code {
LoginModel loginModel = new();
private int currentStep = 1;
bool loggedIn = false;
private void GoToNextStep()
{
currentStep++;
}
private void GoToPreviousStep()
{
currentStep--;
}
private async void SubmitLogin()
{
currentStep = 1;
logToBrowserConsole.LogToBC("Login started: " + "Email: " + loginModel.Email + ", Password: " + loginModel.Password);
var response = await userDataService.AuthenticateUser(loginModel);
//var response = await UserDataservice.TestUserApi(30);
logToBrowserConsole.LogToBC("Login started");
logToBrowserConsole.LogToBC(response);
if (!string.IsNullOrEmpty(response))
{
//get token and save to local storage
//parse to Mainresponse from json string
//var Mainresponse = JsonSerializer.Deserialize(response);
var Mainresponse = JsonSerializer.Deserialize(response, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
if (Mainresponse != null)
{
//check for bad request
string AuthResponseJson = JsonSerializer.Serialize(Mainresponse.Content);
var AuthResponse = JsonSerializer.Deserialize(AuthResponseJson, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
string accessToken = AuthResponse.AccessToken;
var handler = new JwtSecurityTokenHandler();
var token = handler.ReadJwtToken(accessToken) as JwtSecurityToken;
string _userId = token.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.NameId).Value;
string _email = token.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.Email).Value;
var myId = Guid.Parse(_userId);
//userDataService.User.Email = _email;
var userBasicDetails = new UserBasicDetails(_userId, _email, AuthResponse.AccessToken, AuthResponse.RefreshToken);
string userBasicDetailsJson = JsonSerializer.Serialize(userBasicDetails);
//save to local storage
await SecureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userBasicDetailsJson);
if (!Mainresponse.IsSuccess)
{
//await App.Current.MainPage.DisplayAlert("Error", "Invalid credentials", "Ok");
//display error message via jsinterop
logToBrowserConsole.LogToBC("Invalid credentials");
navManager.NavigateTo("login");
}
else
{
//await App.Current.MainPage.DisplayAlert("Success", "Successful login", "Ok");
//display success message via jsinterop
logToBrowserConsole.LogToBC("Successful login");
var user = await userDataService.IsLoggedInAsync(myId);
user.UserType = UserType.Admin;
navManager.NavigateTo("home");
}
}
}
else
{
//api error
//await App.Current.MainPage.DisplayAlert("Error", "An error occured while trying to login", "Ok");
//display error message via jsinterop
logToBrowserConsole.LogToBC("An error occured while trying to login");
navManager.NavigateTo("login");
}
}
}