diff --git a/ModernKeePass.sln b/ModernKeePass.sln
index c3365f9..c09d8de 100644
--- a/ModernKeePass.sln
+++ b/ModernKeePass.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModernKeePass", "ModernKeePass\ModernKeePass.csproj", "{A0CFC681-769B-405A-8482-0CDEE595A91F}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModernKeePassApp", "ModernKeePass\ModernKeePassApp.csproj", "{A0CFC681-769B-405A-8482-0CDEE595A91F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModernKeePassLib", "ModernKeePassLib\ModernKeePassLib.csproj", "{2E710089-9559-4967-846C-E763DD1F3ACB}"
EndProject
diff --git a/ModernKeePass/.gitignore b/ModernKeePass/.gitignore
index 246f7e8..ef1d66c 100644
--- a/ModernKeePass/.gitignore
+++ b/ModernKeePass/.gitignore
@@ -34,3 +34,4 @@ Translation/TrlUtil.vshost.exe.manifest
*.nupkg
.vs/
/UpgradeLog.htm
+ModernKeePass_StoreKey.pfx
\ No newline at end of file
diff --git a/ModernKeePass/Common/DatabaseHelper.cs b/ModernKeePass/Common/DatabaseHelper.cs
index 7ab480c..b476b91 100644
--- a/ModernKeePass/Common/DatabaseHelper.cs
+++ b/ModernKeePass/Common/DatabaseHelper.cs
@@ -53,8 +53,6 @@ namespace ModernKeePass.Common
}
}
- public StorageFile KeyFile { get; set; }
-
public PwUuid DataCipher
{
get { return _pwDatabase.DataCipherUuid; }
@@ -72,20 +70,18 @@ namespace ModernKeePass.Common
get { return _pwDatabase.KdfParameters; }
set { _pwDatabase.KdfParameters = value; }
}
-
+
///
/// Open a KeePass database
///
- /// The database password
+ /// The database composite key
/// True to create a new database before opening it
/// An error message, if any
- public string Open(string password, bool createNew = false)
+ public string Open(CompositeKey key, bool createNew = false)
{
- var key = new CompositeKey();
try
{
- if (password != null) key.AddUserKey(new KcpPassword(password));
- if (KeyFile != null) key.AddUserKey(new KcpKeyFile(IOConnectionInfo.FromFile(KeyFile)));
+ if (key == null) return "No composite key";
var ioConnection = IOConnectionInfo.FromFile(DatabaseFile);
if (createNew) _pwDatabase.New(ioConnection, key);
else _pwDatabase.Open(ioConnection, key, new NullStatusLogger());
@@ -152,5 +148,10 @@ namespace ModernKeePass.Common
RecycleBin.IsSelected = true;
RecycleBin.IconSymbol = Symbol.Delete;
}
+
+ public void UpdateCompositeKey(CompositeKey key)
+ {
+ _pwDatabase.MasterKey = key;
+ }
}
}
diff --git a/ModernKeePass/Common/NotifyPropertyChangedBase.cs b/ModernKeePass/Common/NotifyPropertyChangedBase.cs
index 53751dd..ed71053 100644
--- a/ModernKeePass/Common/NotifyPropertyChangedBase.cs
+++ b/ModernKeePass/Common/NotifyPropertyChangedBase.cs
@@ -8,7 +8,7 @@ namespace ModernKeePass.Common
{
public event PropertyChangedEventHandler PropertyChanged;
- protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
+ protected void OnPropertyChanged(string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
diff --git a/ModernKeePass/Controls/OpenDatabaseUserControl.xaml b/ModernKeePass/Controls/OpenDatabaseUserControl.xaml
index 0132d17..b2766fb 100644
--- a/ModernKeePass/Controls/OpenDatabaseUserControl.xaml
+++ b/ModernKeePass/Controls/OpenDatabaseUserControl.xaml
@@ -8,16 +8,22 @@
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
xmlns:actions="using:ModernKeePass.Actions"
xmlns:converters="using:ModernKeePass.Converters"
+ xmlns:viewModels="using:ModernKeePass.ViewModels"
mc:Ignorable="d"
d:DesignHeight="120"
d:DesignWidth="550" >
-
+
+
-
+
+
+
+
+
@@ -27,22 +33,22 @@
-
-
+
+
-
+
-
-
-
-
-
+
+
+
+
+
diff --git a/ModernKeePass/Controls/OpenDatabaseUserControl.xaml.cs b/ModernKeePass/Controls/OpenDatabaseUserControl.xaml.cs
index 29079aa..e7982c8 100644
--- a/ModernKeePass/Controls/OpenDatabaseUserControl.xaml.cs
+++ b/ModernKeePass/Controls/OpenDatabaseUserControl.xaml.cs
@@ -1,23 +1,19 @@
using System;
-using System.ComponentModel;
using Windows.Storage.Pickers;
using Windows.System;
using Windows.UI.Xaml;
-using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
using ModernKeePass.Common;
using ModernKeePass.Events;
-using ModernKeePassLib.Cryptography;
+using ModernKeePass.ViewModels;
// Pour en savoir plus sur le modèle d'élément Contrôle utilisateur, consultez la page http://go.microsoft.com/fwlink/?LinkId=234236
namespace ModernKeePass.Controls
{
- public sealed partial class OpenDatabaseUserControl: INotifyPropertyChanged
+ public sealed partial class OpenDatabaseUserControl
{
- public event PropertyChangedEventHandler PropertyChanged;
-
- public double PasswordComplexityIndicator { get; private set; }
+ public CompositeKeyVm Model => Grid.DataContext as CompositeKeyVm;
public bool CreateNew
{
@@ -31,22 +27,19 @@ namespace ModernKeePass.Controls
typeof(OpenDatabaseUserControl),
new PropertyMetadata(false, (o, args) => { }));
- public string Password
+ public bool UpdateKey
{
- get { return (string) GetValue(PasswordProperty); }
- set { SetValue(PasswordProperty, value); }
+ get { return (bool)GetValue(UpdateKeyProperty); }
+ set { SetValue(UpdateKeyProperty, value); }
}
- public static readonly DependencyProperty PasswordProperty =
+ public static readonly DependencyProperty UpdateKeyProperty =
DependencyProperty.Register(
- "Password",
- typeof(string),
+ "UpdateKey",
+ typeof(bool),
typeof(OpenDatabaseUserControl),
- new PropertyMetadata(string.Empty, (o, args) => { }));
+ new PropertyMetadata(false, (o, args) => { }));
- private void NotifyPropertyChanged(string propertyName)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
+ public bool ShowComplexityIndicator => CreateNew || UpdateKey;
public OpenDatabaseUserControl()
{
@@ -61,26 +54,17 @@ namespace ModernKeePass.Controls
private void OpenButton_OnClick(object sender, RoutedEventArgs e)
{
ValidationChecking?.Invoke(this, new EventArgs());
- var app = (App)Application.Current;
- StatusTextBlock.Text = app.Database.Open(PasswordCheckBox.IsChecked.HasValue && PasswordCheckBox.IsChecked.Value ? PasswordBox.Password : null, CreateNew);
- if (app.Database.Status == DatabaseHelper.DatabaseStatus.Opened)
+
+ if (UpdateKey) Model.UpdateKey();
+ else if (Model.OpenDatabase(CreateNew) == DatabaseHelper.DatabaseStatus.Opened)
{
- ValidationChecked?.Invoke(this, new PasswordEventArgs(app.Database.RootGroup));
- }
- else
- {
- VisualStateManager.GoToState(PasswordBox, "Error", true);
+ ValidationChecked?.Invoke(this, new PasswordEventArgs(Model.RootGroup));
}
}
private void PasswordBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == VirtualKey.Enter) OpenButton_OnClick(null, null);
- else
- {
- VisualStateManager.GoToState(PasswordBox, "Normal", true);
- StatusTextBlock.Text = string.Empty;
- }
}
private async void KeyFileButton_Click(object sender, RoutedEventArgs e)
@@ -94,18 +78,7 @@ namespace ModernKeePass.Controls
picker.FileTypeFilter.Add(".key");
// Application now has read/write access to the picked file
- var file = await picker.PickSingleFileAsync();
- if (file == null) return;
- var app = (App)Application.Current;
- app.Database.KeyFile = file;
- StatusTextBlock.Text = $"Key file: {file.Name}";
- }
-
- private void PasswordBox_OnPasswordChanged(object sender, RoutedEventArgs e)
- {
- var passwordBox = sender as PasswordBox;
- PasswordComplexityIndicator = QualityEstimation.EstimatePasswordBits(passwordBox?.Password.ToCharArray());
- NotifyPropertyChanged("PasswordComplexityIndicator");
+ Model.KeyFile = await picker.PickSingleFileAsync();
}
}
}
diff --git a/ModernKeePass/Converters/DiscreteIntToSolidColorBrushConverter.cs b/ModernKeePass/Converters/DiscreteIntToSolidColorBrushConverter.cs
new file mode 100644
index 0000000..9a4f4ba
--- /dev/null
+++ b/ModernKeePass/Converters/DiscreteIntToSolidColorBrushConverter.cs
@@ -0,0 +1,27 @@
+using System;
+using Windows.UI;
+using Windows.UI.Xaml.Data;
+using Windows.UI.Xaml.Media;
+
+namespace ModernKeePass.Converters
+{
+ public class DiscreteIntToSolidColorBrushConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, string language)
+ {
+ var status = System.Convert.ToInt32(value);
+ switch (status)
+ {
+ case 1: return new SolidColorBrush(Colors.Red);
+ case 3: return new SolidColorBrush(Colors.Yellow);
+ case 5: return new SolidColorBrush(Colors.Green);
+ default: return new SolidColorBrush(Colors.Black);
+ }
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, string language)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/ModernKeePass/Converters/DoubleToForegroungBrushComplexityConverter.cs b/ModernKeePass/Converters/DoubleToSolidColorBrushConverter.cs
similarity index 91%
rename from ModernKeePass/Converters/DoubleToForegroungBrushComplexityConverter.cs
rename to ModernKeePass/Converters/DoubleToSolidColorBrushConverter.cs
index 785bc59..d841805 100644
--- a/ModernKeePass/Converters/DoubleToForegroungBrushComplexityConverter.cs
+++ b/ModernKeePass/Converters/DoubleToSolidColorBrushConverter.cs
@@ -5,7 +5,7 @@ using Windows.UI.Xaml.Media;
namespace ModernKeePass.Converters
{
- public class DoubleToForegroungBrushComplexityConverter : IValueConverter
+ public class DoubleToSolidColorBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
@@ -21,7 +21,6 @@ namespace ModernKeePass.Converters
{
return new SolidColorBrush(Color.FromArgb(255, 0, byte.MaxValue, 0));
}
-
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
diff --git a/ModernKeePass/ModernKeePass.csproj b/ModernKeePass/ModernKeePassApp.csproj
similarity index 96%
rename from ModernKeePass/ModernKeePass.csproj
rename to ModernKeePass/ModernKeePassApp.csproj
index d0c367c..c954c39 100644
--- a/ModernKeePass/ModernKeePass.csproj
+++ b/ModernKeePass/ModernKeePassApp.csproj
@@ -121,6 +121,7 @@
+
@@ -128,6 +129,9 @@
SettingsDatabasePage.xaml
+
+ SettingsSecurityPage.xaml
+
@@ -136,7 +140,7 @@
-
+
@@ -162,6 +166,7 @@
WelcomePage.xaml
+
@@ -183,13 +188,13 @@
-
+
-
+
@@ -257,6 +262,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
diff --git a/ModernKeePass/ModernKeePassApp.csproj.DotSettings b/ModernKeePass/ModernKeePassApp.csproj.DotSettings
new file mode 100644
index 0000000..50dd80d
--- /dev/null
+++ b/ModernKeePass/ModernKeePassApp.csproj.DotSettings
@@ -0,0 +1,3 @@
+
+ CSharp70
+ True
\ No newline at end of file
diff --git a/ModernKeePass/Pages/EntryDetailPage.xaml b/ModernKeePass/Pages/EntryDetailPage.xaml
index c445d87..bd557ac 100644
--- a/ModernKeePass/Pages/EntryDetailPage.xaml
+++ b/ModernKeePass/Pages/EntryDetailPage.xaml
@@ -16,7 +16,7 @@
-
+