static async Task <WebAuthenticatorResult> PlatformAuthenticateAsync(WebAuthenticatorOptions webAuthenticatorOptions) { var url = webAuthenticatorOptions?.Url; var callbackUrl = webAuthenticatorOptions?.CallbackUrl; if (!IsUriProtocolDeclared(callbackUrl.Scheme)) { throw new InvalidOperationException($"You need to declare the windows.protocol usage of the protocol/scheme `{callbackUrl.Scheme}` in your AppxManifest.xml file"); } try { var r = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, url, callbackUrl); switch (r.ResponseStatus) { case WebAuthenticationStatus.Success: // For GET requests this is a URI: var resultUri = new Uri(r.ResponseData.ToString()); return(new WebAuthenticatorResult(resultUri)); case WebAuthenticationStatus.UserCancel: throw new TaskCanceledException(); case WebAuthenticationStatus.ErrorHttp: throw new HttpRequestException("Error: " + r.ResponseErrorDetail); default: throw new Exception("Response: " + r.ResponseData.ToString() + "\nStatus: " + r.ResponseStatus); } } catch (FileNotFoundException) { throw new TaskCanceledException(); } }
internal static async Task <WebAuthenticatorResult> PlatformAuthenticateAsync(WebAuthenticatorOptions webAuthenticatorOptions) { var url = webAuthenticatorOptions?.Url; var callbackUrl = webAuthenticatorOptions?.CallbackUrl; if (!AppInfo.VerifyHasUrlScheme(callbackUrl.Scheme)) { throw new InvalidOperationException("You must register your URL Scheme handler in your app's Info.plist!"); } // Cancel any previous task that's still pending if (tcsResponse?.Task != null && !tcsResponse.Task.IsCompleted) { tcsResponse.TrySetCanceled(); } tcsResponse = new TaskCompletionSource <WebAuthenticatorResult>(); redirectUri = callbackUrl; var scheme = redirectUri.Scheme; if (DeviceInfo.Version >= new Version(10, 15)) {
static async Task <WebAuthenticatorResult> PlatformAuthenticateAsync(WebAuthenticatorOptions webAuthenticatorOptions) { var url = webAuthenticatorOptions?.Url; var callbackUrl = webAuthenticatorOptions?.CallbackUrl; var packageName = Platform.AppContext.PackageName; // Create an intent to see if the app developer wired up the callback activity correctly var intent = new Intent(Intent.ActionView); intent.AddCategory(Intent.CategoryBrowsable); intent.AddCategory(Intent.CategoryDefault); intent.SetPackage(packageName); intent.SetData(global::Android.Net.Uri.Parse(callbackUrl.OriginalString)); // Try to find the activity for the callback intent if (!Platform.IsIntentSupported(intent, packageName)) { throw new InvalidOperationException($"You must subclass the `{nameof(WebAuthenticatorCallbackActivity)}` and create an IntentFilter for it which matches your `{nameof(callbackUrl)}`."); } // Cancel any previous task that's still pending if (tcsResponse?.Task != null && !tcsResponse.Task.IsCompleted) { tcsResponse.TrySetCanceled(); } tcsResponse = new TaskCompletionSource <WebAuthenticatorResult>(); currentRedirectUri = callbackUrl; var parentActivity = Platform.GetCurrentActivity(true); var customTabsActivityManager = CustomTabsActivityManager.From(parentActivity); try { if (await BindServiceAsync(customTabsActivityManager)) { var customTabsIntent = new CustomTabsIntent.Builder(customTabsActivityManager.Session) .SetShowTitle(true) .Build(); customTabsIntent.Intent.SetData(global::Android.Net.Uri.Parse(url.OriginalString)); WebAuthenticatorIntermediateActivity.StartActivity(parentActivity, customTabsIntent.Intent); } else { // Fall back to opening the system browser if necessary var browserIntent = new Intent(Intent.ActionView, global::Android.Net.Uri.Parse(url.OriginalString)); Platform.CurrentActivity.StartActivity(browserIntent); } return(await tcsResponse.Task); } finally { try { customTabsActivityManager.Client?.Dispose(); } finally { } } }
static Task <WebAuthenticatorResult> PlatformAuthenticateAsync(WebAuthenticatorOptions webAuthenticatorOptions) => throw ExceptionUtils.NotSupportedOrImplementedException;
internal static async Task <WebAuthenticatorResult> PlatformAuthenticateAsync(WebAuthenticatorOptions webAuthenticatorOptions) { var url = webAuthenticatorOptions?.Url; var callbackUrl = webAuthenticatorOptions?.CallbackUrl; var prefersEphemeralWebBrowserSession = webAuthenticatorOptions?.PrefersEphemeralWebBrowserSession ?? false; if (!VerifyHasUrlSchemeOrDoesntRequire(callbackUrl.Scheme)) { throw new InvalidOperationException("You must register your URL Scheme handler in your app's Info.plist."); } // Cancel any previous task that's still pending if (tcsResponse?.Task != null && !tcsResponse.Task.IsCompleted) { tcsResponse.TrySetCanceled(); } tcsResponse = new TaskCompletionSource <WebAuthenticatorResult>(); redirectUri = callbackUrl; var scheme = redirectUri.Scheme;
/// <include file="../../docs/Microsoft.Maui.Essentials/WebAuthenticator.xml" path="//Member[@MemberName='AuthenticateAsync']/Docs" /> public static Task <WebAuthenticatorResult> AuthenticateAsync(WebAuthenticatorOptions webAuthenticatorOptions) => PlatformAuthenticateAsync(webAuthenticatorOptions);