diff --git a/ModernKeePass.sln b/ModernKeePass.sln index 376d44d..a5cfa75 100644 --- a/ModernKeePass.sln +++ b/ModernKeePass.sln @@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModernKeePassLib.Test", "Mo EndProject Project("{F5034706-568F-408A-B7B3-4D38C6DB8A32}") = "Scripts", "Scripts\Scripts.pssproj", "{6CAFC0C6-A428-4D30-A9F9-700E829FEA51}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModernKeePassApp.Test", "ModernKeePassApp.Test\ModernKeePassApp.Test.csproj", "{7E80F5E7-724A-4668-9333-B10F5D75C6D0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -103,6 +105,30 @@ Global {6CAFC0C6-A428-4D30-A9F9-700E829FEA51}.Release|x64.Build.0 = Release|Any CPU {6CAFC0C6-A428-4D30-A9F9-700E829FEA51}.Release|x86.ActiveCfg = Release|Any CPU {6CAFC0C6-A428-4D30-A9F9-700E829FEA51}.Release|x86.Build.0 = Release|Any CPU + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Debug|ARM.ActiveCfg = Debug|ARM + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Debug|ARM.Build.0 = Debug|ARM + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Debug|ARM.Deploy.0 = Debug|ARM + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Debug|x64.ActiveCfg = Debug|x64 + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Debug|x64.Build.0 = Debug|x64 + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Debug|x64.Deploy.0 = Debug|x64 + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Debug|x86.ActiveCfg = Debug|x86 + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Debug|x86.Build.0 = Debug|x86 + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Debug|x86.Deploy.0 = Debug|x86 + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Release|Any CPU.Build.0 = Release|Any CPU + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Release|Any CPU.Deploy.0 = Release|Any CPU + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Release|ARM.ActiveCfg = Release|ARM + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Release|ARM.Build.0 = Release|ARM + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Release|ARM.Deploy.0 = Release|ARM + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Release|x64.ActiveCfg = Release|x64 + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Release|x64.Build.0 = Release|x64 + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Release|x64.Deploy.0 = Release|x64 + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Release|x86.ActiveCfg = Release|x86 + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Release|x86.Build.0 = Release|x86 + {7E80F5E7-724A-4668-9333-B10F5D75C6D0}.Release|x86.Deploy.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ModernKeePass/Common/DatabaseHelper.cs b/ModernKeePass/Common/DatabaseHelper.cs index 9afae3d..668e728 100644 --- a/ModernKeePass/Common/DatabaseHelper.cs +++ b/ModernKeePass/Common/DatabaseHelper.cs @@ -1,6 +1,7 @@ using System; using Windows.Storage; using Windows.UI.Xaml.Controls; +using ModernKeePass.Interfaces; using ModernKeePass.ViewModels; using ModernKeePassLib; using ModernKeePassLib.Cryptography.KeyDerivation; @@ -10,7 +11,7 @@ using ModernKeePassLib.Serialization; namespace ModernKeePass.Common { - public class DatabaseHelper + public class DatabaseHelper: IDatabase { public enum DatabaseStatus { @@ -37,7 +38,7 @@ namespace ModernKeePass.Common } } - public DatabaseStatus Status { get; private set; } = DatabaseStatus.Closed; + public int Status { get; set; } = (int)DatabaseStatus.Closed; public string Name => DatabaseFile?.Name; public bool RecycleBinEnabled @@ -52,7 +53,7 @@ namespace ModernKeePass.Common set { _databaseFile = value; - Status = DatabaseStatus.Opening; + Status = (int)DatabaseStatus.Opening; } } @@ -84,24 +85,26 @@ namespace ModernKeePass.Common { try { - if (key == null) Status = DatabaseStatus.NoCompositeKey; + if (key == null) + { + Status = (int)DatabaseStatus.NoCompositeKey; + return; + } var ioConnection = IOConnectionInfo.FromFile(DatabaseFile); if (createNew) _pwDatabase.New(ioConnection, key); else _pwDatabase.Open(ioConnection, key, new NullStatusLogger()); - if (_pwDatabase.IsOpen) - { - Status = DatabaseStatus.Opened; - RootGroup = new GroupVm(_pwDatabase.RootGroup, null, RecycleBinEnabled ? _pwDatabase.RecycleBinUuid : null); - } + if (!_pwDatabase.IsOpen) return; + Status = (int)DatabaseStatus.Opened; + RootGroup = new GroupVm(_pwDatabase.RootGroup, null, RecycleBinEnabled ? _pwDatabase.RecycleBinUuid : null); } catch (InvalidCompositeKeyException) { - Status = DatabaseStatus.CompositeKeyError; + Status = (int)DatabaseStatus.CompositeKeyError; } catch (Exception ex) { - Status = DatabaseStatus.Error; + Status = (int)DatabaseStatus.Error; } } @@ -109,11 +112,19 @@ namespace ModernKeePass.Common /// Save the current database to another file and open it /// /// The new database file - internal void Save(StorageFile file) + public bool Save(StorageFile file) { DatabaseFile = file; - _pwDatabase.SaveAs(IOConnectionInfo.FromFile(DatabaseFile), true, new NullStatusLogger()); - Status = DatabaseStatus.Opened; + try + { + _pwDatabase.SaveAs(IOConnectionInfo.FromFile(DatabaseFile), true, new NullStatusLogger()); + Status = (int)DatabaseStatus.Opened; + return true; + } + catch (Exception ex) + { + return false; + } } /// @@ -129,9 +140,10 @@ namespace ModernKeePass.Common } catch (Exception ex) { + return false; + // TODO: put this at a better place (e.g. in views) MessageDialogHelper.ShowErrorDialog(ex); } - return false; } /// @@ -140,7 +152,7 @@ namespace ModernKeePass.Common public void Close() { _pwDatabase?.Close(); - Status = DatabaseStatus.Closed; + Status = (int)DatabaseStatus.Closed; } public void AddDeletedItem(PwUuid id) @@ -150,7 +162,7 @@ namespace ModernKeePass.Common public void CreateRecycleBin() { - RecycleBin = RootGroup.AddNewGroup("Recycle bin"); + RecycleBin = ((GroupVm)RootGroup).AddNewGroup("Recycle bin"); RecycleBin.IsSelected = true; RecycleBin.IconSymbol = Symbol.Delete; } diff --git a/ModernKeePass/Interfaces/IDatabase.cs b/ModernKeePass/Interfaces/IDatabase.cs new file mode 100644 index 0000000..e005b46 --- /dev/null +++ b/ModernKeePass/Interfaces/IDatabase.cs @@ -0,0 +1,20 @@ +using ModernKeePass.ViewModels; +using ModernKeePassLib; +using ModernKeePassLib.Keys; + +namespace ModernKeePass.Interfaces +{ + public interface IDatabase + { + bool RecycleBinEnabled { get; set; } + int Status { get; set; } + GroupVm RootGroup { get; set; } + GroupVm RecycleBin { get; set; } + + void Open(CompositeKey key, bool createNew); + void UpdateCompositeKey(CompositeKey key); + bool Save(); + void CreateRecycleBin(); + void AddDeletedItem(PwUuid id); + } +} \ No newline at end of file diff --git a/ModernKeePass/ModernKeePassApp.csproj b/ModernKeePass/ModernKeePassApp.csproj index 8683979..05c66f5 100644 --- a/ModernKeePass/ModernKeePassApp.csproj +++ b/ModernKeePass/ModernKeePassApp.csproj @@ -123,6 +123,7 @@ + diff --git a/ModernKeePass/ViewModels/CompositeKeyVm.cs b/ModernKeePass/ViewModels/CompositeKeyVm.cs index 70ec127..2a7d91f 100644 --- a/ModernKeePass/ViewModels/CompositeKeyVm.cs +++ b/ModernKeePass/ViewModels/CompositeKeyVm.cs @@ -2,6 +2,7 @@ using Windows.Storage; using Windows.UI.Xaml; using ModernKeePass.Common; +using ModernKeePass.Interfaces; using ModernKeePassLib.Cryptography; using ModernKeePassLib.Keys; using ModernKeePassLib.Serialization; @@ -18,7 +19,7 @@ namespace ModernKeePass.ViewModels Success = 5 } - private readonly App _app = Application.Current as App; + //private readonly App _app = Application.Current as App; private bool _hasPassword; private bool _hasKeyFile; private string _password = string.Empty; @@ -27,6 +28,8 @@ namespace ModernKeePass.ViewModels private StorageFile _keyFile; private string _keyFileText = "Select key file from disk..."; + public IDatabase Database { get; set; } + public bool HasPassword { get { return _hasPassword; } @@ -90,15 +93,23 @@ namespace ModernKeePass.ViewModels } public GroupVm RootGroup { get; set; } + public double PasswordComplexityIndicator => QualityEstimation.EstimatePasswordBits(Password?.ToCharArray()); - + + public CompositeKeyVm() : this((Application.Current as App)?.Database) { } + + public CompositeKeyVm(IDatabase database) + { + Database = database; + } + public bool OpenDatabase(bool createNew) { - _app.Database.Open(CreateCompositeKey(), createNew); - switch (_app.Database.Status) + Database.Open(CreateCompositeKey(), createNew); + switch ((DatabaseHelper.DatabaseStatus)Database.Status) { case DatabaseHelper.DatabaseStatus.Opened: - RootGroup = _app.Database.RootGroup; + RootGroup = Database.RootGroup; return true; case DatabaseHelper.DatabaseStatus.CompositeKeyError: var errorMessage = new StringBuilder("Error: wrong "); @@ -113,7 +124,7 @@ namespace ModernKeePass.ViewModels public void UpdateKey() { - _app.Database.UpdateCompositeKey(CreateCompositeKey()); + Database.UpdateCompositeKey(CreateCompositeKey()); UpdateStatus("Database composite key updated.", StatusTypes.Success); } diff --git a/ModernKeePass/ViewModels/EntryVm.cs b/ModernKeePass/ViewModels/EntryVm.cs index 83813fb..2c2e7f5 100644 --- a/ModernKeePass/ViewModels/EntryVm.cs +++ b/ModernKeePass/ViewModels/EntryVm.cs @@ -14,6 +14,7 @@ namespace ModernKeePass.ViewModels { public class EntryVm : INotifyPropertyChanged, IPwEntity { + public IDatabase Database { get; set; } public GroupVm ParentGroup { get; private set; } public GroupVm PreviousGroup { get; private set; } @@ -150,7 +151,6 @@ namespace ModernKeePass.ViewModels public event PropertyChangedEventHandler PropertyChanged; private readonly PwEntry _pwEntry; - private readonly App _app = Application.Current as App; private bool _isEditMode; private bool _isRevealPassword; private double _passwordLength = 25; @@ -160,16 +160,20 @@ namespace ModernKeePass.ViewModels PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } - public EntryVm() { } - public EntryVm(PwEntry entry, GroupVm parent) + public EntryVm() : this(null, null) { } + + internal EntryVm(PwEntry entry, GroupVm parent) : this(entry, parent, (Application.Current as App)?.Database) { } + + public EntryVm(PwEntry entry, GroupVm parent, IDatabase database) { + Database = database; _pwEntry = entry; ParentGroup = parent; } public void GeneratePassword() { - var pwProfile = new PwProfile() + var pwProfile = new PwProfile { GeneratorType = PasswordGeneratorType.CharSet, Length = (uint)PasswordLength, @@ -208,9 +212,9 @@ namespace ModernKeePass.ViewModels public void MarkForDelete() { - if (_app.Database.RecycleBinEnabled && _app.Database.RecycleBin?.IdUuid == null) - _app.Database.CreateRecycleBin(); - Move(_app.Database.RecycleBinEnabled && !ParentGroup.IsSelected ? _app.Database.RecycleBin : null); + if (Database.RecycleBinEnabled && Database.RecycleBin?.IdUuid == null) + Database.CreateRecycleBin(); + Move(Database.RecycleBinEnabled && !ParentGroup.IsSelected ? Database.RecycleBin : null); } public void UndoDelete() @@ -225,7 +229,7 @@ namespace ModernKeePass.ViewModels PreviousGroup.RemovePwEntry(_pwEntry); if (destination == null) { - _app.Database.AddDeletedItem(IdUuid); + Database.AddDeletedItem(IdUuid); return; } ParentGroup = destination; @@ -236,13 +240,13 @@ namespace ModernKeePass.ViewModels public void CommitDelete() { _pwEntry.ParentGroup.Entries.Remove(_pwEntry); - if (_app.Database.RecycleBinEnabled && !PreviousGroup.IsSelected) _app.Database.RecycleBin.AddPwEntry(_pwEntry); - else _app.Database.AddDeletedItem(IdUuid); + if (Database.RecycleBinEnabled && !PreviousGroup.IsSelected) Database.RecycleBin.AddPwEntry(_pwEntry); + else Database.AddDeletedItem(IdUuid); } public void Save() { - _app.Database.Save(); + Database.Save(); } } } diff --git a/ModernKeePass/ViewModels/MainVm.cs b/ModernKeePass/ViewModels/MainVm.cs index f83890f..ae18a81 100644 --- a/ModernKeePass/ViewModels/MainVm.cs +++ b/ModernKeePass/ViewModels/MainVm.cs @@ -49,14 +49,14 @@ namespace ModernKeePass.ViewModels { var app = (App)Application.Current; var mru = StorageApplicationPermissions.MostRecentlyUsedList; - var isDatabaseOpen = app.Database != null && app.Database.Status == DatabaseHelper.DatabaseStatus.Opened; + var isDatabaseOpen = app.Database != null && app.Database.Status == (int) DatabaseHelper.DatabaseStatus.Opened; var mainMenuItems = new ObservableCollection { new MainMenuItemVm { Title = "Open", PageType = typeof(OpenDatabasePage), Destination = destinationFrame, Parameter = referenceFrame, SymbolIcon = Symbol.Page2, - IsSelected = app.Database.Status == DatabaseHelper.DatabaseStatus.Opening + IsSelected = app.Database.Status == (int) DatabaseHelper.DatabaseStatus.Opening }, new MainMenuItemVm { @@ -69,7 +69,7 @@ namespace ModernKeePass.ViewModels }, new MainMenuItemVm { Title = "Recent" , PageType = typeof(RecentDatabasesPage), Destination = destinationFrame, Parameter = referenceFrame, SymbolIcon = Symbol.Copy, - IsSelected = (app.Database == null || app.Database.Status == DatabaseHelper.DatabaseStatus.Closed) && mru.Entries.Count > 0, IsEnabled = mru.Entries.Count > 0 + IsSelected = (app.Database == null || app.Database.Status == (int) DatabaseHelper.DatabaseStatus.Closed) && mru.Entries.Count > 0, IsEnabled = mru.Entries.Count > 0 }, new MainMenuItemVm { @@ -78,7 +78,7 @@ namespace ModernKeePass.ViewModels }; // Auto-select the Recent Items menu item if the conditions are met SelectedItem = mainMenuItems.FirstOrDefault(m => m.IsSelected); - if (app.Database != null && app.Database.Status == DatabaseHelper.DatabaseStatus.Opened) + if (app.Database != null && app.Database.Status == (int) DatabaseHelper.DatabaseStatus.Opened) mainMenuItems.Add(new MainMenuItemVm { Title = app.Database.Name, diff --git a/ModernKeePass/ViewModels/OpenVm.cs b/ModernKeePass/ViewModels/OpenVm.cs index 3f94b00..2987237 100644 --- a/ModernKeePass/ViewModels/OpenVm.cs +++ b/ModernKeePass/ViewModels/OpenVm.cs @@ -10,7 +10,7 @@ namespace ModernKeePass.ViewModels { public bool ShowPasswordBox { - get { return ((App)Application.Current).Database.Status == DatabaseHelper.DatabaseStatus.Opening; } + get { return ((App)Application.Current).Database.Status == (int) DatabaseHelper.DatabaseStatus.Opening; } } public string Name @@ -21,7 +21,7 @@ namespace ModernKeePass.ViewModels public OpenVm() { var app = Application.Current as App; - if (app?.Database == null || app.Database.Status != DatabaseHelper.DatabaseStatus.Opening) return; + if (app?.Database == null || app.Database.Status != (int) DatabaseHelper.DatabaseStatus.Opening) return; OpenFile(app.Database.DatabaseFile); } diff --git a/ModernKeePassApp.Test/DatabaseTests.cs b/ModernKeePassApp.Test/DatabaseTests.cs new file mode 100644 index 0000000..3ca6687 --- /dev/null +++ b/ModernKeePassApp.Test/DatabaseTests.cs @@ -0,0 +1,64 @@ +using System; +using Windows.ApplicationModel; +using Windows.Storage; +using Microsoft.VisualStudio.TestPlatform.UnitTestFramework; +using ModernKeePass.Common; +using ModernKeePass.ViewModels; +using ModernKeePassLib.Keys; + +namespace ModernKeePassApp.Test +{ + [TestClass] + public class DatabaseTests + { + private readonly DatabaseHelper _database = new DatabaseHelper(); + + [TestMethod] + public void TestCreate() + { + Assert.AreEqual(_database.Status, (int) DatabaseHelper.DatabaseStatus.Closed); + _database.DatabaseFile = ApplicationData.Current.TemporaryFolder.CreateFileAsync("NewDatabase.kdbx").GetAwaiter().GetResult(); + Assert.AreEqual(_database.Status, (int)DatabaseHelper.DatabaseStatus.Opening); + OpenOrCreateDatabase(true); + _database.Close(); + Assert.AreEqual(_database.Status, (int)DatabaseHelper.DatabaseStatus.Closed); + } + + [TestMethod] + public void TestOpen() + { + Assert.AreEqual(_database.Status, (int)DatabaseHelper.DatabaseStatus.Closed); + _database.DatabaseFile = Package.Current.InstalledLocation.GetFileAsync(@"Databases\TestDatabase.kdbx").GetAwaiter().GetResult(); + Assert.AreEqual(_database.Status, (int)DatabaseHelper.DatabaseStatus.Opening); + OpenOrCreateDatabase(false); + } + + [TestMethod] + public void TestSave() + { + TestOpen(); + Assert.IsTrue(_database.Save(ApplicationData.Current.TemporaryFolder.CreateFileAsync("SaveDatabase.kdbx").GetAwaiter().GetResult())); + _database.Close(); + Assert.AreEqual(_database.Status, (int)DatabaseHelper.DatabaseStatus.Closed); + TestOpen(); + } + + private void OpenOrCreateDatabase(bool createNew) + { + _database.Open(null, createNew); + Assert.AreEqual(_database.Status, (int)DatabaseHelper.DatabaseStatus.NoCompositeKey); + var compositeKey = new CompositeKey(); + if (!createNew) + { + _database.Open(compositeKey); + Assert.AreEqual(_database.Status, (int)DatabaseHelper.DatabaseStatus.CompositeKeyError); + } + compositeKey.AddUserKey(new KcpPassword("test")); + + _database.Open(compositeKey, createNew); + /*var compositeKey = new CompositeKeyVm(_database); + compositeKey.OpenDatabase(createNew);*/ + Assert.AreEqual(_database.Status, (int)DatabaseHelper.DatabaseStatus.Opened); + } + } +} diff --git a/ModernKeePassApp.Test/Databases/TestDatabase.kdbx b/ModernKeePassApp.Test/Databases/TestDatabase.kdbx new file mode 100644 index 0000000..da44db5 Binary files /dev/null and b/ModernKeePassApp.Test/Databases/TestDatabase.kdbx differ diff --git a/ModernKeePassApp.Test/Images/UnitTestLogo.scale-100.png b/ModernKeePassApp.Test/Images/UnitTestLogo.scale-100.png new file mode 100644 index 0000000..ebd735a Binary files /dev/null and b/ModernKeePassApp.Test/Images/UnitTestLogo.scale-100.png differ diff --git a/ModernKeePassApp.Test/Images/UnitTestSmallLogo.scale-100.png b/ModernKeePassApp.Test/Images/UnitTestSmallLogo.scale-100.png new file mode 100644 index 0000000..92dd105 Binary files /dev/null and b/ModernKeePassApp.Test/Images/UnitTestSmallLogo.scale-100.png differ diff --git a/ModernKeePassApp.Test/Images/UnitTestSplashScreen.scale-100.png b/ModernKeePassApp.Test/Images/UnitTestSplashScreen.scale-100.png new file mode 100644 index 0000000..193187f Binary files /dev/null and b/ModernKeePassApp.Test/Images/UnitTestSplashScreen.scale-100.png differ diff --git a/ModernKeePassApp.Test/Images/UnitTestStoreLogo.scale-100.png b/ModernKeePassApp.Test/Images/UnitTestStoreLogo.scale-100.png new file mode 100644 index 0000000..3765186 Binary files /dev/null and b/ModernKeePassApp.Test/Images/UnitTestStoreLogo.scale-100.png differ diff --git a/ModernKeePassApp.Test/ModernKeePassApp.Test.csproj b/ModernKeePassApp.Test/ModernKeePassApp.Test.csproj new file mode 100644 index 0000000..e052ff7 --- /dev/null +++ b/ModernKeePassApp.Test/ModernKeePassApp.Test.csproj @@ -0,0 +1,191 @@ + + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {7E80F5E7-724A-4668-9333-B10F5D75C6D0} + Library + Properties + ModernKeePassApp.Test + ModernKeePassApp.Test + en-US + 8.1 + 14 + 512 + {BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + ModernKeePassApp.Test_TemporaryKey.pfx + Never + False + + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE;NETFX_CORE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE;NETFX_CORE + prompt + 4 + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE + true + ;2008 + pdbonly + ARM + false + prompt + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE + true + ;2008 + pdbonly + x64 + false + prompt + true + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE + true + ;2008 + pdbonly + x86 + false + prompt + true + + + True + true + + + + + + + + + + + + + Designer + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + {A0CFC681-769B-405A-8482-0CDEE595A91F} + ModernKeePassApp + + + + + ..\packages\Portable.BouncyCastle.1.8.1.3\lib\netstandard1.0\BouncyCastle.Crypto.dll + True + + + ..\packages\ModernKeePassLib.2.37.7000\lib\netstandard1.2\ModernKeePassLib.dll + True + + + ..\packages\Splat.2.0.0\lib\Portable-Win81+Wpa81\Splat.dll + True + + + ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\win8\System.Runtime.InteropServices.RuntimeInformation.dll + True + + + ..\packages\Validation.2.4.18\lib\portable-net45+win8+wp8+wpa81\Validation.dll + True + + + + 14.0 + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/ModernKeePassApp.Test/ModernKeePassApp.Test_TemporaryKey.pfx b/ModernKeePassApp.Test/ModernKeePassApp.Test_TemporaryKey.pfx new file mode 100644 index 0000000..78d6a18 Binary files /dev/null and b/ModernKeePassApp.Test/ModernKeePassApp.Test_TemporaryKey.pfx differ diff --git a/ModernKeePassApp.Test/Package.appxmanifest b/ModernKeePassApp.Test/Package.appxmanifest new file mode 100644 index 0000000..a15633e --- /dev/null +++ b/ModernKeePassApp.Test/Package.appxmanifest @@ -0,0 +1,56 @@ + + + + + + + ModernKeePassApp.Test + GBE + Images\UnitTestStoreLogo.png + ModernKeePassApp.Test + + + + 6.3.0 + 6.3.0 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ModernKeePassApp.Test/Properties/AssemblyInfo.cs b/ModernKeePassApp.Test/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9678477 --- /dev/null +++ b/ModernKeePassApp.Test/Properties/AssemblyInfo.cs @@ -0,0 +1,28 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ModernKeePassApp.Test")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ModernKeePassApp.Test")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ModernKeePassApp.Test/packages.config b/ModernKeePassApp.Test/packages.config new file mode 100644 index 0000000..7e8fa7e --- /dev/null +++ b/ModernKeePassApp.Test/packages.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file