public void PersistPincode(MobilePolicy policy) { DeletePincode(); var newPin = new PasswordCredential(PasswordVaultSecuredData, PasswordVaultPincode, JsonConvert.SerializeObject(policy)); _vault.Add(newPin); PlatformAdapter.SendToCustomLogger("AuthStorageHelper.PersistPincode - pincode added to vault", LoggingLevel.Verbose); }
public void PersistPincode(MobilePolicy policy) { DeletePincode(); var newPin = new PasswordCredential(PasswordVaultSecuredData, PasswordVaultPincode, JsonConvert.SerializeObject(policy)); _vault.Add(newPin); LoggingService.Log("pincode added to vault", LoggingLevel.Verbose); }
/// <summary> /// This method will launch the pincode screen if the policy requires it. /// If determined that no pincode screen is required, the flag requiring the pincode will be cleared. /// </summary> public static async void LaunchPincodeScreen() { var frame = Window.Current.Content as Frame; if (frame != null && typeof(PincodeDialog) != frame.SourcePageType) { await frame.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { SDKServiceLocator.Get <ILoggingService>().Log(" Launching Pincode Screen", LoggingLevel.Information); Account account = AccountManager.GetAccount(); if (account != null) { PincodeOptions options = null; bool required = AuthStorageHelper.IsPincodeRequired(); if (account.Policy != null && !IsPincodeSet()) { options = new PincodeOptions(PincodeOptions.PincodeScreen.Create, account, ""); } else if (required) { MobilePolicy policy = AuthStorageHelper.GetMobilePolicy(); if (account.Policy != null) { if (policy.ScreenLockTimeout < account.Policy.ScreenLockTimeout) { policy.ScreenLockTimeout = account.Policy.ScreenLockTimeout; AuthStorageHelper.GetAuthStorageHelper().PersistPincode(policy); } if (policy.PinLength < account.Policy.PinLength) { options = new PincodeOptions(PincodeOptions.PincodeScreen.Create, account, ""); } else { options = new PincodeOptions(PincodeOptions.PincodeScreen.Locked, account, ""); } } else { options = new PincodeOptions(PincodeOptions.PincodeScreen.Locked, account, ""); } } if (options != null) { // As per MSDN documentation (https://msdn.microsoft.com/en-us/library/windows/apps/hh702394.aspx) // the second param of Frame.Navigate must be a basic type otherwise Suspension manager will crash // when serializing frame's state. So we serialize custom object using Json and pass that as the // second param to avoid this crash. frame.Navigate(typeof(PincodeDialog), PincodeOptions.ToJson(options)); } } }); } }
public static void SavePinTimer() { MobilePolicy policy = GetMobilePolicy(); Account account = AccountManager.GetAccount(); if (account != null && policy != null && policy.ScreenLockTimeout > 0) { PlatformAdapter.SendToCustomLogger("AuthStorageHelper.SavePinTimer - saving pin timer", LoggingLevel.Verbose); AuthStorageHelper.GetAuthStorageHelper() .PersistData(true, PinBackgroundedTimeKey, DateTime.Now.ToUniversalTime().ToString()); } }
/// <summary> /// Stores the pincode and associated mobile policy information including pin length and screen lock timeout. /// </summary> /// <param name="policy"></param> /// <param name="pincode"></param> public static void StorePincode(MobilePolicy policy, string pincode) { string hashed = GenerateEncryptedPincode(pincode); var mobilePolicy = new MobilePolicy { ScreenLockTimeout = policy.ScreenLockTimeout, PinLength = policy.PinLength, PincodeHash = Encryptor.Encrypt(hashed, pincode) }; AuthStorageHelper.GetAuthStorageHelper().PersistPincode(mobilePolicy); PlatformAdapter.SendToCustomLogger("AuthStorageHelper.StorePincode - Pincode stored", LoggingLevel.Verbose); }
/// <summary> /// Stores the pincode and associated mobile policy information including pin length and screen lock timeout. /// </summary> /// <param name="policy"></param> /// <param name="pincode"></param> public static void StorePincode(MobilePolicy policy, string pincode) { string hashed = GenerateEncryptedPincode(pincode); var mobilePolicy = new MobilePolicy { ScreenLockTimeout = policy.ScreenLockTimeout, PinLength = policy.PinLength, PincodeHash = EncryptionService.Encrypt(hashed, pincode) }; GetAuthStorageHelper().PersistPincode(mobilePolicy); LoggingService.Log("Pincode stored", LoggingLevel.Verbose); }
public static void TriggerBackgroundedPinTimer() { Account account = AccountManager.GetAccount(); MobilePolicy policy = AuthStorageHelper.GetMobilePolicy(); bool required = AuthStorageHelper.IsPincodeRequired(); if (account != null) { if (required || (policy == null && account.Policy != null)) { LaunchPincodeScreen(); } } else if (!required) { AuthStorageHelper.ClearPinTimer(); } }
/// <summary> /// This will return true if a pincode is required before the app can be accessed. /// </summary> /// <returns></returns> public static bool IsPincodeRequired() { AuthStorageHelper auth = GetAuthStorageHelper(); // a flag is set if the timer was exceeded at some point. Automatically return true if the flag is set. bool required = auth.RetrieveData(PincodeRequired) != null; if (required) { PlatformAdapter.SendToCustomLogger("AuthStorageHelper.IsPincodeRequired - Pincode is required", LoggingLevel.Verbose); return(true); } if (IsPincodeSet()) { MobilePolicy policy = GetMobilePolicy(); if (policy != null) { string time = auth.RetrieveData(PinBackgroundedTimeKey); if (time != null) { DateTime previous = DateTime.Parse(time); DateTime current = DateTime.Now.ToUniversalTime(); TimeSpan diff = current.Subtract(previous); if (diff.Minutes >= policy.ScreenLockTimeout) { // flag that requires pincode to be entered in the future. Until the flag is deleted a pincode will be required. auth.PersistData(true, PincodeRequired, time); PlatformAdapter.SendToCustomLogger("AuthStorageHelper.IsPincodeRequired - Pincode is required", LoggingLevel.Verbose); return(true); } } } } // We aren't requiring pincode, so remove the flag. auth.DeleteData(PincodeRequired); PlatformAdapter.SendToCustomLogger("AuthStorageHelper.IsPincodeRequired - Pincode is not required", LoggingLevel.Verbose); return(false); }