diff --git a/ModernKeePass/Pages/EntryDetailPage.xaml b/ModernKeePass/Pages/EntryDetailPage.xaml index eb7ed65..0bb4328 100644 --- a/ModernKeePass/Pages/EntryDetailPage.xaml +++ b/ModernKeePass/Pages/EntryDetailPage.xaml @@ -13,6 +13,348 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Visible + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -39,7 +381,7 @@ - + diff --git a/ModernKeePass/Pages/EntryDetailPage.xaml.cs b/ModernKeePass/Pages/EntryDetailPage.xaml.cs index b405860..0605848 100644 --- a/ModernKeePass/Pages/EntryDetailPage.xaml.cs +++ b/ModernKeePass/Pages/EntryDetailPage.xaml.cs @@ -7,6 +7,7 @@ using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; using ModernKeePass.Common; using ModernKeePass.ViewModels; +using ModernKeePassLib.Cryptography.PasswordGenerator; // Pour en savoir plus sur le modèle d'élément Page Détail de l'élément, consultez la page http://go.microsoft.com/fwlink/?LinkId=234232 @@ -113,5 +114,12 @@ namespace ModernKeePass.Pages // TODO: Show some error } } + + private void PasswordGenerationButton_Click(object sender, RoutedEventArgs e) + { + Model.GeneratePassword(); + /*var button = (Button)sender; + button?.Flyout?.Hide();*/ + } } } diff --git a/ModernKeePass/Pages/NewDatabasePage.xaml b/ModernKeePass/Pages/NewDatabasePage.xaml index b023095..ca5b38d 100644 --- a/ModernKeePass/Pages/NewDatabasePage.xaml +++ b/ModernKeePass/Pages/NewDatabasePage.xaml @@ -25,7 +25,7 @@ Password complexity - + diff --git a/ModernKeePass/Pages/OpenDatabasePage.xaml b/ModernKeePass/Pages/OpenDatabasePage.xaml index c132f87..b5bd8c9 100644 --- a/ModernKeePass/Pages/OpenDatabasePage.xaml +++ b/ModernKeePass/Pages/OpenDatabasePage.xaml @@ -23,7 +23,7 @@ Open an existing password database from an Internet location (not yet implemented). - + diff --git a/ModernKeePass/ViewModels/EntryVm.cs b/ModernKeePass/ViewModels/EntryVm.cs index 5598efe..b934617 100644 --- a/ModernKeePass/ViewModels/EntryVm.cs +++ b/ModernKeePass/ViewModels/EntryVm.cs @@ -1,8 +1,8 @@ using System.ComponentModel; using Windows.UI.Xaml.Controls; -using ModernKeePass.Common; using ModernKeePass.Mappings; using ModernKeePassLib; +using ModernKeePassLib.Cryptography.PasswordGenerator; using ModernKeePassLib.Security; namespace ModernKeePass.ViewModels @@ -16,6 +16,17 @@ namespace ModernKeePass.ViewModels public System.Drawing.Color? ForegroundColor => Entry?.ForegroundColor; public bool IsRevealPasswordEnabled => !string.IsNullOrEmpty(Password); + public double PasswordLength { get; set; } = 25; + public bool UpperCasePatternSelected { get; set; } = true; + public bool LowerCasePatternSelected { get; set; } = true; + public bool DigitsPatternSelected { get; set; } = true; + public bool MinusPatternSelected { get; set; } + public bool UnderscorePatternSelected { get; set; } + public bool SpacePatternSelected { get; set; } + public bool SpecialPatternSelected { get; set; } + public bool BracketsPatternSelected { get; set; } + public string CustomChars { get; set; } = string.Empty; + public string Title { get @@ -82,7 +93,7 @@ namespace ModernKeePass.ViewModels NotifyPropertyChanged("IsRevealPassword"); } } - + public event PropertyChangedEventHandler PropertyChanged; private bool _isEditMode; @@ -104,6 +115,34 @@ namespace ModernKeePass.ViewModels ParentGroup.RemoveEntry(this); } + public void GeneratePassword() + { + var pwProfile = new PwProfile() + { + GeneratorType = PasswordGeneratorType.CharSet, + Length = (uint)PasswordLength, + CharSet = new PwCharSet() + }; + + if (UpperCasePatternSelected) pwProfile.CharSet.Add(PwCharSet.UpperCase); + if (LowerCasePatternSelected) pwProfile.CharSet.Add(PwCharSet.LowerCase); + if (DigitsPatternSelected) pwProfile.CharSet.Add(PwCharSet.Digits); + if (SpecialPatternSelected) pwProfile.CharSet.Add(PwCharSet.SpecialChars); + if (MinusPatternSelected) pwProfile.CharSet.Add('-'); + if (UnderscorePatternSelected) pwProfile.CharSet.Add('_'); + if (SpacePatternSelected) pwProfile.CharSet.Add(' '); + if (BracketsPatternSelected) pwProfile.CharSet.Add(PwCharSet.Brackets); + + pwProfile.CharSet.Add(CustomChars); + + ProtectedString password; + PwGenerator.Generate(out password, pwProfile, null, new CustomPwGeneratorPool()); + + Entry?.Strings.Set(PwDefs.PasswordField, password); + NotifyPropertyChanged("Password"); + NotifyPropertyChanged("IsRevealPasswordEnabled"); + } + private string GetEntryValue(string key) { return Entry?.Strings.GetSafe(key).ReadString();