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)
{