/// <inheritdoc/> public override void ShowInView(IHtmlView htmlView, KeyValueList <string, string> variables, Navigation redirectedFrom) { base.ShowInView(htmlView, variables, redirectedFrom); _viewModel = new OpenSafeViewModel( Ioc.GetOrCreate <INavigationService>(), Ioc.GetOrCreate <ILanguageService>(), Ioc.GetOrCreate <ISvgIconService>(), Ioc.GetOrCreate <IThemeService>(), Ioc.GetOrCreate <IBaseUrlService>(), Ioc.GetOrCreate <IFeedbackService>(), Ioc.GetOrCreate <ICryptoRandomService>(), Ioc.GetOrCreate <ISettingsService>(), Ioc.GetOrCreate <IRepositoryStorageService>(), RedirectedFrom); Bindings.BindCommand("GoBack", _viewModel.GoBackCommand); Bindings.BindCommand("OkCommand", _viewModel.OkCommand); Bindings.BindCommand("CancelCommand", _viewModel.CancelCommand); Bindings.BindCommand("ResetSafeCommand", _viewModel.ResetSafeCommand); Bindings.BindText("Password", null, (v) => _viewModel.Password = SecureStringExtensions.StringToSecureString(v), null, null, HtmlViewBindingMode.OneWayToViewmodel); Bindings.BindText("PasswordConfirmation", null, (v) => _viewModel.PasswordConfirmation = SecureStringExtensions.StringToSecureString(v), null, null, HtmlViewBindingMode.OneWayToViewmodel); Bindings.BindInvalid("Password", () => _viewModel.InvalidPasswordError, _viewModel, nameof(_viewModel.InvalidPasswordError), HtmlViewBindingMode.OneWayToView); Bindings.BindInvalid("PasswordConfirmation", () => _viewModel.InvalidPasswordConfirmationError, _viewModel, nameof(_viewModel.InvalidPasswordConfirmationError), HtmlViewBindingMode.OneWayToView); string html = _viewService.GenerateHtml(_viewModel); View.LoadHtml(html); }
public void CorrectlyConvertsSecureStringToUnicodeBytes() { string candidate = "lazy 🐢🖐🏿 doc."; SecureString secureCandidate = SecureStringExtensions.StringToSecureString(candidate); byte[] bytes = SecureStringExtensions.SecureStringToBytes(secureCandidate, Encoding.Unicode); Assert.AreEqual("lazy 🐢🖐🏿 doc.", Encoding.Unicode.GetString(bytes)); }
public void AreEqualWorksWithDifferentPassword() { CloudStorageCredentials credentials = new CloudStorageCredentials { Password = SecureStringExtensions.StringToSecureString("abc") }; CloudStorageCredentials credentials2 = new CloudStorageCredentials { Password = SecureStringExtensions.StringToSecureString("def") }; Assert.IsFalse(credentials.AreEqualOrNull(credentials2)); }
public void Version1ConfigWillBeUpdated() { XDocument xml = XDocument.Parse(Version1Settings); Mock <IXmlFileService> fileService = new Mock <IXmlFileService>(); fileService. Setup(m => m.TryLoad(It.IsAny <string>(), out xml)). Returns(true); Mock <IDataProtectionService> dataProtectionService = new Mock <IDataProtectionService>(); dataProtectionService. Setup(m => m.Protect(It.Is <byte[]>(p => p.SequenceEqual(Encoding.ASCII.GetBytes("abcdefgh"))))). Returns("protected_abcdefgh_v2"); dataProtectionService. Setup(m => m.Unprotect(It.Is <string>(p => p == "protected_abcdefgh_v2"))). Returns(SecureStringExtensions.SecureStringToBytes(SecureStringExtensions.StringToSecureString("abcdefgh_v2"), Encoding.Unicode)); dataProtectionService. Setup(m => m.Protect(It.Is <byte[]>(p => p.SequenceEqual(Encoding.UTF8.GetBytes("abcdefgh_v2"))))). Returns("protected_abcdefgh_v3"); dataProtectionService. Setup(m => m.Unprotect(It.Is <string>(p => p == "protected_abcdefgh_v3"))). Returns(Encoding.UTF8.GetBytes("abcdefgh_v3")); dataProtectionService. Setup(m => m.Protect(It.Is <byte[]>(p => p.SequenceEqual(Encoding.UTF8.GetBytes("martinstoeckli"))))). Returns("protected_martinstoeckli_v3"); dataProtectionService. Setup(m => m.Unprotect(It.Is <string>(p => p == "protected_martinstoeckli_v3"))). Returns(Encoding.UTF8.GetBytes("martinstoeckli_v3")); SettingsServiceBase service = new TestableService(fileService.Object, dataProtectionService.Object); SettingsModel settings = service.LoadSettingsOrDefault(); Assert.AreEqual("twofish_gcm", settings.SelectedEncryptionAlgorithm); Assert.AreEqual(true, settings.AdoptCloudEncryptionAlgorithm); Assert.AreEqual("scuj2wfpdcodmgzm", settings.TransferCode); Assert.AreEqual(2, settings.TransferCodeHistory.Count); Assert.AreEqual("scuj2wfpdcodmgzm", settings.TransferCodeHistory[0]); Assert.AreEqual("b2bgiqeghfvn2ufx", settings.TransferCodeHistory[1]); Assert.AreEqual(SettingsModel.NewestSupportedRevision, settings.Revision); Assert.IsNotNull(settings.Credentials); Assert.AreEqual(CloudStorageClientFactory.CloudStorageIdWebdav, settings.Credentials.CloudStorageId); Assert.AreEqual("https://webdav.hidrive.strato.com/users/martinstoeckli/", settings.Credentials.Url); Assert.AreEqual("martinstoeckli_v3", settings.Credentials.Username); Assert.AreEqual("abcdefgh_v3", settings.Credentials.UnprotectedPassword); // Updated settings where saved fileService.Verify(m => m.TrySerializeAndSave(It.IsAny <string>(), It.IsAny <SettingsModel>()), Times.Once); }
public void CorrectlyConvertsSecureStringToString() { SecureString secureCandidate = new SecureString(); secureCandidate.AppendChar('F'); secureCandidate.AppendChar('o'); secureCandidate.AppendChar('x'); string retrievedCandidate = SecureStringExtensions.SecureStringToString(secureCandidate); Assert.AreEqual("Fox", retrievedCandidate); secureCandidate = SecureStringExtensions.StringToSecureString(null); Assert.IsNull(secureCandidate); }
public void CorrectlyConvertsStringToSecureString() { string candidate = "The brown fox jumps over the lazy 🐢🖐🏿 doc."; SecureString result = SecureStringExtensions.StringToSecureString(candidate); Assert.IsNotNull(result); Assert.AreEqual("The brown fox jumps over the lazy 🐢🖐🏿 doc.", SecureStringExtensions.SecureStringToString(result)); candidate = null; result = SecureStringExtensions.StringToSecureString(candidate); Assert.IsNull(result); candidate = string.Empty; result = SecureStringExtensions.StringToSecureString(candidate); Assert.AreEqual(0, result.Length); }
internal bool TryParseFromView(VueBindingDescription binding, string formattedValue, out object value) { PropertyInfo propertyInfo = _dotnetViewModel.GetType().GetProperty(binding.PropertyName); if (propertyInfo != null) { try { Type propertyType = propertyInfo.PropertyType; if (string.Equals("null", formattedValue, StringComparison.InvariantCultureIgnoreCase)) { value = null; return(true); } else if (propertyType == typeof(string)) { value = formattedValue; return(true); } else if (propertyType == typeof(bool)) { value = bool.Parse(formattedValue); return(true); } else if (propertyType == typeof(int)) { value = int.Parse(formattedValue); return(true); } else if (propertyType == typeof(SecureString)) { value = SecureStringExtensions.StringToSecureString(formattedValue); return(true); } } catch (Exception) { // This will return false } } value = null; return(false); }
public void AreEqualsWorksCorrectly() { SecureString candidate1 = SecureStringExtensions.StringToSecureString("lazy 🐢🖐🏿 doc."); SecureString candidate2 = SecureStringExtensions.StringToSecureString("lazy 🐢🖐🏿 doc."); Assert.IsTrue(SecureStringExtensions.AreEqual(candidate1, candidate2)); // Equal in length candidate1 = SecureStringExtensions.StringToSecureString("Hello world"); candidate2 = SecureStringExtensions.StringToSecureString("Hello presi"); Assert.IsFalse(SecureStringExtensions.AreEqual(candidate1, candidate2)); // Different in length candidate1 = SecureStringExtensions.StringToSecureString("Hello world"); candidate2 = SecureStringExtensions.StringToSecureString("Hello president"); Assert.IsFalse(SecureStringExtensions.AreEqual(candidate1, candidate2)); // Both null are equal candidate1 = null; candidate2 = null; Assert.IsTrue(SecureStringExtensions.AreEqual(candidate1, candidate2)); }
/// <inheritdoc/> public override void ShowInView(IHtmlView htmlView, KeyValueList <string, string> variables, Navigation redirectedFrom) { base.ShowInView(htmlView, variables, redirectedFrom); IStoryBoardService storyBoardService = Ioc.GetOrCreate <IStoryBoardService>(); SerializeableCloudStorageCredentials credentials = storyBoardService.ActiveStory.LoadFromSession <SerializeableCloudStorageCredentials>(SynchronizationStorySessionKey.CloudStorageCredentials); _viewModel = new CloudStorageAccountViewModel( Ioc.GetOrCreate <INavigationService>(), Ioc.GetOrCreate <ILanguageService>(), Ioc.GetOrCreate <ISvgIconService>(), Ioc.GetOrCreate <IThemeService>(), Ioc.GetOrCreate <IBaseUrlService>(), storyBoardService, Ioc.GetOrCreate <IFeedbackService>(), Ioc.GetOrCreate <ICloudStorageClientFactory>(), credentials); Bindings.BindCommand("GoBack", _viewModel.GoBackCommand); Bindings.BindCommand("OkCommand", _viewModel.OkCommand); Bindings.BindCommand("CancelCommand", _viewModel.CancelCommand); Bindings.BindText("Url", null, (v) => _viewModel.Url = v, null, null, HtmlViewBindingMode.OneWayToViewmodel); Bindings.BindText("Username", null, (v) => _viewModel.Username = v, null, null, HtmlViewBindingMode.OneWayToViewmodel); Bindings.BindText("Password", () => SecureStringExtensions.SecureStringToString(_viewModel.Password), (v) => _viewModel.Password = SecureStringExtensions.StringToSecureString(v), _viewModel, nameof(_viewModel.Password), HtmlViewBindingMode.TwoWayPlusOneTimeToView); Bindings.BindCheckbox("Secure", null, (v) => _viewModel.Secure = v, null, null, HtmlViewBindingMode.OneWayToViewmodel); string html = _viewService.GenerateHtml(_viewModel); View.LoadHtml(html); }
/// <summary> /// Gets the plain text OAuth2 client id from an obfuscated client id. /// The client id is not really secret, but we don't want to spread it neither. /// </summary> /// <returns>The plain text client id.</returns> private string DeobfuscateClientId(string obfuscatedClientId) { return(CryptoUtils.Deobfuscate(obfuscatedClientId, SecureStringExtensions.StringToSecureString(_obfuscationKey))); }
/// <summary> /// Alias of <see cref="SecureStringExtensions.StringToSecureString(string)"/> /// </summary> /// <param name="password">Password in string form.</param> /// <returns>Password in a SecureString.</returns> public static SecureString StringToSecureString(string password) { return(SecureStringExtensions.StringToSecureString(password)); }