LANCommander/LANCommander.Launcher/UI/Components/AuthenticationProviderDialog.razor

54 lines
1.6 KiB
Text
Raw Permalink Normal View History

@using LANCommander.SDK.Models
@using Newtonsoft.Json
@using Photino.NET
@inject SDK.Client Client
@inject IJSRuntime JSRuntime
@inject IMessageService MessageService
@inject ILogger<AuthenticationProviderDialog> Logger
@inject LocalizationService LocalizationService
@code {
[Parameter] public EventCallback<AuthToken> OnTokenReceived { get; set; }
string AuthenticationProviderLoginUrl;
PhotinoWindow Window;
public async Task Open(string baseUrl, AuthenticationProvider authenticationProvider)
{
await Client.ChangeServerAddressAsync(baseUrl);
AuthenticationProviderLoginUrl = Client.GetAuthenticationProviderLoginUrl(authenticationProvider.Slug);
Window = new PhotinoWindow()
.SetTitle(LocalizationService.GetString("SignInUsingProvider", authenticationProvider.Name))
.Load(AuthenticationProviderLoginUrl)
.SetContextMenuEnabled(false);
Window.RegisterWebMessageReceivedHandler(MessageHandler);
Window.WaitForClose();
}
async void MessageHandler(object? sender, string message)
{
try
{
var token = JsonConvert.DeserializeObject<AuthToken>(message);
await InvokeAsync(() =>
{
OnTokenReceived.InvokeAsync(token);
});
}
catch (Exception ex)
{
Logger.LogError(ex, "Could not process login");
MessageService.Error(LocalizationService.GetString("CouldNotProcessLogin"));
}
finally
{
Window.Close();
}
}
}