protected override async Task <FingerprintAuthenticationResult> NativeAuthenticateAsync(AuthenticationRequestConfiguration authRequestConfig, CancellationToken cancellationToken = new CancellationToken()) { var result = new FingerprintAuthenticationResult(); SetupContextProperties(authRequestConfig); Tuple <bool, NSError> resTuple; using (cancellationToken.Register(CancelAuthentication)) { var policy = GetPolicy(authRequestConfig.AllowAlternativeAuthentication); resTuple = await _context.EvaluatePolicyAsync(policy, authRequestConfig.Reason); } if (resTuple.Item1) { result.Status = FingerprintAuthenticationResultStatus.Succeeded; } else { // #79 simulators return null for any reason if (resTuple.Item2 == null) { result.Status = FingerprintAuthenticationResultStatus.UnknownError; result.ErrorMessage = ""; } else { result = GetResultFromError(resTuple.Item2); } } CreateNewContext(); return(result); }
private void SetResultSafe(FingerprintAuthenticationResult result) { if (!(_taskCompletionSource.Task.IsCanceled || _taskCompletionSource.Task.IsCompleted || _taskCompletionSource.Task.IsFaulted)) { _taskCompletionSource.SetResult(result); } }
public MainPage() { InitializeComponent(); MasterBehavior = MasterBehavior.Popover; MenuPages.Add((int)MenuItemType.Browse, (NavigationPage)Detail); if (Device.RuntimePlatform != "UWP") { if (CrossFingerprint.Current.IsAvailableAsync().Result) { Task <FingerprintAuthenticationResult> result = Task.Run(async() => { AuthenticationRequestConfiguration conf = new AuthenticationRequestConfiguration("Login via Fingerprint", "Tap that fingerprint sensor!"); FingerprintAuthenticationResult oResult = await CrossFingerprint.Current.AuthenticateAsync(conf); return(oResult); }); if (result.Result.Authenticated) { DisplayAlert("Results are here", "Valid fingerprint found", "Ok"); } else { DisplayAlert("Results are here", "Invalid fingerprint", "Ok"); } } } }
private async void BtnFingerPrint_Clicked(object sender, EventArgs e) { //Check if Fingerprint ID is available on mobile device. if (await CrossFingerprint.Current.IsAvailableAsync()) { //If avaialbe authenticate by Fingerprint ID. FingerprintAuthenticationResult result = await CrossFingerprint.Current.AuthenticateAsync("Provide fingerprint to sign in."); //If authentication is successful continue to next page. if (result.Authenticated) { int count = await UserRepository.GetRowCount(); if (count > 0) // If record count for User table is > 0 then an account exist { await Navigation.PushAsync(new Home()); } else // If the record count is 0 then no User account exist { await Navigation.PushAsync(new SelectType()); } } } else { // If FingerprintID is NOT availabe on mobile device, display appropriate error message. await DisplayAlert("Authentication Not Possible", "Fingerprint authentication is not available on your device", "OK"); } }
public void OnClick(IDialogInterface dialog, int which) { var faResult = new FingerprintAuthenticationResult { Status = FingerprintAuthenticationResultStatus.Canceled }; SetResultSafe(faResult); }
internal static FingerprintResult From(FingerprintAuthenticationResult result) { return(new FingerprintResult { Status = Enum.Parse <FingerprintCheckStatus>(result.Status.ToString()), ErrorMessage = result.ErrorMessage }); }
protected override async Task <FingerprintAuthenticationResult> NativeAuthenticateAsync(AuthenticationRequestConfiguration authRequestConfig, CancellationToken cancellationToken = new CancellationToken()) { var result = new FingerprintAuthenticationResult(); SetupContextProperties(authRequestConfig); Tuple <bool, NSError> resTuple; using (cancellationToken.Register(CancelAuthentication)) { var policy = GetPolicy(authRequestConfig.AllowAlternativeAuthentication); resTuple = await _context.EvaluatePolicyAsync(policy, authRequestConfig.Reason); } if (resTuple.Item1) { result.Status = FingerprintAuthenticationResultStatus.Succeeded; } else { switch ((LAStatus)(int)resTuple.Item2.Code) { case LAStatus.AuthenticationFailed: var description = resTuple.Item2.Description; if (description != null && description.Contains("retry limit exceeded")) { result.Status = FingerprintAuthenticationResultStatus.TooManyAttempts; } else { result.Status = FingerprintAuthenticationResultStatus.Failed; } break; case LAStatus.UserCancel: case LAStatus.AppCancel: result.Status = FingerprintAuthenticationResultStatus.Canceled; break; case LAStatus.UserFallback: result.Status = FingerprintAuthenticationResultStatus.FallbackRequested; break; case LAStatus.TouchIDLockout: result.Status = FingerprintAuthenticationResultStatus.TooManyAttempts; break; default: result.Status = FingerprintAuthenticationResultStatus.UnknownError; break; } result.ErrorMessage = resTuple.Item2.LocalizedDescription; } CreateNewContext(); return(result); }
public override void OnAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { base.OnAuthenticationSucceeded(result); var faResult = new FingerprintAuthenticationResult { Status = FingerprintAuthenticationResultStatus.Succeeded }; SetResultSafe(faResult); }
// https://developer.android.com/reference/android/hardware/fingerprint/FingerprintManager.AuthenticationCallback.html public override void OnAuthenticationSucceeded(FingerprintManager.AuthenticationResult res) { base.OnAuthenticationSucceeded(res); var result = new FingerprintAuthenticationResult { Status = FingerprintAuthenticationResultStatus.Succeeded }; SetResultSafe(result); }
private async Task SetResultAsync(FingerprintAuthenticationResult result) { if (result.Authenticated) { App.Current.MainPage = new CustomNavigationPage(new MainPage());//跳转页面 } else { } }
private async void Dismiss(FingerprintAuthenticationResult result, bool animation = true) { if (animation) { await AnimateResultAsync(result.Status); } _resultTaskCompletionSource.SetResult(result); Dismiss(); }
// Do not cancel the dialog on error. // TODO: Implement feedback (shaking icon, display text, ...) //public override void OnAuthenticationFailed() //{ // base.OnAuthenticationFailed(); // var result = new FingerprintAuthenticationResult { Status = FingerprintAuthenticationResultStatus.UnknownError }; // SetResultSafe(result); //} public override void OnAuthenticationError(FingerprintState errorCode, ICharSequence errString) { base.OnAuthenticationError(errorCode, errString); var message = errString != null?errString.ToString() : string.Empty; var result = new FingerprintAuthenticationResult { Status = FingerprintAuthenticationResultStatus.Failed, ErrorMessage = message }; SetResultSafe(result); }
private async Task SetResultAsync(FingerprintAuthenticationResult result) { if (result.Authenticated) { _navService.NavigateTo(ViewModelLocator.Master, CurrentUser); } else { await UserDialogs.Instance.AlertAsync("Invalid pattern detected !"); } }
private async Task SetResultAsync(FingerprintAuthenticationResult result) { if (result.Authenticated) { await Navigation.PushAsync(new SecretView()); } else { lblStatus.Text = $"{result.Status}: {result.ErrorMessage}"; } }
public void SetResultAsync(FingerprintAuthenticationResult result) { if (result.Authenticated) { fingerPrintValidate = true; } else { fingerPrintValidate = false; } }
private async Task SetResultAsync(FingerprintAuthenticationResult result) { if (result.Authenticated) { await DisplayAlert("FingerPrint Sample", "Success", "Ok"); } else { await DisplayAlert("FingerPrint Sample", result.ErrorMessage, "Ok"); } }
private async void Dismiss(FingerprintAuthenticationResult result, bool animation = true) { DetachEventHandlers(); if (animation) { // HideHelpText(); await AnimateResultAsync(result.Status); } _resultTaskCompletionSource.TrySetResult(result); DismissAllowingStateLoss(); }
// Set authentication Result private async Task SetResultAsync(FingerprintAuthenticationResult result) { if (result.Authenticated) { await DisplayAlert("Success", "Fingerprint success", "OK"); lblStatus.Text = result.Status.ToString(); } else { lblStatus.Text = $"{result.Status}: {result.ErrorMessage}"; } }
private Task SetResultAsync(FingerprintAuthenticationResult result) { if (result.Authenticated) { performUnlock(); } else { _ = displaySpixiAlert(SpixiLocalization._SL("global-lock-invalidpassword-title"), SpixiLocalization._SL("global-lock-invalidpassword-text"), "Cancel"); } return(Task.CompletedTask); }
private async void BtnAuthenticate_Clicked(object sender, EventArgs e) { FingerprintAuthenticationResult result = await CrossFingerprint.Current.AuthenticateAsync("Tap the fingerprint sensor"); if (result.Authenticated) { LblAuthenticate.Text = "VALIDATION DONE"; LblAuthenticate.TextColor = Color.Green; } else { LblAuthenticate.Text = "VALIDATION FAILED"; LblAuthenticate.TextColor = Color.Red; } }
private async Task SetResultAsync(FingerprintAuthenticationResult result) { if (result.Authenticated) { var alert = Application.Current.MainPage.DisplayAlert("Fingerprint scan successful", "Your fingerprint scan was successful.", "OK"); //Debug.WriteLine($"_url = {_url}"); //Application.Current.MainPage = new WebViewArgsPage(_url); } else { Debug.WriteLine($"Error in Fingerprint Scan"); Debug.WriteLine($"{result.ErrorMessage}"); //var alert = Application.Current.MainPage.DisplayAlert("Fingerprint scan failed", $"{result.ErrorMessage}", "OK"); } }
private FingerprintAuthenticationResult GetResultFromError(NSError error) { var result = new FingerprintAuthenticationResult(); switch ((LAStatus)(int)error.Code) { case LAStatus.AuthenticationFailed: var description = error.Description; if (description != null && description.Contains("retry limit exceeded")) { result.Status = FingerprintAuthenticationResultStatus.TooManyAttempts; } else { result.Status = FingerprintAuthenticationResultStatus.Failed; } break; case LAStatus.UserCancel: case LAStatus.AppCancel: result.Status = FingerprintAuthenticationResultStatus.Canceled; break; case LAStatus.UserFallback: result.Status = FingerprintAuthenticationResultStatus.FallbackRequested; break; case LAStatus.TouchIDLockout: result.Status = FingerprintAuthenticationResultStatus.TooManyAttempts; break; case LAStatus.BiometryNotAvailable: // this can happen if it was available, but the user didn't allow face ID result.Status = IsDeniedError(error) ? FingerprintAuthenticationResultStatus.Denied : FingerprintAuthenticationResultStatus.NotAvailable; break; default: result.Status = FingerprintAuthenticationResultStatus.UnknownError; break; } result.ErrorMessage = error.LocalizedDescription; return(result); }
private async Task SetResultAsync(FingerprintAuthenticationResult result) { if (result.Authenticated) { if (SecureStorage.GetAsync(App.FingerPass).Result == null) { if (SecureStorage.GetAsync(App.PasswordPass).Result == null) { App.LoginMethod = Enums.LoginMethodEnum.Fingerprint; CreateButton.IsVisible = false; await Navigation.PushAsync(new NotePage()).ConfigureAwait(true); } else { var hash = Crypto.ComputeSHA512Hash(PasswordEntry.Text); try { string savedHash = await SecureStorage.GetAsync(key).ConfigureAwait(true); if (savedHash == hash) { App.PassText = PasswordEntry.Text; PasswordEntry.Text = ""; App.LoginMethod = Enums.LoginMethodEnum.Fingerprint; await Navigation.PushAsync(new NotePage()).ConfigureAwait(true); } else { PasswordEntry.Text = ""; await DisplayAlert("Error", "Please provide correct password", "Ok"); } } catch (Exception ex) { } } } else { App.LoginMethod = Enums.LoginMethodEnum.Fingerprint; await Navigation.PushAsync(new NotePage()).ConfigureAwait(true); } } else { await DisplayAlert("Finger not found :(", result.ErrorMessage, "Ok"); } }
public override void OnAuthenticationError(int errorCode, ICharSequence errString) { base.OnAuthenticationError(errorCode, errString); var message = errString != null?errString.ToString() : string.Empty; var result = new FingerprintAuthenticationResult { Status = FingerprintAuthenticationResultStatus.Failed, ErrorMessage = message }; if (errorCode == BiometricPrompt.InterfaceConsts.ErrorLockout) { result.Status = FingerprintAuthenticationResultStatus.TooManyAttempts; } SetResultSafe(result); }
private void SetResult(FingerprintAuthenticationResult result) { if (result.Authenticated) { var alert = new NSAlert { AlertStyle = NSAlertStyle.Informational, MessageText = "Success", InformativeText = "You have Fingers!" }; alert.BeginSheet(this.View.Window); } else { lblStatus.StringValue = $"{result.Status}: {result.ErrorMessage}"; } }
public async Task <FingerprintAuthenticationResult> AuthenticateAsync(string reason, CancellationToken cancellationToken) { var result = new FingerprintAuthenticationResult(); cancellationToken.Register(CancelAuthentication); if (!IsAvailable) { result.Status = FingerprintAuthenticationResultStatus.NotAvailable; return(result); } var resTuple = await _context.EvaluatePolicyAsync(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, reason); if (resTuple.Item1) { result.Status = FingerprintAuthenticationResultStatus.Succeeded; } else { switch ((LAStatus)(int)resTuple.Item2.Code) { case LAStatus.AuthenticationFailed: result.Status = FingerprintAuthenticationResultStatus.Failed; break; case LAStatus.UserCancel: result.Status = FingerprintAuthenticationResultStatus.Canceled; break; case LAStatus.UserFallback: result.Status = FingerprintAuthenticationResultStatus.FallbackRequested; break; default: result.Status = FingerprintAuthenticationResultStatus.UnknownError; break; } result.ErrorMessage = resTuple.Item2.LocalizedDescription; } return(result); }
private async Task SetResultAsync(FingerprintAuthenticationResult result) { if (result.Authenticated) { Android.App.AlertDialog.Builder dialog = new Android.App.AlertDialog.Builder(this); Android.App.AlertDialog alert = dialog.Create(); alert.SetTitle("Xamarin Android FingerPrint Sample"); alert.SetMessage("Success"); alert.Show(); } else { Android.App.AlertDialog.Builder dialog = new Android.App.AlertDialog.Builder(this); Android.App.AlertDialog alert = dialog.Create(); alert.SetTitle("Xamarin Android FingerPrint Sample"); alert.SetMessage("Failed"); alert.Show(); } }
public async Task <FingerprintAuthenticationResult> AuthenticateAsync(string reason, CancellationToken cancellationToken) { var result = new FingerprintAuthenticationResult(); try { var verificationResult = await UserConsentVerifier.RequestVerificationAsync(reason); switch (verificationResult) { case UserConsentVerificationResult.Verified: result.Status = FingerprintAuthenticationResultStatus.Succeeded; break; case UserConsentVerificationResult.DeviceBusy: case UserConsentVerificationResult.DeviceNotPresent: case UserConsentVerificationResult.DisabledByPolicy: case UserConsentVerificationResult.NotConfiguredForUser: result.Status = FingerprintAuthenticationResultStatus.NotAvailable; break; case UserConsentVerificationResult.RetriesExhausted: result.Status = FingerprintAuthenticationResultStatus.Failed; break; case UserConsentVerificationResult.Canceled: result.Status = FingerprintAuthenticationResultStatus.Canceled; break; default: result.Status = FingerprintAuthenticationResultStatus.NotAvailable; break; } } catch (Exception ex) { result.Status = FingerprintAuthenticationResultStatus.UnknownError; result.ErrorMessage = ex.Message; } return(result); }
private FingerprintAuthenticationResult GetResultFromError(NSError error) { var result = new FingerprintAuthenticationResult(); switch ((LAStatus)(int)error.Code) { case LAStatus.AuthenticationFailed: var description = error.Description; if (description != null && description.Contains("retry limit exceeded")) { result.Status = FingerprintAuthenticationResultStatus.TooManyAttempts; } else { result.Status = FingerprintAuthenticationResultStatus.Failed; } break; case LAStatus.UserCancel: case LAStatus.AppCancel: result.Status = FingerprintAuthenticationResultStatus.Canceled; break; case LAStatus.UserFallback: result.Status = FingerprintAuthenticationResultStatus.FallbackRequested; break; case LAStatus.TouchIDLockout: result.Status = FingerprintAuthenticationResultStatus.TooManyAttempts; break; default: result.Status = FingerprintAuthenticationResultStatus.UnknownError; break; } result.ErrorMessage = error.LocalizedDescription; return(result); }
public async void fingerAuth(bool first = false) { bool isFingerprintAvailable = await CrossFingerprint.Current.IsAvailableAsync(false); //Проверяем наличие датчика отпечатков и наличие загрузки приложение //Если первый раз запустили, то нет смысла выводить данное сообщение if (!isFingerprintAvailable && !first) { await DisplayAlert("Ошибка", "Вход по отпечатку пальца недоступен", "OK"); return; } AuthenticationRequestConfiguration conf = new AuthenticationRequestConfiguration("Аутентификация", "Авторизируйтесь"); //Проверяем прошла ли авторизация по отпечатку FingerprintAuthenticationResult authResult = await CrossFingerprint.Current.AuthenticateAsync(conf); if (authResult.Authenticated) { try { try { await PopupNavigation.Instance.PushAsync(new StatusBar()); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Request request = new Request(); //Проверяем авторизацию по логину и паролю, если все ок, то выводим задачи пользователю, если нет, то выводим ошибку if (request.authorization(CrossSettings.Current.GetValueOrDefault("login", login.Text.Trim(' ')), CrossSettings.Current.GetValueOrDefault("password", password.Text))) { errorMessage.IsVisible = false; errorMessage1.IsVisible = false; Analytics.TrackEvent("Выполнен вход в систему: пользователь - " + CrossSettings.Current.GetValueOrDefault("login", string.Empty) + ", " + DateTime.Now); //Инициализируем данные о авторизации при подключении для получения изображений в FFImageLoading //ImageService.Instance.Config.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", //Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes($"{CrossSettings.Current.GetValueOrDefault("login", login.Text)}:{CrossSettings.Current.GetValueOrDefault("password", password.Text)}"))); // если дата емпти, запрускает главный экран приложения if (data == "empty") { await Navigation.PushModalAsync(new AllIssues()).ConfigureAwait(true); } else { //регулярные выражения обрабатывают полученые ссылки // и если ссылка соответсвует одному из регклярных выражений, то вызывается страница // соответсвующая тому или инному регулярному выражению // если ссылка не соответствует ни одному регулярному выражению, то открывается глаынй экран приложенгия Regex regex = new Regex(@"(objectId=(\w{2,100}$)|(id=(.{2,1000}$)))"); Match match2 = regex.Match(data); if (match2.Success) { string input = Regex.Replace(match2.Value, @"(^\w{2,100}=)", ""); JSONRequest jsonRequest = new JSONRequest() { urlRequest = $"/rest/insight/1.0/object/{input}", methodRequest = "GET" }; request = new Request(jsonRequest); ObjectEntry insightObject = request.GetResponses <ObjectEntry>(); await Navigation.PushModalAsync(new NavigationPage (new TabPageObjectInsight(insightObject))).ConfigureAwait(true); } if (!match2.Success) { regex = new Regex(@"(\w{2,10}-+\d{2,100}$)"); Match match1 = regex.Match(data); if (match1.Success) { Issue issue = new Issue() { key = match1.Value }; await Navigation.PushModalAsync(new NavigationPage(new TabPageIssue(issue))).ConfigureAwait(true); } if (!match1.Success && !match2.Success) { await Navigation.PushModalAsync(new AllIssues()).ConfigureAwait(true); } } } try { await PopupNavigation.Instance.PopAsync(true); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } else { errorMessage.IsVisible = true; errorMessage1.IsVisible = true; errorMessage.Text = "Ошибка входа! Ведите логин и пароль"; try { await PopupNavigation.Instance.PopAsync(true); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } } catch (Exception ex) { Crashes.TrackError(ex); Console.WriteLine(ex.ToString()); } } }