KeepItUp/Assets/_Scripts/Managers/AuthenticationManager.cs
2022-07-30 21:33:47 +03:00

96 lines
2.7 KiB
C#

using System;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using DatabaseModels.Requests;
using DatabaseModels.Responses;
using UnityEngine;
public class AuthenticationManager : MonoBehaviour
{
[SerializeField] private UIManager _uiManager;
private void Start()
{
if (SessionStore.UserData == null)
{
_uiManager._authenticationMenu.SetActive(true);
}
}
public async void Login()
{
var credentials = _uiManager.GetAuthenticationCredentials();
var authResponse = await HttpClient.Post<AuthenticationResponse>(
$"{SessionStore.ApiUrl}/auth/login",
new AuthenticationRequest
{
Username = credentials.username, Password = credentials.password
});
if (authResponse == null)
{
_uiManager.SetAuthenticationErrorMessage("Server is unavailable.");
return;
}
if (authResponse.IsError)
{
_uiManager.SetAuthenticationErrorMessage(authResponse.ErrorMessage);
return;
}
SessionStore.Jwt = authResponse.Token;
var handler = new JwtSecurityTokenHandler();
var token = handler.ReadJwtToken(authResponse.Token);
SessionStore.UserData = new UserData
{
Id = Int32.Parse(token.Claims.First(c => c.Type == "id").Value),
Username = credentials.username,
Password = credentials.password
};
_uiManager._authenticationMenu.SetActive(false);
}
public async void Register()
{
var credentials = _uiManager.GetAuthenticationCredentials();
var authResponse = await HttpClient.Post<AuthenticationResponse>(
$"{SessionStore.ApiUrl}/auth/register",
new AuthenticationRequest
{
Username = credentials.username, Password = credentials.password
});
if (authResponse == null)
{
_uiManager.SetAuthenticationErrorMessage("Server is unavailable.");
return;
}
if (authResponse.IsError)
{
_uiManager.SetAuthenticationErrorMessage(authResponse.ErrorMessage);
return;
}
SessionStore.Jwt = authResponse.Token;
var handler = new JwtSecurityTokenHandler();
var token = handler.ReadJwtToken(authResponse.Token);
SessionStore.UserData = new UserData
{
Id = Int32.Parse(token.Claims.First(c => c.Type == "id").Value),
Username = credentials.username,
Password = credentials.password
};
_uiManager._authenticationMenu.SetActive(false);
}
}