private async void OnStageChanged(object sender, SecondaryAuthenticationFactorAuthenticationStageChangedEventArgs e) { switch (e.StageInfo.Stage) { case SecondaryAuthenticationFactorAuthenticationStage.WaitingForUserConfirmation: // Show welcome message await SecondaryAuthenticationFactorAuthentication.ShowNotificationMessageAsync( "", SecondaryAuthenticationFactorAuthenticationMessage.LookingForDevice); break; case SecondaryAuthenticationFactorAuthenticationStage.CollectingCredential: // TODO Authenticate device await DiscoverDevice(); break; case SecondaryAuthenticationFactorAuthenticationStage.CredentialAuthenticated: /*if (e.StageInfo.DeviceId == _deviceId) * { * // TODO Show notification on device about PC unlock * }*/ break; case SecondaryAuthenticationFactorAuthenticationStage.StoppingAuthentication: // TODO Quit from background task. SecondaryAuthenticationFactorAuthentication.AuthenticationStageChanged -= OnStageChanged; _exitEvent.Set(); break; case SecondaryAuthenticationFactorAuthenticationStage.SuspendingAuthentication: break; } }
// WARNING: Test code // This code should be in background task async void OnStageChanged(Object sender, SecondaryAuthenticationFactorAuthenticationStageChangedEventArgs args) { //ShowToastNotification("In StageChanged!" + args.StageInfo.Stage.ToString()); if (args.StageInfo.Stage == SecondaryAuthenticationFactorAuthenticationStage.WaitingForUserConfirmation) { ShowToastNotification("Stage = WaitingForUserConfirmation"); // This event is happening on a ThreadPool thread, so we need to dispatch to the UI thread. // Getting the dispatcher from the MainView works as long as we only have one view. String deviceName = "DeviceSimulator."; await SecondaryAuthenticationFactorAuthentication.ShowNotificationMessageAsync( deviceName, SecondaryAuthenticationFactorAuthenticationMessage.SwipeUpWelcome); } else if (args.StageInfo.Stage == SecondaryAuthenticationFactorAuthenticationStage.CollectingCredential) { ShowToastNotification("Stage = CollectingCredential"); PerformAuthentication(); } else { if (args.StageInfo.Stage == SecondaryAuthenticationFactorAuthenticationStage.StoppingAuthentication) { SecondaryAuthenticationFactorAuthentication.AuthenticationStageChanged -= OnStageChanged; opCompletedEvent.Set(); } SecondaryAuthenticationFactorAuthenticationStage stage = args.StageInfo.Stage; } }
async void OnStageChanged(Object sender, SecondaryAuthenticationFactorAuthenticationStageChangedEventArgs args) { //ShowToastNotification("In StageChanged!" + args.StageInfo.Stage.ToString()); if (args.StageInfo.Stage == SecondaryAuthenticationFactorAuthenticationStage.CheckingDevicePresence) { Task t = PresenceMonitor(); t.Wait(); opCompletedEvent.Set(); deferral.Complete(); return; } if (args.StageInfo.Stage == SecondaryAuthenticationFactorAuthenticationStage.WaitingForUserConfirmation) { //ShowToastNotification("Stage = WaitingForUserConfirmation"); // This event is happening on a ThreadPool thread, so we need to dispatch to the UI thread. // Getting the dispatcher from the MainView works as long as we only have one view. IReadOnlyList <SecondaryAuthenticationFactorInfo> deviceList = await SecondaryAuthenticationFactorRegistration.FindAllRegisteredDeviceInfoAsync( SecondaryAuthenticationFactorDeviceFindScope.User); String deviceName = deviceList.ElementAt(deviceList.Count() - 1).DeviceFriendlyName; string str = "\"" + deviceName + "\""; await SecondaryAuthenticationFactorAuthentication.ShowNotificationMessageAsync( str, SecondaryAuthenticationFactorAuthenticationMessage.SwipeUpWelcome); } else if (args.StageInfo.Stage == SecondaryAuthenticationFactorAuthenticationStage.CollectingCredential) { //ShowToastNotification("Stage = CollectingCredential"); System.Diagnostics.Debug.WriteLine("[OnStageChanged] Perform Auth / auth trigger"); try { Task t = PerformAuthentication();; await t; t = writeConnectedRegisteredDevices(); await t; } catch (Exception ex) { } finally { deferral.Complete(); } } else { if (args.StageInfo.Stage == SecondaryAuthenticationFactorAuthenticationStage.StoppingAuthentication) { SecondaryAuthenticationFactorAuthentication.AuthenticationStageChanged -= OnStageChanged; opCompletedEvent.Set(); } SecondaryAuthenticationFactorAuthenticationStage stage = args.StageInfo.Stage; } }