Moved application code to the Application layer

Imported Win10 project
Code cleanup
WIP - Use common UWP services for Win8.1 and Win10
This commit is contained in:
Geoffroy BONNEVILLE
2020-04-06 20:20:45 +02:00
parent e795a8c3c4
commit 56d93a5187
292 changed files with 48614 additions and 837 deletions

View File

@@ -7,6 +7,7 @@ namespace ModernKeePass.Application.Common.Interfaces
{
public interface IDatabaseProxy
{
string ZeroId { get; }
bool IsOpen { get; }
string Name { get; }
string RootGroupId { get; }
@@ -15,14 +16,14 @@ namespace ModernKeePass.Application.Common.Interfaces
string KeyDerivationId { get; set; }
string Compression { get; set; }
bool IsRecycleBinEnabled { get; set; }
string FileAccessToken { get; set; }
Task Open(FileInfo fileInfo, Credentials credentials);
Task ReOpen();
Task Create(FileInfo fileInfo, Credentials credentials, DatabaseVersion version = DatabaseVersion.V2);
Task SaveDatabase();
Task SaveDatabase(string filePath);
void SetRecycleBin(string id);
Task UpdateCredentials(Credentials credentials);
Task Open(byte[] file, Credentials credentials);
Task ReOpen(byte[] file);
Task Create(byte[] file, Credentials credentials, DatabaseVersion version = DatabaseVersion.V2);
Task<byte[]> SaveDatabase();
Task<byte[]> SaveDatabase(byte[] newFileContents);
void UpdateCredentials(Credentials credentials);
void CloseDatabase();
Task AddEntry(string parentGroupId, string entryId);
@@ -32,8 +33,7 @@ namespace ModernKeePass.Application.Common.Interfaces
void UpdateGroup(string groupId);
Task RemoveEntry(string parentGroupId, string entryId);
Task RemoveGroup(string parentGroupId, string groupId);
Task DeleteEntry(string parentGroupId, string entryId, string recycleBinName);
Task DeleteGroup(string parentGroupId, string groupId, string recycleBinName);
void DeleteEntity(string entityId);
EntryEntity CreateEntry(string parentGroupId);
GroupEntity CreateGroup(string parentGroupId, string nameId, bool isRecycleBin = false);
void SortEntries(string groupId);

View File

@@ -5,6 +5,6 @@ namespace ModernKeePass.Application.Common.Interfaces
{
public interface IImportFormat
{
Task<List<Dictionary<string, string>>> Import(string path);
Task<List<Dictionary<string, string>>> Import(IList<string> fileContents);
}
}

View File

@@ -9,15 +9,19 @@ namespace ModernKeePass.Application.Database.Commands.CloseDatabase
public class CloseDatabaseCommandHandler : IRequestHandler<CloseDatabaseCommand>
{
private readonly IDatabaseProxy _database;
private readonly IFileProxy _file;
public CloseDatabaseCommandHandler(IDatabaseProxy database)
public CloseDatabaseCommandHandler(IDatabaseProxy database, IFileProxy file)
{
_database = database;
_file = file;
}
public void Handle(CloseDatabaseCommand message)
{
if (_database.IsOpen) _database.CloseDatabase();
else throw new DatabaseClosedException();
if (!_database.IsOpen) throw new DatabaseClosedException();
_database.CloseDatabase();
_file.ReleaseFile(_database.FileAccessToken);
_database.FileAccessToken = null;
}
}
}

View File

@@ -15,26 +15,26 @@ namespace ModernKeePass.Application.Database.Commands.CreateDatabase
public class CreateDatabaseCommandHandler : IAsyncRequestHandler<CreateDatabaseCommand>
{
private readonly IDatabaseProxy _database;
private readonly IFileProxy _file;
public CreateDatabaseCommandHandler(IDatabaseProxy database)
public CreateDatabaseCommandHandler(IDatabaseProxy database, IFileProxy file)
{
_database = database;
_file = file;
}
public async Task Handle(CreateDatabaseCommand message)
{
if (_database.IsOpen) throw new DatabaseOpenException();
await _database.Create(
new FileInfo
{
Path = message.FilePath
},
var file = await _file.OpenBinaryFile(message.FilePath);
await _database.Create(file,
new Credentials
{
KeyFilePath = message.KeyFilePath,
KeyFileContents = await _file.OpenBinaryFile(message.KeyFilePath),
Password = message.Password
});
_database.FileAccessToken = message.FilePath;
}
}

View File

@@ -12,18 +12,34 @@ namespace ModernKeePass.Application.Database.Commands.SaveDatabase
public class SaveDatabaseCommandHandler : IAsyncRequestHandler<SaveDatabaseCommand>
{
private readonly IDatabaseProxy _database;
private readonly IFileProxy _file;
public SaveDatabaseCommandHandler(IDatabaseProxy database)
public SaveDatabaseCommandHandler(IDatabaseProxy database, IFileProxy file)
{
_database = database;
_file = file;
}
public async Task Handle(SaveDatabaseCommand message)
{
if (!_database.IsOpen) throw new DatabaseClosedException();
if (string.IsNullOrEmpty(message.FilePath)) await _database.SaveDatabase();
else await _database.SaveDatabase(message.FilePath);
byte[] contents;
if (string.IsNullOrEmpty(message.FilePath))
{
contents = await _database.SaveDatabase();
await _file.WriteBinaryContentsToFile(_database.FileAccessToken, contents);
}
else
{
var newFileContents = await _file.OpenBinaryFile(message.FilePath);
contents = await _database.SaveDatabase(newFileContents);
await _file.WriteBinaryContentsToFile(message.FilePath, contents);
_file.ReleaseFile(_database.FileAccessToken);
_database.FileAccessToken = message.FilePath;
}
}
}
}

View File

@@ -14,23 +14,22 @@ namespace ModernKeePass.Application.Database.Commands.UpdateCredentials
public class UpdateCredentialsCommandHandler : IAsyncRequestHandler<UpdateCredentialsCommand>
{
private readonly IDatabaseProxy _database;
private readonly IFileProxy _file;
public UpdateCredentialsCommandHandler(IDatabaseProxy database)
public UpdateCredentialsCommandHandler(IDatabaseProxy database, IFileProxy file)
{
_database = database;
_file = file;
}
public async Task Handle(UpdateCredentialsCommand message)
{
if (_database.IsOpen)
if (!_database.IsOpen) throw new DatabaseClosedException();
_database.UpdateCredentials(new Credentials
{
await _database.UpdateCredentials(new Credentials
{
KeyFilePath = message.KeyFilePath,
Password = message.Password
});
}
else throw new DatabaseClosedException();
KeyFileContents = await _file.OpenBinaryFile(message.KeyFilePath),
Password = message.Password
});
}
}
}

