165 lines
5.3 KiB
Plaintext
165 lines
5.3 KiB
Plaintext
@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
|
|
|
|
<PageTitle>Login</PageTitle>
|
|
|
|
<div class="wrapper">
|
|
<div class="my-logo">
|
|
<img src="_content/TIAMSharedUI/images/png-logo-0.png" alt="">
|
|
</div>
|
|
<div class="text-center mt-4 name">
|
|
Let's get you inside!
|
|
</div>
|
|
<form class="p-3 mt-3">
|
|
<div>
|
|
@switch (currentStep)
|
|
{
|
|
case 1:
|
|
<LoginStep1 @bind-LoginModel="loginModel" onLoginNext="GoToNextStep" />
|
|
;
|
|
break;
|
|
|
|
case 2:
|
|
<LoginStep3 @bind-LoginModel="loginModel" onSubmit="SubmitLogin" onPrev="GoToPreviousStep" />
|
|
;
|
|
break;
|
|
}
|
|
</div>
|
|
|
|
|
|
</form>
|
|
<p>@currentStep</p>
|
|
@{
|
|
if (!loggedIn)
|
|
{
|
|
|
|
<div>
|
|
|
|
<p>@loginModel.Email</p>
|
|
|
|
<p>@loginModel.Password</p>
|
|
</div>
|
|
}
|
|
}
|
|
<div class="text-center fs-6">
|
|
No account yet? <a href="register">Sign up here!</a>
|
|
</div>
|
|
</div>
|
|
|
|
@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<MainResponse>(response);
|
|
var Mainresponse = JsonSerializer.Deserialize<MainResponse>(response, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
|
|
|
|
if (Mainresponse != null)
|
|
{
|
|
|
|
//check for bad request
|
|
|
|
string AuthResponseJson = JsonSerializer.Serialize(Mainresponse.Content);
|
|
|
|
var AuthResponse = JsonSerializer.Deserialize<AuthenticationResponse>(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");
|
|
}
|
|
|
|
}
|
|
|
|
|
|
} |