mirror of
https://github.com/wismna/ModernKeePass.git
synced 2025-10-03 15:40:18 -04:00
Added a cryptography service to encrypt protected information (unused atm)
Corrected a bug when deleting recycle bin
This commit is contained in:
@@ -77,6 +77,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Common\Behaviors\DirtyStatusBehavior.cs" />
|
<Compile Include="Common\Behaviors\DirtyStatusBehavior.cs" />
|
||||||
<Compile Include="Common\Interfaces\ICryptographyClient.cs" />
|
<Compile Include="Common\Interfaces\ICryptographyClient.cs" />
|
||||||
|
<Compile Include="Common\Interfaces\IDatabaseSettingsProxy.cs" />
|
||||||
<Compile Include="Common\Interfaces\IDatabaseProxy.cs" />
|
<Compile Include="Common\Interfaces\IDatabaseProxy.cs" />
|
||||||
<Compile Include="Common\Interfaces\IEntityVm.cs" />
|
<Compile Include="Common\Interfaces\IEntityVm.cs" />
|
||||||
<Compile Include="Common\Interfaces\IFileProxy.cs" />
|
<Compile Include="Common\Interfaces\IFileProxy.cs" />
|
||||||
|
@@ -1,12 +1,10 @@
|
|||||||
using System.Collections.Generic;
|
using System.Threading.Tasks;
|
||||||
using ModernKeePass.Domain.Entities;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Application.Common.Interfaces
|
namespace ModernKeePass.Application.Common.Interfaces
|
||||||
{
|
{
|
||||||
public interface ICryptographyClient
|
public interface ICryptographyClient
|
||||||
{
|
{
|
||||||
IEnumerable<BaseEntity> Ciphers { get; }
|
Task<string> Protect(string value);
|
||||||
IEnumerable<BaseEntity> KeyDerivations { get; }
|
Task<string> UnProtect(string value);
|
||||||
IEnumerable<string> CompressionAlgorithms { get; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -0,0 +1,12 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using ModernKeePass.Domain.Entities;
|
||||||
|
|
||||||
|
namespace ModernKeePass.Application.Common.Interfaces
|
||||||
|
{
|
||||||
|
public interface IDatabaseSettingsProxy
|
||||||
|
{
|
||||||
|
IEnumerable<BaseEntity> Ciphers { get; }
|
||||||
|
IEnumerable<BaseEntity> KeyDerivations { get; }
|
||||||
|
IEnumerable<string> CompressionAlgorithms { get; }
|
||||||
|
}
|
||||||
|
}
|
@@ -25,12 +25,13 @@ namespace ModernKeePass.Application.Group.Commands.DeleteGroup
|
|||||||
{
|
{
|
||||||
if (!_database.IsOpen) throw new DatabaseClosedException();
|
if (!_database.IsOpen) throw new DatabaseClosedException();
|
||||||
|
|
||||||
|
var isRecycleBin = message.GroupId.Equals(_database.RecycleBinId);
|
||||||
if (_database.IsRecycleBinEnabled && (string.IsNullOrEmpty(_database.RecycleBinId) || _database.RecycleBinId.Equals(Constants.EmptyId)))
|
if (_database.IsRecycleBinEnabled && (string.IsNullOrEmpty(_database.RecycleBinId) || _database.RecycleBinId.Equals(Constants.EmptyId)))
|
||||||
{
|
{
|
||||||
_database.CreateGroup(_database.RootGroupId, message.RecycleBinName, true);
|
_database.CreateGroup(_database.RootGroupId, message.RecycleBinName, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_database.IsRecycleBinEnabled || message.ParentGroupId.Equals(_database.RecycleBinId))
|
if (!_database.IsRecycleBinEnabled || message.ParentGroupId.Equals(_database.RecycleBinId) || isRecycleBin)
|
||||||
{
|
{
|
||||||
_database.DeleteEntity(message.GroupId);
|
_database.DeleteEntity(message.GroupId);
|
||||||
}
|
}
|
||||||
@@ -40,6 +41,7 @@ namespace ModernKeePass.Application.Group.Commands.DeleteGroup
|
|||||||
}
|
}
|
||||||
|
|
||||||
await _database.RemoveGroup(message.ParentGroupId, message.GroupId);
|
await _database.RemoveGroup(message.ParentGroupId, message.GroupId);
|
||||||
|
if (isRecycleBin) _database.RecycleBinId = Constants.EmptyId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -10,16 +10,16 @@ namespace ModernKeePass.Application.Parameters.Queries.GetCiphers
|
|||||||
{
|
{
|
||||||
public class GetCiphersQueryHandler: IRequestHandler<GetCiphersQuery, IEnumerable<CipherVm>>
|
public class GetCiphersQueryHandler: IRequestHandler<GetCiphersQuery, IEnumerable<CipherVm>>
|
||||||
{
|
{
|
||||||
private readonly ICryptographyClient _cryptography;
|
private readonly IDatabaseSettingsProxy _databaseSettings;
|
||||||
|
|
||||||
public GetCiphersQueryHandler(ICryptographyClient cryptography)
|
public GetCiphersQueryHandler(IDatabaseSettingsProxy databaseSettings)
|
||||||
{
|
{
|
||||||
_cryptography = cryptography;
|
_databaseSettings = databaseSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<CipherVm> Handle(GetCiphersQuery message)
|
public IEnumerable<CipherVm> Handle(GetCiphersQuery message)
|
||||||
{
|
{
|
||||||
return _cryptography.Ciphers.Select(c => new CipherVm
|
return _databaseSettings.Ciphers.Select(c => new CipherVm
|
||||||
{
|
{
|
||||||
Id = c.Id,
|
Id = c.Id,
|
||||||
Name = c.Name
|
Name = c.Name
|
||||||
|
@@ -9,16 +9,16 @@ namespace ModernKeePass.Application.Parameters.Queries.GetCompressions
|
|||||||
{
|
{
|
||||||
public class GetCompressionsQueryHandler : IRequestHandler<GetCompressionsQuery, IEnumerable<string>>
|
public class GetCompressionsQueryHandler : IRequestHandler<GetCompressionsQuery, IEnumerable<string>>
|
||||||
{
|
{
|
||||||
private readonly ICryptographyClient _cryptography;
|
private readonly IDatabaseSettingsProxy _databaseSettings;
|
||||||
|
|
||||||
public GetCompressionsQueryHandler(ICryptographyClient cryptography)
|
public GetCompressionsQueryHandler(IDatabaseSettingsProxy databaseSettings)
|
||||||
{
|
{
|
||||||
_cryptography = cryptography;
|
_databaseSettings = databaseSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<string> Handle(GetCompressionsQuery message)
|
public IEnumerable<string> Handle(GetCompressionsQuery message)
|
||||||
{
|
{
|
||||||
return _cryptography.CompressionAlgorithms.OrderBy(c => c);
|
return _databaseSettings.CompressionAlgorithms.OrderBy(c => c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -10,16 +10,16 @@ namespace ModernKeePass.Application.Parameters.Queries.GetKeyDerivations
|
|||||||
{
|
{
|
||||||
public class GetKeyDerivationsQueryHandler : IRequestHandler<GetKeyDerivationsQuery, IEnumerable<KeyDerivationVm>>
|
public class GetKeyDerivationsQueryHandler : IRequestHandler<GetKeyDerivationsQuery, IEnumerable<KeyDerivationVm>>
|
||||||
{
|
{
|
||||||
private readonly ICryptographyClient _cryptography;
|
private readonly IDatabaseSettingsProxy _databaseSettings;
|
||||||
|
|
||||||
public GetKeyDerivationsQueryHandler(ICryptographyClient cryptography)
|
public GetKeyDerivationsQueryHandler(IDatabaseSettingsProxy databaseSettings)
|
||||||
{
|
{
|
||||||
_cryptography = cryptography;
|
_databaseSettings = databaseSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<KeyDerivationVm> Handle(GetKeyDerivationsQuery message)
|
public IEnumerable<KeyDerivationVm> Handle(GetKeyDerivationsQuery message)
|
||||||
{
|
{
|
||||||
return _cryptography.KeyDerivations.Select(c => new KeyDerivationVm
|
return _databaseSettings.KeyDerivations.Select(c => new KeyDerivationVm
|
||||||
{
|
{
|
||||||
Id = c.Id,
|
Id = c.Id,
|
||||||
Name = c.Name
|
Name = c.Name
|
||||||
|
@@ -18,7 +18,7 @@ namespace ModernKeePass.Infrastructure
|
|||||||
public static IServiceCollection AddInfrastructureKeePass(this IServiceCollection services)
|
public static IServiceCollection AddInfrastructureKeePass(this IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddSingleton(typeof(IDatabaseProxy), typeof(KeePassDatabaseClient));
|
services.AddSingleton(typeof(IDatabaseProxy), typeof(KeePassDatabaseClient));
|
||||||
services.AddTransient(typeof(ICryptographyClient), typeof(KeePassCryptographyClient));
|
services.AddTransient(typeof(IDatabaseSettingsProxy), typeof(KeePassDatabaseSettingsProxy));
|
||||||
services.AddTransient(typeof(ICredentialsProxy), typeof(KeePassCredentialsClient));
|
services.AddTransient(typeof(ICredentialsProxy), typeof(KeePassCredentialsClient));
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
@@ -29,6 +29,7 @@ namespace ModernKeePass.Infrastructure
|
|||||||
services.AddTransient(typeof(ISettingsProxy), typeof(UwpSettingsClient));
|
services.AddTransient(typeof(ISettingsProxy), typeof(UwpSettingsClient));
|
||||||
services.AddTransient(typeof(IRecentProxy), typeof(UwpRecentFilesClient));
|
services.AddTransient(typeof(IRecentProxy), typeof(UwpRecentFilesClient));
|
||||||
services.AddTransient(typeof(IResourceProxy), typeof(UwpResourceClient));
|
services.AddTransient(typeof(IResourceProxy), typeof(UwpResourceClient));
|
||||||
|
services.AddTransient(typeof(ICryptographyClient), typeof(UwpCryptographyClient));
|
||||||
services.AddTransient(typeof(INotificationService), typeof(ToastNotificationService));
|
services.AddTransient(typeof(INotificationService), typeof(ToastNotificationService));
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
@@ -82,12 +82,13 @@
|
|||||||
<Compile Include="KeePass\EntryFieldMapper.cs" />
|
<Compile Include="KeePass\EntryFieldMapper.cs" />
|
||||||
<Compile Include="KeePass\MappingProfiles.cs" />
|
<Compile Include="KeePass\MappingProfiles.cs" />
|
||||||
<Compile Include="KeePass\IconMapper.cs" />
|
<Compile Include="KeePass\IconMapper.cs" />
|
||||||
<Compile Include="KeePass\KeePassCryptographyClient.cs" />
|
<Compile Include="KeePass\KeePassDatabaseSettingsProxy.cs" />
|
||||||
<Compile Include="KeePass\KeePassDatabaseClient.cs" />
|
<Compile Include="KeePass\KeePassDatabaseClient.cs" />
|
||||||
<Compile Include="KeePass\KeePassCredentialsClient.cs" />
|
<Compile Include="KeePass\KeePassCredentialsClient.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="UWP\StorageFileClient.cs" />
|
<Compile Include="UWP\StorageFileClient.cs" />
|
||||||
<Compile Include="UWP\ToastNotificationService.cs" />
|
<Compile Include="UWP\ToastNotificationService.cs" />
|
||||||
|
<Compile Include="UWP\UwpCryptographyClient.cs" />
|
||||||
<Compile Include="UWP\UwpRecentFilesClient.cs" />
|
<Compile Include="UWP\UwpRecentFilesClient.cs" />
|
||||||
<Compile Include="UWP\UwpResourceClient.cs" />
|
<Compile Include="UWP\UwpResourceClient.cs" />
|
||||||
<Compile Include="UWP\UwpSettingsClient.cs" />
|
<Compile Include="UWP\UwpSettingsClient.cs" />
|
||||||
|
@@ -9,7 +9,7 @@ using ModernKeePassLib.Cryptography.KeyDerivation;
|
|||||||
|
|
||||||
namespace ModernKeePass.Infrastructure.KeePass
|
namespace ModernKeePass.Infrastructure.KeePass
|
||||||
{
|
{
|
||||||
public class KeePassCryptographyClient: ICryptographyClient
|
public class KeePassDatabaseSettingsProxy: IDatabaseSettingsProxy
|
||||||
{
|
{
|
||||||
public IEnumerable<BaseEntity> Ciphers
|
public IEnumerable<BaseEntity> Ciphers
|
||||||
{
|
{
|
47
ModernKeePass.Infrastructure/UWP/UwpCryptographyClient.cs
Normal file
47
ModernKeePass.Infrastructure/UWP/UwpCryptographyClient.cs
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Windows.Security.Cryptography;
|
||||||
|
using Windows.Security.Cryptography.DataProtection;
|
||||||
|
using ModernKeePass.Application.Common.Interfaces;
|
||||||
|
|
||||||
|
namespace ModernKeePass.Infrastructure.UWP
|
||||||
|
{
|
||||||
|
public class UwpCryptographyClient: ICryptographyClient
|
||||||
|
{
|
||||||
|
public async Task<string> Protect(string value)
|
||||||
|
{
|
||||||
|
// Create a DataProtectionProvider object for the specified descriptor.
|
||||||
|
var provider = new DataProtectionProvider();
|
||||||
|
|
||||||
|
// Encode the plaintext input message to a buffer.
|
||||||
|
var buffMsg = CryptographicBuffer.ConvertStringToBinary(value, BinaryStringEncoding.Utf8);
|
||||||
|
|
||||||
|
// Encrypt the message.
|
||||||
|
var buffProtected = await provider.ProtectAsync(buffMsg);
|
||||||
|
|
||||||
|
// Encode buffer to Base64
|
||||||
|
var stringProtected = CryptographicBuffer.EncodeToBase64String(buffProtected);
|
||||||
|
|
||||||
|
// Return the encrypted string.
|
||||||
|
return stringProtected;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<string> UnProtect(string value)
|
||||||
|
{
|
||||||
|
// Create a DataProtectionProvider object.
|
||||||
|
var provider = new DataProtectionProvider();
|
||||||
|
|
||||||
|
// Decode from Base64 string
|
||||||
|
var buffProtected = CryptographicBuffer.DecodeFromBase64String(value);
|
||||||
|
|
||||||
|
// Decrypt the protected message specified on input.
|
||||||
|
var buffUnprotected = await provider.UnprotectAsync(buffProtected);
|
||||||
|
|
||||||
|
// Convert the unprotected message from an IBuffer object to a string.
|
||||||
|
var strClearText = CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, buffUnprotected);
|
||||||
|
|
||||||
|
// Return the plaintext string.
|
||||||
|
return strClearText;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -270,9 +270,6 @@
|
|||||||
<data name="CompositeKeyFileNameSuggestion" xml:space="preserve">
|
<data name="CompositeKeyFileNameSuggestion" xml:space="preserve">
|
||||||
<value>Clé</value>
|
<value>Clé</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="EntryAddAdditionalField.Text" xml:space="preserve">
|
|
||||||
<value>Ajouter un champ</value>
|
|
||||||
</data>
|
|
||||||
<data name="DatabaseTooBigDescription" xml:space="preserve">
|
<data name="DatabaseTooBigDescription" xml:space="preserve">
|
||||||
<value>La base de données est trop grosse pour sauvegarder automatiquement lors de la suspension. Pensez à bien sauvegarder vos changements avant de fermer l'app !</value>
|
<value>La base de données est trop grosse pour sauvegarder automatiquement lors de la suspension. Pensez à bien sauvegarder vos changements avant de fermer l'app !</value>
|
||||||
</data>
|
</data>
|
||||||
|
@@ -561,4 +561,7 @@
|
|||||||
<data name="SettingsCopyExpiration.Text" xml:space="preserve">
|
<data name="SettingsCopyExpiration.Text" xml:space="preserve">
|
||||||
<value>Supprimer la valeur copiée dans le presse papier après combien de secondes ?</value>
|
<value>Supprimer la valeur copiée dans le presse papier après combien de secondes ?</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="EntryAddAdditionalField.Text" xml:space="preserve">
|
||||||
|
<value>Ajouter un champ</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
@@ -55,6 +55,7 @@ namespace ModernKeePass.ViewModels
|
|||||||
SimpleIoc.Default.Register(() => App.Services.GetRequiredService<IDialogService>());
|
SimpleIoc.Default.Register(() => App.Services.GetRequiredService<IDialogService>());
|
||||||
SimpleIoc.Default.Register(() => App.Services.GetRequiredService<INavigationService>());
|
SimpleIoc.Default.Register(() => App.Services.GetRequiredService<INavigationService>());
|
||||||
SimpleIoc.Default.Register(() => App.Services.GetRequiredService<INotificationService>());
|
SimpleIoc.Default.Register(() => App.Services.GetRequiredService<INotificationService>());
|
||||||
|
SimpleIoc.Default.Register(() => App.Services.GetRequiredService<ICryptographyClient>());
|
||||||
}
|
}
|
||||||
|
|
||||||
SimpleIoc.Default.Register<SecurityVm>();
|
SimpleIoc.Default.Register<SecurityVm>();
|
||||||
|
Reference in New Issue
Block a user