View File

@@ -2,7 +2,6 @@
using MediatR;
using ModernKeePass.Application.Common.Interfaces;
using ModernKeePass.Application.Database.Models;
using ModernKeePass.Application.Group.Models;
namespace ModernKeePass.Application.Database.Queries.GetDatabase
{

View File

@@ -15,26 +15,25 @@ namespace ModernKeePass.Application.Database.Queries.OpenDatabase
public class OpenDatabaseQueryHandler : IAsyncRequestHandler<OpenDatabaseQuery>
{
private readonly IDatabaseProxy _database;
private readonly IFileProxy _file;
public OpenDatabaseQueryHandler(IDatabaseProxy database)
public OpenDatabaseQueryHandler(IDatabaseProxy database, IFileProxy file)
{
_database = database;
_file = file;
}
public async Task Handle(OpenDatabaseQuery request)
{
if (_database.IsOpen) throw new DatabaseOpenException();
await _database.Open(
new FileInfo
var file = await _file.OpenBinaryFile(request.FilePath);
await _database.Open(file, new Credentials
{
Path = request.FilePath
},
new Credentials
{
KeyFilePath = request.KeyFilePath,
KeyFileContents = await _file.OpenBinaryFile(request.KeyFilePath),
Password = request.Password
});
_database.FileAccessToken = request.FilePath;
}
}

View File

@@ -10,17 +10,20 @@ namespace ModernKeePass.Application.Database.Queries.ReOpenDatabase
public class ReOpenDatabaseQueryHandler : IAsyncRequestHandler<ReOpenDatabaseQuery>
{
private readonly IDatabaseProxy _database;
private readonly IFileProxy _file;
public ReOpenDatabaseQueryHandler(IDatabaseProxy database)
public ReOpenDatabaseQueryHandler(IDatabaseProxy database, IFileProxy file)
{
_database = database;
_file = file;
}
public async Task Handle(ReOpenDatabaseQuery request)
{
if (!_database.IsOpen) throw new DatabaseClosedException();
await _database.ReOpen();
var file = await _file.OpenBinaryFile(_database.FileAccessToken);
await _database.ReOpen(file);
}
}
}

View File

@@ -24,7 +24,21 @@ namespace ModernKeePass.Application.Group.Commands.DeleteEntry
{
if (!_database.IsOpen) throw new DatabaseClosedException();
await _database.DeleteEntry(message.ParentGroupId, message.EntryId, message.RecycleBinName);
if (_database.IsRecycleBinEnabled && (string.IsNullOrEmpty(_database.RecycleBinId) || _database.RecycleBinId.Equals(_database.ZeroId)))
{
_database.CreateGroup(_database.RootGroupId, message.RecycleBinName, true);
}
if (!_database.IsRecycleBinEnabled || message.ParentGroupId.Equals(_database.RecycleBinId))
{
_database.DeleteEntity(message.EntryId);
}
else
{
await _database.AddEntry(_database.RecycleBinId, message.EntryId);
}
await _database.RemoveEntry(message.ParentGroupId, message.EntryId);
}
}
}

View File

@@ -24,7 +24,21 @@ namespace ModernKeePass.Application.Group.Commands.DeleteGroup
{
if (!_database.IsOpen) throw new DatabaseClosedException();
await _database.DeleteEntry(message.ParentGroupId, message.GroupId, message.RecycleBinName);
if (_database.IsRecycleBinEnabled && (string.IsNullOrEmpty(_database.RecycleBinId) || _database.RecycleBinId.Equals(_database.ZeroId)))
{
_database.CreateGroup(_database.RootGroupId, message.RecycleBinName, true);
}
if (!_database.IsRecycleBinEnabled || message.ParentGroupId.Equals(_database.RecycleBinId))
{
_database.DeleteEntity(message.GroupId);
}
else
{
await _database.AddGroup(_database.RecycleBinId, message.GroupId);
}
await _database.RemoveGroup(message.ParentGroupId, message.GroupId);
}
}
}

View File

@@ -19,7 +19,7 @@ namespace ModernKeePass.Application.Parameters.Commands.SetRecycleBin
public void Handle(SetRecycleBinCommand message)
{
if (_database.IsOpen) _database.SetRecycleBin(message.RecycleBinId);
if (_database.IsOpen) _database.RecycleBinId = message.RecycleBinId;
else throw new DatabaseClosedException();
}
}