64 lines
2.4 KiB
Plaintext
64 lines
2.4 KiB
Plaintext
@page "/redirect"
|
|
@attribute [AllowAnonymous]
|
|
@inject MesaFabApprovalAuthStateProvider authStateProvider
|
|
@inject IAuthenticationService authService
|
|
@inject IUserService userService
|
|
@inject ISnackbar snackbar
|
|
@inject MesaFabApprovalAuthStateProvider authStateProvider
|
|
@inject NavigationManager navigationManager
|
|
|
|
@code {
|
|
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 = System.Net.WebUtility.UrlDecode(redirectPath);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(_jwt) && !string.IsNullOrWhiteSpace(_refreshToken)) {
|
|
await authService.SetTokens(_jwt, _refreshToken);
|
|
|
|
ClaimsPrincipal principal = authService.GetClaimsPrincipalFromJwt(_jwt);
|
|
|
|
string loginId = userService.GetLoginIdFromClaimsPrincipal(principal);
|
|
|
|
await authService.SetLoginId(loginId);
|
|
await authService.SetTokens(_jwt, _refreshToken);
|
|
|
|
User? user = await userService.GetUserByLoginId(loginId);
|
|
await authService.SetCurrentUser(user);
|
|
|
|
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) {
|
|
snackbar.Add($"Redirect failed, because {ex.Message}", Severity.Error);
|
|
navigationManager.NavigateTo("login");
|
|
}
|
|
}
|
|
} |