From ec977f64c8b975c5aba20adbaf6ab931f2a2f870 Mon Sep 17 00:00:00 2001 From: Elie Bariche <33458222+ebariche@users.noreply.github.com> Date: Thu, 18 May 2023 17:42:53 -0400 Subject: [PATCH] perf(MSAL): Add AuthenticateAsync binding --- .../Uno.UI.MSAL/Uno.UI.MSAL.Wasm.csproj | 1 + src/AddIns/Uno.UI.MSAL/WasmWebUi.wasm.cs | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/AddIns/Uno.UI.MSAL/Uno.UI.MSAL.Wasm.csproj b/src/AddIns/Uno.UI.MSAL/Uno.UI.MSAL.Wasm.csproj index e1f89df4fab0..1e9c4ecb35fe 100644 --- a/src/AddIns/Uno.UI.MSAL/Uno.UI.MSAL.Wasm.csproj +++ b/src/AddIns/Uno.UI.MSAL/Uno.UI.MSAL.Wasm.csproj @@ -14,6 +14,7 @@ + true true Uno.UI.MSAL Uno.UI.MSAL diff --git a/src/AddIns/Uno.UI.MSAL/WasmWebUi.wasm.cs b/src/AddIns/Uno.UI.MSAL/WasmWebUi.wasm.cs index aa4ccaf9dc98..cc37057abe1c 100644 --- a/src/AddIns/Uno.UI.MSAL/WasmWebUi.wasm.cs +++ b/src/AddIns/Uno.UI.MSAL/WasmWebUi.wasm.cs @@ -4,21 +4,38 @@ using Microsoft.Identity.Client.Extensibility; using Uno.Foundation; +#if NET7_0_OR_GREATER +using System.Runtime.InteropServices.JavaScript; +#endif + namespace Uno.UI.MSAL { - internal class WasmWebUi : ICustomWebUi + internal partial class WasmWebUi : ICustomWebUi { internal static readonly WasmWebUi Instance = new WasmWebUi(); public async Task AcquireAuthorizationCodeAsync(Uri authorizationUri, Uri redirectUri, CancellationToken cancellationToken) { +#if NET7_0_OR_GREATER + var uri = await NativeMethods.AuthenticateAsync(authorizationUri.OriginalString, redirectUri.OriginalString, "Sign in", 483, 600); +#else var urlNavigate = WebAssemblyRuntime.EscapeJs(authorizationUri.OriginalString); var urlRedirect = WebAssemblyRuntime.EscapeJs(redirectUri.OriginalString); var js = $@"MSAL.WebUI.authenticate(""{urlNavigate}"", ""{urlRedirect}"", ""Sign in"", 483, 600);"; var uri = await WebAssemblyRuntime.InvokeAsync(js); +#endif + return new Uri(uri); } + +#if NET7_0_OR_GREATER + internal static partial class NativeMethods + { + [JSImport("globalThis.MSAL.WebUI.authenticate")] + internal static partial Task AuthenticateAsync(string urlNavigate, string urlRedirect, string title, int popupWidth, int popupHeight); + } +#endif } }