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; if (!(await StartCustomTabsActivity(url))) { // Fall back to opening the system-registered browser if necessary var urlOriginalString = url.OriginalString; var browserIntent = new Intent(Intent.ActionView, global::Android.Net.Uri.Parse(urlOriginalString)); Platform.CurrentActivity.StartActivity(browserIntent); } return(await tcsResponse.Task); }
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(); } }
public static Task <WebAuthenticatorResult> AuthenticateAsync(WebAuthenticatorOptions webAuthenticatorOptions) => PlatformAuthenticateAsync(webAuthenticatorOptions);
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; 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)) {
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;