// 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; } }
public async void Run(IBackgroundTaskInstance taskInstance) { deferral = taskInstance.GetDeferral(); StorageFolder folder = ApplicationData.Current.LocalFolder; //StorageFile logsFile = await folder.CreateFileAsync("BGtask.txt", CreationCollisionOption.OpenIfExists); //string txt = "[RUN]: " + DateTime.Now.ToString() + Environment.NewLine; //await FileIO.WriteTextAsync(logsFile, txt); // This event is signaled when the operation completes opCompletedEvent = new ManualResetEvent(false); SecondaryAuthenticationFactorAuthentication.AuthenticationStageChanged += OnStageChanged; //ShowToastNotification("BG Task Hit!"); if (taskInstance.TriggerDetails is DeviceWatcherTriggerDetails) { DeviceWatcherTriggerDetails triggerDetails = (DeviceWatcherTriggerDetails)taskInstance.TriggerDetails; foreach (DeviceWatcherEvent e in triggerDetails.DeviceWatcherEvents) { switch (e.Kind) { case DeviceWatcherEventKind.Add: Debug.WriteLine("[RUN] Add: " + e.DeviceInformation.Id); deferral = taskInstance.GetDeferral(); try { SecondaryAuthenticationFactorAuthenticationStageInfo authStageInfo = await SecondaryAuthenticationFactorAuthentication.GetAuthenticationStageInfoAsync(); SecondaryAuthenticationFactorAuthenticationStage stage = authStageInfo.Stage; //Debugger.Break(); if ((authStageInfo.Stage == SecondaryAuthenticationFactorAuthenticationStage.WaitingForUserConfirmation) || (authStageInfo.Stage == SecondaryAuthenticationFactorAuthenticationStage.CollectingCredential)) { System.Diagnostics.Debug.WriteLine("[RUN] Perform Auth / plug trigger"); Task t = PerformAuthentication(); await t; } //Debugger.Break(); if (e.DeviceInformation.Name.Contains("Ledger")) { Task t = writeConnectedRegisteredDevices(); await t; } } catch (Exception ex) { } finally { deferral.Complete(); } break; //case DeviceWatcherEventKind.Update: // Debug.WriteLine("[RUN] Update: " + e.DeviceInformationUpdate.Id); // deferral = taskInstance.GetDeferral(); // // try // { // Task i = writeConnectedRegisteredDevices(); // await i; // } // catch (Exception ex) // { // Debugger.Break(); // } // finally // { // deferral.Complete(); // } // break; case DeviceWatcherEventKind.Remove: Debug.WriteLine("[RUN] Remove: " + e.DeviceInformationUpdate.Id); deferral = taskInstance.GetDeferral(); try { List <dLock> pluggedRegisteredDeviceListBeforeRemove = await readConnectedRegisteredDevices(); List <Tuple <string, bool, bool> > pluggedRegisteredDeviceListBeforeRemove_tuple = new List <Tuple <string, bool, bool> >(); foreach (dLock device in pluggedRegisteredDeviceListBeforeRemove) { Tuple <string, bool, bool> newElem = new Tuple <string, bool, bool>(device.DeviceId, device.isDlockEnabled, device.isUsedForLastLogin); pluggedRegisteredDeviceListBeforeRemove_tuple.Add(newElem); } IReadOnlyList <SecondaryAuthenticationFactorInfo> registeredDeviceList_removeEvent = await SecondaryAuthenticationFactorRegistration.FindAllRegisteredDeviceInfoAsync( SecondaryAuthenticationFactorDeviceFindScope.User); List <SecondaryAuthenticationFactorInfo> pluggedRegisteredDeviceListAfterRemove = await getConnectedRegisteredDeviceList(registeredDeviceList_removeEvent); foreach (SecondaryAuthenticationFactorInfo deviceToCheck in pluggedRegisteredDeviceListAfterRemove) { foreach (dLock device in pluggedRegisteredDeviceListBeforeRemove) { if (deviceToCheck.DeviceId == device.DeviceId) { var t = pluggedRegisteredDeviceListBeforeRemove_tuple.FirstOrDefault(i => i.Item1 == device.DeviceId); if (t != null) { // delete pluggedRegisteredDeviceListBeforeRemove_tuple.Remove(t); } } } } bool lockDevice = true; string deviceId = ""; for (int i = 0; i < pluggedRegisteredDeviceListBeforeRemove_tuple.Count(); i++) { deviceId = pluggedRegisteredDeviceListBeforeRemove_tuple[i].Item1; if ((!pluggedRegisteredDeviceListBeforeRemove_tuple[i].Item2) || (!pluggedRegisteredDeviceListBeforeRemove_tuple[i].Item3)) { lockDevice = false; } } if (lockDevice) { Task t = LockDevice(deviceId); await t; } await writeConnectedRegisteredDevices(); } catch (Exception ex) { } finally { deferral.Complete(); } break; } } } else { Debug.WriteLine("[RUN] Unknown trigger"); deferral = taskInstance.GetDeferral(); //try //{ // Task t = writeConnectedRegisteredDevices(); // await t; //} //catch (ConnectedRegisteredDevicesListTxtFileEmpty Ex) //{ //} //finally //{ // deferral.Complete(); //} } // Wait until the operation completes opCompletedEvent.WaitOne(); deferral.Complete(); }