From 4863eb9fae558344d8c27ad24b02fbc2b0c3a6ec Mon Sep 17 00:00:00 2001 From: Geoffroy BONNEVILLE Date: Tue, 7 Apr 2020 17:29:03 +0200 Subject: [PATCH] Create DB works correctly Sample data moved to application Tests updated (still not working - splat) WIP --- ModernKeePass.Application/Application.csproj | 20 ++++ .../Common/Interfaces/IDatabaseProxy.cs | 4 +- .../Common/Interfaces/IRecentProxy.cs | 2 +- .../CreateDatabase/CreateDatabaseCommand.cs | 30 +++++- ModernKeePass.Domain/Domain.csproj | 16 +++ .../Infrastructure.csproj | 19 ++++ .../KeePass/KeePassDatabaseClient.cs | 8 +- .../UWP/UwpRecentFilesClient.cs | 5 +- .../AutomapperProfilesTest.cs | 24 +++-- .../KeePassDatabaseClientTests.cs | 102 ++++++++---------- ModernKeePass/Package.appxmanifest | 2 +- ModernKeePass/ViewModels/CompositeKeyVm.cs | 33 ++++-- .../ViewModels/Items/RecentItemVm.cs | 2 +- ModernKeePass/ViewModels/NewVm.cs | 63 +---------- .../Views/BasePages/LayoutAwarePageBase.cs | 2 +- ModernKeePass/Views/GroupDetailPage.xaml | 2 +- .../Views/MainPageFrames/NewDatabasePage.xaml | 10 +- .../MainPageFrames/NewDatabasePage.xaml.cs | 6 -- .../HamburgerMenuUserControl.xaml | 2 +- .../HamburgerMenuUserControl.xaml.cs | 12 +++ 20 files changed, 205 insertions(+), 159 deletions(-) diff --git a/ModernKeePass.Application/Application.csproj b/ModernKeePass.Application/Application.csproj index 5f85e51..1593c9c 100644 --- a/ModernKeePass.Application/Application.csproj +++ b/ModernKeePass.Application/Application.csproj @@ -34,6 +34,26 @@ prompt 4 + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x64 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + x64 + diff --git a/ModernKeePass.Application/Common/Interfaces/IDatabaseProxy.cs b/ModernKeePass.Application/Common/Interfaces/IDatabaseProxy.cs index 1a14dd0..d61fa74 100644 --- a/ModernKeePass.Application/Common/Interfaces/IDatabaseProxy.cs +++ b/ModernKeePass.Application/Common/Interfaces/IDatabaseProxy.cs @@ -20,7 +20,7 @@ namespace ModernKeePass.Application.Common.Interfaces Task Open(byte[] file, Credentials credentials); Task ReOpen(byte[] file); - Task Create(byte[] file, Credentials credentials, DatabaseVersion version = DatabaseVersion.V2); + Task Create(Credentials credentials, string name, DatabaseVersion version = DatabaseVersion.V2); Task SaveDatabase(); Task SaveDatabase(byte[] newFileContents); void UpdateCredentials(Credentials credentials); @@ -35,7 +35,7 @@ namespace ModernKeePass.Application.Common.Interfaces Task RemoveGroup(string parentGroupId, string groupId); void DeleteEntity(string entityId); EntryEntity CreateEntry(string parentGroupId); - GroupEntity CreateGroup(string parentGroupId, string nameId, bool isRecycleBin = false); + GroupEntity CreateGroup(string parentGroupId, string name, bool isRecycleBin = false); void SortEntries(string groupId); void SortSubGroups(string groupId); EntryEntity GetEntry(string id); diff --git a/ModernKeePass.Application/Common/Interfaces/IRecentProxy.cs b/ModernKeePass.Application/Common/Interfaces/IRecentProxy.cs index f0792ab..dd97e65 100644 --- a/ModernKeePass.Application/Common/Interfaces/IRecentProxy.cs +++ b/ModernKeePass.Application/Common/Interfaces/IRecentProxy.cs @@ -7,7 +7,7 @@ namespace ModernKeePass.Application.Common.Interfaces public interface IRecentProxy { int EntryCount { get; } - Task Get(string token); + Task Get(string token, bool updateAccessTime = false); Task> GetAll(); Task Add(FileInfo recentItem); void ClearAll(); diff --git a/ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseCommand.cs b/ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseCommand.cs index 031f3d0..50182b4 100644 --- a/ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseCommand.cs +++ b/ModernKeePass.Application/Database/Commands/CreateDatabase/CreateDatabaseCommand.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using ModernKeePass.Application.Common.Interfaces; using ModernKeePass.Domain.Dtos; using ModernKeePass.Domain.Exceptions; +using ModernKeePass.Domain.Enums; namespace ModernKeePass.Application.Database.Commands.CreateDatabase { @@ -11,6 +12,8 @@ namespace ModernKeePass.Application.Database.Commands.CreateDatabase public string FilePath { get; set; } public string Password { get; set; } public string KeyFilePath { get; set; } + public string Name { get; set; } + public bool CreateSampleData { get; set; } public class CreateDatabaseCommandHandler : IAsyncRequestHandler { @@ -27,16 +30,33 @@ namespace ModernKeePass.Application.Database.Commands.CreateDatabase { if (_database.IsOpen) throw new DatabaseOpenException(); - var file = await _file.OpenBinaryFile(message.FilePath); - await _database.Create(file, - new Credentials + await _database.Create(new Credentials { KeyFileContents = !string.IsNullOrEmpty(message.KeyFilePath) ? await _file.OpenBinaryFile(message.KeyFilePath) : null, Password = message.Password - }); + }, message.Name); _database.FileAccessToken = message.FilePath; - } + if (message.CreateSampleData) + { + var bankingGroup = _database.CreateGroup(_database.RootGroupId, "Banking"); + var emailGroup = _database.CreateGroup(_database.RootGroupId, "Email"); + var internetGroup = _database.CreateGroup(_database.RootGroupId, "Internet"); + + var sample1 = _database.CreateEntry(_database.RootGroupId); + _database.UpdateEntry(sample1.Id, EntryFieldName.Title, "Sample Entry" ); + _database.UpdateEntry(sample1.Id, EntryFieldName.UserName, "Username" ); + _database.UpdateEntry(sample1.Id, EntryFieldName.Password, "Password" ); + _database.UpdateEntry(sample1.Id, EntryFieldName.Url, "https://keepass.info/" ); + _database.UpdateEntry(sample1.Id, EntryFieldName.Notes, "You may safely delete this sample" ); + + var sample2 = _database.CreateEntry(_database.RootGroupId); + _database.UpdateEntry(sample2.Id, EntryFieldName.Title, "Sample Entry #2" ); + _database.UpdateEntry(sample2.Id, EntryFieldName.UserName, "Michael321" ); + _database.UpdateEntry(sample2.Id, EntryFieldName.Password, "12345" ); + _database.UpdateEntry(sample2.Id, EntryFieldName.Url, "https://keepass.info/help/kb/testform.html" ); + } + } } } } \ No newline at end of file diff --git a/ModernKeePass.Domain/Domain.csproj b/ModernKeePass.Domain/Domain.csproj index 2ebabc4..5abf703 100644 --- a/ModernKeePass.Domain/Domain.csproj +++ b/ModernKeePass.Domain/Domain.csproj @@ -34,6 +34,22 @@ prompt 4 + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + diff --git a/ModernKeePass.Infrastructure/Infrastructure.csproj b/ModernKeePass.Infrastructure/Infrastructure.csproj index 722cc20..5581c41 100644 --- a/ModernKeePass.Infrastructure/Infrastructure.csproj +++ b/ModernKeePass.Infrastructure/Infrastructure.csproj @@ -34,6 +34,25 @@ prompt 4 + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + x64 + diff --git a/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs b/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs index 16266f6..577f468 100644 --- a/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs +++ b/ModernKeePass.Infrastructure/KeePass/KeePassDatabaseClient.cs @@ -31,6 +31,8 @@ namespace ModernKeePass.Infrastructure.KeePass public bool IsOpen => (_pwDatabase?.IsOpen).GetValueOrDefault(); public string Name => _pwDatabase?.Name; public string RootGroupId => _pwDatabase?.RootGroup.Uuid.ToHexString(); + + // TODO: find a correct place for this public string FileAccessToken { get; set; } // Settings @@ -111,16 +113,18 @@ namespace ModernKeePass.Infrastructure.KeePass await Open(file, _credentials); } - public async Task Create(byte[] file, Credentials credentials, DatabaseVersion version = DatabaseVersion.V2) + public async Task Create(Credentials credentials, string name, DatabaseVersion version = DatabaseVersion.V2) { try { await Task.Run(() => { var compositeKey = CreateCompositeKey(credentials); - var ioConnection = IOConnectionInfo.FromByteArray(file); + var ioConnection = IOConnectionInfo.FromByteArray(new byte[] {}); _pwDatabase.New(ioConnection, compositeKey); + _pwDatabase.Name = name; + _pwDatabase.RootGroup.Name = name; switch (version) { diff --git a/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs b/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs index 7194adc..bf7280c 100644 --- a/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs +++ b/ModernKeePass.Infrastructure/UWP/UwpRecentFilesClient.cs @@ -14,10 +14,9 @@ namespace ModernKeePass.Infrastructure.UWP public int EntryCount => _mru.Entries.Count; - public async Task Get(string token) + public async Task Get(string token, bool updateAccessTime = false) { - var recentEntry = _mru.Entries.FirstOrDefault(e => e.Token == token); - var file = await _mru.GetFileAsync(token); + var file = await _mru.GetFileAsync(token, updateAccessTime ? AccessCacheOptions.None : AccessCacheOptions.SuppressAccessTimeUpdate); StorageApplicationPermissions.FutureAccessList.AddOrReplace(token, file); return new FileInfo { diff --git a/ModernKeePass.KeePassDatabaseTests/AutomapperProfilesTest.cs b/ModernKeePass.KeePassDatabaseTests/AutomapperProfilesTest.cs index e0a8d38..4ec130f 100644 --- a/ModernKeePass.KeePassDatabaseTests/AutomapperProfilesTest.cs +++ b/ModernKeePass.KeePassDatabaseTests/AutomapperProfilesTest.cs @@ -33,8 +33,13 @@ namespace ModernKeePass.KeePassDatabaseTests var pwEntry = new PwEntry(true, true) { ExpiryTime = DateTime.Now, - BackgroundColor = Color.White, - ForegroundColor = Color.Black + ParentGroup = + { + Uuid = new PwUuid(true), + Name = "Parent Group" + } + //BackgroundColor = Color.White, + //ForegroundColor = Color.Black }; pwEntry.Strings.Set(PwDefs.TitleField, new ProtectedString(true, "Test")); pwEntry.Strings.Set(PwDefs.UserNameField, new ProtectedString(true, "toto")); @@ -46,8 +51,11 @@ namespace ModernKeePass.KeePassDatabaseTests var entry = _mapper.Map(pwEntry); Assert.That(entry.ExpirationDate, Is.Not.EqualTo(default(DateTimeOffset))); - Assert.That(entry.BackgroundColor, Is.EqualTo(Color.White)); - Assert.That(entry.ForegroundColor, Is.EqualTo(Color.Black)); + //Assert.That(entry.BackgroundColor, Is.EqualTo(Color.White)); + //Assert.That(entry.ForegroundColor, Is.EqualTo(Color.Black)); + Assert.That(entry.ParentId, Is.Not.EqualTo(PwUuid.Zero.ToHexString())); + Assert.That(entry.ParentName, Is.EqualTo("Parent Group")); + Assert.That(entry.UserName, Is.EqualTo("toto")); Assert.That(entry.Name, Is.EqualTo("Test")); Assert.That(entry.UserName, Is.EqualTo("toto")); Assert.That(entry.Password, Is.EqualTo("password")); @@ -69,8 +77,8 @@ namespace ModernKeePass.KeePassDatabaseTests Url = new Uri("http://google.com"), Notes = "blabla", ExpirationDate = DateTimeOffset.Now, - BackgroundColor = Color.White, - ForegroundColor = Color.Black, + //BackgroundColor = Color.White, + //ForegroundColor = Color.Black, AdditionalFields = new Dictionary { { "additional", "custom" @@ -82,8 +90,8 @@ namespace ModernKeePass.KeePassDatabaseTests _mapper.Map(entry, pwEntry); Assert.That(pwEntry.ExpiryTime, Is.Not.EqualTo(default(DateTime))); - Assert.That(pwEntry.BackgroundColor, Is.EqualTo(Color.White)); - Assert.That(pwEntry.ForegroundColor, Is.EqualTo(Color.Black)); + //Assert.That(pwEntry.BackgroundColor, Is.EqualTo(Color.White)); + //Assert.That(pwEntry.ForegroundColor, Is.EqualTo(Color.Black)); Assert.That(pwEntry.Strings.GetSafe(PwDefs.TitleField).ReadString(), Is.EqualTo("Test")); Assert.That(pwEntry.Strings.GetSafe(PwDefs.UserNameField).ReadString(), Is.EqualTo("toto")); Assert.That(pwEntry.Strings.GetSafe(PwDefs.PasswordField).ReadString(), Is.EqualTo("password")); diff --git a/ModernKeePass.KeePassDatabaseTests/KeePassDatabaseClientTests.cs b/ModernKeePass.KeePassDatabaseTests/KeePassDatabaseClientTests.cs index 03a23ca..d45a00c 100644 --- a/ModernKeePass.KeePassDatabaseTests/KeePassDatabaseClientTests.cs +++ b/ModernKeePass.KeePassDatabaseTests/KeePassDatabaseClientTests.cs @@ -9,7 +9,6 @@ using ModernKeePass.Domain.Interfaces; using ModernKeePass.Infrastructure.KeePass; using NSubstitute; using NUnit.Framework; -using FileInfo = ModernKeePass.Domain.Dtos.FileInfo; namespace ModernKeePass.KeePassDatabaseTests { @@ -17,106 +16,99 @@ namespace ModernKeePass.KeePassDatabaseTests public class DatabaseTests { private IDatabaseProxy _database; - private FileInfo _fileInfo; + private IFileProxy _fileProxy; private readonly Credentials _credentials = new Credentials { Password = "test" }; + [SetUp] public void SetUp() { var dateTime = Substitute.For(); - var fileProxy = Substitute.For(); - fileProxy.OpenBinaryFile(Arg.Any()).Returns(async parameters => + _fileProxy = Substitute.For(); + _fileProxy.OpenBinaryFile(Arg.Any()).Returns(async parameters => { await using var stream = File.Open((string) parameters[0], FileMode.OpenOrCreate); var contents = new byte[stream.Length]; await stream.ReadAsync(contents, 0, (int) stream.Length); return contents; }); - fileProxy.WriteBinaryContentsToFile(Arg.Any(), Arg.Any()).Returns(async parameters => + _fileProxy.WriteBinaryContentsToFile(Arg.Any(), Arg.Any()).Returns(async parameters => { await using var stream = File.Open((string)parameters[0], FileMode.OpenOrCreate); var contents = (byte[]) parameters[1]; await stream.WriteAsync(contents, 0, contents.Length); }); var mapper = new Mapper(new MapperConfiguration(cfg => { cfg.AddProfile(typeof(EntryMappingProfile)); })); - _database = new KeePassDatabaseClient(fileProxy, mapper, dateTime); + _database = new KeePassDatabaseClient(mapper, dateTime); } [TearDown] public void TearDown() { _database.CloseDatabase(); - if (!string.IsNullOrEmpty(_fileInfo?.Path)) File.Delete(_fileInfo.Path); + //if (!string.IsNullOrEmpty(_fileInfo?.Path)) File.Delete(_fileInfo.Path); } [Test] public async Task TestOpen() { - var fileInfo = new FileInfo - { - Path = Path.Combine(Directory.GetCurrentDirectory(), "Data", "TestDatabase.kdbx") - }; + var file = await _fileProxy.OpenBinaryFile(Path.Combine(Directory.GetCurrentDirectory(), "Data", "TestDatabase.kdbx")); - var rootGroup = await _database.Open(fileInfo, _credentials); - Assert.That(rootGroup.Name, Is.EqualTo("TestDatabase")); - Assert.That(rootGroup.Entries.Count(), Is.EqualTo(2)); + await _database.Open(file, _credentials); + var rootGroup = _database.GetGroup(_database.RootGroupId); + + Assert.That(_database.Name, Is.EqualTo("TestDatabase")); + Assert.That(rootGroup.Entries.Count, Is.EqualTo(2)); } [Test] public async Task TestCreateAndSave() { - _fileInfo = new FileInfo - { - Path = Path.Combine(Path.GetTempPath(), "NewDatabase.kdbx") - }; + var path = Path.Combine(Path.GetTempPath(), "NewDatabase.kdbx"); + var newFile = await _fileProxy.OpenBinaryFile(path); - await _database.Create(_fileInfo, _credentials); - await _database.SaveDatabase(); + await _database.Create(newFile, _credentials); + var result = await _database.SaveDatabase(); + await _fileProxy.WriteBinaryContentsToFile(path, result); _database.CloseDatabase(); - Assert.DoesNotThrowAsync(async () => { await _database.Open(_fileInfo, _credentials); }); + Assert.DoesNotThrowAsync(async () => { await _database.Open(newFile, _credentials); }); } [Test] public async Task TestSaveAs() { - var originalFileInfo = new FileInfo - { - Path = Path.Combine(Directory.GetCurrentDirectory(), "Data", "TestDatabase.kdbx") - }; - _fileInfo = new FileInfo - { - Path = Path.Combine(Path.GetTempPath(), "SavedDatabase.kdbx") - }; + var currentPath = Path.Combine(Path.GetTempPath(), "SavedDatabase.kdbx"); + var originalFile = await _fileProxy.OpenBinaryFile(Path.Combine(Directory.GetCurrentDirectory(), "Data", "TestDatabase.kdbx")); + var currentFile = await _fileProxy.OpenBinaryFile(currentPath); + await _database.Open(originalFile, _credentials); - await _database.Open(originalFileInfo, _credentials); - await _database.SaveDatabase(_fileInfo.Path); + var result = await _database.SaveDatabase(currentFile); + await _fileProxy.WriteBinaryContentsToFile(currentPath, result); _database.CloseDatabase(); - Assert.DoesNotThrowAsync(async () => { await _database.Open(_fileInfo, _credentials); }); + Assert.DoesNotThrowAsync(async () => { await _database.Open(currentFile, _credentials); }); } [Test] public async Task TestAddGroup() { - var originalFileInfo = new FileInfo - { - Path = Path.Combine(Directory.GetCurrentDirectory(), "Data", "TestDatabase.kdbx") - }; - _fileInfo = new FileInfo - { - Path = Path.Combine(Path.GetTempPath(), "SavedDatabase.kdbx") - }; + var currentPath = Path.Combine(Path.GetTempPath(), "SavedDatabase.kdbx"); + var originalFile = await _fileProxy.OpenBinaryFile(Path.Combine(Directory.GetCurrentDirectory(), "Data", "TestDatabase.kdbx")); + var currentFile = await _fileProxy.OpenBinaryFile(currentPath); var newGroup = new GroupEntity {Name = "New Group Test"}; + await _database.Open(originalFile, _credentials); - var rootGroup = await _database.Open(originalFileInfo, _credentials); - await _database.AddGroup(rootGroup.Id, newGroup.Id); - await _database.SaveDatabase(_fileInfo.Path); + await _database.AddGroup(_database.RootGroupId, newGroup.Id); + var result = await _database.SaveDatabase(currentFile); + await _fileProxy.WriteBinaryContentsToFile(currentPath, result); _database.CloseDatabase(); - rootGroup = await _database.Open(_fileInfo, _credentials); + + await _database.Open(currentFile, _credentials); + var rootGroup = _database.GetGroup(_database.RootGroupId); Assert.That(newGroup.Id, Is.Not.Empty); Assert.That(rootGroup.SubGroups.Count, Is.EqualTo(7)); @@ -126,24 +118,22 @@ namespace ModernKeePass.KeePassDatabaseTests [Test] public async Task TestAddEntry() { - var originalFileInfo = new FileInfo - { - Path = Path.Combine(Directory.GetCurrentDirectory(), "Data", "TestDatabase.kdbx") - }; - _fileInfo = new FileInfo - { - Path = Path.Combine(Path.GetTempPath(), "SavedDatabase.kdbx") - }; + var currentPath = Path.Combine(Path.GetTempPath(), "SavedDatabase.kdbx"); var newEntry = new EntryEntity { Name = "New Entry Test" }; + var originalFile = await _fileProxy.OpenBinaryFile(Path.Combine(Directory.GetCurrentDirectory(), "Data", "TestDatabase.kdbx")); + var currentFile = await _fileProxy.OpenBinaryFile(currentPath); + await _database.Open(originalFile, _credentials); - var rootGroup = await _database.Open(originalFileInfo, _credentials); - await _database.AddEntry(rootGroup.Id, newEntry.Id); - await _database.SaveDatabase(_fileInfo.Path); + await _database.AddEntry(_database.RootGroupId, newEntry.Id); + var result = await _database.SaveDatabase(currentFile); + await _fileProxy.WriteBinaryContentsToFile(currentPath, result); _database.CloseDatabase(); - rootGroup = await _database.Open(_fileInfo, _credentials); + + await _database.Open(currentFile, _credentials); + var rootGroup = _database.GetGroup(_database.RootGroupId); Assert.That(newEntry.Id, Is.Not.Empty); Assert.That(rootGroup.Entries.Count, Is.EqualTo(3)); diff --git a/ModernKeePass/Package.appxmanifest b/ModernKeePass/Package.appxmanifest index 9841e13..3368f3d 100644 --- a/ModernKeePass/Package.appxmanifest +++ b/ModernKeePass/Package.appxmanifest @@ -1,6 +1,6 @@  - + ModernKeePass wismna diff --git a/ModernKeePass/ViewModels/CompositeKeyVm.cs b/ModernKeePass/ViewModels/CompositeKeyVm.cs index 36db774..a5c80b0 100644 --- a/ModernKeePass/ViewModels/CompositeKeyVm.cs +++ b/ModernKeePass/ViewModels/CompositeKeyVm.cs @@ -3,6 +3,8 @@ using System.Text; using System.Threading.Tasks; using MediatR; using Microsoft.Extensions.DependencyInjection; +using ModernKeePass.Application.Common.Interfaces; +using ModernKeePass.Application.Database.Commands.CreateDatabase; using ModernKeePass.Application.Database.Commands.UpdateCredentials; using ModernKeePass.Application.Database.Queries.GetDatabase; using ModernKeePass.Application.Database.Queries.OpenDatabase; @@ -110,13 +112,15 @@ namespace ModernKeePass.ViewModels private string _keyFilePath; private string _keyFileText; private readonly IMediator _mediator; + private readonly ISettingsProxy _settings; private readonly ResourceHelper _resource; - public CompositeKeyVm() : this(App.Services.GetService()) { } + public CompositeKeyVm() : this(App.Services.GetService(), App.Services.GetService()) { } - public CompositeKeyVm(IMediator mediator) + public CompositeKeyVm(IMediator mediator, ISettingsProxy settings) { _mediator = mediator; + _settings = settings; _resource = new ResourceHelper(); _keyFileText = _resource.GetResourceValue("CompositeKeyDefaultKeyFile"); } @@ -127,12 +131,25 @@ namespace ModernKeePass.ViewModels { _isOpening = true; OnPropertyChanged(nameof(IsValid)); - - await _mediator.Send(new OpenDatabaseQuery { - FilePath = databaseFilePath, - KeyFilePath = HasKeyFile ? KeyFilePath : null, - Password = HasPassword ? Password : null, - }); + if (createNew) + { + await _mediator.Send(new CreateDatabaseCommand + { + FilePath = databaseFilePath, + KeyFilePath = HasKeyFile ? KeyFilePath : null, + Password = HasPassword ? Password : null, + Name = "New Database", + CreateSampleData = _settings.GetSetting("Sample") + }); + } + else + { + await _mediator.Send(new OpenDatabaseQuery { + FilePath = databaseFilePath, + KeyFilePath = HasKeyFile ? KeyFilePath : null, + Password = HasPassword ? Password : null, + }); + } RootGroupId = (await _mediator.Send(new GetDatabaseQuery())).RootGroupId; return true; } diff --git a/ModernKeePass/ViewModels/Items/RecentItemVm.cs b/ModernKeePass/ViewModels/Items/RecentItemVm.cs index 514a570..d91bb1b 100644 --- a/ModernKeePass/ViewModels/Items/RecentItemVm.cs +++ b/ModernKeePass/ViewModels/Items/RecentItemVm.cs @@ -50,7 +50,7 @@ namespace ModernKeePass.ViewModels // Called from XAML public void UpdateAccessTime() { - _recent.Get(Token).Wait(); + _recent.Get(Token, true).Wait(); } } } diff --git a/ModernKeePass/ViewModels/NewVm.cs b/ModernKeePass/ViewModels/NewVm.cs index 7d521cb..01944c4 100644 --- a/ModernKeePass/ViewModels/NewVm.cs +++ b/ModernKeePass/ViewModels/NewVm.cs @@ -1,15 +1,7 @@ -using System.Threading.Tasks; -using Windows.Storage; +using Windows.Storage; using MediatR; using Microsoft.Extensions.DependencyInjection; using ModernKeePass.Application.Common.Interfaces; -using ModernKeePass.Application.Database.Queries.GetDatabase; -using ModernKeePass.Application.Entry.Commands.SetFieldValue; -using ModernKeePass.Application.Group.Commands.CreateEntry; -using ModernKeePass.Application.Group.Commands.CreateGroup; -using ModernKeePass.Application.Group.Models; -using ModernKeePass.Application.Group.Queries.GetGroup; -using ModernKeePass.Domain.Enums; namespace ModernKeePass.ViewModels { @@ -18,7 +10,6 @@ namespace ModernKeePass.ViewModels private readonly IMediator _mediator; private readonly ISettingsProxy _settings; private string _importFormatHelp; - public string Password { get; set; } public bool IsImportChecked { get; set; } @@ -45,57 +36,5 @@ namespace ModernKeePass.ViewModels _mediator = mediator; _settings = settings; } - - public async Task PopulateInitialData() - { - var database = await _mediator.Send(new GetDatabaseQuery()); - var rootGroup = await _mediator.Send(new GetGroupQuery {Id = database.RootGroupId}); - if (_settings.GetSetting("Sample") && !IsImportChecked) await CreateSampleData(rootGroup); - return rootGroup; - } - - private async Task CreateSampleData(GroupVm group) - { - /*var converter = new IntToSymbolConverter(); - - var bankingGroup = group.AddNewGroup("Banking"); - bankingGroup.Icon = (int)converter.ConvertBack(Symbol.Calculator, null, null, string.Empty); - - var emailGroup = group.AddNewGroup("Email"); - emailGroup.Icon = (int)converter.ConvertBack(Symbol.Mail, null, null, string.Empty); - - var internetGroup = group.AddNewGroup("Internet"); - internetGroup.Icon = (int)converter.ConvertBack(Symbol.World, null, null, string.Empty); - - var sample1 = group.AddNewEntry(); - sample1.Title = "Sample Entry"; - sample1.UserName = "Username"; - sample1.Url = PwDefs.HomepageUrl; - sample1.Password = "Password"; - sample1.Notes = "You may safely delete this sample"; - - var sample2 = group.AddNewEntry(); - sample2.Title = "Sample Entry #2"; - sample2.UserName = "Michael321"; - sample2.Url = PwDefs.HelpUrl + "kb/testform.html"; - sample2.Password = "12345";*/ - - var bankingGroup = await _mediator.Send(new CreateGroupCommand {ParentGroup = group, Name = "Banking"}); - var emailGroup = await _mediator.Send(new CreateGroupCommand {ParentGroup = group, Name = "Email" }); - var internetGroup = await _mediator.Send(new CreateGroupCommand {ParentGroup = group, Name = "Internet" }); - - var sample1 = await _mediator.Send(new CreateEntryCommand { ParentGroup = group }); - await _mediator.Send(new SetFieldValueCommand {EntryId = sample1.Id, FieldName = EntryFieldName.Title, FieldValue = "Sample Entry"}); - await _mediator.Send(new SetFieldValueCommand {EntryId = sample1.Id, FieldName = EntryFieldName.UserName, FieldValue = "Username" }); - await _mediator.Send(new SetFieldValueCommand {EntryId = sample1.Id, FieldName = EntryFieldName.Password, FieldValue = "Password" }); - await _mediator.Send(new SetFieldValueCommand {EntryId = sample1.Id, FieldName = EntryFieldName.Url, FieldValue = "https://keepass.info/" }); - await _mediator.Send(new SetFieldValueCommand {EntryId = sample1.Id, FieldName = EntryFieldName.Notes, FieldValue = "You may safely delete this sample" }); - - var sample2 = await _mediator.Send(new CreateEntryCommand { ParentGroup = group }); - await _mediator.Send(new SetFieldValueCommand {EntryId = sample2.Id, FieldName = EntryFieldName.Title, FieldValue = "Sample Entry #2"}); - await _mediator.Send(new SetFieldValueCommand {EntryId = sample2.Id, FieldName = EntryFieldName.UserName, FieldValue = "Michael321" }); - await _mediator.Send(new SetFieldValueCommand {EntryId = sample2.Id, FieldName = EntryFieldName.Password, FieldValue = "12345" }); - await _mediator.Send(new SetFieldValueCommand {EntryId = sample2.Id, FieldName = EntryFieldName.Url, FieldValue = "https://keepass.info/help/kb/testform.html" }); - } } } diff --git a/ModernKeePass/Views/BasePages/LayoutAwarePageBase.cs b/ModernKeePass/Views/BasePages/LayoutAwarePageBase.cs index 5c57c53..3ba3be8 100644 --- a/ModernKeePass/Views/BasePages/LayoutAwarePageBase.cs +++ b/ModernKeePass/Views/BasePages/LayoutAwarePageBase.cs @@ -57,7 +57,7 @@ namespace ModernKeePass.Views.BasePages /// The source of the event; typically /// /// Event data that provides both the navigation parameter passed to - /// when this page was initially requested and + /// when this page was initially requested and /// a dictionary of state preserved by this page during an earlier /// session. The state will be null the first time a page is visited. protected void navigationHelper_LoadState(object sender, LoadStateEventArgs e) diff --git a/ModernKeePass/Views/GroupDetailPage.xaml b/ModernKeePass/Views/GroupDetailPage.xaml index 301c9d9..8a95371 100644 --- a/ModernKeePass/Views/GroupDetailPage.xaml +++ b/ModernKeePass/Views/GroupDetailPage.xaml @@ -47,7 +47,7 @@ - + diff --git a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml index 497a9e7..ccb8709 100644 --- a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml +++ b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml @@ -7,6 +7,8 @@ xmlns:converters="using:ModernKeePass.Converters" xmlns:viewModels="using:ModernKeePass.ViewModels" xmlns:userControls="using:ModernKeePass.Views.UserControls" + xmlns:interactivity="using:Microsoft.Xaml.Interactivity" + xmlns:core="using:Microsoft.Xaml.Interactions.Core" mc:Ignorable="d"> @@ -21,7 +23,13 @@ - + + + + + + + diff --git a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs index af060fa..836757a 100644 --- a/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs +++ b/ModernKeePass/Views/MainPageFrames/NewDatabasePage.xaml.cs @@ -85,11 +85,5 @@ namespace ModernKeePass.Views Model.ImportFile = await picker.PickSingleFileAsync(); if (Model.ImportFile != null) ImportFileLink.Content = Model.ImportFile.Name; } - - private async void CompositeKeyUserControl_OnValidationChecked(object sender, PasswordEventArgs e) - { - var rootGroup = await Model.PopulateInitialData(); - _mainFrame.Navigate(typeof(GroupDetailPage), rootGroup); - } } } diff --git a/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml b/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml index 2a70c4e..4912863 100644 --- a/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml +++ b/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml @@ -51,7 +51,7 @@ - + diff --git a/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml.cs b/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml.cs index 79a286b..93df2a7 100644 --- a/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml.cs +++ b/ModernKeePass/Views/UserControls/HamburgerMenuUserControl.xaml.cs @@ -100,6 +100,18 @@ namespace ModernKeePass.Views.UserControls typeof(HamburgerMenuUserControl), new PropertyMetadata(null, (o, args) => { })); + public bool IsOpen + { + get { return (bool)GetValue(IsOpenProperty); } + set { SetValue(IsOpenProperty, value); } + } + public static readonly DependencyProperty IsOpenProperty = + DependencyProperty.Register( + "IsOpen", + typeof(bool), + typeof(HamburgerMenuUserControl), + new PropertyMetadata(false, (o, args) => { })); + public event EventHandler SelectionChanged; private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e) {