78 lines
2.8 KiB
C#
78 lines
2.8 KiB
C#
using MesaFabApproval.Client.Services;
|
|
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.AspNetCore.WebUtilities;
|
|
|
|
using MudBlazor;
|
|
|
|
using System.Security.Claims;
|
|
|
|
namespace MesaFabApproval.Client.Pages;
|
|
|
|
public partial class AuthenticatedRedirect {
|
|
[Inject] MesaFabApprovalAuthStateProvider authStateProvider { get; set; }
|
|
[Inject] IAuthenticationService authService { get; set; }
|
|
[Inject] IUserService userService { get; set; }
|
|
[Inject] ISnackbar snackbar { get; set; }
|
|
[Inject] NavigationManager navigationManager { get; set; }
|
|
|
|
private string? _jwt;
|
|
private string? _refreshToken;
|
|
private string? _redirectPath;
|
|
|
|
protected override async Task OnParametersSetAsync() {
|
|
try {
|
|
Uri uri = navigationManager.ToAbsoluteUri(navigationManager.Uri);
|
|
|
|
if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("jwt", out var jwt)) {
|
|
_jwt = System.Net.WebUtility.UrlDecode(jwt);
|
|
}
|
|
|
|
if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("refreshToken", out var refreshToken)) {
|
|
_refreshToken = System.Net.WebUtility.UrlDecode(refreshToken);
|
|
}
|
|
|
|
if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("redirectPath", out var redirectPath)) {
|
|
_redirectPath = redirectPath.ToString();
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(_jwt) && !string.IsNullOrWhiteSpace(_refreshToken)) {
|
|
await authService.SetTokens(_jwt, _refreshToken);
|
|
|
|
ClaimsPrincipal principal = authService.GetClaimsPrincipalFromJwt(_jwt);
|
|
|
|
string loginId = userService.GetLoginIdFromClaimsPrincipal(principal);
|
|
|
|
await authService.ClearCurrentUser();
|
|
await authService.ClearTokens();
|
|
|
|
await authService.SetLoginId(loginId);
|
|
await authService.SetTokens(_jwt, _refreshToken);
|
|
await authService.SetCurrentUser(null);
|
|
|
|
await authStateProvider.StateHasChanged(principal);
|
|
}
|
|
|
|
if (authStateProvider.CurrentUser is not null && !string.IsNullOrWhiteSpace(_redirectPath)) {
|
|
navigationManager.NavigateTo(_redirectPath);
|
|
} else {
|
|
await authStateProvider.Logout();
|
|
|
|
if (!string.IsNullOrWhiteSpace(_redirectPath)) {
|
|
navigationManager.NavigateTo($"login/{_redirectPath}");
|
|
} else {
|
|
navigationManager.NavigateTo("login");
|
|
}
|
|
}
|
|
} catch (Exception ex) {
|
|
await authStateProvider.Logout();
|
|
|
|
if (!string.IsNullOrWhiteSpace(_redirectPath)) {
|
|
navigationManager.NavigateTo($"login/{_redirectPath}");
|
|
} else {
|
|
navigationManager.NavigateTo("login");
|
|
}
|
|
}
|
|
}
|
|
}
|