52 lines
1.5 KiB
C#
52 lines
1.5 KiB
C#
using System.IdentityModel.Tokens.Jwt;
|
|
using System.Security.Claims;
|
|
using BlazorWebAssemblyVisaApiClient.Infrastructure.Services.UserDataProvider.Exceptions;
|
|
using VisaApiClient;
|
|
|
|
namespace BlazorWebAssemblyVisaApiClient.Infrastructure.Services.UserDataProvider;
|
|
|
|
public class UserDataProvider(Client client) : IUserDataProvider
|
|
{
|
|
private readonly static JwtSecurityTokenHandler tokenHandler = new();
|
|
|
|
public string? CurrentRole { get; private set; }
|
|
|
|
public Action? OnRoleChanged { get; set; }
|
|
|
|
public async Task<ApplicantModel> GetApplicant()
|
|
{
|
|
return await client.GetApplicantAsync();
|
|
}
|
|
|
|
public void UpdateCurrentRole()
|
|
{
|
|
var role = CurrentRole;
|
|
|
|
if (client.AuthToken is null)
|
|
{
|
|
if (CurrentRole is not null)
|
|
{
|
|
role = null;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var token = tokenHandler.ReadJwtToken(client.AuthToken.Token);
|
|
role = token.Claims.FirstOrDefault(claim => claim.Type == ClaimTypes.Role)?.Value;
|
|
|
|
switch (role)
|
|
{
|
|
case Constants.ApplicantRole: break;
|
|
case Constants.ApprovingAuthorityRole: break;
|
|
case Constants.AdminRole: break;
|
|
default: throw new UnknownRoleException();
|
|
}
|
|
}
|
|
|
|
if (CurrentRole != role)
|
|
{
|
|
CurrentRole = role;
|
|
OnRoleChanged?.Invoke();
|
|
}
|
|
}
|
|
} |