Moved application code to the Application layer
Imported Win10 project Code cleanup WIP - Use common UWP services for Win8.1 and Win10
@@ -7,6 +7,7 @@ namespace ModernKeePass.Application.Common.Interfaces
|
|||||||
{
|
{
|
||||||
public interface IDatabaseProxy
|
public interface IDatabaseProxy
|
||||||
{
|
{
|
||||||
|
string ZeroId { get; }
|
||||||
bool IsOpen { get; }
|
bool IsOpen { get; }
|
||||||
string Name { get; }
|
string Name { get; }
|
||||||
string RootGroupId { get; }
|
string RootGroupId { get; }
|
||||||
@@ -15,14 +16,14 @@ namespace ModernKeePass.Application.Common.Interfaces
|
|||||||
string KeyDerivationId { get; set; }
|
string KeyDerivationId { get; set; }
|
||||||
string Compression { get; set; }
|
string Compression { get; set; }
|
||||||
bool IsRecycleBinEnabled { get; set; }
|
bool IsRecycleBinEnabled { get; set; }
|
||||||
|
string FileAccessToken { get; set; }
|
||||||
|
|
||||||
Task Open(FileInfo fileInfo, Credentials credentials);
|
Task Open(byte[] file, Credentials credentials);
|
||||||
Task ReOpen();
|
Task ReOpen(byte[] file);
|
||||||
Task Create(FileInfo fileInfo, Credentials credentials, DatabaseVersion version = DatabaseVersion.V2);
|
Task Create(byte[] file, Credentials credentials, DatabaseVersion version = DatabaseVersion.V2);
|
||||||
Task SaveDatabase();
|
Task<byte[]> SaveDatabase();
|
||||||
Task SaveDatabase(string filePath);
|
Task<byte[]> SaveDatabase(byte[] newFileContents);
|
||||||
void SetRecycleBin(string id);
|
void UpdateCredentials(Credentials credentials);
|
||||||
Task UpdateCredentials(Credentials credentials);
|
|
||||||
void CloseDatabase();
|
void CloseDatabase();
|
||||||
|
|
||||||
Task AddEntry(string parentGroupId, string entryId);
|
Task AddEntry(string parentGroupId, string entryId);
|
||||||
@@ -32,8 +33,7 @@ namespace ModernKeePass.Application.Common.Interfaces
|
|||||||
void UpdateGroup(string groupId);
|
void UpdateGroup(string groupId);
|
||||||
Task RemoveEntry(string parentGroupId, string entryId);
|
Task RemoveEntry(string parentGroupId, string entryId);
|
||||||
Task RemoveGroup(string parentGroupId, string groupId);
|
Task RemoveGroup(string parentGroupId, string groupId);
|
||||||
Task DeleteEntry(string parentGroupId, string entryId, string recycleBinName);
|
void DeleteEntity(string entityId);
|
||||||
Task DeleteGroup(string parentGroupId, string groupId, string recycleBinName);
|
|
||||||
EntryEntity CreateEntry(string parentGroupId);
|
EntryEntity CreateEntry(string parentGroupId);
|
||||||
GroupEntity CreateGroup(string parentGroupId, string nameId, bool isRecycleBin = false);
|
GroupEntity CreateGroup(string parentGroupId, string nameId, bool isRecycleBin = false);
|
||||||
void SortEntries(string groupId);
|
void SortEntries(string groupId);
|
||||||
|
@@ -5,6 +5,6 @@ namespace ModernKeePass.Application.Common.Interfaces
|
|||||||
{
|
{
|
||||||
public interface IImportFormat
|
public interface IImportFormat
|
||||||
{
|
{
|
||||||
Task<List<Dictionary<string, string>>> Import(string path);
|
Task<List<Dictionary<string, string>>> Import(IList<string> fileContents);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -9,15 +9,19 @@ namespace ModernKeePass.Application.Database.Commands.CloseDatabase
|
|||||||
public class CloseDatabaseCommandHandler : IRequestHandler<CloseDatabaseCommand>
|
public class CloseDatabaseCommandHandler : IRequestHandler<CloseDatabaseCommand>
|
||||||
{
|
{
|
||||||
private readonly IDatabaseProxy _database;
|
private readonly IDatabaseProxy _database;
|
||||||
|
private readonly IFileProxy _file;
|
||||||
|
|
||||||
public CloseDatabaseCommandHandler(IDatabaseProxy database)
|
public CloseDatabaseCommandHandler(IDatabaseProxy database, IFileProxy file)
|
||||||
{
|
{
|
||||||
_database = database;
|
_database = database;
|
||||||
|
_file = file;
|
||||||
}
|
}
|
||||||
public void Handle(CloseDatabaseCommand message)
|
public void Handle(CloseDatabaseCommand message)
|
||||||
{
|
{
|
||||||
if (_database.IsOpen) _database.CloseDatabase();
|
if (!_database.IsOpen) throw new DatabaseClosedException();
|
||||||
else throw new DatabaseClosedException();
|
_database.CloseDatabase();
|
||||||
|
_file.ReleaseFile(_database.FileAccessToken);
|
||||||
|
_database.FileAccessToken = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -15,26 +15,26 @@ namespace ModernKeePass.Application.Database.Commands.CreateDatabase
|
|||||||
public class CreateDatabaseCommandHandler : IAsyncRequestHandler<CreateDatabaseCommand>
|
public class CreateDatabaseCommandHandler : IAsyncRequestHandler<CreateDatabaseCommand>
|
||||||
{
|
{
|
||||||
private readonly IDatabaseProxy _database;
|
private readonly IDatabaseProxy _database;
|
||||||
|
private readonly IFileProxy _file;
|
||||||
|
|
||||||
public CreateDatabaseCommandHandler(IDatabaseProxy database)
|
public CreateDatabaseCommandHandler(IDatabaseProxy database, IFileProxy file)
|
||||||
{
|
{
|
||||||
_database = database;
|
_database = database;
|
||||||
|
_file = file;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Handle(CreateDatabaseCommand message)
|
public async Task Handle(CreateDatabaseCommand message)
|
||||||
{
|
{
|
||||||
if (_database.IsOpen) throw new DatabaseOpenException();
|
if (_database.IsOpen) throw new DatabaseOpenException();
|
||||||
|
|
||||||
await _database.Create(
|
var file = await _file.OpenBinaryFile(message.FilePath);
|
||||||
new FileInfo
|
await _database.Create(file,
|
||||||
{
|
|
||||||
Path = message.FilePath
|
|
||||||
},
|
|
||||||
new Credentials
|
new Credentials
|
||||||
{
|
{
|
||||||
KeyFilePath = message.KeyFilePath,
|
KeyFileContents = await _file.OpenBinaryFile(message.KeyFilePath),
|
||||||
Password = message.Password
|
Password = message.Password
|
||||||
});
|
});
|
||||||
|
_database.FileAccessToken = message.FilePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -12,18 +12,34 @@ namespace ModernKeePass.Application.Database.Commands.SaveDatabase
|
|||||||
public class SaveDatabaseCommandHandler : IAsyncRequestHandler<SaveDatabaseCommand>
|
public class SaveDatabaseCommandHandler : IAsyncRequestHandler<SaveDatabaseCommand>
|
||||||
{
|
{
|
||||||
private readonly IDatabaseProxy _database;
|
private readonly IDatabaseProxy _database;
|
||||||
|
private readonly IFileProxy _file;
|
||||||
|
|
||||||
public SaveDatabaseCommandHandler(IDatabaseProxy database)
|
public SaveDatabaseCommandHandler(IDatabaseProxy database, IFileProxy file)
|
||||||
{
|
{
|
||||||
_database = database;
|
_database = database;
|
||||||
|
_file = file;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Handle(SaveDatabaseCommand message)
|
public async Task Handle(SaveDatabaseCommand message)
|
||||||
{
|
{
|
||||||
if (!_database.IsOpen) throw new DatabaseClosedException();
|
if (!_database.IsOpen) throw new DatabaseClosedException();
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(message.FilePath)) await _database.SaveDatabase();
|
byte[] contents;
|
||||||
else await _database.SaveDatabase(message.FilePath);
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -14,23 +14,22 @@ namespace ModernKeePass.Application.Database.Commands.UpdateCredentials
|
|||||||
public class UpdateCredentialsCommandHandler : IAsyncRequestHandler<UpdateCredentialsCommand>
|
public class UpdateCredentialsCommandHandler : IAsyncRequestHandler<UpdateCredentialsCommand>
|
||||||
{
|
{
|
||||||
private readonly IDatabaseProxy _database;
|
private readonly IDatabaseProxy _database;
|
||||||
|
private readonly IFileProxy _file;
|
||||||
|
|
||||||
public UpdateCredentialsCommandHandler(IDatabaseProxy database)
|
public UpdateCredentialsCommandHandler(IDatabaseProxy database, IFileProxy file)
|
||||||
{
|
{
|
||||||
_database = database;
|
_database = database;
|
||||||
|
_file = file;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Handle(UpdateCredentialsCommand message)
|
public async Task Handle(UpdateCredentialsCommand message)
|
||||||
{
|
{
|
||||||
if (_database.IsOpen)
|
if (!_database.IsOpen) throw new DatabaseClosedException();
|
||||||
|
_database.UpdateCredentials(new Credentials
|
||||||
{
|
{
|
||||||
await _database.UpdateCredentials(new Credentials
|
KeyFileContents = await _file.OpenBinaryFile(message.KeyFilePath),
|
||||||
{
|
Password = message.Password
|
||||||
KeyFilePath = message.KeyFilePath,
|
});
|
||||||
Password = message.Password
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else throw new DatabaseClosedException();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,6 @@
|
|||||||
using MediatR;
|
using MediatR;
|
||||||
using ModernKeePass.Application.Common.Interfaces;
|
using ModernKeePass.Application.Common.Interfaces;
|
||||||
using ModernKeePass.Application.Database.Models;
|
using ModernKeePass.Application.Database.Models;
|
||||||
using ModernKeePass.Application.Group.Models;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Application.Database.Queries.GetDatabase
|
namespace ModernKeePass.Application.Database.Queries.GetDatabase
|
||||||
{
|
{
|
||||||
|
@@ -15,26 +15,25 @@ namespace ModernKeePass.Application.Database.Queries.OpenDatabase
|
|||||||
public class OpenDatabaseQueryHandler : IAsyncRequestHandler<OpenDatabaseQuery>
|
public class OpenDatabaseQueryHandler : IAsyncRequestHandler<OpenDatabaseQuery>
|
||||||
{
|
{
|
||||||
private readonly IDatabaseProxy _database;
|
private readonly IDatabaseProxy _database;
|
||||||
|
private readonly IFileProxy _file;
|
||||||
|
|
||||||
public OpenDatabaseQueryHandler(IDatabaseProxy database)
|
public OpenDatabaseQueryHandler(IDatabaseProxy database, IFileProxy file)
|
||||||
{
|
{
|
||||||
_database = database;
|
_database = database;
|
||||||
|
_file = file;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Handle(OpenDatabaseQuery request)
|
public async Task Handle(OpenDatabaseQuery request)
|
||||||
{
|
{
|
||||||
if (_database.IsOpen) throw new DatabaseOpenException();
|
if (_database.IsOpen) throw new DatabaseOpenException();
|
||||||
|
|
||||||
await _database.Open(
|
var file = await _file.OpenBinaryFile(request.FilePath);
|
||||||
new FileInfo
|
await _database.Open(file, new Credentials
|
||||||
{
|
{
|
||||||
Path = request.FilePath
|
KeyFileContents = await _file.OpenBinaryFile(request.KeyFilePath),
|
||||||
},
|
|
||||||
new Credentials
|
|
||||||
{
|
|
||||||
KeyFilePath = request.KeyFilePath,
|
|
||||||
Password = request.Password
|
Password = request.Password
|
||||||
});
|
});
|
||||||
|
_database.FileAccessToken = request.FilePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -10,17 +10,20 @@ namespace ModernKeePass.Application.Database.Queries.ReOpenDatabase
|
|||||||
public class ReOpenDatabaseQueryHandler : IAsyncRequestHandler<ReOpenDatabaseQuery>
|
public class ReOpenDatabaseQueryHandler : IAsyncRequestHandler<ReOpenDatabaseQuery>
|
||||||
{
|
{
|
||||||
private readonly IDatabaseProxy _database;
|
private readonly IDatabaseProxy _database;
|
||||||
|
private readonly IFileProxy _file;
|
||||||
|
|
||||||
public ReOpenDatabaseQueryHandler(IDatabaseProxy database)
|
public ReOpenDatabaseQueryHandler(IDatabaseProxy database, IFileProxy file)
|
||||||
{
|
{
|
||||||
_database = database;
|
_database = database;
|
||||||
|
_file = file;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Handle(ReOpenDatabaseQuery request)
|
public async Task Handle(ReOpenDatabaseQuery request)
|
||||||
{
|
{
|
||||||
if (!_database.IsOpen) throw new DatabaseClosedException();
|
if (!_database.IsOpen) throw new DatabaseClosedException();
|
||||||
|
|
||||||
await _database.ReOpen();
|
var file = await _file.OpenBinaryFile(_database.FileAccessToken);
|
||||||
|
await _database.ReOpen(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,21 @@ namespace ModernKeePass.Application.Group.Commands.DeleteEntry
|
|||||||
{
|
{
|
||||||
if (!_database.IsOpen) throw new DatabaseClosedException();
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,21 @@ namespace ModernKeePass.Application.Group.Commands.DeleteGroup
|
|||||||
{
|
{
|
||||||
if (!_database.IsOpen) throw new DatabaseClosedException();
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -19,7 +19,7 @@ namespace ModernKeePass.Application.Parameters.Commands.SetRecycleBin
|
|||||||
|
|
||||||
public void Handle(SetRecycleBinCommand message)
|
public void Handle(SetRecycleBinCommand message)
|
||||||
{
|
{
|
||||||
if (_database.IsOpen) _database.SetRecycleBin(message.RecycleBinId);
|
if (_database.IsOpen) _database.RecycleBinId = message.RecycleBinId;
|
||||||
else throw new DatabaseClosedException();
|
else throw new DatabaseClosedException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -57,6 +57,7 @@
|
|||||||
<Compile Include="Exceptions\SaveException.cs" />
|
<Compile Include="Exceptions\SaveException.cs" />
|
||||||
<Compile Include="Interfaces\IDateTime.cs" />
|
<Compile Include="Interfaces\IDateTime.cs" />
|
||||||
<Compile Include="Interfaces\IHasSelectableObject.cs" />
|
<Compile Include="Interfaces\IHasSelectableObject.cs" />
|
||||||
|
<Compile Include="Interfaces\IImportFormat.cs" />
|
||||||
<Compile Include="Interfaces\IIsEnabled.cs" />
|
<Compile Include="Interfaces\IIsEnabled.cs" />
|
||||||
<Compile Include="Interfaces\ISelectableModel.cs" />
|
<Compile Include="Interfaces\ISelectableModel.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
public class Credentials
|
public class Credentials
|
||||||
{
|
{
|
||||||
public string Password { get; set; }
|
public string Password { get; set; }
|
||||||
public string KeyFilePath { get; set; }
|
public byte[] KeyFileContents { get; set; }
|
||||||
// TODO: add Windows Hello
|
// TODO: add Windows Hello
|
||||||
}
|
}
|
||||||
}
|
}
|
10
ModernKeePass.Domain/Interfaces/IImportFormat.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ModernKeePass.Domain.Interfaces
|
||||||
|
{
|
||||||
|
public interface IImportFormat
|
||||||
|
{
|
||||||
|
Task<List<Dictionary<string, string>>> Import(string path);
|
||||||
|
}
|
||||||
|
}
|
@@ -9,16 +9,25 @@ namespace ModernKeePass.Infrastructure
|
|||||||
{
|
{
|
||||||
public static class DependencyInjection
|
public static class DependencyInjection
|
||||||
{
|
{
|
||||||
public static IServiceCollection AddInfrastructure(this IServiceCollection services)
|
public static IServiceCollection AddInfrastructureCommon(this IServiceCollection services)
|
||||||
|
{
|
||||||
|
services.AddTransient(typeof(IDateTime), typeof(MachineDateTime));
|
||||||
|
return 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(ICryptographyClient), typeof(KeePassCryptographyClient));
|
||||||
services.AddTransient(typeof(IPasswordProxy), typeof(KeePassPasswordClient));
|
services.AddTransient(typeof(IPasswordProxy), typeof(KeePassPasswordClient));
|
||||||
/*services.AddTransient(typeof(IResourceProxy), typeof(UwpResourceClient));
|
return services;
|
||||||
services.AddTransient(typeof(ISettingsProxy), typeof(UwpSettingsClient));
|
}
|
||||||
services.AddTransient(typeof(IRecentProxy), typeof(UwpRecentFilesClient));*/
|
|
||||||
|
public static IServiceCollection AddInfrastructureUwp(this IServiceCollection services)
|
||||||
|
{
|
||||||
services.AddScoped(typeof(IFileProxy), typeof(StorageFileClient));
|
services.AddScoped(typeof(IFileProxy), typeof(StorageFileClient));
|
||||||
services.AddTransient(typeof(IDateTime), typeof(MachineDateTime));
|
services.AddTransient(typeof(ISettingsProxy), typeof(UwpSettingsClient));
|
||||||
|
services.AddTransient(typeof(IRecentProxy), typeof(UwpRecentFilesClient));
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,21 +6,14 @@ namespace ModernKeePass.Infrastructure.File
|
|||||||
{
|
{
|
||||||
public class CsvImportFormat: IImportFormat
|
public class CsvImportFormat: IImportFormat
|
||||||
{
|
{
|
||||||
private readonly IFileProxy _fileService;
|
|
||||||
private const bool HasHeaderRow = true;
|
private const bool HasHeaderRow = true;
|
||||||
private const char Delimiter = ';';
|
private const char Delimiter = ';';
|
||||||
private const char LineDelimiter = '\n';
|
private const char LineDelimiter = '\n';
|
||||||
|
|
||||||
public CsvImportFormat(IFileProxy fileService)
|
public async Task<List<Dictionary<string, string>>> Import(IList<string> fileContents)
|
||||||
{
|
|
||||||
_fileService = fileService;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<List<Dictionary<string, string>>> Import(string path)
|
|
||||||
{
|
{
|
||||||
var parsedResult = new List<Dictionary<string, string>>();
|
var parsedResult = new List<Dictionary<string, string>>();
|
||||||
var content = await _fileService.OpenTextFile(path);
|
foreach (var line in fileContents)
|
||||||
foreach (var line in content)
|
|
||||||
{
|
{
|
||||||
var fields = line.Split(Delimiter);
|
var fields = line.Split(Delimiter);
|
||||||
var recordItem = new Dictionary<string, string>();
|
var recordItem = new Dictionary<string, string>();
|
||||||
|
@@ -18,19 +18,20 @@ using ModernKeePassLib.Utility;
|
|||||||
|
|
||||||
namespace ModernKeePass.Infrastructure.KeePass
|
namespace ModernKeePass.Infrastructure.KeePass
|
||||||
{
|
{
|
||||||
public class KeePassDatabaseClient: IDatabaseProxy
|
public class KeePassDatabaseClient: IDatabaseProxy, IDisposable
|
||||||
{
|
{
|
||||||
private readonly IFileProxy _fileService;
|
|
||||||
private readonly IMapper _mapper;
|
private readonly IMapper _mapper;
|
||||||
private readonly IDateTime _dateTime;
|
private readonly IDateTime _dateTime;
|
||||||
private readonly PwDatabase _pwDatabase = new PwDatabase();
|
private readonly PwDatabase _pwDatabase = new PwDatabase();
|
||||||
private string _fileAccessToken;
|
|
||||||
private Credentials _credentials;
|
private Credentials _credentials;
|
||||||
|
|
||||||
|
public string ZeroId => PwUuid.Zero.ToHexString();
|
||||||
|
|
||||||
// Main information
|
// Main information
|
||||||
public bool IsOpen => (_pwDatabase?.IsOpen).GetValueOrDefault();
|
public bool IsOpen => (_pwDatabase?.IsOpen).GetValueOrDefault();
|
||||||
public string Name => _pwDatabase?.Name;
|
public string Name => _pwDatabase?.Name;
|
||||||
public string RootGroupId => _pwDatabase?.RootGroup.Uuid.ToHexString();
|
public string RootGroupId => _pwDatabase?.RootGroup.Uuid.ToHexString();
|
||||||
|
public string FileAccessToken { get; set; }
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
public bool IsRecycleBinEnabled
|
public bool IsRecycleBinEnabled
|
||||||
@@ -50,7 +51,11 @@ namespace ModernKeePass.Infrastructure.KeePass
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
set { _pwDatabase.RecycleBinUuid = BuildIdFromString(value); }
|
set
|
||||||
|
{
|
||||||
|
_pwDatabase.RecycleBinUuid = BuildIdFromString(value);
|
||||||
|
_pwDatabase.RecycleBinChanged = _dateTime.Now;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string CipherId
|
public string CipherId
|
||||||
@@ -75,24 +80,25 @@ namespace ModernKeePass.Infrastructure.KeePass
|
|||||||
set { _pwDatabase.Compression = (PwCompressionAlgorithm) Enum.Parse(typeof(PwCompressionAlgorithm), value); }
|
set { _pwDatabase.Compression = (PwCompressionAlgorithm) Enum.Parse(typeof(PwCompressionAlgorithm), value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public KeePassDatabaseClient(IFileProxy fileService, IMapper mapper, IDateTime dateTime)
|
public KeePassDatabaseClient(IMapper mapper, IDateTime dateTime)
|
||||||
{
|
{
|
||||||
_fileService = fileService;
|
|
||||||
_mapper = mapper;
|
_mapper = mapper;
|
||||||
_dateTime = dateTime;
|
_dateTime = dateTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Open(FileInfo fileInfo, Credentials credentials)
|
public async Task Open(byte[] file, Credentials credentials)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var compositeKey = await CreateCompositeKey(credentials);
|
await Task.Run(() =>
|
||||||
var ioConnection = await BuildConnectionInfo(fileInfo);
|
{
|
||||||
|
var compositeKey = CreateCompositeKey(credentials);
|
||||||
|
var ioConnection = IOConnectionInfo.FromByteArray(file);
|
||||||
|
|
||||||
_pwDatabase.Open(ioConnection, compositeKey, new NullStatusLogger());
|
_pwDatabase.Open(ioConnection, compositeKey, new NullStatusLogger());
|
||||||
|
|
||||||
_credentials = credentials;
|
_credentials = credentials;
|
||||||
_fileAccessToken = fileInfo.Path;
|
});
|
||||||
}
|
}
|
||||||
catch (InvalidCompositeKeyException ex)
|
catch (InvalidCompositeKeyException ex)
|
||||||
{
|
{
|
||||||
@@ -100,35 +106,45 @@ namespace ModernKeePass.Infrastructure.KeePass
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ReOpen()
|
public async Task ReOpen(byte[] file)
|
||||||
{
|
{
|
||||||
await Open(new FileInfo {Path = _fileAccessToken}, _credentials);
|
await Open(file, _credentials);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Create(FileInfo fileInfo, Credentials credentials, DatabaseVersion version = DatabaseVersion.V2)
|
public async Task Create(byte[] file, Credentials credentials, DatabaseVersion version = DatabaseVersion.V2)
|
||||||
{
|
{
|
||||||
var compositeKey = await CreateCompositeKey(credentials);
|
|
||||||
var ioConnection = await BuildConnectionInfo(fileInfo);
|
|
||||||
|
|
||||||
_pwDatabase.New(ioConnection, compositeKey);
|
|
||||||
|
|
||||||
switch (version)
|
|
||||||
{
|
|
||||||
case DatabaseVersion.V4:
|
|
||||||
_pwDatabase.KdfParameters = KdfPool.Get("Argon2").GetDefaultParameters();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
_fileAccessToken = fileInfo.Path;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task SaveDatabase()
|
|
||||||
{
|
|
||||||
if (!_pwDatabase.IsOpen) return;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_pwDatabase.Save(new NullStatusLogger());
|
await Task.Run(() =>
|
||||||
await _fileService.WriteBinaryContentsToFile(_fileAccessToken, _pwDatabase.IOConnectionInfo.Bytes);
|
{
|
||||||
|
var compositeKey = CreateCompositeKey(credentials);
|
||||||
|
var ioConnection = IOConnectionInfo.FromByteArray(file);
|
||||||
|
|
||||||
|
_pwDatabase.New(ioConnection, compositeKey);
|
||||||
|
|
||||||
|
switch (version)
|
||||||
|
{
|
||||||
|
case DatabaseVersion.V4:
|
||||||
|
_pwDatabase.KdfParameters = KdfPool.Get("Argon2").GetDefaultParameters();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new ArgumentException(ex.Message, ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<byte[]> SaveDatabase()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return await Task.Run(() =>
|
||||||
|
{
|
||||||
|
_pwDatabase.Save(new NullStatusLogger());
|
||||||
|
return _pwDatabase.IOConnectionInfo.Bytes;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -136,33 +152,25 @@ namespace ModernKeePass.Infrastructure.KeePass
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SaveDatabase(string filePath)
|
public async Task<byte[]> SaveDatabase(byte[] newFileContents)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var newFileContents = await _fileService.OpenBinaryFile(filePath);
|
return await Task.Run(() =>
|
||||||
_pwDatabase.SaveAs(IOConnectionInfo.FromByteArray(newFileContents), true, new NullStatusLogger());
|
{
|
||||||
await _fileService.WriteBinaryContentsToFile(filePath, _pwDatabase.IOConnectionInfo.Bytes);
|
_pwDatabase.SaveAs(IOConnectionInfo.FromByteArray(newFileContents), true, new NullStatusLogger());
|
||||||
|
return _pwDatabase.IOConnectionInfo.Bytes;
|
||||||
_fileService.ReleaseFile(_fileAccessToken);
|
});
|
||||||
_fileAccessToken = filePath;
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
throw new SaveException(e);
|
throw new SaveException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetRecycleBin(string id)
|
|
||||||
{
|
|
||||||
_pwDatabase.RecycleBinUuid = BuildIdFromString(id);
|
|
||||||
_pwDatabase.RecycleBinChanged = _dateTime.Now;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CloseDatabase()
|
public void CloseDatabase()
|
||||||
{
|
{
|
||||||
_pwDatabase?.Close();
|
_pwDatabase?.Close();
|
||||||
_fileService.ReleaseFile(_fileAccessToken);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task AddEntry(string parentGroupId, string entryId)
|
public async Task AddEntry(string parentGroupId, string entryId)
|
||||||
@@ -214,42 +222,9 @@ namespace ModernKeePass.Infrastructure.KeePass
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task DeleteEntry(string parentGroupId, string entryId, string recycleBinName)
|
public void DeleteEntity(string entityId)
|
||||||
{
|
{
|
||||||
if (IsRecycleBinEnabled && (string.IsNullOrEmpty(RecycleBinId) || _pwDatabase.RecycleBinUuid.Equals(PwUuid.Zero)))
|
_pwDatabase.DeletedObjects.Add(new PwDeletedObject(BuildIdFromString(entityId), _dateTime.Now));
|
||||||
{
|
|
||||||
CreateGroup(RootGroupId, recycleBinName, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!IsRecycleBinEnabled || parentGroupId.Equals(RecycleBinId))
|
|
||||||
{
|
|
||||||
_pwDatabase.DeletedObjects.Add(new PwDeletedObject(BuildIdFromString(entryId), _dateTime.Now));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
await AddEntry(RecycleBinId, entryId);
|
|
||||||
}
|
|
||||||
|
|
||||||
await RemoveEntry(parentGroupId, entryId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task DeleteGroup(string parentGroupId, string groupId, string recycleBinName)
|
|
||||||
{
|
|
||||||
if (IsRecycleBinEnabled && (string.IsNullOrEmpty(RecycleBinId) || _pwDatabase.RecycleBinUuid.Equals(PwUuid.Zero)))
|
|
||||||
{
|
|
||||||
CreateGroup(RootGroupId, recycleBinName, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!IsRecycleBinEnabled || parentGroupId.Equals(RecycleBinId))
|
|
||||||
{
|
|
||||||
_pwDatabase.DeletedObjects.Add(new PwDeletedObject(BuildIdFromString(groupId), _dateTime.Now));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
await AddEntry(RecycleBinId, groupId);
|
|
||||||
}
|
|
||||||
|
|
||||||
await RemoveGroup(parentGroupId, groupId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateEntry(string entryId, string fieldName, object fieldValue)
|
public void UpdateEntry(string entryId, string fieldName, object fieldValue)
|
||||||
@@ -328,32 +303,30 @@ namespace ModernKeePass.Infrastructure.KeePass
|
|||||||
return _mapper.Map<GroupEntity>(pwGroup);
|
return _mapper.Map<GroupEntity>(pwGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task UpdateCredentials(Credentials credentials)
|
public void UpdateCredentials(Credentials credentials)
|
||||||
{
|
{
|
||||||
_pwDatabase.MasterKey = await CreateCompositeKey(credentials);
|
_pwDatabase.MasterKey = CreateCompositeKey(credentials);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<CompositeKey> CreateCompositeKey(Credentials credentials)
|
private CompositeKey CreateCompositeKey(Credentials credentials)
|
||||||
{
|
{
|
||||||
var compositeKey = new CompositeKey();
|
var compositeKey = new CompositeKey();
|
||||||
if (!string.IsNullOrEmpty(credentials.Password)) compositeKey.AddUserKey(new KcpPassword(credentials.Password));
|
if (!string.IsNullOrEmpty(credentials.Password)) compositeKey.AddUserKey(new KcpPassword(credentials.Password));
|
||||||
if (!string.IsNullOrEmpty(credentials.KeyFilePath))
|
if (credentials.KeyFileContents != null)
|
||||||
{
|
{
|
||||||
var kcpFileContents = await _fileService.OpenBinaryFile(credentials.KeyFilePath);
|
compositeKey.AddUserKey(new KcpKeyFile(IOConnectionInfo.FromByteArray(credentials.KeyFileContents)));
|
||||||
compositeKey.AddUserKey(new KcpKeyFile(IOConnectionInfo.FromByteArray(kcpFileContents)));
|
|
||||||
}
|
}
|
||||||
return compositeKey;
|
return compositeKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IOConnectionInfo> BuildConnectionInfo(FileInfo fileInfo)
|
|
||||||
{
|
|
||||||
var fileContents = await _fileService.OpenBinaryFile(fileInfo.Path);
|
|
||||||
return IOConnectionInfo.FromByteArray(fileContents);
|
|
||||||
}
|
|
||||||
|
|
||||||
private PwUuid BuildIdFromString(string id)
|
private PwUuid BuildIdFromString(string id)
|
||||||
{
|
{
|
||||||
return new PwUuid(MemUtil.HexStringToByteArray(id));
|
return new PwUuid(MemUtil.HexStringToByteArray(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (IsOpen) CloseDatabase();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
17
ModernKeePass.ViewModelTest/AboutViewModelTests.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using ModernKeePass.ViewModels;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using Windows.ApplicationModel;
|
||||||
|
|
||||||
|
namespace ModernKeePassApp.ViewModelTest
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class AboutViewModelTests
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void Should_Display_App_Version()
|
||||||
|
{
|
||||||
|
var aboutVm = new AboutViewModel(Package.Current);
|
||||||
|
Assert.AreEqual("1.0", aboutVm.Version);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,25 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
|
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="nunit" Version="3.11.0" />
|
||||||
|
<PackageReference Include="NUnit3TestAdapter" Version="3.11.0" />
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\ModernKeePass10\Win10App.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Windows">
|
||||||
|
<HintPath>C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.18362.0\Windows.winmd</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
@@ -28,6 +28,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Infrastructure", "ModernKee
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ModernKeePass.KeePassDatabaseTests", "ModernKeePass.KeePassDatabaseTests\ModernKeePass.KeePassDatabaseTests.csproj", "{52FEA1EE-2FA7-4862-85FE-CB05893D439E}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ModernKeePass.KeePassDatabaseTests", "ModernKeePass.KeePassDatabaseTests\ModernKeePass.KeePassDatabaseTests.csproj", "{52FEA1EE-2FA7-4862-85FE-CB05893D439E}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Win10App", "ModernKeePass10\Win10App.csproj", "{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ModernKeePassApp.ViewModelTest", "ModernKeePass.ViewModelTest\ModernKeePassApp.ViewModelTest.csproj", "{D978E25B-028C-446C-8143-D85563ECA914}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -152,6 +156,42 @@ Global
|
|||||||
{52FEA1EE-2FA7-4862-85FE-CB05893D439E}.Release|x64.Build.0 = Release|Any CPU
|
{52FEA1EE-2FA7-4862-85FE-CB05893D439E}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{52FEA1EE-2FA7-4862-85FE-CB05893D439E}.Release|x86.ActiveCfg = Release|Any CPU
|
{52FEA1EE-2FA7-4862-85FE-CB05893D439E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{52FEA1EE-2FA7-4862-85FE-CB05893D439E}.Release|x86.Build.0 = Release|Any CPU
|
{52FEA1EE-2FA7-4862-85FE-CB05893D439E}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Debug|x64.Deploy.0 = Debug|x64
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Debug|x86.Build.0 = Debug|x86
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Debug|x86.Deploy.0 = Debug|x86
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Release|Any CPU.ActiveCfg = Release|x86
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Release|ARM.ActiveCfg = Release|ARM
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Release|ARM.Build.0 = Release|ARM
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Release|ARM.Deploy.0 = Release|ARM
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Release|x64.Build.0 = Release|x64
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Release|x64.Deploy.0 = Release|x64
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Release|x86.ActiveCfg = Release|x86
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Release|x86.Build.0 = Release|x86
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF}.Release|x86.Deploy.0 = Release|x86
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@@ -164,6 +204,8 @@ Global
|
|||||||
{9A0759F1-9069-4841-99E3-3BEC44E17356} = {0B30588B-07B8-4A88-A268-F58D06EA1627}
|
{9A0759F1-9069-4841-99E3-3BEC44E17356} = {0B30588B-07B8-4A88-A268-F58D06EA1627}
|
||||||
{09577E4C-4899-45B9-BF80-1803D617CCAE} = {0B30588B-07B8-4A88-A268-F58D06EA1627}
|
{09577E4C-4899-45B9-BF80-1803D617CCAE} = {0B30588B-07B8-4A88-A268-F58D06EA1627}
|
||||||
{52FEA1EE-2FA7-4862-85FE-CB05893D439E} = {107C7C00-56F4-41B0-A8CC-0156C46A3650}
|
{52FEA1EE-2FA7-4862-85FE-CB05893D439E} = {107C7C00-56F4-41B0-A8CC-0156C46A3650}
|
||||||
|
{D16CAFF7-4187-45A8-A69E-D0658B7AC5BF} = {C7DB9A6F-77A8-4FE5-83CB-9C11F7100647}
|
||||||
|
{D978E25B-028C-446C-8143-D85563ECA914} = {107C7C00-56F4-41B0-A8CC-0156C46A3650}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {0ADC1BC6-B1CA-427D-A97C-3CA40AAB0428}
|
SolutionGuid = {0ADC1BC6-B1CA-427D-A97C-3CA40AAB0428}
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Xaml.Interactivity;
|
using Microsoft.Xaml.Interactivity;
|
||||||
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
||||||
using ModernKeePass.Common;
|
using ModernKeePass.Common;
|
||||||
using ModernKeePass.Interfaces;
|
using ModernKeePass.Interfaces;
|
||||||
using ModernKeePass.Services;
|
|
||||||
using ModernKeePass.ViewModels;
|
using ModernKeePass.ViewModels;
|
||||||
|
|
||||||
namespace ModernKeePass.Actions
|
namespace ModernKeePass.Actions
|
||||||
@@ -34,7 +34,7 @@ namespace ModernKeePass.Actions
|
|||||||
DependencyProperty.Register("Command", typeof(ICommand), typeof(DeleteEntityAction),
|
DependencyProperty.Register("Command", typeof(ICommand), typeof(DeleteEntityAction),
|
||||||
new PropertyMetadata(null));
|
new PropertyMetadata(null));
|
||||||
|
|
||||||
public DeleteEntityAction() : this(App.Mediator) { }
|
public DeleteEntityAction() : this(App.Services.GetService<IMediator>()) { }
|
||||||
|
|
||||||
public DeleteEntityAction(IMediator mediator)
|
public DeleteEntityAction(IMediator mediator)
|
||||||
{
|
{
|
||||||
@@ -43,7 +43,7 @@ namespace ModernKeePass.Actions
|
|||||||
|
|
||||||
public object Execute(object sender, object parameter)
|
public object Execute(object sender, object parameter)
|
||||||
{
|
{
|
||||||
var resource = new ResourcesService();
|
var resource = new ResourceHelper();
|
||||||
var type = Entity is GroupDetailVm ? "Group" : "Entry";
|
var type = Entity is GroupDetailVm ? "Group" : "Entry";
|
||||||
var isRecycleOnDelete = _mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult().IsRecycleBinEnabled;
|
var isRecycleOnDelete = _mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult().IsRecycleBinEnabled;
|
||||||
|
|
||||||
|
@@ -14,14 +14,15 @@ using MediatR;
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.HockeyApp;
|
using Microsoft.HockeyApp;
|
||||||
using ModernKeePass.Application;
|
using ModernKeePass.Application;
|
||||||
|
using ModernKeePass.Application.Common.Interfaces;
|
||||||
using ModernKeePass.Application.Database.Commands.CloseDatabase;
|
using ModernKeePass.Application.Database.Commands.CloseDatabase;
|
||||||
using ModernKeePass.Application.Database.Commands.SaveDatabase;
|
using ModernKeePass.Application.Database.Commands.SaveDatabase;
|
||||||
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
||||||
using ModernKeePass.Application.Database.Queries.ReOpenDatabase;
|
using ModernKeePass.Application.Database.Queries.ReOpenDatabase;
|
||||||
using ModernKeePass.Common;
|
using ModernKeePass.Common;
|
||||||
|
using ModernKeePass.Domain.Dtos;
|
||||||
using ModernKeePass.Domain.Exceptions;
|
using ModernKeePass.Domain.Exceptions;
|
||||||
using ModernKeePass.Infrastructure;
|
using ModernKeePass.Infrastructure;
|
||||||
using ModernKeePass.Services;
|
|
||||||
using ModernKeePass.Views;
|
using ModernKeePass.Views;
|
||||||
|
|
||||||
// The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=234227
|
// The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=234227
|
||||||
@@ -33,9 +34,11 @@ namespace ModernKeePass
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
sealed partial class App
|
sealed partial class App
|
||||||
{
|
{
|
||||||
public IServiceProvider Services { get; }
|
private readonly IResourceProxy _resource;
|
||||||
|
private readonly IMediator _mediator;
|
||||||
|
private readonly ISettingsProxy _settings;
|
||||||
|
|
||||||
public static IMediator Mediator { get; private set; }
|
public static IServiceProvider Services { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes the singleton application object. This is the first line of authored code
|
/// Initializes the singleton application object. This is the first line of authored code
|
||||||
@@ -56,10 +59,15 @@ namespace ModernKeePass
|
|||||||
// Setup DI
|
// Setup DI
|
||||||
IServiceCollection serviceCollection = new ServiceCollection();
|
IServiceCollection serviceCollection = new ServiceCollection();
|
||||||
serviceCollection.AddApplication();
|
serviceCollection.AddApplication();
|
||||||
serviceCollection.AddInfrastructure();
|
serviceCollection.AddInfrastructureCommon();
|
||||||
|
serviceCollection.AddInfrastructureKeePass();
|
||||||
|
serviceCollection.AddInfrastructureUwp();
|
||||||
serviceCollection.AddAppAutomapper();
|
serviceCollection.AddAppAutomapper();
|
||||||
Services = serviceCollection.BuildServiceProvider();
|
Services = serviceCollection.BuildServiceProvider();
|
||||||
Mediator = Services.GetService<IMediator>();
|
|
||||||
|
_mediator = Services.GetService<IMediator>();
|
||||||
|
_resource = Services.GetService<IResourceProxy>();
|
||||||
|
_settings = Services.GetService<ISettingsProxy>();
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Event Handlers
|
#region Event Handlers
|
||||||
@@ -74,30 +82,29 @@ namespace ModernKeePass
|
|||||||
? exception.InnerException
|
? exception.InnerException
|
||||||
: exception;
|
: exception;
|
||||||
|
|
||||||
var resource = new ResourcesService();
|
|
||||||
if (realException is SaveException)
|
if (realException is SaveException)
|
||||||
{
|
{
|
||||||
unhandledExceptionEventArgs.Handled = true;
|
unhandledExceptionEventArgs.Handled = true;
|
||||||
await MessageDialogHelper.ShowActionDialog(resource.GetResourceValue("MessageDialogSaveErrorTitle"),
|
await MessageDialogHelper.ShowActionDialog(_resource.GetResourceValue("MessageDialogSaveErrorTitle"),
|
||||||
realException.InnerException.Message,
|
realException.InnerException.Message,
|
||||||
resource.GetResourceValue("MessageDialogSaveErrorButtonSaveAs"),
|
_resource.GetResourceValue("MessageDialogSaveErrorButtonSaveAs"),
|
||||||
resource.GetResourceValue("MessageDialogSaveErrorButtonDiscard"),
|
_resource.GetResourceValue("MessageDialogSaveErrorButtonDiscard"),
|
||||||
async command =>
|
async command =>
|
||||||
{
|
{
|
||||||
var database = await Mediator.Send(new GetDatabaseQuery());
|
var database = await _mediator.Send(new GetDatabaseQuery());
|
||||||
var savePicker = new FileSavePicker
|
var savePicker = new FileSavePicker
|
||||||
{
|
{
|
||||||
SuggestedStartLocation = PickerLocationId.DocumentsLibrary,
|
SuggestedStartLocation = PickerLocationId.DocumentsLibrary,
|
||||||
SuggestedFileName = $"{database.Name} - copy"
|
SuggestedFileName = $"{database.Name} - copy"
|
||||||
};
|
};
|
||||||
savePicker.FileTypeChoices.Add(resource.GetResourceValue("MessageDialogSaveErrorFileTypeDesc"),
|
savePicker.FileTypeChoices.Add(_resource.GetResourceValue("MessageDialogSaveErrorFileTypeDesc"),
|
||||||
new List<string> {".kdbx"});
|
new List<string> {".kdbx"});
|
||||||
|
|
||||||
var file = await savePicker.PickSaveFileAsync();
|
var file = await savePicker.PickSaveFileAsync();
|
||||||
if (file != null)
|
if (file != null)
|
||||||
{
|
{
|
||||||
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
|
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
|
||||||
await Mediator.Send(new SaveDatabaseCommand { FilePath = token });
|
await _mediator.Send(new SaveDatabaseCommand { FilePath = token });
|
||||||
}
|
}
|
||||||
}, null);
|
}, null);
|
||||||
}
|
}
|
||||||
@@ -124,7 +131,7 @@ namespace ModernKeePass
|
|||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (System.Diagnostics.Debugger.IsAttached)
|
if (System.Diagnostics.Debugger.IsAttached)
|
||||||
{
|
{
|
||||||
//DebugSettings.EnableFrameRateCounter = true;
|
DebugSettings.EnableFrameRateCounter = true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -167,7 +174,7 @@ namespace ModernKeePass
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await Mediator.Send(new ReOpenDatabaseQuery());
|
await _mediator.Send(new ReOpenDatabaseQuery());
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
ToastNotificationHelper.ShowGenericToast("App resumed", "Database reopened (changes were saved)");
|
ToastNotificationHelper.ShowGenericToast("App resumed", "Database reopened (changes were saved)");
|
||||||
#endif
|
#endif
|
||||||
@@ -203,11 +210,11 @@ namespace ModernKeePass
|
|||||||
var deferral = e.SuspendingOperation.GetDeferral();
|
var deferral = e.SuspendingOperation.GetDeferral();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (SettingsService.Instance.GetSetting("SaveSuspend", true))
|
if (_settings.GetSetting("SaveSuspend", true))
|
||||||
{
|
{
|
||||||
await Mediator.Send(new SaveDatabaseCommand());
|
await _mediator.Send(new SaveDatabaseCommand());
|
||||||
}
|
}
|
||||||
await Mediator.Send(new CloseDatabaseCommand());
|
await _mediator.Send(new CloseDatabaseCommand());
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
@@ -226,7 +233,22 @@ namespace ModernKeePass
|
|||||||
base.OnFileActivated(args);
|
base.OnFileActivated(args);
|
||||||
var rootFrame = new Frame();
|
var rootFrame = new Frame();
|
||||||
var file = args.Files[0] as StorageFile;
|
var file = args.Files[0] as StorageFile;
|
||||||
rootFrame.Navigate(typeof(MainPage), file);
|
|
||||||
|
if (file != null)
|
||||||
|
{
|
||||||
|
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
|
||||||
|
var fileInfo = new FileInfo
|
||||||
|
{
|
||||||
|
Path = token,
|
||||||
|
Name = file.DisplayName
|
||||||
|
};
|
||||||
|
rootFrame.Navigate(typeof(MainPage), fileInfo);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rootFrame.Navigate(typeof(MainPage));
|
||||||
|
}
|
||||||
|
|
||||||
Window.Current.Content = rootFrame;
|
Window.Current.Content = rootFrame;
|
||||||
Window.Current.Activate();
|
Window.Current.Activate();
|
||||||
}
|
}
|
||||||
|
@@ -1,9 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using Windows.System;
|
using Windows.System;
|
||||||
using Windows.UI.Core;
|
using Windows.UI.Core;
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
|
@@ -1,28 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Common
|
|
||||||
{
|
|
||||||
public class NotifyPropertyChangedBase : INotifyPropertyChanged
|
|
||||||
{
|
|
||||||
public event PropertyChangedEventHandler PropertyChanged;
|
|
||||||
|
|
||||||
protected void OnPropertyChanged(string propertyName = "")
|
|
||||||
{
|
|
||||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected bool SetProperty<T>(ref T property, T value, [CallerMemberName] string propertyName = "")
|
|
||||||
{
|
|
||||||
if (EqualityComparer<T>.Default.Equals(property, value))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
property = value;
|
|
||||||
OnPropertyChanged(propertyName);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,9 +1,8 @@
|
|||||||
using Windows.ApplicationModel.Resources;
|
using Windows.ApplicationModel.Resources;
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Services
|
namespace ModernKeePass.Common
|
||||||
{
|
{
|
||||||
public class ResourcesService: IResourceService
|
public class ResourceHelper
|
||||||
{
|
{
|
||||||
private const string ResourceFileName = "CodeBehind";
|
private const string ResourceFileName = "CodeBehind";
|
||||||
private readonly ResourceLoader _resourceLoader = ResourceLoader.GetForCurrentView();
|
private readonly ResourceLoader _resourceLoader = ResourceLoader.GetForCurrentView();
|
||||||
@@ -14,4 +13,4 @@ namespace ModernKeePass.Services
|
|||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -3,7 +3,6 @@ using Windows.Data.Json;
|
|||||||
using Windows.Data.Xml.Dom;
|
using Windows.Data.Xml.Dom;
|
||||||
using Windows.UI.Notifications;
|
using Windows.UI.Notifications;
|
||||||
using ModernKeePass.Interfaces;
|
using ModernKeePass.Interfaces;
|
||||||
using ModernKeePass.ViewModels;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Common
|
namespace ModernKeePass.Common
|
||||||
{
|
{
|
||||||
|
@@ -1,35 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Windows.Storage;
|
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
|
|
||||||
namespace ModernKeePass.ImportFormats
|
|
||||||
{
|
|
||||||
public class CsvImportFormat: IFormat
|
|
||||||
{
|
|
||||||
public bool HasHeaderRow { get; set; } = true;
|
|
||||||
public char Delimiter { get; set; } = ';';
|
|
||||||
public char LineDelimiter { get; set; } = '\n';
|
|
||||||
|
|
||||||
public async Task<List<Dictionary<string, string>>> Import(IStorageFile source)
|
|
||||||
{
|
|
||||||
var parsedResult = new List<Dictionary<string, string>>();
|
|
||||||
var content = await FileIO.ReadLinesAsync(source);
|
|
||||||
foreach (var line in content)
|
|
||||||
{
|
|
||||||
var fields = line.Split(Delimiter);
|
|
||||||
var recordItem = new Dictionary<string, string>();
|
|
||||||
var i = 0;
|
|
||||||
foreach (var field in fields)
|
|
||||||
{
|
|
||||||
recordItem.Add(i.ToString(), field);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
parsedResult.Add(recordItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
return parsedResult;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,16 +0,0 @@
|
|||||||
using Windows.Storage;
|
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
using System;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace ModernKeePass.ImportFormats
|
|
||||||
{
|
|
||||||
public class NullImportFormat: IFormat
|
|
||||||
{
|
|
||||||
public Task<List<Dictionary<string, string>>> Import(IStorageFile source)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,11 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Windows.Storage;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Interfaces
|
|
||||||
{
|
|
||||||
public interface IFormat
|
|
||||||
{
|
|
||||||
Task<List<Dictionary<string, string>>> Import(IStorageFile source);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,9 +0,0 @@
|
|||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Interfaces
|
|
||||||
{
|
|
||||||
public interface IProxyInvocationHandler
|
|
||||||
{
|
|
||||||
object Invoke(object proxy, MethodInfo method, object[] parameters);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,11 +0,0 @@
|
|||||||
using Windows.Storage;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Interfaces
|
|
||||||
{
|
|
||||||
public interface IRecentItem
|
|
||||||
{
|
|
||||||
StorageFile DatabaseFile { get; }
|
|
||||||
string Token { get; }
|
|
||||||
string Name { get; }
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,15 +0,0 @@
|
|||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Windows.Storage;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Interfaces
|
|
||||||
{
|
|
||||||
public interface IRecentService
|
|
||||||
{
|
|
||||||
int EntryCount { get; }
|
|
||||||
Task<IStorageItem> GetFileAsync(string token);
|
|
||||||
ObservableCollection<IRecentItem> GetAllFiles(bool removeIfNonExistant = true);
|
|
||||||
void Add(IStorageItem file, string metadata);
|
|
||||||
void ClearAll();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,7 +0,0 @@
|
|||||||
namespace ModernKeePass.Interfaces
|
|
||||||
{
|
|
||||||
public interface IResourceService
|
|
||||||
{
|
|
||||||
string GetResourceValue(string key);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,8 +0,0 @@
|
|||||||
namespace ModernKeePass.Interfaces
|
|
||||||
{
|
|
||||||
public interface ISettingsService
|
|
||||||
{
|
|
||||||
T GetSetting<T>(string property, T defaultValue = default(T));
|
|
||||||
void PutSetting<T>(string property, T value);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,194 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Runtime.InteropServices.WindowsRuntime;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Windows.Storage;
|
|
||||||
using Microsoft.HockeyApp;
|
|
||||||
using ModernKeePass.Domain.Exceptions;
|
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
using ModernKeePass.ViewModels;
|
|
||||||
using ModernKeePassLib;
|
|
||||||
using ModernKeePassLib.Cryptography.KeyDerivation;
|
|
||||||
using ModernKeePassLib.Interfaces;
|
|
||||||
using ModernKeePassLib.Keys;
|
|
||||||
using ModernKeePassLib.Serialization;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Services
|
|
||||||
{
|
|
||||||
public class DatabaseService: SingletonServiceBase<DatabaseService>, IDatabaseService
|
|
||||||
{
|
|
||||||
private readonly PwDatabase _pwDatabase = new PwDatabase();
|
|
||||||
private readonly ISettingsService _settings;
|
|
||||||
private StorageFile _databaseFile;
|
|
||||||
private GroupVm _recycleBin;
|
|
||||||
private CompositeKey _compositeKey;
|
|
||||||
|
|
||||||
public GroupVm RootGroup { get; set; }
|
|
||||||
|
|
||||||
public GroupVm RecycleBin
|
|
||||||
{
|
|
||||||
get { return _recycleBin; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_recycleBin = value;
|
|
||||||
_pwDatabase.RecycleBinUuid = _recycleBin?.IdUuid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Name => _databaseFile?.Name;
|
|
||||||
|
|
||||||
public bool RecycleBinEnabled
|
|
||||||
{
|
|
||||||
get { return _pwDatabase.RecycleBinEnabled; }
|
|
||||||
set { _pwDatabase.RecycleBinEnabled = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public PwUuid DataCipher
|
|
||||||
{
|
|
||||||
get { return _pwDatabase.DataCipherUuid; }
|
|
||||||
set { _pwDatabase.DataCipherUuid = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public PwCompressionAlgorithm CompressionAlgorithm
|
|
||||||
{
|
|
||||||
get { return _pwDatabase.Compression; }
|
|
||||||
set { _pwDatabase.Compression = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public KdfParameters KeyDerivation
|
|
||||||
{
|
|
||||||
get { return _pwDatabase.KdfParameters; }
|
|
||||||
set { _pwDatabase.KdfParameters = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsOpen => _pwDatabase.IsOpen;
|
|
||||||
public bool IsFileOpen => !_pwDatabase.IsOpen && _databaseFile != null;
|
|
||||||
public bool IsClosed => _databaseFile == null;
|
|
||||||
public bool HasChanged { get; set; }
|
|
||||||
|
|
||||||
public DatabaseService() : this(SettingsService.Instance)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public DatabaseService(ISettingsService settings)
|
|
||||||
{
|
|
||||||
_settings = settings;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Open a KeePass database
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="databaseFile">The database file</param>
|
|
||||||
/// <param name="key">The database composite key</param>
|
|
||||||
/// <param name="createNew">True to create a new database before opening it</param>
|
|
||||||
/// <returns>An error message, if any</returns>
|
|
||||||
public async Task Open(StorageFile databaseFile, CompositeKey key, bool createNew = false)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (databaseFile == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(databaseFile));
|
|
||||||
}
|
|
||||||
if (key == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(key));
|
|
||||||
}
|
|
||||||
|
|
||||||
_compositeKey = key;
|
|
||||||
var fileContents = await FileIO.ReadBufferAsync(databaseFile);
|
|
||||||
var ioConnection = IOConnectionInfo.FromByteArray(fileContents.ToArray());
|
|
||||||
if (createNew)
|
|
||||||
{
|
|
||||||
_pwDatabase.New(ioConnection, key);
|
|
||||||
|
|
||||||
var fileFormat = _settings.GetSetting<string>("DefaultFileFormat");
|
|
||||||
switch (fileFormat)
|
|
||||||
{
|
|
||||||
case "4":
|
|
||||||
KeyDerivation = KdfPool.Get("Argon2").GetDefaultParameters();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else _pwDatabase.Open(ioConnection, key, new NullStatusLogger());
|
|
||||||
|
|
||||||
_databaseFile = databaseFile;
|
|
||||||
RootGroup = new GroupVm(_pwDatabase.RootGroup, null, RecycleBinEnabled ? _pwDatabase.RecycleBinUuid : null);
|
|
||||||
}
|
|
||||||
catch (InvalidCompositeKeyException ex)
|
|
||||||
{
|
|
||||||
HockeyClient.Current.TrackException(ex);
|
|
||||||
throw new ArgumentException(ex.Message, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task ReOpen()
|
|
||||||
{
|
|
||||||
await Open(_databaseFile, _compositeKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Commit the changes to the currently opened database to file
|
|
||||||
/// </summary>
|
|
||||||
public void Save()
|
|
||||||
{
|
|
||||||
if (!IsOpen) return;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_pwDatabase.Save(new NullStatusLogger());
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
throw new SaveException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Save the current database to another file and open it
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="file">The new database file</param>
|
|
||||||
public async Task Save(StorageFile file)
|
|
||||||
{
|
|
||||||
var oldFile = _databaseFile;
|
|
||||||
_databaseFile = file;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var fileContents = await FileIO.ReadBufferAsync(file);
|
|
||||||
_pwDatabase.SaveAs(IOConnectionInfo.FromByteArray(fileContents.ToArray()), true, new NullStatusLogger());
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
_databaseFile = oldFile;
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Close the currently opened database
|
|
||||||
/// </summary>
|
|
||||||
public void Close(bool releaseFile = true)
|
|
||||||
{
|
|
||||||
_pwDatabase?.Close();
|
|
||||||
if (releaseFile) _databaseFile = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void AddDeletedItem(PwUuid id)
|
|
||||||
{
|
|
||||||
_pwDatabase.DeletedObjects.Add(new PwDeletedObject(id, DateTime.UtcNow));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CreateRecycleBin(string title)
|
|
||||||
{
|
|
||||||
RecycleBin = RootGroup.AddNewGroup(title);
|
|
||||||
RecycleBin.IsSelected = true;
|
|
||||||
RecycleBin.IconId = (int)PwIcon.TrashBin;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdateCompositeKey(CompositeKey newCompositeKey)
|
|
||||||
{
|
|
||||||
if (newCompositeKey == null) return;
|
|
||||||
_compositeKey = newCompositeKey;
|
|
||||||
_pwDatabase.MasterKey = newCompositeKey;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,25 +0,0 @@
|
|||||||
using System.Threading.Tasks;
|
|
||||||
using Windows.Storage;
|
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
using ModernKeePass.ViewModels;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Services
|
|
||||||
{
|
|
||||||
public class ImportService : IImportService<IFormat>
|
|
||||||
{
|
|
||||||
public async Task Import(IFormat format, IStorageFile source, GroupVm group)
|
|
||||||
{
|
|
||||||
var data = await format.Import(source);
|
|
||||||
|
|
||||||
foreach (var entity in data)
|
|
||||||
{
|
|
||||||
var entry = group.AddNewEntry();
|
|
||||||
entry.Title = entity["0"];
|
|
||||||
entry.UserName = entity["1"];
|
|
||||||
entry.Password = entity["2"];
|
|
||||||
if (entity.Count > 3) entry.Url = entity["3"];
|
|
||||||
if (entity.Count > 4) entry.Notes = entity["4"];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,50 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
using Windows.Storage;
|
|
||||||
using Windows.Storage.AccessCache;
|
|
||||||
using ModernKeePass.ViewModels;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Services
|
|
||||||
{
|
|
||||||
public class RecentService : SingletonServiceBase<RecentService>, IRecentService
|
|
||||||
{
|
|
||||||
private readonly StorageItemMostRecentlyUsedList _mru = StorageApplicationPermissions.MostRecentlyUsedList;
|
|
||||||
|
|
||||||
public int EntryCount => _mru.Entries.Count;
|
|
||||||
|
|
||||||
public ObservableCollection<IRecentItem> GetAllFiles(bool removeIfNonExistant = true)
|
|
||||||
{
|
|
||||||
var result = new ObservableCollection<IRecentItem>();
|
|
||||||
foreach (var entry in _mru.Entries)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var file = _mru.GetFileAsync(entry.Token, AccessCacheOptions.SuppressAccessTimeUpdate).GetAwaiter().GetResult();
|
|
||||||
result.Add(new RecentItemVm(entry.Token, entry.Metadata, file));
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
if (removeIfNonExistant) _mru.Remove(entry.Token);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Add(IStorageItem file, string metadata)
|
|
||||||
{
|
|
||||||
_mru.Add(file, metadata);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ClearAll()
|
|
||||||
{
|
|
||||||
_mru.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<IStorageItem> GetFileAsync(string token)
|
|
||||||
{
|
|
||||||
return await _mru.GetFileAsync(token);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,31 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Windows.Foundation.Collections;
|
|
||||||
using Windows.Storage;
|
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Services
|
|
||||||
{
|
|
||||||
public class SettingsService : SingletonServiceBase<SettingsService>, ISettingsService
|
|
||||||
{
|
|
||||||
private readonly IPropertySet _values = ApplicationData.Current.LocalSettings.Values;
|
|
||||||
|
|
||||||
public T GetSetting<T>(string property, T defaultValue = default(T))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return (T)Convert.ChangeType(_values[property], typeof(T));
|
|
||||||
}
|
|
||||||
catch (InvalidCastException)
|
|
||||||
{
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void PutSetting<T>(string property, T value)
|
|
||||||
{
|
|
||||||
if (_values.ContainsKey(property))
|
|
||||||
_values[property] = value;
|
|
||||||
else _values.Add(property, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,12 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Services
|
|
||||||
{
|
|
||||||
public abstract class SingletonServiceBase<T> where T : new()
|
|
||||||
{
|
|
||||||
private static readonly Lazy<T> LazyInstance =
|
|
||||||
new Lazy<T>(() => new T());
|
|
||||||
|
|
||||||
public static T Instance => LazyInstance.Value;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,17 +1,16 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Windows.Storage;
|
|
||||||
using Windows.Storage.AccessCache;
|
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using ModernKeePass.Application.Database.Commands.UpdateCredentials;
|
using ModernKeePass.Application.Database.Commands.UpdateCredentials;
|
||||||
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
||||||
using ModernKeePass.Application.Database.Queries.OpenDatabase;
|
using ModernKeePass.Application.Database.Queries.OpenDatabase;
|
||||||
using ModernKeePass.Application.Security.Commands.GenerateKeyFile;
|
using ModernKeePass.Application.Security.Commands.GenerateKeyFile;
|
||||||
using ModernKeePass.Application.Security.Queries.EstimatePasswordComplexity;
|
using ModernKeePass.Application.Security.Queries.EstimatePasswordComplexity;
|
||||||
|
using ModernKeePass.Domain.AOP;
|
||||||
|
using ModernKeePass.Domain.Dtos;
|
||||||
using ModernKeePass.Common;
|
using ModernKeePass.Common;
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
using ModernKeePass.Services;
|
|
||||||
|
|
||||||
namespace ModernKeePass.ViewModels
|
namespace ModernKeePass.ViewModels
|
||||||
{
|
{
|
||||||
@@ -55,7 +54,7 @@ namespace ModernKeePass.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsValid => !_isOpening && (HasPassword || HasKeyFile && KeyFile != null || HasUserAccount);
|
public bool IsValid => !_isOpening && (HasPassword || HasKeyFile && KeyFilePath != null || HasUserAccount);
|
||||||
|
|
||||||
public string Status
|
public string Status
|
||||||
{
|
{
|
||||||
@@ -75,20 +74,19 @@ namespace ModernKeePass.ViewModels
|
|||||||
set
|
set
|
||||||
{
|
{
|
||||||
_password = value;
|
_password = value;
|
||||||
OnPropertyChanged("PasswordComplexityIndicator");
|
OnPropertyChanged(nameof(PasswordComplexityIndicator));
|
||||||
StatusType = (int)StatusTypes.Normal;
|
StatusType = (int)StatusTypes.Normal;
|
||||||
Status = string.Empty;
|
Status = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public StorageFile KeyFile
|
public string KeyFilePath
|
||||||
{
|
{
|
||||||
get { return _keyFile; }
|
get { return _keyFilePath; }
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_keyFile = value;
|
_keyFilePath = value;
|
||||||
KeyFileText = value?.Name;
|
OnPropertyChanged(nameof(IsValid));
|
||||||
OnPropertyChanged("IsValid");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,21 +107,21 @@ namespace ModernKeePass.ViewModels
|
|||||||
private string _password = string.Empty;
|
private string _password = string.Empty;
|
||||||
private string _status;
|
private string _status;
|
||||||
private StatusTypes _statusType;
|
private StatusTypes _statusType;
|
||||||
private StorageFile _keyFile;
|
private string _keyFilePath;
|
||||||
private string _keyFileText;
|
private string _keyFileText;
|
||||||
private readonly IMediator _mediator;
|
private readonly IMediator _mediator;
|
||||||
private readonly IResourceService _resource;
|
private readonly ResourceHelper _resource;
|
||||||
|
|
||||||
public CompositeKeyVm() : this(App.Mediator, new ResourcesService()) { }
|
public CompositeKeyVm() : this(App.Services.GetService<IMediator>()) { }
|
||||||
|
|
||||||
public CompositeKeyVm(IMediator mediator, IResourceService resource)
|
public CompositeKeyVm(IMediator mediator)
|
||||||
{
|
{
|
||||||
_mediator = mediator;
|
_mediator = mediator;
|
||||||
_resource = resource;
|
_resource = new ResourceHelper();
|
||||||
_keyFileText = _resource.GetResourceValue("CompositeKeyDefaultKeyFile");
|
_keyFileText = _resource.GetResourceValue("CompositeKeyDefaultKeyFile");
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> OpenDatabase(StorageFile databaseFile, bool createNew)
|
public async Task<bool> OpenDatabase(string databaseFilePath, bool createNew)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -131,9 +129,9 @@ namespace ModernKeePass.ViewModels
|
|||||||
OnPropertyChanged(nameof(IsValid));
|
OnPropertyChanged(nameof(IsValid));
|
||||||
|
|
||||||
await _mediator.Send(new OpenDatabaseQuery {
|
await _mediator.Send(new OpenDatabaseQuery {
|
||||||
FilePath = StorageApplicationPermissions.FutureAccessList.Add(databaseFile),
|
FilePath = databaseFilePath,
|
||||||
KeyFilePath = HasKeyFile && KeyFile != null ? StorageApplicationPermissions.FutureAccessList.Add(KeyFile) : null,
|
KeyFilePath = HasKeyFile ? KeyFilePath : null,
|
||||||
Password = Password = HasPassword ? Password : null,
|
Password = HasPassword ? Password : null,
|
||||||
});
|
});
|
||||||
RootGroupId = (await _mediator.Send(new GetDatabaseQuery())).RootGroupId;
|
RootGroupId = (await _mediator.Send(new GetDatabaseQuery())).RootGroupId;
|
||||||
return true;
|
return true;
|
||||||
@@ -163,18 +161,18 @@ namespace ModernKeePass.ViewModels
|
|||||||
{
|
{
|
||||||
await _mediator.Send(new UpdateCredentialsCommand
|
await _mediator.Send(new UpdateCredentialsCommand
|
||||||
{
|
{
|
||||||
KeyFilePath = HasKeyFile && KeyFile != null ? StorageApplicationPermissions.FutureAccessList.Add(KeyFile) : null,
|
KeyFilePath = HasKeyFile ? KeyFilePath : null,
|
||||||
Password = Password = HasPassword ? Password : null,
|
Password = HasPassword ? Password : null,
|
||||||
});
|
});
|
||||||
UpdateStatus(_resource.GetResourceValue("CompositeKeyUpdated"), StatusTypes.Success);
|
UpdateStatus(_resource.GetResourceValue("CompositeKeyUpdated"), StatusTypes.Success);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task CreateKeyFile(StorageFile file)
|
public async Task CreateKeyFile(FileInfo file)
|
||||||
{
|
{
|
||||||
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
|
|
||||||
// TODO: implement entropy generator
|
// TODO: implement entropy generator
|
||||||
await _mediator.Send(new GenerateKeyFileCommand {KeyFilePath = token});
|
await _mediator.Send(new GenerateKeyFileCommand {KeyFilePath = file.Path});
|
||||||
KeyFile = file;
|
KeyFilePath = file.Path;
|
||||||
|
KeyFileText = file.Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateStatus(string text, StatusTypes type)
|
private void UpdateStatus(string text, StatusTypes type)
|
||||||
|
@@ -5,6 +5,7 @@ using System.Threading.Tasks;
|
|||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using ModernKeePass.Application.Database.Commands.SaveDatabase;
|
using ModernKeePass.Application.Database.Commands.SaveDatabase;
|
||||||
using ModernKeePass.Application.Database.Models;
|
using ModernKeePass.Application.Database.Models;
|
||||||
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
||||||
@@ -22,6 +23,7 @@ using ModernKeePass.Domain.Enums;
|
|||||||
using ModernKeePass.Domain.Interfaces;
|
using ModernKeePass.Domain.Interfaces;
|
||||||
using ModernKeePass.Interfaces;
|
using ModernKeePass.Interfaces;
|
||||||
using ModernKeePass.Application.Group.Models;
|
using ModernKeePass.Application.Group.Models;
|
||||||
|
using ModernKeePass.Domain.AOP;
|
||||||
|
|
||||||
namespace ModernKeePass.ViewModels
|
namespace ModernKeePass.ViewModels
|
||||||
{
|
{
|
||||||
@@ -49,21 +51,13 @@ namespace ModernKeePass.ViewModels
|
|||||||
public bool IsSelected
|
public bool IsSelected
|
||||||
{
|
{
|
||||||
get { return _isSelected; }
|
get { return _isSelected; }
|
||||||
set
|
set { SetProperty(ref _isSelected, value); }
|
||||||
{
|
|
||||||
_isSelected = value;
|
|
||||||
OnPropertyChanged();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public double PasswordLength
|
public double PasswordLength
|
||||||
{
|
{
|
||||||
get { return _passwordLength; }
|
get { return _passwordLength; }
|
||||||
set
|
set { SetProperty(ref _passwordLength, value); }
|
||||||
{
|
|
||||||
_passwordLength = value;
|
|
||||||
OnPropertyChanged();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Title
|
public string Title
|
||||||
@@ -191,31 +185,19 @@ namespace ModernKeePass.ViewModels
|
|||||||
public bool IsEditMode
|
public bool IsEditMode
|
||||||
{
|
{
|
||||||
get { return IsSelected && _isEditMode; }
|
get { return IsSelected && _isEditMode; }
|
||||||
set
|
set { SetProperty(ref _isEditMode, value); }
|
||||||
{
|
|
||||||
_isEditMode = value;
|
|
||||||
OnPropertyChanged();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsVisible
|
public bool IsVisible
|
||||||
{
|
{
|
||||||
get { return _isVisible; }
|
get { return _isVisible; }
|
||||||
set
|
set { SetProperty(ref _isVisible, value); }
|
||||||
{
|
|
||||||
_isVisible = value;
|
|
||||||
OnPropertyChanged();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsRevealPassword
|
public bool IsRevealPassword
|
||||||
{
|
{
|
||||||
get { return _isRevealPassword; }
|
get { return _isRevealPassword; }
|
||||||
set
|
set { SetProperty(ref _isRevealPassword, value); }
|
||||||
{
|
|
||||||
_isRevealPassword = value;
|
|
||||||
OnPropertyChanged();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanRestore => _entry.ParentGroupId == _database.RecycleBinId;
|
public bool CanRestore => _entry.ParentGroupId == _database.RecycleBinId;
|
||||||
@@ -237,7 +219,7 @@ namespace ModernKeePass.ViewModels
|
|||||||
|
|
||||||
public EntryDetailVm() { }
|
public EntryDetailVm() { }
|
||||||
|
|
||||||
internal EntryDetailVm(string entryId, bool isNewEntry = false) : this(entryId, App.Mediator, isNewEntry) { }
|
internal EntryDetailVm(string entryId, bool isNewEntry = false) : this(entryId, App.Services.GetService<IMediator>(), isNewEntry) { }
|
||||||
|
|
||||||
public EntryDetailVm(string entryId, IMediator mediator, bool isNewEntry = false)
|
public EntryDetailVm(string entryId, IMediator mediator, bool isNewEntry = false)
|
||||||
{
|
{
|
||||||
|
@@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
|||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using ModernKeePass.Application.Database.Commands.SaveDatabase;
|
using ModernKeePass.Application.Database.Commands.SaveDatabase;
|
||||||
using ModernKeePass.Application.Database.Models;
|
using ModernKeePass.Application.Database.Models;
|
||||||
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
||||||
@@ -23,6 +24,7 @@ using ModernKeePass.Application.Group.Commands.SortGroups;
|
|||||||
using ModernKeePass.Application.Group.Models;
|
using ModernKeePass.Application.Group.Models;
|
||||||
using ModernKeePass.Application.Group.Queries.GetGroup;
|
using ModernKeePass.Application.Group.Queries.GetGroup;
|
||||||
using ModernKeePass.Common;
|
using ModernKeePass.Common;
|
||||||
|
using ModernKeePass.Domain.AOP;
|
||||||
using ModernKeePass.Domain.Enums;
|
using ModernKeePass.Domain.Enums;
|
||||||
using ModernKeePass.Domain.Interfaces;
|
using ModernKeePass.Domain.Interfaces;
|
||||||
using ModernKeePass.Interfaces;
|
using ModernKeePass.Interfaces;
|
||||||
@@ -122,7 +124,7 @@ namespace ModernKeePass.ViewModels
|
|||||||
|
|
||||||
public GroupDetailVm() {}
|
public GroupDetailVm() {}
|
||||||
|
|
||||||
internal GroupDetailVm(string groupId) : this(groupId, App.Mediator)
|
internal GroupDetailVm(string groupId) : this(groupId, App.Services.GetService<IMediator>())
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
public GroupDetailVm(string groupId, IMediator mediator, bool isEditMode = false)
|
public GroupDetailVm(string groupId, IMediator mediator, bool isEditMode = false)
|
||||||
|
@@ -1,8 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
using ModernKeePass.Common;
|
using ModernKeePass.Domain.AOP;
|
||||||
using ModernKeePass.Domain.Interfaces;
|
using ModernKeePass.Domain.Interfaces;
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
|
|
||||||
namespace ModernKeePass.ViewModels
|
namespace ModernKeePass.ViewModels
|
||||||
{
|
{
|
||||||
|
@@ -1,20 +1,20 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Windows.Storage;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using ModernKeePass.Common;
|
using ModernKeePass.Application.Common.Interfaces;
|
||||||
|
using ModernKeePass.Domain.AOP;
|
||||||
|
using ModernKeePass.Domain.Dtos;
|
||||||
using ModernKeePass.Domain.Interfaces;
|
using ModernKeePass.Domain.Interfaces;
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
using ModernKeePass.Services;
|
|
||||||
|
|
||||||
namespace ModernKeePass.ViewModels
|
namespace ModernKeePass.ViewModels
|
||||||
{
|
{
|
||||||
public class RecentItemVm: NotifyPropertyChangedBase, ISelectableModel, IRecentItem
|
public class RecentItemVm: NotifyPropertyChangedBase, ISelectableModel
|
||||||
{
|
{
|
||||||
|
private readonly IRecentProxy _recent;
|
||||||
private bool _isSelected;
|
private bool _isSelected;
|
||||||
|
|
||||||
public StorageFile DatabaseFile { get; }
|
|
||||||
public string Token { get; }
|
public string Token { get; }
|
||||||
public string Name { get; }
|
public string Name { get; }
|
||||||
public string Path => DatabaseFile?.Path;
|
public string Path => string.Empty;
|
||||||
|
|
||||||
public bool IsSelected
|
public bool IsSelected
|
||||||
{
|
{
|
||||||
@@ -22,22 +22,17 @@ namespace ModernKeePass.ViewModels
|
|||||||
set { SetProperty(ref _isSelected, value); }
|
set { SetProperty(ref _isSelected, value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public RecentItemVm() {}
|
public RecentItemVm(FileInfo file): this(App.Services.GetService<IRecentProxy>(), file) {}
|
||||||
public RecentItemVm(string token, string metadata, IStorageItem file)
|
public RecentItemVm(IRecentProxy recent, FileInfo file)
|
||||||
{
|
{
|
||||||
Token = token;
|
_recent = recent;
|
||||||
Name = metadata;
|
Token = file.Path;
|
||||||
DatabaseFile = file as StorageFile;
|
Name = file.Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateAccessTime()
|
public async Task UpdateAccessTime()
|
||||||
{
|
{
|
||||||
UpdateAccessTime(RecentService.Instance).Wait();
|
await _recent.Get(Token);
|
||||||
}
|
|
||||||
|
|
||||||
public async Task UpdateAccessTime(IRecentService recent)
|
|
||||||
{
|
|
||||||
await recent.GetFileAsync(Token);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using ModernKeePass.Application.Common.Interfaces;
|
using ModernKeePass.Application.Common.Interfaces;
|
||||||
using ModernKeePass.Application.Database.Models;
|
using ModernKeePass.Application.Database.Models;
|
||||||
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
||||||
@@ -15,7 +16,7 @@ using ModernKeePass.Application.Parameters.Models;
|
|||||||
using ModernKeePass.Application.Parameters.Queries.GetCiphers;
|
using ModernKeePass.Application.Parameters.Queries.GetCiphers;
|
||||||
using ModernKeePass.Application.Parameters.Queries.GetCompressions;
|
using ModernKeePass.Application.Parameters.Queries.GetCompressions;
|
||||||
using ModernKeePass.Application.Parameters.Queries.GetKeyDerivations;
|
using ModernKeePass.Application.Parameters.Queries.GetKeyDerivations;
|
||||||
using ModernKeePass.Common;
|
using ModernKeePass.Domain.AOP;
|
||||||
|
|
||||||
namespace ModernKeePass.ViewModels
|
namespace ModernKeePass.ViewModels
|
||||||
{
|
{
|
||||||
@@ -73,7 +74,7 @@ namespace ModernKeePass.ViewModels
|
|||||||
set { _mediator.Send(new SetRecycleBinCommand { RecycleBinId = value.Id}).Wait(); }
|
set { _mediator.Send(new SetRecycleBinCommand { RecycleBinId = value.Id}).Wait(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public SettingsDatabaseVm() : this(App.Mediator) { }
|
public SettingsDatabaseVm() : this(App.Services.GetService<IMediator>()) { }
|
||||||
|
|
||||||
public SettingsDatabaseVm(IMediator mediator)
|
public SettingsDatabaseVm(IMediator mediator)
|
||||||
{
|
{
|
||||||
|
@@ -1,17 +1,17 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using ModernKeePass.Interfaces;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using ModernKeePass.Services;
|
using ModernKeePass.Application.Common.Interfaces;
|
||||||
|
|
||||||
namespace ModernKeePass.ViewModels
|
namespace ModernKeePass.ViewModels
|
||||||
{
|
{
|
||||||
public class SettingsNewVm
|
public class SettingsNewVm
|
||||||
{
|
{
|
||||||
private readonly ISettingsService _settings;
|
private readonly ISettingsProxy _settings;
|
||||||
|
|
||||||
public SettingsNewVm() : this(SettingsService.Instance)
|
public SettingsNewVm() : this(App.Services.GetService<ISettingsProxy>())
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
public SettingsNewVm(ISettingsService settings)
|
public SettingsNewVm(ISettingsProxy settings)
|
||||||
{
|
{
|
||||||
_settings = settings;
|
_settings = settings;
|
||||||
}
|
}
|
||||||
|
@@ -1,16 +1,16 @@
|
|||||||
using ModernKeePass.Interfaces;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using ModernKeePass.Services;
|
using ModernKeePass.Application.Common.Interfaces;
|
||||||
|
|
||||||
namespace ModernKeePass.ViewModels
|
namespace ModernKeePass.ViewModels
|
||||||
{
|
{
|
||||||
public class SettingsSaveVm
|
public class SettingsSaveVm
|
||||||
{
|
{
|
||||||
private readonly ISettingsService _settings;
|
private readonly ISettingsProxy _settings;
|
||||||
|
|
||||||
public SettingsSaveVm() : this(SettingsService.Instance)
|
public SettingsSaveVm() : this(App.Services.GetService<ISettingsProxy>())
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
public SettingsSaveVm(ISettingsService settings)
|
public SettingsSaveVm(ISettingsProxy settings)
|
||||||
{
|
{
|
||||||
_settings = settings;
|
_settings = settings;
|
||||||
}
|
}
|
||||||
|
@@ -1,14 +1,15 @@
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Windows.ApplicationModel;
|
using Windows.ApplicationModel;
|
||||||
using Windows.Storage;
|
|
||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using ModernKeePass.Application.Common.Interfaces;
|
||||||
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
||||||
using ModernKeePass.Common;
|
using ModernKeePass.Common;
|
||||||
|
using ModernKeePass.Domain.AOP;
|
||||||
|
using ModernKeePass.Domain.Dtos;
|
||||||
using ModernKeePass.Domain.Interfaces;
|
using ModernKeePass.Domain.Interfaces;
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
using ModernKeePass.Services;
|
|
||||||
using ModernKeePass.Views;
|
using ModernKeePass.Views;
|
||||||
|
|
||||||
namespace ModernKeePass.ViewModels
|
namespace ModernKeePass.ViewModels
|
||||||
@@ -48,12 +49,13 @@ namespace ModernKeePass.ViewModels
|
|||||||
|
|
||||||
public MainVm() {}
|
public MainVm() {}
|
||||||
|
|
||||||
internal MainVm(Frame referenceFrame, Frame destinationFrame, StorageFile databaseFile = null) : this(referenceFrame, destinationFrame,
|
internal MainVm(Frame referenceFrame, Frame destinationFrame, FileInfo databaseFile = null) : this(referenceFrame, destinationFrame,
|
||||||
App.Mediator, new ResourcesService(), RecentService.Instance, databaseFile)
|
App.Services.GetService<IMediator>(), App.Services.GetService<IRecentProxy>(), databaseFile)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
public MainVm(Frame referenceFrame, Frame destinationFrame, IMediator mediator, IResourceService resource, IRecentService recent, StorageFile databaseFile = null)
|
public MainVm(Frame referenceFrame, Frame destinationFrame, IMediator mediator, IRecentProxy recent, FileInfo databaseFile = null)
|
||||||
{
|
{
|
||||||
|
var resource = new ResourceHelper();
|
||||||
var database = mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult();
|
var database = mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult();
|
||||||
|
|
||||||
var mainMenuItems = new ObservableCollection<MainMenuItemVm>
|
var mainMenuItems = new ObservableCollection<MainMenuItemVm>
|
||||||
|
@@ -1,6 +1,8 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Windows.Storage;
|
using Windows.Storage;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using ModernKeePass.Application.Common.Interfaces;
|
||||||
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
||||||
using ModernKeePass.Application.Entry.Commands.SetFieldValue;
|
using ModernKeePass.Application.Entry.Commands.SetFieldValue;
|
||||||
using ModernKeePass.Application.Group.Commands.CreateEntry;
|
using ModernKeePass.Application.Group.Commands.CreateEntry;
|
||||||
@@ -8,15 +10,13 @@ using ModernKeePass.Application.Group.Commands.CreateGroup;
|
|||||||
using ModernKeePass.Application.Group.Models;
|
using ModernKeePass.Application.Group.Models;
|
||||||
using ModernKeePass.Application.Group.Queries.GetGroup;
|
using ModernKeePass.Application.Group.Queries.GetGroup;
|
||||||
using ModernKeePass.Domain.Enums;
|
using ModernKeePass.Domain.Enums;
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
using ModernKeePass.Services;
|
|
||||||
|
|
||||||
namespace ModernKeePass.ViewModels
|
namespace ModernKeePass.ViewModels
|
||||||
{
|
{
|
||||||
public class NewVm : OpenVm
|
public class NewVm : OpenVm
|
||||||
{
|
{
|
||||||
private readonly IMediator _mediator;
|
private readonly IMediator _mediator;
|
||||||
private readonly ISettingsService _settings;
|
private readonly ISettingsProxy _settings;
|
||||||
private string _importFormatHelp;
|
private string _importFormatHelp;
|
||||||
public string Password { get; set; }
|
public string Password { get; set; }
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ namespace ModernKeePass.ViewModels
|
|||||||
|
|
||||||
public string ImportFileExtensionFilter { get; set; } = "*";
|
public string ImportFileExtensionFilter { get; set; } = "*";
|
||||||
|
|
||||||
public IFormat ImportFormat { get; set; }
|
public IImportFormat ImportFormat { get; set; }
|
||||||
|
|
||||||
public string ImportFormatHelp
|
public string ImportFormatHelp
|
||||||
{
|
{
|
||||||
@@ -38,9 +38,9 @@ namespace ModernKeePass.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public NewVm(): this(App.Mediator, new SettingsService()) { }
|
public NewVm(): this(App.Services.GetService<IMediator>(), App.Services.GetService<ISettingsProxy>()) { }
|
||||||
|
|
||||||
public NewVm(IMediator mediator, ISettingsService settings)
|
public NewVm(IMediator mediator, ISettingsProxy settings)
|
||||||
{
|
{
|
||||||
_mediator = mediator;
|
_mediator = mediator;
|
||||||
_settings = settings;
|
_settings = settings;
|
||||||
|
@@ -1,38 +1,38 @@
|
|||||||
using Windows.Storage;
|
using System.Threading.Tasks;
|
||||||
using ModernKeePass.Common;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using ModernKeePass.Interfaces;
|
using ModernKeePass.Application.Common.Interfaces;
|
||||||
using ModernKeePass.Services;
|
using ModernKeePass.Domain.AOP;
|
||||||
|
using ModernKeePass.Domain.Dtos;
|
||||||
|
|
||||||
namespace ModernKeePass.ViewModels
|
namespace ModernKeePass.ViewModels
|
||||||
{
|
{
|
||||||
public class OpenVm: NotifyPropertyChangedBase
|
public class OpenVm: NotifyPropertyChangedBase
|
||||||
{
|
{
|
||||||
private readonly IRecentService _recent;
|
private readonly IRecentProxy _recent;
|
||||||
public bool IsFileSelected => DatabaseFile != null;
|
public bool IsFileSelected => !string.IsNullOrEmpty(Path);
|
||||||
|
|
||||||
public string Name => DatabaseFile?.DisplayName;
|
public string Name { get; private set; }
|
||||||
|
public string Path { get; private set; }
|
||||||
|
|
||||||
public StorageFile DatabaseFile { get; private set; }
|
public OpenVm(): this(App.Services.GetService<IRecentProxy>()) { }
|
||||||
|
|
||||||
public OpenVm(): this(new RecentService()) { }
|
public OpenVm(IRecentProxy recent)
|
||||||
|
|
||||||
public OpenVm(IRecentService recent)
|
|
||||||
{
|
{
|
||||||
_recent = recent;
|
_recent = recent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OpenFile(StorageFile file)
|
public async Task OpenFile(FileInfo file)
|
||||||
{
|
{
|
||||||
DatabaseFile = file;
|
Name = file.Name;
|
||||||
OnPropertyChanged("Name");
|
Path = file.Path;
|
||||||
OnPropertyChanged("IsFileSelected");
|
OnPropertyChanged(nameof(Name));
|
||||||
OnPropertyChanged("DatabaseFile");
|
OnPropertyChanged(nameof(IsFileSelected));
|
||||||
AddToRecentList(file);
|
await AddToRecentList(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddToRecentList(StorageFile file)
|
private async Task AddToRecentList(FileInfo file)
|
||||||
{
|
{
|
||||||
_recent.Add(file, file.DisplayName);
|
await _recent.Add(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,19 +1,21 @@
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Linq;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using ModernKeePass.Application.Common.Interfaces;
|
||||||
using ModernKeePass.Common;
|
using ModernKeePass.Common;
|
||||||
|
using ModernKeePass.Domain.AOP;
|
||||||
using ModernKeePass.Domain.Interfaces;
|
using ModernKeePass.Domain.Interfaces;
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
using ModernKeePass.Services;
|
|
||||||
|
|
||||||
namespace ModernKeePass.ViewModels
|
namespace ModernKeePass.ViewModels
|
||||||
{
|
{
|
||||||
public class RecentVm : NotifyPropertyChangedBase, IHasSelectableObject
|
public class RecentVm : NotifyPropertyChangedBase, IHasSelectableObject
|
||||||
{
|
{
|
||||||
private readonly IRecentService _recent;
|
private readonly IRecentProxy _recent;
|
||||||
private ISelectableModel _selectedItem;
|
private ISelectableModel _selectedItem;
|
||||||
private ObservableCollection<IRecentItem> _recentItems = new ObservableCollection<IRecentItem>();
|
private ObservableCollection<RecentItemVm> _recentItems;
|
||||||
|
|
||||||
public ObservableCollection<IRecentItem> RecentItems
|
public ObservableCollection<RecentItemVm> RecentItems
|
||||||
{
|
{
|
||||||
get { return _recentItems; }
|
get { return _recentItems; }
|
||||||
set { SetProperty(ref _recentItems, value); }
|
set { SetProperty(ref _recentItems, value); }
|
||||||
@@ -39,15 +41,16 @@ namespace ModernKeePass.ViewModels
|
|||||||
|
|
||||||
public ICommand ClearAllCommand { get; }
|
public ICommand ClearAllCommand { get; }
|
||||||
|
|
||||||
public RecentVm() : this (RecentService.Instance)
|
public RecentVm() : this (App.Services.GetService<IRecentProxy>())
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
public RecentVm(IRecentService recent)
|
public RecentVm(IRecentProxy recent)
|
||||||
{
|
{
|
||||||
_recent = recent;
|
_recent = recent;
|
||||||
ClearAllCommand = new RelayCommand(ClearAll);
|
ClearAllCommand = new RelayCommand(ClearAll);
|
||||||
|
|
||||||
RecentItems = _recent.GetAllFiles();
|
RecentItems = new ObservableCollection<RecentItemVm>(_recent.GetAll().GetAwaiter().GetResult()
|
||||||
|
.Select(r => new RecentItemVm(r)));
|
||||||
if (RecentItems.Count > 0)
|
if (RecentItems.Count > 0)
|
||||||
SelectedItem = RecentItems[0] as RecentItemVm;
|
SelectedItem = RecentItems[0] as RecentItemVm;
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
using Windows.Storage;
|
using Windows.Storage;
|
||||||
using Windows.Storage.AccessCache;
|
using Windows.Storage.AccessCache;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using ModernKeePass.Application.Database.Commands.CloseDatabase;
|
using ModernKeePass.Application.Database.Commands.CloseDatabase;
|
||||||
using ModernKeePass.Application.Database.Commands.SaveDatabase;
|
using ModernKeePass.Application.Database.Commands.SaveDatabase;
|
||||||
|
|
||||||
@@ -10,7 +11,7 @@ namespace ModernKeePass.ViewModels
|
|||||||
public class SaveVm
|
public class SaveVm
|
||||||
{
|
{
|
||||||
private readonly IMediator _mediator;
|
private readonly IMediator _mediator;
|
||||||
public SaveVm() : this(App.Mediator) { }
|
public SaveVm() : this(App.Services.GetService<IMediator>()) { }
|
||||||
|
|
||||||
public SaveVm(IMediator mediator)
|
public SaveVm(IMediator mediator)
|
||||||
{
|
{
|
||||||
|
@@ -2,12 +2,12 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
||||||
using ModernKeePass.Common;
|
using ModernKeePass.Common;
|
||||||
|
using ModernKeePass.Domain.AOP;
|
||||||
using ModernKeePass.Domain.Interfaces;
|
using ModernKeePass.Domain.Interfaces;
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
using ModernKeePass.Views;
|
using ModernKeePass.Views;
|
||||||
using ModernKeePass.Services;
|
|
||||||
|
|
||||||
namespace ModernKeePass.ViewModels
|
namespace ModernKeePass.ViewModels
|
||||||
{
|
{
|
||||||
@@ -43,10 +43,11 @@ namespace ModernKeePass.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public SettingsVm() : this(App.Mediator, new ResourcesService()) { }
|
public SettingsVm() : this(App.Services.GetService<IMediator>()) { }
|
||||||
|
|
||||||
public SettingsVm(IMediator mediator, IResourceService resource)
|
public SettingsVm(IMediator mediator)
|
||||||
{
|
{
|
||||||
|
var resource = new ResourceHelper();
|
||||||
var database = mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult();
|
var database = mediator.Send(new GetDatabaseQuery()).GetAwaiter().GetResult();
|
||||||
var menuItems = new ObservableCollection<ListMenuItemVm>
|
var menuItems = new ObservableCollection<ListMenuItemVm>
|
||||||
{
|
{
|
||||||
|
@@ -5,7 +5,6 @@ using Windows.UI.Xaml.Data;
|
|||||||
using Windows.UI.Xaml.Navigation;
|
using Windows.UI.Xaml.Navigation;
|
||||||
using ModernKeePass.Common;
|
using ModernKeePass.Common;
|
||||||
using ModernKeePass.Domain.Interfaces;
|
using ModernKeePass.Domain.Interfaces;
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
|
|
||||||
namespace ModernKeePass.Views.BasePages
|
namespace ModernKeePass.Views.BasePages
|
||||||
{
|
{
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
using Windows.Storage;
|
using Windows.UI.Xaml.Controls;
|
||||||
using Windows.UI.Xaml.Controls;
|
|
||||||
using Windows.UI.Xaml.Navigation;
|
using Windows.UI.Xaml.Navigation;
|
||||||
|
using ModernKeePass.Domain.Dtos;
|
||||||
using ModernKeePass.ViewModels;
|
using ModernKeePass.ViewModels;
|
||||||
|
|
||||||
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
|
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
|
||||||
@@ -33,7 +33,7 @@ namespace ModernKeePass.Views
|
|||||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
protected override void OnNavigatedTo(NavigationEventArgs e)
|
||||||
{
|
{
|
||||||
base.OnNavigatedTo(e);
|
base.OnNavigatedTo(e);
|
||||||
var file = e.Parameter as StorageFile;
|
var file = e.Parameter as FileInfo;
|
||||||
DataContext = new MainVm(Frame, MenuFrame, file);
|
DataContext = new MainVm(Frame, MenuFrame, file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -21,7 +21,7 @@
|
|||||||
<Border HorizontalAlignment="Left" BorderThickness="1" BorderBrush="AliceBlue" Width="550" Visibility="{Binding IsFileSelected, Converter={StaticResource BooleanToVisibilityConverter}}">
|
<Border HorizontalAlignment="Left" BorderThickness="1" BorderBrush="AliceBlue" Width="550" Visibility="{Binding IsFileSelected, Converter={StaticResource BooleanToVisibilityConverter}}">
|
||||||
<StackPanel Margin="25,0,25,0">
|
<StackPanel Margin="25,0,25,0">
|
||||||
<TextBlock Text="{Binding Name}" />
|
<TextBlock Text="{Binding Name}" />
|
||||||
<userControls:CompositeKeyUserControl x:Uid="CompositeKeyNewButton" CreateNew="True" DatabaseFile="{Binding DatabaseFile}" ValidationChecked="CompositeKeyUserControl_OnValidationChecked" />
|
<userControls:CompositeKeyUserControl x:Uid="CompositeKeyNewButton" CreateNew="True" DatabaseFilePath="{Binding Path}" ValidationChecked="CompositeKeyUserControl_OnValidationChecked" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
<CheckBox x:Name="CheckBox" x:Uid="NewImportCheckbox" Margin="15,10,0,0" IsChecked="{Binding IsImportChecked, Mode=TwoWay}" Visibility="{Binding IsFileSelected, Converter={StaticResource BooleanToVisibilityConverter}}" />
|
<CheckBox x:Name="CheckBox" x:Uid="NewImportCheckbox" Margin="15,10,0,0" IsChecked="{Binding IsImportChecked, Mode=TwoWay}" Visibility="{Binding IsFileSelected, Converter={StaticResource BooleanToVisibilityConverter}}" />
|
||||||
|
@@ -1,12 +1,14 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Windows.Storage.AccessCache;
|
||||||
using Windows.Storage.Pickers;
|
using Windows.Storage.Pickers;
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
using Windows.UI.Xaml.Navigation;
|
using Windows.UI.Xaml.Navigation;
|
||||||
|
using ModernKeePass.Common;
|
||||||
|
using ModernKeePass.Domain.Dtos;
|
||||||
using ModernKeePass.Events;
|
using ModernKeePass.Events;
|
||||||
using ModernKeePass.ImportFormats;
|
using ModernKeePass.Infrastructure.File;
|
||||||
using ModernKeePass.Services;
|
|
||||||
using ModernKeePass.ViewModels;
|
using ModernKeePass.ViewModels;
|
||||||
|
|
||||||
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
|
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
|
||||||
@@ -44,22 +46,26 @@ namespace ModernKeePass.Views
|
|||||||
|
|
||||||
var file = await savePicker.PickSaveFileAsync();
|
var file = await savePicker.PickSaveFileAsync();
|
||||||
if (file == null) return;
|
if (file == null) return;
|
||||||
Model.OpenFile(file);
|
|
||||||
|
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
|
||||||
|
var fileInfo = new FileInfo
|
||||||
|
{
|
||||||
|
Path = token,
|
||||||
|
Name = file.DisplayName
|
||||||
|
};
|
||||||
|
await Model.OpenFile(fileInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ImportFormatComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
|
private void ImportFormatComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
var resources = new ResourcesService();
|
var resource = new ResourceHelper();
|
||||||
var comboBox = sender as ComboBox;
|
var comboBox = sender as ComboBox;
|
||||||
switch (comboBox?.SelectedIndex)
|
switch (comboBox?.SelectedIndex)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
Model.ImportFormat = new CsvImportFormat();
|
Model.ImportFormat = new CsvImportFormat();
|
||||||
Model.ImportFileExtensionFilter = ".csv";
|
Model.ImportFileExtensionFilter = ".csv";
|
||||||
Model.ImportFormatHelp = resources.GetResourceValue("NewImportFormatHelpCSV");
|
Model.ImportFormatHelp = resource.GetResourceValue("NewImportFormatHelpCSV");
|
||||||
break;
|
|
||||||
default:
|
|
||||||
Model.ImportFormat = new NullImportFormat();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5,7 +5,8 @@
|
|||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:viewModels="using:ModernKeePass.ViewModels"
|
xmlns:viewModels="using:ModernKeePass.ViewModels"
|
||||||
xmlns:converters="using:ModernKeePass.Converters"
|
xmlns:converters="using:ModernKeePass.Converters"
|
||||||
xmlns:interactivity="using:Microsoft.Xaml.Interactivity" xmlns:Core="using:Microsoft.Xaml.Interactions.Core"
|
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
|
||||||
|
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
|
||||||
xmlns:userControls="using:ModernKeePass.Views.UserControls"
|
xmlns:userControls="using:ModernKeePass.Views.UserControls"
|
||||||
x:Class="ModernKeePass.Views.OpenDatabasePage"
|
x:Class="ModernKeePass.Views.OpenDatabasePage"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
@@ -24,11 +25,11 @@
|
|||||||
<Border HorizontalAlignment="Left" BorderThickness="1" BorderBrush="AliceBlue" Width="550" Visibility="{Binding IsFileSelected, Converter={StaticResource BooleanToVisibilityConverter}}">
|
<Border HorizontalAlignment="Left" BorderThickness="1" BorderBrush="AliceBlue" Width="550" Visibility="{Binding IsFileSelected, Converter={StaticResource BooleanToVisibilityConverter}}">
|
||||||
<StackPanel Margin="25,0,25,0">
|
<StackPanel Margin="25,0,25,0">
|
||||||
<TextBlock Text="{Binding Name}" />
|
<TextBlock Text="{Binding Name}" />
|
||||||
<userControls:CompositeKeyUserControl x:Uid="CompositeKeyOpenButton" DatabaseFile="{Binding DatabaseFile}">
|
<userControls:CompositeKeyUserControl x:Uid="CompositeKeyOpenButton" DatabaseFilePath="{Binding Path}">
|
||||||
<interactivity:Interaction.Behaviors>
|
<interactivity:Interaction.Behaviors>
|
||||||
<Core:EventTriggerBehavior EventName="ValidationChecked">
|
<core:EventTriggerBehavior EventName="ValidationChecked">
|
||||||
<Core:NavigateToPageAction TargetPage="ModernKeePass.Views.GroupDetailPage" />
|
<core:NavigateToPageAction TargetPage="ModernKeePass.Views.GroupDetailPage" />
|
||||||
</Core:EventTriggerBehavior>
|
</core:EventTriggerBehavior>
|
||||||
</interactivity:Interaction.Behaviors>
|
</interactivity:Interaction.Behaviors>
|
||||||
</userControls:CompositeKeyUserControl>
|
</userControls:CompositeKeyUserControl>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
@@ -1,8 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
using Windows.Storage;
|
using Windows.Storage.AccessCache;
|
||||||
using Windows.Storage.Pickers;
|
using Windows.Storage.Pickers;
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
using Windows.UI.Xaml.Navigation;
|
using Windows.UI.Xaml.Navigation;
|
||||||
|
using ModernKeePass.Domain.Dtos;
|
||||||
using ModernKeePass.ViewModels;
|
using ModernKeePass.ViewModels;
|
||||||
|
|
||||||
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
|
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
|
||||||
@@ -21,13 +22,13 @@ namespace ModernKeePass.Views
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnNavigatedTo(NavigationEventArgs e)
|
protected override async void OnNavigatedTo(NavigationEventArgs e)
|
||||||
{
|
{
|
||||||
base.OnNavigatedTo(e);
|
base.OnNavigatedTo(e);
|
||||||
var file = e.Parameter as StorageFile;
|
var file = e.Parameter as FileInfo;
|
||||||
if (file != null)
|
if (file != null)
|
||||||
{
|
{
|
||||||
Model.OpenFile(file);
|
await Model.OpenFile(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,7 +44,15 @@ namespace ModernKeePass.Views
|
|||||||
// Application now has read/write access to the picked file
|
// Application now has read/write access to the picked file
|
||||||
var file = await picker.PickSingleFileAsync();
|
var file = await picker.PickSingleFileAsync();
|
||||||
if (file == null) return;
|
if (file == null) return;
|
||||||
Model.OpenFile(file);
|
|
||||||
|
|
||||||
|
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
|
||||||
|
var fileInfo = new FileInfo
|
||||||
|
{
|
||||||
|
Path = token,
|
||||||
|
Name = file.DisplayName
|
||||||
|
};
|
||||||
|
await Model.OpenFile(fileInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -45,7 +45,7 @@
|
|||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<TextBlock Grid.Row="0" Text="{Binding Name}" Padding="5,0,0,0" />
|
<TextBlock Grid.Row="0" Text="{Binding Name}" Padding="5,0,0,0" />
|
||||||
<TextBlock Grid.Row="1" Text="{Binding Path}" Padding="5,0,0,0" FontSize="10" />
|
<TextBlock Grid.Row="1" Text="{Binding Path}" Padding="5,0,0,0" FontSize="10" />
|
||||||
<userControls:CompositeKeyUserControl Grid.Row="2" x:Name="DatabaseUserControl" x:Uid="CompositeKeyOpenButton" HorizontalAlignment="Stretch" MinWidth="400" Margin="0,10,0,0" Visibility="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter}}" DatabaseFile="{Binding DatabaseFile}">
|
<userControls:CompositeKeyUserControl Grid.Row="2" x:Name="DatabaseUserControl" x:Uid="CompositeKeyOpenButton" HorizontalAlignment="Stretch" MinWidth="400" Margin="0,10,0,0" Visibility="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter}}" DatabaseFilePath="{Binding Path}">
|
||||||
<interactivity:Interaction.Behaviors>
|
<interactivity:Interaction.Behaviors>
|
||||||
<core:EventTriggerBehavior EventName="ValidationChecked">
|
<core:EventTriggerBehavior EventName="ValidationChecked">
|
||||||
<core:CallMethodAction TargetObject="{Binding}" MethodName="UpdateAccessTime" />
|
<core:CallMethodAction TargetObject="{Binding}" MethodName="UpdateAccessTime" />
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
mc:Ignorable="d" >
|
mc:Ignorable="d" >
|
||||||
<UserControl.Resources>
|
<UserControl.Resources>
|
||||||
<converters:ProgressBarLegalValuesConverter x:Key="ProgressBarLegalValuesConverter"/>
|
<converters:ProgressBarLegalValuesConverter x:Key="ProgressBarLegalValuesConverter"/>
|
||||||
<converters:DoubleToSolidColorBrushConverter x:Key="DoubleToForegroungBrushConverter"/>
|
<converters:DoubleToSolidColorBrushConverter x:Key="DoubleToForegroundBrushConverter"/>
|
||||||
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
|
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
|
||||||
<converters:DiscreteIntToSolidColorBrushConverter x:Key="DiscreteIntToSolidColorBrushConverter"/>
|
<converters:DiscreteIntToSolidColorBrushConverter x:Key="DiscreteIntToSolidColorBrushConverter"/>
|
||||||
<converters:EmptyStringToVisibilityConverter x:Key="EmptyStringToVisibilityConverter"/>
|
<converters:EmptyStringToVisibilityConverter x:Key="EmptyStringToVisibilityConverter"/>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<ProgressBar Grid.Row="0" Grid.Column="1"
|
<ProgressBar Grid.Row="0" Grid.Column="1"
|
||||||
Maximum="128" VerticalAlignment="Bottom"
|
Maximum="128" VerticalAlignment="Bottom"
|
||||||
Value="{Binding PasswordComplexityIndicator, ConverterParameter=0\,128, Converter={StaticResource ProgressBarLegalValuesConverter}}"
|
Value="{Binding PasswordComplexityIndicator, ConverterParameter=0\,128, Converter={StaticResource ProgressBarLegalValuesConverter}}"
|
||||||
Foreground="{Binding PasswordComplexityIndicator, ConverterParameter=128, Converter={StaticResource DoubleToForegroungBrushConverter}}"
|
Foreground="{Binding PasswordComplexityIndicator, ConverterParameter=128, Converter={StaticResource DoubleToForegroundBrushConverter}}"
|
||||||
Visibility="{Binding ShowComplexityIndicator, ElementName=UserControl, Converter={StaticResource BooleanToVisibilityConverter}}" />
|
Visibility="{Binding ShowComplexityIndicator, ElementName=UserControl, Converter={StaticResource BooleanToVisibilityConverter}}" />
|
||||||
<CheckBox Grid.Row="1" Grid.Column="0" IsChecked="{Binding HasKeyFile, Mode=TwoWay}" />
|
<CheckBox Grid.Row="1" Grid.Column="0" IsChecked="{Binding HasKeyFile, Mode=TwoWay}" />
|
||||||
<HyperlinkButton Grid.Row="1" Grid.Column="1" Margin="-15,0,0,0" Content="{Binding KeyFileText}" IsEnabled="{Binding HasKeyFile}" Click="KeyFileButton_Click" Style="{StaticResource MainColorHyperlinkButton}" />
|
<HyperlinkButton Grid.Row="1" Grid.Column="1" Margin="-15,0,0,0" Content="{Binding KeyFileText}" IsEnabled="{Binding HasKeyFile}" Click="KeyFileButton_Click" Style="{StaticResource MainColorHyperlinkButton}" />
|
||||||
|
@@ -1,20 +1,20 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Windows.Storage;
|
using Windows.Storage.AccessCache;
|
||||||
using Windows.Storage.Pickers;
|
using Windows.Storage.Pickers;
|
||||||
using Windows.System;
|
using Windows.System;
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
using Windows.UI.Xaml.Input;
|
using Windows.UI.Xaml.Input;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using ModernKeePass.Application.Database.Commands.CloseDatabase;
|
using ModernKeePass.Application.Database.Commands.CloseDatabase;
|
||||||
using ModernKeePass.Application.Database.Commands.SaveDatabase;
|
using ModernKeePass.Application.Database.Commands.SaveDatabase;
|
||||||
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
using ModernKeePass.Application.Database.Queries.GetDatabase;
|
||||||
using ModernKeePass.Common;
|
using ModernKeePass.Common;
|
||||||
|
using ModernKeePass.Domain.Dtos;
|
||||||
using ModernKeePass.Events;
|
using ModernKeePass.Events;
|
||||||
using ModernKeePass.Extensions;
|
using ModernKeePass.Extensions;
|
||||||
using ModernKeePass.Interfaces;
|
|
||||||
using ModernKeePass.Services;
|
|
||||||
using ModernKeePass.ViewModels;
|
using ModernKeePass.ViewModels;
|
||||||
|
|
||||||
// Pour en savoir plus sur le modèle d'élément Contrôle utilisateur, consultez la page http://go.microsoft.com/fwlink/?LinkId=234236
|
// Pour en savoir plus sur le modèle d'élément Contrôle utilisateur, consultez la page http://go.microsoft.com/fwlink/?LinkId=234236
|
||||||
@@ -24,6 +24,7 @@ namespace ModernKeePass.Views.UserControls
|
|||||||
public sealed partial class CompositeKeyUserControl
|
public sealed partial class CompositeKeyUserControl
|
||||||
{
|
{
|
||||||
private readonly IMediator _mediator;
|
private readonly IMediator _mediator;
|
||||||
|
private readonly ResourceHelper _resource;
|
||||||
public CompositeKeyVm Model => Grid.DataContext as CompositeKeyVm;
|
public CompositeKeyVm Model => Grid.DataContext as CompositeKeyVm;
|
||||||
|
|
||||||
public bool CreateNew
|
public bool CreateNew
|
||||||
@@ -62,26 +63,27 @@ namespace ModernKeePass.Views.UserControls
|
|||||||
typeof(CompositeKeyUserControl),
|
typeof(CompositeKeyUserControl),
|
||||||
new PropertyMetadata("OK", (o, args) => { }));
|
new PropertyMetadata("OK", (o, args) => { }));
|
||||||
|
|
||||||
public StorageFile DatabaseFile
|
public string DatabaseFilePath
|
||||||
{
|
{
|
||||||
get { return (StorageFile)GetValue(DatabaseFileProperty); }
|
get { return (string)GetValue(DatabaseFilePathProperty); }
|
||||||
set { SetValue(DatabaseFileProperty, value); }
|
set { SetValue(DatabaseFilePathProperty, value); }
|
||||||
}
|
}
|
||||||
public static readonly DependencyProperty DatabaseFileProperty =
|
public static readonly DependencyProperty DatabaseFilePathProperty =
|
||||||
DependencyProperty.Register(
|
DependencyProperty.Register(
|
||||||
"DatabaseFile",
|
"DatabaseFilePath",
|
||||||
typeof(StorageFile),
|
typeof(string),
|
||||||
typeof(CompositeKeyUserControl),
|
typeof(CompositeKeyUserControl),
|
||||||
new PropertyMetadata(null, (o, args) => { }));
|
new PropertyMetadata(null, (o, args) => { }));
|
||||||
|
|
||||||
public bool ShowComplexityIndicator => CreateNew || UpdateKey;
|
public bool ShowComplexityIndicator => CreateNew || UpdateKey;
|
||||||
|
|
||||||
public CompositeKeyUserControl(): this(App.Mediator)
|
public CompositeKeyUserControl(): this(App.Services.GetService<IMediator>())
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
public CompositeKeyUserControl(IMediator mediator)
|
public CompositeKeyUserControl(IMediator mediator)
|
||||||
{
|
{
|
||||||
_mediator = mediator;
|
_mediator = mediator;
|
||||||
|
_resource = new ResourceHelper();
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,31 +102,30 @@ namespace ModernKeePass.Views.UserControls
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var database = await _mediator.Send(new GetDatabaseQuery());
|
var database = await _mediator.Send(new GetDatabaseQuery());
|
||||||
var resource = new ResourcesService();
|
|
||||||
if (database.IsOpen)
|
if (database.IsOpen)
|
||||||
{
|
{
|
||||||
await MessageDialogHelper.ShowActionDialog(resource.GetResourceValue("MessageDialogDBOpenTitle"),
|
await MessageDialogHelper.ShowActionDialog(_resource.GetResourceValue("MessageDialogDBOpenTitle"),
|
||||||
string.Format(resource.GetResourceValue("MessageDialogDBOpenDesc"), database.Name),
|
string.Format(_resource.GetResourceValue("MessageDialogDBOpenDesc"), database.Name),
|
||||||
resource.GetResourceValue("MessageDialogDBOpenButtonSave"),
|
_resource.GetResourceValue("MessageDialogDBOpenButtonSave"),
|
||||||
resource.GetResourceValue("MessageDialogDBOpenButtonDiscard"),
|
_resource.GetResourceValue("MessageDialogDBOpenButtonDiscard"),
|
||||||
async command =>
|
async command =>
|
||||||
{
|
{
|
||||||
await _mediator.Send(new SaveDatabaseCommand());
|
await _mediator.Send(new SaveDatabaseCommand());
|
||||||
ToastNotificationHelper.ShowGenericToast(
|
ToastNotificationHelper.ShowGenericToast(
|
||||||
database.Name,
|
database.Name,
|
||||||
resource.GetResourceValue("ToastSavedMessage"));
|
_resource.GetResourceValue("ToastSavedMessage"));
|
||||||
await _mediator.Send(new CloseDatabaseCommand());
|
await _mediator.Send(new CloseDatabaseCommand());
|
||||||
await OpenDatabase(resource);
|
await OpenDatabase();
|
||||||
},
|
},
|
||||||
async command =>
|
async command =>
|
||||||
{
|
{
|
||||||
await _mediator.Send(new CloseDatabaseCommand());
|
await _mediator.Send(new CloseDatabaseCommand());
|
||||||
await OpenDatabase(resource);
|
await OpenDatabase();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await OpenDatabase(resource);
|
await OpenDatabase();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -151,7 +152,9 @@ namespace ModernKeePass.Views.UserControls
|
|||||||
// Application now has read/write access to the picked file
|
// Application now has read/write access to the picked file
|
||||||
var file = await picker.PickSingleFileAsync();
|
var file = await picker.PickSingleFileAsync();
|
||||||
if (file == null) return;
|
if (file == null) return;
|
||||||
Model.KeyFile = file;
|
|
||||||
|
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
|
||||||
|
Model.KeyFilePath = token;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void CreateKeyFileButton_Click(object sender, RoutedEventArgs e)
|
private async void CreateKeyFileButton_Click(object sender, RoutedEventArgs e)
|
||||||
@@ -166,14 +169,19 @@ namespace ModernKeePass.Views.UserControls
|
|||||||
var file = await savePicker.PickSaveFileAsync();
|
var file = await savePicker.PickSaveFileAsync();
|
||||||
if (file == null) return;
|
if (file == null) return;
|
||||||
|
|
||||||
await Model.CreateKeyFile(file);
|
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
|
||||||
|
await Model.CreateKeyFile(new FileInfo
|
||||||
|
{
|
||||||
|
Path = token,
|
||||||
|
Name = file.DisplayName
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task OpenDatabase(IResourceService resource)
|
private async Task OpenDatabase()
|
||||||
{
|
{
|
||||||
var oldLabel = ButtonLabel;
|
var oldLabel = ButtonLabel;
|
||||||
ButtonLabel = resource.GetResourceValue("CompositeKeyOpening");
|
ButtonLabel = _resource.GetResourceValue("CompositeKeyOpening");
|
||||||
if (await Dispatcher.RunTaskAsync(async () => await Model.OpenDatabase(DatabaseFile, CreateNew)))
|
if (await Dispatcher.RunTaskAsync(async () => await Model.OpenDatabase(DatabaseFilePath, CreateNew)))
|
||||||
{
|
{
|
||||||
ValidationChecked?.Invoke(this, new PasswordEventArgs(Model.RootGroupId));
|
ValidationChecked?.Invoke(this, new PasswordEventArgs(Model.RootGroupId));
|
||||||
}
|
}
|
||||||
|
@@ -117,32 +117,19 @@
|
|||||||
<Compile Include="App.xaml.cs">
|
<Compile Include="App.xaml.cs">
|
||||||
<DependentUpon>App.xaml</DependentUpon>
|
<DependentUpon>App.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Common\ResourceHelper.cs" />
|
||||||
<Compile Include="Converters\IconToSymbolConverter.cs" />
|
<Compile Include="Converters\IconToSymbolConverter.cs" />
|
||||||
<Compile Include="DependencyInjection.cs" />
|
<Compile Include="DependencyInjection.cs" />
|
||||||
<Compile Include="ImportFormats\CsvImportFormat.cs" />
|
|
||||||
<Compile Include="ImportFormats\NullImportFormat.cs" />
|
|
||||||
<Compile Include="Interfaces\IFormat.cs" />
|
|
||||||
<Compile Include="Interfaces\IProxyInvocationHandler.cs" />
|
|
||||||
<Compile Include="Interfaces\IRecentService.cs" />
|
|
||||||
<Compile Include="Interfaces\IRecentItem.cs" />
|
|
||||||
<Compile Include="Interfaces\IResourceService.cs" />
|
|
||||||
<Compile Include="Services\SingletonServiceBase.cs" />
|
|
||||||
<Compile Include="TemplateSelectors\SelectableDataTemplateSelector.cs" />
|
<Compile Include="TemplateSelectors\SelectableDataTemplateSelector.cs" />
|
||||||
<Compile Include="ViewModels\Items\SettingsSaveVm.cs" />
|
<Compile Include="ViewModels\Items\SettingsSaveVm.cs" />
|
||||||
<Compile Include="Views\MainPageFrames\DonatePage.xaml.cs">
|
<Compile Include="Views\MainPageFrames\DonatePage.xaml.cs">
|
||||||
<DependentUpon>DonatePage.xaml</DependentUpon>
|
<DependentUpon>DonatePage.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Content Include="Services\DatabaseService.cs" />
|
|
||||||
<Compile Include="Interfaces\ISettingsService.cs" />
|
|
||||||
<Compile Include="Common\MessageDialogHelper.cs" />
|
<Compile Include="Common\MessageDialogHelper.cs" />
|
||||||
<Compile Include="Common\NavigationHelper.cs" />
|
<Compile Include="Common\NavigationHelper.cs" />
|
||||||
<Compile Include="Common\NotifyPropertyChangedBase.cs" />
|
|
||||||
<Compile Include="Common\ObservableDictionary.cs" />
|
<Compile Include="Common\ObservableDictionary.cs" />
|
||||||
<Compile Include="Common\RelayCommand.cs" />
|
<Compile Include="Common\RelayCommand.cs" />
|
||||||
<Compile Include="Common\SuspensionManager.cs" />
|
<Compile Include="Common\SuspensionManager.cs" />
|
||||||
<Compile Include="Services\RecentService.cs" />
|
|
||||||
<Compile Include="Services\ResourcesService.cs" />
|
|
||||||
<Compile Include="Services\SettingsService.cs" />
|
|
||||||
<Compile Include="Common\ToastNotificationHelper.cs" />
|
<Compile Include="Common\ToastNotificationHelper.cs" />
|
||||||
<Compile Include="Converters\DiscreteIntToSolidColorBrushConverter.cs" />
|
<Compile Include="Converters\DiscreteIntToSolidColorBrushConverter.cs" />
|
||||||
<Compile Include="Converters\EmptyStringToVisibilityConverter.cs" />
|
<Compile Include="Converters\EmptyStringToVisibilityConverter.cs" />
|
||||||
|
37
ModernKeePass10/.gitignore
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
################################################################################
|
||||||
|
# This .gitignore file was automatically created by Microsoft(R) Visual Studio.
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
#ignore thumbnails created by windows
|
||||||
|
Thumbs.db
|
||||||
|
#Ignore files build by Visual Studio
|
||||||
|
*.obj
|
||||||
|
*.exe
|
||||||
|
*.pdb
|
||||||
|
*.user
|
||||||
|
*.aps
|
||||||
|
*.pch
|
||||||
|
*.vspscc
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*.ncb
|
||||||
|
*.suo
|
||||||
|
*.tlb
|
||||||
|
*.tlh
|
||||||
|
*.bak
|
||||||
|
*.cache
|
||||||
|
*.ilk
|
||||||
|
*.log
|
||||||
|
[Bb]in
|
||||||
|
[Dd]ebug*/
|
||||||
|
*.lib
|
||||||
|
*.sbr
|
||||||
|
obj/
|
||||||
|
[Rr]elease*/
|
||||||
|
_ReSharper*/
|
||||||
|
[Tt]est[Rr]esult*
|
||||||
|
Translation/TrlUtil.vshost.exe.manifest
|
||||||
|
*.nupkg
|
||||||
|
.vs/
|
||||||
|
/UpgradeLog.htm
|
||||||
|
ModernKeePass_StoreKey.pfx
|
@@ -0,0 +1 @@
|
|||||||
|
C:\Sources\Other\ModernKeePass\ModernKeePass\.sonarqube\out\0
|
171
ModernKeePass10/.sonarqube/conf/SonarQubeAnalysisConfig.xml
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<AnalysisConfig xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.sonarsource.com/msbuild/integration/2015/1">
|
||||||
|
<SonarConfigDir>C:\Sources\Other\ModernKeePass\ModernKeePass\.sonarqube\conf</SonarConfigDir>
|
||||||
|
<SonarOutputDir>C:\Sources\Other\ModernKeePass\ModernKeePass\.sonarqube\out</SonarOutputDir>
|
||||||
|
<SonarBinDir>C:\Sources\Other\ModernKeePass\ModernKeePass\.sonarqube\bin</SonarBinDir>
|
||||||
|
<SonarScannerWorkingDirectory>C:\Sources\Other\ModernKeePass\ModernKeePass</SonarScannerWorkingDirectory>
|
||||||
|
<HasBeginStepCommandLineCredentials>true</HasBeginStepCommandLineCredentials>
|
||||||
|
<SonarQubeHostUrl>https://sonarcloud.io</SonarQubeHostUrl>
|
||||||
|
<SonarQubeVersion>7.2.0.12953</SonarQubeVersion>
|
||||||
|
<SonarProjectKey>ModernKeePass</SonarProjectKey>
|
||||||
|
<AdditionalConfig>
|
||||||
|
<ConfigSetting Id="BuildUri" />
|
||||||
|
<ConfigSetting Id="TfsUri" />
|
||||||
|
<ConfigSetting Id="settings.file.path" Value="c:\sonar\SonarQube.Analysis.xml" />
|
||||||
|
</AdditionalConfig>
|
||||||
|
<ServerSettings>
|
||||||
|
<Property Name="sonaranalyzer-cs.nuget.packageVersion">7.1.0.5212</Property>
|
||||||
|
<Property Name="sonar.editions.jsonUrl">https://update.sonarsource.org/editions.json</Property>
|
||||||
|
<Property Name="sonar.cs.ignoreHeaderComments">true</Property>
|
||||||
|
<Property Name="sonar.cfamily.useSema">true</Property>
|
||||||
|
<Property Name="sonar.c.file.suffixes">.c,.h</Property>
|
||||||
|
<Property Name="sonar.typescript.file.suffixes">.ts,.tsx</Property>
|
||||||
|
<Property Name="email.fromName">SonarQube</Property>
|
||||||
|
<Property Name="sonar.python.xunit.skipDetails">false</Property>
|
||||||
|
<Property Name="sonar.auth.bitbucket.loginStrategy">Unique</Property>
|
||||||
|
<Property Name="sonar.plsql.jdbc.driver.class">oracle.jdbc.OracleDriver</Property>
|
||||||
|
<Property Name="sonar.go.exclusions">**/vendor/**</Property>
|
||||||
|
<Property Name="sonar.forceAuthentication">false</Property>
|
||||||
|
<Property Name="sonar.notifications.delay">60</Property>
|
||||||
|
<Property Name="sonar.cpp.file.suffixes">.cc,.cpp,.cxx,.c++,.hh,.hpp,.hxx,.h++,.ipp</Property>
|
||||||
|
<Property Name="sonaranalyzer-cs.ruleNamespace">SonarAnalyzer.CSharp</Property>
|
||||||
|
<Property Name="sonar.web.file.suffixes">.html,.xhtml,.rhtml,.shtml</Property>
|
||||||
|
<Property Name="sonar.builtInQualityProfiles.disableNotificationOnUpdate">false</Property>
|
||||||
|
<Property Name="sonar.java.failOnException">false</Property>
|
||||||
|
<Property Name="sonar.organizations.createPersonalOrg">true</Property>
|
||||||
|
<Property Name="sonar.cpd.abap.minimumTokens">100</Property>
|
||||||
|
<Property Name="sonar.jacoco.reportPaths">target/jacoco.exec, target/jacoco-it.exec</Property>
|
||||||
|
<Property Name="sonar.cpd.cross_project">false</Property>
|
||||||
|
<Property Name="sonar.vbnet.ignoreHeaderComments">true</Property>
|
||||||
|
<Property Name="sonar.leak.period">30</Property>
|
||||||
|
<Property Name="sonar.auth.github.groupsSync">false</Property>
|
||||||
|
<Property Name="sonar.dbcleaner.daysBeforeDeletingInactiveShortLivingBranches">30</Property>
|
||||||
|
<Property Name="sonar.auth.github.loginStrategy">Unique</Property>
|
||||||
|
<Property Name="sonar.auth.microsoft.enabled">true</Property>
|
||||||
|
<Property Name="sonaranalyzer-vbnet.ruleNamespace">SonarAnalyzer.VisualBasic</Property>
|
||||||
|
<Property Name="sonar.auth.microsoft.allowsUsersToSignUp">true</Property>
|
||||||
|
<Property Name="sonar.javascript.ignoreHeaderComments">true</Property>
|
||||||
|
<Property Name="sonar.dbcleaner.daysBeforeDeletingClosedIssues">730</Property>
|
||||||
|
<Property Name="sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByMonth">4</Property>
|
||||||
|
<Property Name="sonar.lf.gravatarServerUrl">https://secure.gravatar.com/avatar/{EMAIL_MD5}.jpg?s={SIZE}&d=identicon</Property>
|
||||||
|
<Property Name="sonar.notifications.runningDelayBeforeReportingStatus">600</Property>
|
||||||
|
<Property Name="sonar.javascript.environments">amd, applescript, atomtest, browser, commonjs, couch, embertest, flow, greasemonkey, jasmine, jest, jquery, meteor, mocha, mongo, nashorn, node, phantomjs, prototypejs, protractor, qunit, rhino, serviceworker, shared-node-browser, shelljs, webextensions, worker, wsh, yui</Property>
|
||||||
|
<Property Name="sonar.scm.disabled">false</Property>
|
||||||
|
<Property Name="sonar.typescript.exclusions">**/node_modules/**,**/bower_components/**</Property>
|
||||||
|
<Property Name="sonar.vbnet.file.suffixes">.vb</Property>
|
||||||
|
<Property Name="sonar.abap.file.suffixes">.abap,.ab4,.flow,.asprog</Property>
|
||||||
|
<Property Name="sonar.cfamily.ignoreHeaderComments">true</Property>
|
||||||
|
<Property Name="sonar.technicalDebt.developmentCost">30</Property>
|
||||||
|
<Property Name="sonar.python.file.suffixes">py</Property>
|
||||||
|
<Property Name="sonar.cs.file.suffixes">.cs</Property>
|
||||||
|
<Property Name="sonar.plsql.file.suffixes">sql,tab,pkb</Property>
|
||||||
|
<Property Name="sonaranalyzer-vbnet.staticResourceName">SonarAnalyzer-7.1.0.5212.zip</Property>
|
||||||
|
<Property Name="sonar.java.file.suffixes">.java,.jav</Property>
|
||||||
|
<Property Name="sonar.php.file.suffixes">php,php3,php4,php5,phtml,inc</Property>
|
||||||
|
<Property Name="sonar.xml.file.suffixes">.xml,.xsd,.xsl</Property>
|
||||||
|
<Property Name="sonar.dbcleaner.weeksBeforeDeletingAllSnapshots">480</Property>
|
||||||
|
<Property Name="sonar.auth.bitbucket.allowUsersToSignUp">true</Property>
|
||||||
|
<Property Name="sonar.auth.github.enabled">true</Property>
|
||||||
|
<Property Name="sonar.javascript.jQueryObjectAliases">$, jQuery</Property>
|
||||||
|
<Property Name="sonaranalyzer-vbnet.nuget.packageVersion">7.1.0.5212</Property>
|
||||||
|
<Property Name="sonar.go.file.suffixes">.go</Property>
|
||||||
|
<Property Name="sonar.dbcleaner.weeksBeforeKeepingOnlyAnalysesWithVersion">104</Property>
|
||||||
|
<Property Name="sonar.swift.file.suffixes">.swift</Property>
|
||||||
|
<Property Name="sonar.github.endpoint">https://api.github.com</Property>
|
||||||
|
<Property Name="sonar.plsql.ignoreHeaderComments">false</Property>
|
||||||
|
<Property Name="sonar.flex.file.suffixes">as</Property>
|
||||||
|
<Property Name="sonar.auth.github.apiUrl">https://api.github.com/</Property>
|
||||||
|
<Property Name="sonar.auth.github.allowUsersToSignUp">true</Property>
|
||||||
|
<Property Name="sonar.python.xunit.reportPath">xunit-reports/xunit-result-*.xml</Property>
|
||||||
|
<Property Name="sonar.javascript.globals">angular,goog,google,OpenLayers,d3,dojo,dojox,dijit,Backbone,moment,casper</Property>
|
||||||
|
<Property Name="sonar.dbcleaner.hoursBeforeKeepingOnlyOneSnapshotByDay">24</Property>
|
||||||
|
<Property Name="sonar.auth.bitbucket.enabled">true</Property>
|
||||||
|
<Property Name="sonar.javascript.exclusions">**/node_modules/**,**/bower_components/**</Property>
|
||||||
|
<Property Name="sonar.auth.github.webUrl">https://github.com/</Property>
|
||||||
|
<Property Name="sonar.dbcleaner.cleanDirectory">true</Property>
|
||||||
|
<Property Name="sonar.onboardingTutorial.showToNewUsers">false</Property>
|
||||||
|
<Property Name="sonaranalyzer-vbnet.nuget.packageId">SonarAnalyzer.VisualBasic</Property>
|
||||||
|
<Property Name="email.from">noreply@sonarcloud.io</Property>
|
||||||
|
<Property Name="sonaranalyzer-vbnet.pluginVersion">7.1.0.5212</Property>
|
||||||
|
<Property Name="sonar.typescript.node">node</Property>
|
||||||
|
<Property Name="sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByWeek">1</Property>
|
||||||
|
<Property Name="sonaranalyzer-vbnet.analyzerId">SonarAnalyzer.VisualBasic</Property>
|
||||||
|
<Property Name="email.prefix">[SonarCloud]</Property>
|
||||||
|
<Property Name="sonar.c.std">c11</Property>
|
||||||
|
<Property Name="sonaranalyzer-cs.pluginKey">csharp</Property>
|
||||||
|
<Property Name="sonar.cfamily.useCache">true</Property>
|
||||||
|
<Property Name="sonar.branch.longLivedBranches.regex">(branch|release)-.*</Property>
|
||||||
|
<Property Name="sonar.objc.file.suffixes">.m</Property>
|
||||||
|
<Property Name="sonar.go.coverage.reportPaths">coverage.out</Property>
|
||||||
|
<Property Name="sonaranalyzer-cs.staticResourceName">SonarAnalyzer-7.1.0.5212.zip</Property>
|
||||||
|
<Property Name="sonaranalyzer-cs.nuget.packageId">SonarAnalyzer.CSharp</Property>
|
||||||
|
<Property Name="sonar.auth.bitbucket.apiUrl">https://api.bitbucket.org/</Property>
|
||||||
|
<Property Name="sonar.authenticator.downcase">false</Property>
|
||||||
|
<Property Name="sonar.github.disableInlineComments">false</Property>
|
||||||
|
<Property Name="sonar.python.coverage.reportPath">coverage-reports/*coverage-*.xml</Property>
|
||||||
|
<Property Name="sonaranalyzer-cs.analyzerId">SonarAnalyzer.CSharp</Property>
|
||||||
|
<Property Name="sonar.organizations.anyoneCanCreate">true</Property>
|
||||||
|
<Property Name="sonar.technicalDebt.ratingGrid">0.05,0.1,0.2,0.5</Property>
|
||||||
|
<Property Name="sonar.lf.enableGravatar">true</Property>
|
||||||
|
<Property Name="sonar.preview.excludePlugins">devcockpit,pdfreport,governance,ldap,authaad,authgithub,authbitbucket,googleanalytics</Property>
|
||||||
|
<Property Name="sonaranalyzer-cs.pluginVersion">7.1.0.5212</Property>
|
||||||
|
<Property Name="sonar.javascript.file.suffixes">.js,.jsx,.vue</Property>
|
||||||
|
<Property Name="sonar.cpd.abap.minimumLines">20</Property>
|
||||||
|
<Property Name="sonaranalyzer-vbnet.pluginKey">vbnet</Property>
|
||||||
|
<Property Name="sonar.java.collectAnalysisErrors">true</Property>
|
||||||
|
<Property Name="sonar.updatecenter.url">https://update.sonarsource.org/update-center.properties</Property>
|
||||||
|
<Property Name="sonar.tsql.file.suffixes">.tsql</Property>
|
||||||
|
<Property Name="sonar.cpp.std">c++11</Property>
|
||||||
|
<Property Name="sonar.core.serverBaseURL">https://sonarcloud.io</Property>
|
||||||
|
<Property Name="sonar.lf.logoUrl">https://about.sonarcloud.io/images/SonarCloud-white-210px.png</Property>
|
||||||
|
<Property Name="sonar.lf.logoWidthPx">105</Property>
|
||||||
|
<Property Name="sonar.lf.aboutText"><div class="boxed-group" style="border: none; border-radius: 3px;">
|
||||||
|
<div class="boxed-group-inner clearfix" style="padding: 30px; border-radius: 3px; border: #e6e6e6 1px solid; background: #f3f3f3;">
|
||||||
|
<div style="overflow: hidden; line-height: 1.5; font-size: 16px;">
|
||||||
|
<p>
|
||||||
|
Analyze your open source and private projects on SonarCloud.
|
||||||
|
Select your <a href="https://about.sonarcloud.io">plan</a> and start improving.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div></Property>
|
||||||
|
<Property Name="sonar.core.id">AWHW8ct9-T_TB3XqouNu</Property>
|
||||||
|
<Property Name="sonar.core.startTime">07/06/2018 12:32:21</Property>
|
||||||
|
</ServerSettings>
|
||||||
|
<LocalSettings>
|
||||||
|
<Property Name="sonar.organization">geogeob</Property>
|
||||||
|
<Property Name="sonar.host.url">https://sonarcloud.io</Property>
|
||||||
|
</LocalSettings>
|
||||||
|
<AnalyzersSettings>
|
||||||
|
<AnalyzerSettings>
|
||||||
|
<Language>cs</Language>
|
||||||
|
<RuleSetFilePath>C:\Sources\Other\ModernKeePass\ModernKeePass\.sonarqube\conf\SonarQubeRoslyn-cs.ruleset</RuleSetFilePath>
|
||||||
|
<AnalyzerAssemblyPaths>
|
||||||
|
<Path>C:\Users\GBE\AppData\Local\Temp\.sonarqube\resources\0\Google.Protobuf.dll</Path>
|
||||||
|
<Path>C:\Users\GBE\AppData\Local\Temp\.sonarqube\resources\0\SonarAnalyzer.CSharp.dll</Path>
|
||||||
|
<Path>C:\Users\GBE\AppData\Local\Temp\.sonarqube\resources\0\SonarAnalyzer.dll</Path>
|
||||||
|
</AnalyzerAssemblyPaths>
|
||||||
|
<AdditionalFilePaths>
|
||||||
|
<Path>C:\Sources\Other\ModernKeePass\ModernKeePass\.sonarqube\conf\cs\SonarLint.xml</Path>
|
||||||
|
</AdditionalFilePaths>
|
||||||
|
</AnalyzerSettings>
|
||||||
|
<AnalyzerSettings>
|
||||||
|
<Language>vbnet</Language>
|
||||||
|
<RuleSetFilePath>C:\Sources\Other\ModernKeePass\ModernKeePass\.sonarqube\conf\SonarQubeRoslyn-vbnet.ruleset</RuleSetFilePath>
|
||||||
|
<AnalyzerAssemblyPaths>
|
||||||
|
<Path>C:\Users\GBE\AppData\Local\Temp\.sonarqube\resources\1\SonarAnalyzer.VisualBasic.nuspec</Path>
|
||||||
|
<Path>C:\Users\GBE\AppData\Local\Temp\.sonarqube\resources\1\[Content_Types].xml</Path>
|
||||||
|
<Path>C:\Users\GBE\AppData\Local\Temp\.sonarqube\resources\1\analyzers\Google.Protobuf.dll</Path>
|
||||||
|
<Path>C:\Users\GBE\AppData\Local\Temp\.sonarqube\resources\1\analyzers\SonarAnalyzer.dll</Path>
|
||||||
|
<Path>C:\Users\GBE\AppData\Local\Temp\.sonarqube\resources\1\analyzers\SonarAnalyzer.VisualBasic.dll</Path>
|
||||||
|
<Path>C:\Users\GBE\AppData\Local\Temp\.sonarqube\resources\1\package\services\metadata\core-properties\f124441cdae948bb922ac980ea59570c.psmdcp</Path>
|
||||||
|
<Path>C:\Users\GBE\AppData\Local\Temp\.sonarqube\resources\1\tools\install.ps1</Path>
|
||||||
|
<Path>C:\Users\GBE\AppData\Local\Temp\.sonarqube\resources\1\tools\uninstall.ps1</Path>
|
||||||
|
<Path>C:\Users\GBE\AppData\Local\Temp\.sonarqube\resources\1\_rels\.rels</Path>
|
||||||
|
</AnalyzerAssemblyPaths>
|
||||||
|
<AdditionalFilePaths>
|
||||||
|
<Path>C:\Sources\Other\ModernKeePass\ModernKeePass\.sonarqube\conf\vbnet\SonarLint.xml</Path>
|
||||||
|
</AdditionalFilePaths>
|
||||||
|
</AnalyzerSettings>
|
||||||
|
</AnalyzersSettings>
|
||||||
|
</AnalysisConfig>
|
348
ModernKeePass10/.sonarqube/conf/SonarQubeRoslyn-cs.ruleset
Normal file
@@ -0,0 +1,348 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RuleSet xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="Rules for SonarQube" Description="This rule set was automatically generated from SonarQube" ToolsVersion="14.0">
|
||||||
|
<Rules AnalyzerId="SonarAnalyzer.CSharp" RuleNamespace="SonarAnalyzer.CSharp">
|
||||||
|
<Rule Id="S2589" Action="Warning" />
|
||||||
|
<Rule Id="S3433" Action="Warning" />
|
||||||
|
<Rule Id="S4061" Action="Warning" />
|
||||||
|
<Rule Id="S1121" Action="Warning" />
|
||||||
|
<Rule Id="S1854" Action="Warning" />
|
||||||
|
<Rule Id="S4457" Action="Warning" />
|
||||||
|
<Rule Id="S4456" Action="Warning" />
|
||||||
|
<Rule Id="S2278" Action="Warning" />
|
||||||
|
<Rule Id="S4211" Action="Warning" />
|
||||||
|
<Rule Id="S3923" Action="Warning" />
|
||||||
|
<Rule Id="S4426" Action="Warning" />
|
||||||
|
<Rule Id="S2486" Action="Warning" />
|
||||||
|
<Rule Id="S4433" Action="Warning" />
|
||||||
|
<Rule Id="S2758" Action="Warning" />
|
||||||
|
<Rule Id="S1751" Action="Warning" />
|
||||||
|
<Rule Id="S1871" Action="Warning" />
|
||||||
|
<Rule Id="S4586" Action="Warning" />
|
||||||
|
<Rule Id="S4581" Action="Warning" />
|
||||||
|
<Rule Id="S2737" Action="Warning" />
|
||||||
|
<Rule Id="S3400" Action="Warning" />
|
||||||
|
<Rule Id="S3649" Action="Warning" />
|
||||||
|
<Rule Id="S1144" Action="Warning" />
|
||||||
|
<Rule Id="S1264" Action="Warning" />
|
||||||
|
<Rule Id="S2201" Action="Warning" />
|
||||||
|
<Rule Id="S1118" Action="Warning" />
|
||||||
|
<Rule Id="S1006" Action="Warning" />
|
||||||
|
<Rule Id="S4214" Action="Warning" />
|
||||||
|
<Rule Id="S4210" Action="Warning" />
|
||||||
|
<Rule Id="S3241" Action="Warning" />
|
||||||
|
<Rule Id="S4428" Action="Warning" />
|
||||||
|
<Rule Id="S1048" Action="Warning" />
|
||||||
|
<Rule Id="S2183" Action="Warning" />
|
||||||
|
<Rule Id="S3168" Action="Warning" />
|
||||||
|
<Rule Id="S4220" Action="Warning" />
|
||||||
|
<Rule Id="S3261" Action="Warning" />
|
||||||
|
<Rule Id="S4260" Action="Warning" />
|
||||||
|
<Rule Id="S4159" Action="Warning" />
|
||||||
|
<Rule Id="S4277" Action="Warning" />
|
||||||
|
<Rule Id="S2583" Action="Warning" />
|
||||||
|
<Rule Id="S3440" Action="Warning" />
|
||||||
|
<Rule Id="S3776" Action="Warning" />
|
||||||
|
<Rule Id="S2326" Action="Warning" />
|
||||||
|
<Rule Id="S1116" Action="Warning" />
|
||||||
|
<Rule Id="S3358" Action="Warning" />
|
||||||
|
<Rule Id="S4200" Action="Warning" />
|
||||||
|
<Rule Id="S1172" Action="Warning" />
|
||||||
|
<Rule Id="S1862" Action="Warning" />
|
||||||
|
<Rule Id="S2275" Action="Warning" />
|
||||||
|
<Rule Id="S3457" Action="Warning" />
|
||||||
|
<Rule Id="S3459" Action="Warning" />
|
||||||
|
<Rule Id="S3464" Action="Warning" />
|
||||||
|
<Rule Id="S3343" Action="Warning" />
|
||||||
|
<Rule Id="S818" Action="Warning" />
|
||||||
|
<Rule Id="S1656" Action="Warning" />
|
||||||
|
<Rule Id="S2184" Action="Warning" />
|
||||||
|
<Rule Id="S1764" Action="Warning" />
|
||||||
|
<Rule Id="S2971" Action="Warning" />
|
||||||
|
<Rule Id="S3060" Action="Warning" />
|
||||||
|
<Rule Id="S101" Action="Warning" />
|
||||||
|
<Rule Id="S1066" Action="Warning" />
|
||||||
|
<Rule Id="S107" Action="Warning" />
|
||||||
|
<Rule Id="S1075" Action="Warning" />
|
||||||
|
<Rule Id="S108" Action="Warning" />
|
||||||
|
<Rule Id="S110" Action="Warning" />
|
||||||
|
<Rule Id="S1104" Action="Warning" />
|
||||||
|
<Rule Id="S1110" Action="Warning" />
|
||||||
|
<Rule Id="S1117" Action="Warning" />
|
||||||
|
<Rule Id="S112" Action="Warning" />
|
||||||
|
<Rule Id="S1123" Action="Warning" />
|
||||||
|
<Rule Id="S1125" Action="Warning" />
|
||||||
|
<Rule Id="S1134" Action="Warning" />
|
||||||
|
<Rule Id="S1135" Action="Warning" />
|
||||||
|
<Rule Id="S1155" Action="Warning" />
|
||||||
|
<Rule Id="S1163" Action="Warning" />
|
||||||
|
<Rule Id="S1168" Action="Warning" />
|
||||||
|
<Rule Id="S1185" Action="Warning" />
|
||||||
|
<Rule Id="S1186" Action="Warning" />
|
||||||
|
<Rule Id="S1206" Action="Warning" />
|
||||||
|
<Rule Id="S1210" Action="Warning" />
|
||||||
|
<Rule Id="S1215" Action="Warning" />
|
||||||
|
<Rule Id="S125" Action="Warning" />
|
||||||
|
<Rule Id="S1450" Action="Warning" />
|
||||||
|
<Rule Id="S1479" Action="Warning" />
|
||||||
|
<Rule Id="S1481" Action="Warning" />
|
||||||
|
<Rule Id="S1607" Action="Warning" />
|
||||||
|
<Rule Id="S1643" Action="Warning" />
|
||||||
|
<Rule Id="S1699" Action="Warning" />
|
||||||
|
<Rule Id="S1848" Action="Warning" />
|
||||||
|
<Rule Id="S1905" Action="Warning" />
|
||||||
|
<Rule Id="S1939" Action="Warning" />
|
||||||
|
<Rule Id="S1940" Action="Warning" />
|
||||||
|
<Rule Id="S1944" Action="Warning" />
|
||||||
|
<Rule Id="S2068" Action="Warning" />
|
||||||
|
<Rule Id="S2114" Action="Warning" />
|
||||||
|
<Rule Id="S2123" Action="Warning" />
|
||||||
|
<Rule Id="S2178" Action="Warning" />
|
||||||
|
<Rule Id="S2187" Action="Warning" />
|
||||||
|
<Rule Id="S2190" Action="Warning" />
|
||||||
|
<Rule Id="S2219" Action="Warning" />
|
||||||
|
<Rule Id="S2223" Action="Warning" />
|
||||||
|
<Rule Id="S2225" Action="Warning" />
|
||||||
|
<Rule Id="S2234" Action="Warning" />
|
||||||
|
<Rule Id="S2259" Action="Warning" />
|
||||||
|
<Rule Id="S2290" Action="Warning" />
|
||||||
|
<Rule Id="S2291" Action="Warning" />
|
||||||
|
<Rule Id="S2292" Action="Warning" />
|
||||||
|
<Rule Id="S2306" Action="Warning" />
|
||||||
|
<Rule Id="S2328" Action="Warning" />
|
||||||
|
<Rule Id="S2342" Action="Warning" />
|
||||||
|
<Rule Id="S2344" Action="Warning" />
|
||||||
|
<Rule Id="S2345" Action="Warning" />
|
||||||
|
<Rule Id="S2346" Action="Warning" />
|
||||||
|
<Rule Id="S2365" Action="Warning" />
|
||||||
|
<Rule Id="S2368" Action="Warning" />
|
||||||
|
<Rule Id="S2372" Action="Warning" />
|
||||||
|
<Rule Id="S2376" Action="Warning" />
|
||||||
|
<Rule Id="S2386" Action="Warning" />
|
||||||
|
<Rule Id="S2436" Action="Warning" />
|
||||||
|
<Rule Id="S2437" Action="Warning" />
|
||||||
|
<Rule Id="S2681" Action="Warning" />
|
||||||
|
<Rule Id="S2688" Action="Warning" />
|
||||||
|
<Rule Id="S2692" Action="Warning" />
|
||||||
|
<Rule Id="S2696" Action="Warning" />
|
||||||
|
<Rule Id="S2743" Action="Warning" />
|
||||||
|
<Rule Id="S2757" Action="Warning" />
|
||||||
|
<Rule Id="S2761" Action="Warning" />
|
||||||
|
<Rule Id="S2930" Action="Warning" />
|
||||||
|
<Rule Id="S2933" Action="Warning" />
|
||||||
|
<Rule Id="S2934" Action="Warning" />
|
||||||
|
<Rule Id="S2953" Action="Warning" />
|
||||||
|
<Rule Id="S2995" Action="Warning" />
|
||||||
|
<Rule Id="S2996" Action="Warning" />
|
||||||
|
<Rule Id="S2997" Action="Warning" />
|
||||||
|
<Rule Id="S3005" Action="Warning" />
|
||||||
|
<Rule Id="S3010" Action="Warning" />
|
||||||
|
<Rule Id="S3169" Action="Warning" />
|
||||||
|
<Rule Id="S3172" Action="Warning" />
|
||||||
|
<Rule Id="S3217" Action="Warning" />
|
||||||
|
<Rule Id="S3218" Action="Warning" />
|
||||||
|
<Rule Id="S3220" Action="Warning" />
|
||||||
|
<Rule Id="S3236" Action="Warning" />
|
||||||
|
<Rule Id="S3237" Action="Warning" />
|
||||||
|
<Rule Id="S3244" Action="Warning" />
|
||||||
|
<Rule Id="S3246" Action="Warning" />
|
||||||
|
<Rule Id="S3247" Action="Warning" />
|
||||||
|
<Rule Id="S3249" Action="Warning" />
|
||||||
|
<Rule Id="S3251" Action="Warning" />
|
||||||
|
<Rule Id="S3256" Action="Warning" />
|
||||||
|
<Rule Id="S3262" Action="Warning" />
|
||||||
|
<Rule Id="S3263" Action="Warning" />
|
||||||
|
<Rule Id="S3264" Action="Warning" />
|
||||||
|
<Rule Id="S3265" Action="Warning" />
|
||||||
|
<Rule Id="S3346" Action="Warning" />
|
||||||
|
<Rule Id="S3376" Action="Warning" />
|
||||||
|
<Rule Id="S3397" Action="Warning" />
|
||||||
|
<Rule Id="S3415" Action="Warning" />
|
||||||
|
<Rule Id="S3427" Action="Warning" />
|
||||||
|
<Rule Id="S3442" Action="Warning" />
|
||||||
|
<Rule Id="S3443" Action="Warning" />
|
||||||
|
<Rule Id="S3444" Action="Warning" />
|
||||||
|
<Rule Id="S3445" Action="Warning" />
|
||||||
|
<Rule Id="S3447" Action="Warning" />
|
||||||
|
<Rule Id="S3449" Action="Warning" />
|
||||||
|
<Rule Id="S3450" Action="Warning" />
|
||||||
|
<Rule Id="S3451" Action="Warning" />
|
||||||
|
<Rule Id="S3453" Action="Warning" />
|
||||||
|
<Rule Id="S3456" Action="Warning" />
|
||||||
|
<Rule Id="S3458" Action="Warning" />
|
||||||
|
<Rule Id="S3466" Action="Warning" />
|
||||||
|
<Rule Id="S3597" Action="Warning" />
|
||||||
|
<Rule Id="S3598" Action="Warning" />
|
||||||
|
<Rule Id="S3600" Action="Warning" />
|
||||||
|
<Rule Id="S3603" Action="Warning" />
|
||||||
|
<Rule Id="S3604" Action="Warning" />
|
||||||
|
<Rule Id="S3610" Action="Warning" />
|
||||||
|
<Rule Id="S3626" Action="Warning" />
|
||||||
|
<Rule Id="S3655" Action="Warning" />
|
||||||
|
<Rule Id="S3693" Action="Warning" />
|
||||||
|
<Rule Id="S3869" Action="Warning" />
|
||||||
|
<Rule Id="S3871" Action="Warning" />
|
||||||
|
<Rule Id="S3875" Action="Warning" />
|
||||||
|
<Rule Id="S3877" Action="Warning" />
|
||||||
|
<Rule Id="S3881" Action="Warning" />
|
||||||
|
<Rule Id="S3884" Action="Warning" />
|
||||||
|
<Rule Id="S3885" Action="Warning" />
|
||||||
|
<Rule Id="S3887" Action="Warning" />
|
||||||
|
<Rule Id="S3889" Action="Warning" />
|
||||||
|
<Rule Id="S3897" Action="Warning" />
|
||||||
|
<Rule Id="S3903" Action="Warning" />
|
||||||
|
<Rule Id="S3904" Action="Warning" />
|
||||||
|
<Rule Id="S3925" Action="Warning" />
|
||||||
|
<Rule Id="S3926" Action="Warning" />
|
||||||
|
<Rule Id="S3927" Action="Warning" />
|
||||||
|
<Rule Id="S3928" Action="Warning" />
|
||||||
|
<Rule Id="S3966" Action="Warning" />
|
||||||
|
<Rule Id="S3971" Action="Warning" />
|
||||||
|
<Rule Id="S3972" Action="Warning" />
|
||||||
|
<Rule Id="S3981" Action="Warning" />
|
||||||
|
<Rule Id="S3984" Action="Warning" />
|
||||||
|
<Rule Id="S3998" Action="Warning" />
|
||||||
|
<Rule Id="S4015" Action="Warning" />
|
||||||
|
<Rule Id="S4016" Action="Warning" />
|
||||||
|
<Rule Id="S4019" Action="Warning" />
|
||||||
|
<Rule Id="S4035" Action="Warning" />
|
||||||
|
<Rule Id="S4144" Action="Warning" />
|
||||||
|
<Rule Id="S4158" Action="Warning" />
|
||||||
|
<Rule Id="S907" Action="Warning" />
|
||||||
|
<Rule Id="S927" Action="Warning" />
|
||||||
|
<Rule Id="S4524" Action="None" />
|
||||||
|
<Rule Id="S2228" Action="None" />
|
||||||
|
<Rule Id="S881" Action="None" />
|
||||||
|
<Rule Id="S4564" Action="None" />
|
||||||
|
<Rule Id="S4212" Action="None" />
|
||||||
|
<Rule Id="S2245" Action="None" />
|
||||||
|
<Rule Id="S131" Action="None" />
|
||||||
|
<Rule Id="S3330" Action="None" />
|
||||||
|
<Rule Id="S2255" Action="None" />
|
||||||
|
<Rule Id="S4432" Action="None" />
|
||||||
|
<Rule Id="S109" Action="None" />
|
||||||
|
<Rule Id="S2070" Action="None" />
|
||||||
|
<Rule Id="S4462" Action="None" />
|
||||||
|
<Rule Id="S1192" Action="None" />
|
||||||
|
<Rule Id="S2302" Action="None" />
|
||||||
|
<Rule Id="S1694" Action="None" />
|
||||||
|
<Rule Id="S4040" Action="None" />
|
||||||
|
<Rule Id="S4142" Action="None" />
|
||||||
|
<Rule Id="S2092" Action="None" />
|
||||||
|
<Rule Id="S3900" Action="None" />
|
||||||
|
<Rule Id="S1821" Action="None" />
|
||||||
|
<Rule Id="S3235" Action="None" />
|
||||||
|
<Rule Id="S3366" Action="None" />
|
||||||
|
<Rule Id="S1151" Action="None" />
|
||||||
|
<Rule Id="S4041" Action="None" />
|
||||||
|
<Rule Id="S4261" Action="None" />
|
||||||
|
<Rule Id="S1147" Action="None" />
|
||||||
|
<Rule Id="S3532" Action="None" />
|
||||||
|
<Rule Id="S3353" Action="None" />
|
||||||
|
<Rule Id="S126" Action="None" />
|
||||||
|
<Rule Id="S138" Action="None" />
|
||||||
|
<Rule Id="S1659" Action="None" />
|
||||||
|
<Rule Id="S2197" Action="None" />
|
||||||
|
<Rule Id="S100" Action="None" />
|
||||||
|
<Rule Id="S103" Action="None" />
|
||||||
|
<Rule Id="S104" Action="None" />
|
||||||
|
<Rule Id="S105" Action="None" />
|
||||||
|
<Rule Id="S1067" Action="None" />
|
||||||
|
<Rule Id="S1109" Action="None" />
|
||||||
|
<Rule Id="S113" Action="None" />
|
||||||
|
<Rule Id="S1145" Action="None" />
|
||||||
|
<Rule Id="S1200" Action="None" />
|
||||||
|
<Rule Id="S121" Action="None" />
|
||||||
|
<Rule Id="S122" Action="None" />
|
||||||
|
<Rule Id="S1226" Action="None" />
|
||||||
|
<Rule Id="S1227" Action="None" />
|
||||||
|
<Rule Id="S1244" Action="None" />
|
||||||
|
<Rule Id="S127" Action="None" />
|
||||||
|
<Rule Id="S1301" Action="None" />
|
||||||
|
<Rule Id="S1309" Action="None" />
|
||||||
|
<Rule Id="S1313" Action="None" />
|
||||||
|
<Rule Id="S134" Action="None" />
|
||||||
|
<Rule Id="S1449" Action="None" />
|
||||||
|
<Rule Id="S1451" Action="None" />
|
||||||
|
<Rule Id="S1541" Action="None" />
|
||||||
|
<Rule Id="S1696" Action="None" />
|
||||||
|
<Rule Id="S1697" Action="None" />
|
||||||
|
<Rule Id="S1698" Action="None" />
|
||||||
|
<Rule Id="S1858" Action="None" />
|
||||||
|
<Rule Id="S1994" Action="None" />
|
||||||
|
<Rule Id="S2156" Action="None" />
|
||||||
|
<Rule Id="S2221" Action="None" />
|
||||||
|
<Rule Id="S2325" Action="None" />
|
||||||
|
<Rule Id="S2330" Action="None" />
|
||||||
|
<Rule Id="S2333" Action="None" />
|
||||||
|
<Rule Id="S2339" Action="None" />
|
||||||
|
<Rule Id="S2357" Action="None" />
|
||||||
|
<Rule Id="S2360" Action="None" />
|
||||||
|
<Rule Id="S2387" Action="None" />
|
||||||
|
<Rule Id="S2551" Action="None" />
|
||||||
|
<Rule Id="S2674" Action="None" />
|
||||||
|
<Rule Id="S2699" Action="None" />
|
||||||
|
<Rule Id="S2701" Action="None" />
|
||||||
|
<Rule Id="S2760" Action="None" />
|
||||||
|
<Rule Id="S2931" Action="None" />
|
||||||
|
<Rule Id="S2952" Action="None" />
|
||||||
|
<Rule Id="S2955" Action="None" />
|
||||||
|
<Rule Id="S3052" Action="None" />
|
||||||
|
<Rule Id="S3215" Action="None" />
|
||||||
|
<Rule Id="S3216" Action="None" />
|
||||||
|
<Rule Id="S3234" Action="None" />
|
||||||
|
<Rule Id="S3240" Action="None" />
|
||||||
|
<Rule Id="S3242" Action="None" />
|
||||||
|
<Rule Id="S3253" Action="None" />
|
||||||
|
<Rule Id="S3254" Action="None" />
|
||||||
|
<Rule Id="S3257" Action="None" />
|
||||||
|
<Rule Id="S3431" Action="None" />
|
||||||
|
<Rule Id="S3441" Action="None" />
|
||||||
|
<Rule Id="S3717" Action="None" />
|
||||||
|
<Rule Id="S3872" Action="None" />
|
||||||
|
<Rule Id="S3874" Action="None" />
|
||||||
|
<Rule Id="S3876" Action="None" />
|
||||||
|
<Rule Id="S3880" Action="None" />
|
||||||
|
<Rule Id="S3898" Action="None" />
|
||||||
|
<Rule Id="S3902" Action="None" />
|
||||||
|
<Rule Id="S3906" Action="None" />
|
||||||
|
<Rule Id="S3908" Action="None" />
|
||||||
|
<Rule Id="S3909" Action="None" />
|
||||||
|
<Rule Id="S3956" Action="None" />
|
||||||
|
<Rule Id="S3962" Action="None" />
|
||||||
|
<Rule Id="S3963" Action="None" />
|
||||||
|
<Rule Id="S3967" Action="None" />
|
||||||
|
<Rule Id="S3990" Action="None" />
|
||||||
|
<Rule Id="S3992" Action="None" />
|
||||||
|
<Rule Id="S3993" Action="None" />
|
||||||
|
<Rule Id="S3994" Action="None" />
|
||||||
|
<Rule Id="S3995" Action="None" />
|
||||||
|
<Rule Id="S3996" Action="None" />
|
||||||
|
<Rule Id="S3997" Action="None" />
|
||||||
|
<Rule Id="S4000" Action="None" />
|
||||||
|
<Rule Id="S4002" Action="None" />
|
||||||
|
<Rule Id="S4004" Action="None" />
|
||||||
|
<Rule Id="S4005" Action="None" />
|
||||||
|
<Rule Id="S4017" Action="None" />
|
||||||
|
<Rule Id="S4018" Action="None" />
|
||||||
|
<Rule Id="S4022" Action="None" />
|
||||||
|
<Rule Id="S4023" Action="None" />
|
||||||
|
<Rule Id="S4025" Action="None" />
|
||||||
|
<Rule Id="S4026" Action="None" />
|
||||||
|
<Rule Id="S4027" Action="None" />
|
||||||
|
<Rule Id="S4039" Action="None" />
|
||||||
|
<Rule Id="S4047" Action="None" />
|
||||||
|
<Rule Id="S4049" Action="None" />
|
||||||
|
<Rule Id="S4050" Action="None" />
|
||||||
|
<Rule Id="S4052" Action="None" />
|
||||||
|
<Rule Id="S4055" Action="None" />
|
||||||
|
<Rule Id="S4056" Action="None" />
|
||||||
|
<Rule Id="S4057" Action="None" />
|
||||||
|
<Rule Id="S4058" Action="None" />
|
||||||
|
<Rule Id="S4059" Action="None" />
|
||||||
|
<Rule Id="S4060" Action="None" />
|
||||||
|
<Rule Id="S4069" Action="None" />
|
||||||
|
<Rule Id="S4070" Action="None" />
|
||||||
|
<Rule Id="S4225" Action="None" />
|
||||||
|
<Rule Id="S4226" Action="None" />
|
||||||
|
</Rules>
|
||||||
|
</RuleSet>
|
@@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RuleSet xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="Rules for SonarQube" Description="This rule set was automatically generated from SonarQube" ToolsVersion="14.0">
|
||||||
|
<Rules AnalyzerId="SonarAnalyzer.VisualBasic" RuleNamespace="SonarAnalyzer.VisualBasic">
|
||||||
|
<Rule Id="S1751" Action="Warning" />
|
||||||
|
<Rule Id="S1871" Action="Warning" />
|
||||||
|
<Rule Id="S1656" Action="Warning" />
|
||||||
|
<Rule Id="S1862" Action="Warning" />
|
||||||
|
<Rule Id="S1764" Action="Warning" />
|
||||||
|
<Rule Id="S2178" Action="Warning" />
|
||||||
|
<Rule Id="S101" Action="Warning" />
|
||||||
|
<Rule Id="S1075" Action="Warning" />
|
||||||
|
<Rule Id="S112" Action="Warning" />
|
||||||
|
<Rule Id="S114" Action="Warning" />
|
||||||
|
<Rule Id="S117" Action="Warning" />
|
||||||
|
<Rule Id="S1197" Action="Warning" />
|
||||||
|
<Rule Id="S1542" Action="Warning" />
|
||||||
|
<Rule Id="S1643" Action="Warning" />
|
||||||
|
<Rule Id="S1645" Action="Warning" />
|
||||||
|
<Rule Id="S1654" Action="Warning" />
|
||||||
|
<Rule Id="S2304" Action="Warning" />
|
||||||
|
<Rule Id="S2340" Action="Warning" />
|
||||||
|
<Rule Id="S2342" Action="Warning" />
|
||||||
|
<Rule Id="S2344" Action="Warning" />
|
||||||
|
<Rule Id="S2345" Action="Warning" />
|
||||||
|
<Rule Id="S2346" Action="Warning" />
|
||||||
|
<Rule Id="S2347" Action="Warning" />
|
||||||
|
<Rule Id="S2349" Action="Warning" />
|
||||||
|
<Rule Id="S2352" Action="Warning" />
|
||||||
|
<Rule Id="S2355" Action="Warning" />
|
||||||
|
<Rule Id="S2358" Action="Warning" />
|
||||||
|
<Rule Id="S2359" Action="Warning" />
|
||||||
|
<Rule Id="S2365" Action="Warning" />
|
||||||
|
<Rule Id="S2368" Action="Warning" />
|
||||||
|
<Rule Id="S2372" Action="Warning" />
|
||||||
|
<Rule Id="S2375" Action="Warning" />
|
||||||
|
<Rule Id="S2376" Action="Warning" />
|
||||||
|
<Rule Id="S2951" Action="Warning" />
|
||||||
|
<Rule Id="S3385" Action="Warning" />
|
||||||
|
<Rule Id="S3981" Action="Warning" />
|
||||||
|
<Rule Id="S4144" Action="Warning" />
|
||||||
|
<Rule Id="S4142" Action="None" />
|
||||||
|
<Rule Id="S1659" Action="None" />
|
||||||
|
<Rule Id="S131" Action="None" />
|
||||||
|
<Rule Id="S103" Action="None" />
|
||||||
|
<Rule Id="S104" Action="None" />
|
||||||
|
<Rule Id="S105" Action="None" />
|
||||||
|
<Rule Id="S1067" Action="None" />
|
||||||
|
<Rule Id="S1147" Action="None" />
|
||||||
|
<Rule Id="S122" Action="None" />
|
||||||
|
<Rule Id="S1226" Action="None" />
|
||||||
|
<Rule Id="S134" Action="None" />
|
||||||
|
<Rule Id="S139" Action="None" />
|
||||||
|
<Rule Id="S1541" Action="None" />
|
||||||
|
<Rule Id="S2339" Action="None" />
|
||||||
|
<Rule Id="S2343" Action="None" />
|
||||||
|
<Rule Id="S2348" Action="None" />
|
||||||
|
<Rule Id="S2353" Action="None" />
|
||||||
|
<Rule Id="S2354" Action="None" />
|
||||||
|
<Rule Id="S2357" Action="None" />
|
||||||
|
<Rule Id="S2360" Action="None" />
|
||||||
|
<Rule Id="S2362" Action="None" />
|
||||||
|
<Rule Id="S2363" Action="None" />
|
||||||
|
<Rule Id="S2364" Action="None" />
|
||||||
|
<Rule Id="S2366" Action="None" />
|
||||||
|
<Rule Id="S2367" Action="None" />
|
||||||
|
<Rule Id="S2369" Action="None" />
|
||||||
|
<Rule Id="S2370" Action="None" />
|
||||||
|
<Rule Id="S2373" Action="None" />
|
||||||
|
<Rule Id="S2374" Action="None" />
|
||||||
|
<Rule Id="S2429" Action="None" />
|
||||||
|
<Rule Id="S3860" Action="None" />
|
||||||
|
<Rule Id="S3866" Action="None" />
|
||||||
|
</Rules>
|
||||||
|
</RuleSet>
|
695
ModernKeePass10/.sonarqube/conf/cs/SonarLint.xml
Normal file
@@ -0,0 +1,695 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<AnalysisInput>
|
||||||
|
<Settings>
|
||||||
|
<Setting>
|
||||||
|
<Key>sonar.cs.ignoreHeaderComments</Key>
|
||||||
|
<Value>true</Value>
|
||||||
|
</Setting>
|
||||||
|
<Setting>
|
||||||
|
<Key>sonar.cs.file.suffixes</Key>
|
||||||
|
<Value>.cs</Value>
|
||||||
|
</Setting>
|
||||||
|
</Settings>
|
||||||
|
<Rules>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2589</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3433</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4061</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1121</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1854</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4457</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4456</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2278</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4211</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3923</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4426</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2486</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4433</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2758</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1751</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1871</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4586</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4581</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2737</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3400</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3649</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1144</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1264</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2201</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1118</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1006</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4214</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4210</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3241</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4428</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1048</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2183</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3168</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4220</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3261</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4260</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4159</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4277</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2583</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3440</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3776</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>threshold</Key>
|
||||||
|
<Value>15</Value>
|
||||||
|
</Parameter>
|
||||||
|
<Parameter>
|
||||||
|
<Key>propertyThreshold</Key>
|
||||||
|
<Value>3</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2326</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1116</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3358</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4200</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1172</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1862</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2275</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3457</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3459</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3464</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3343</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S818</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1656</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2184</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1764</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2971</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3060</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S101</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1066</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S107</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>max</Key>
|
||||||
|
<Value>7</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1075</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S108</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S110</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>max</Key>
|
||||||
|
<Value>5</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1104</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1110</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1117</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S112</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1123</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1125</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1134</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1135</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1155</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1163</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1168</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1185</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1186</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1206</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1210</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1215</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S125</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1450</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1479</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>maximum</Key>
|
||||||
|
<Value>30</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1481</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1607</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1643</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1699</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1848</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1905</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1939</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1940</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1944</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2068</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>credentialWords</Key>
|
||||||
|
<Value>password, passwd, pwd</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2114</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2123</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2178</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2187</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2190</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2219</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2223</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2225</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2234</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2259</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2290</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2291</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2292</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2306</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2328</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2342</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>format</Key>
|
||||||
|
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
|
||||||
|
</Parameter>
|
||||||
|
<Parameter>
|
||||||
|
<Key>flagsAttributeFormat</Key>
|
||||||
|
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?s$</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2344</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2345</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2346</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2365</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2368</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2372</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2376</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2386</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2436</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>max</Key>
|
||||||
|
<Value>2</Value>
|
||||||
|
</Parameter>
|
||||||
|
<Parameter>
|
||||||
|
<Key>maxMethod</Key>
|
||||||
|
<Value>3</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2437</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2681</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2688</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2692</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2696</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2743</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2757</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2761</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2930</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2933</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2934</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2953</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2995</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2996</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2997</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3005</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3010</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3169</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3172</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3217</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3218</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3220</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3236</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3237</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3244</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3246</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3247</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3249</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3251</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3256</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3262</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3263</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3264</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3265</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3346</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3376</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3397</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3415</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3427</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3442</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3443</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3444</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3445</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3447</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3449</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3450</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3451</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3453</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3456</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3458</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3466</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3597</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3598</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3600</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3603</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3604</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3610</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3626</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3655</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3693</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3869</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3871</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3875</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3877</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3881</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3884</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3885</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3887</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3889</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3897</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3903</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3904</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3925</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3926</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3927</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3928</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3966</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3971</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3972</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3981</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3984</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3998</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4015</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4016</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4019</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4035</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4144</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4158</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S907</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S927</Key>
|
||||||
|
</Rule>
|
||||||
|
</Rules>
|
||||||
|
<Files>
|
||||||
|
</Files>
|
||||||
|
</AnalysisInput>
|
186
ModernKeePass10/.sonarqube/conf/vbnet/SonarLint.xml
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<AnalysisInput>
|
||||||
|
<Settings>
|
||||||
|
<Setting>
|
||||||
|
<Key>sonar.vbnet.ignoreHeaderComments</Key>
|
||||||
|
<Value>true</Value>
|
||||||
|
</Setting>
|
||||||
|
<Setting>
|
||||||
|
<Key>sonar.vbnet.file.suffixes</Key>
|
||||||
|
<Value>.vb</Value>
|
||||||
|
</Setting>
|
||||||
|
</Settings>
|
||||||
|
<Rules>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1751</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1871</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1656</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1862</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1764</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2178</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S101</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>format</Key>
|
||||||
|
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1075</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S112</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S114</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>format</Key>
|
||||||
|
<Value>^I([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S117</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>format</Key>
|
||||||
|
<Value>^[a-z][a-z0-9]*([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1197</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1542</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>format</Key>
|
||||||
|
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1643</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1645</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S1654</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>format</Key>
|
||||||
|
<Value>^[a-z][a-z0-9]*([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2304</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>format</Key>
|
||||||
|
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?(\.([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?)*$</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2340</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2342</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>format</Key>
|
||||||
|
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
|
||||||
|
</Parameter>
|
||||||
|
<Parameter>
|
||||||
|
<Key>flagsAttributeFormat</Key>
|
||||||
|
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?s$</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2344</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2345</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2346</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2347</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>format</Key>
|
||||||
|
<Value>^(([a-z][a-z0-9]*)?([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?_)?([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2349</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2352</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2355</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2358</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2359</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2365</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2368</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2372</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2375</Key>
|
||||||
|
<Parameters>
|
||||||
|
<Parameter>
|
||||||
|
<Key>minimumSeriesLength</Key>
|
||||||
|
<Value>6</Value>
|
||||||
|
</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2376</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S2951</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3385</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S3981</Key>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<Key>S4144</Key>
|
||||||
|
</Rule>
|
||||||
|
</Rules>
|
||||||
|
<Files>
|
||||||
|
</Files>
|
||||||
|
</AnalysisInput>
|
0
ModernKeePass10/.sonarqube/out/.sonar/.sonar_lock
Normal file
7
ModernKeePass10/.sonarqube/out/.sonar/report-task.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
organization=geogeob
|
||||||
|
projectKey=ModernKeePass
|
||||||
|
serverUrl=https://sonarcloud.io
|
||||||
|
serverVersion=7.2.0.12953
|
||||||
|
dashboardUrl=https://sonarcloud.io/dashboard/index/ModernKeePass
|
||||||
|
ceTaskId=AWQER9hfTzX59Iu7A6N0
|
||||||
|
ceTaskUrl=https://sonarcloud.io/api/ce/task?id=AWQER9hfTzX59Iu7A6N0
|
BIN
ModernKeePass10/.sonarqube/out/0/FilesToAnalyze.txt
Normal file
18
ModernKeePass10/.sonarqube/out/0/ProjectInfo.xml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ProjectInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.sonarsource.com/msbuild/integration/2015/1">
|
||||||
|
<ProjectName>ModernKeePass.App</ProjectName>
|
||||||
|
<ProjectLanguage>C#</ProjectLanguage>
|
||||||
|
<ProjectType>Product</ProjectType>
|
||||||
|
<ProjectGuid>a0cfc681-769b-405a-8482-0cdee595a91f</ProjectGuid>
|
||||||
|
<FullPath>C:\Sources\Other\ModernKeePass\ModernKeePass\ModernKeePass.App.csproj</FullPath>
|
||||||
|
<IsExcluded>false</IsExcluded>
|
||||||
|
<AnalysisResults>
|
||||||
|
<AnalysisResult Id="FilesToAnalyze" Location="C:\Sources\Other\ModernKeePass\ModernKeePass\.sonarqube\out\0\FilesToAnalyze.txt" />
|
||||||
|
</AnalysisResults>
|
||||||
|
<AnalysisSettings>
|
||||||
|
<Property Name="sonar.cs.roslyn.reportFilePath">C:\Sources\Other\ModernKeePass\ModernKeePass\bin\Debug\ModernKeePass.exe.RoslynCA.json</Property>
|
||||||
|
<Property Name="sonar.cs.analyzer.projectOutPath">C:\Sources\Other\ModernKeePass\ModernKeePass\.sonarqube\out\0</Property>
|
||||||
|
</AnalysisSettings>
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>AnyCPU</Platform>
|
||||||
|
</ProjectInfo>
|
85
ModernKeePass10/.sonarqube/out/0/output-cs/encoding.pb
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
P
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Actions\ClipboardAction.csutf-8T
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Actions\NavigateToUrlAction.csutf-8Q
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Actions\SetupFocusAction.csutf-8A
|
||||||
|
8C:\Sources\Other\ModernKeePass\ModernKeePass\App.xaml.csutf-8X
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\IntToSymbolConverter.csutf-8[
|
||||||
|
RC:\Sources\Other\ModernKeePass\ModernKeePass\Exceptions\DatabaseOpenedException.csutf-8S
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\ILicenseService.csutf-8[
|
||||||
|
RC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IProxyInvocationHandler.csutf-8R
|
||||||
|
IC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IRecentService.csutf-8O
|
||||||
|
FC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IRecentItem.csutf-8T
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IResourceService.csutf-8V
|
||||||
|
MC:\Sources\Other\ModernKeePass\ModernKeePass\Services\SingletonServiceBase.csutf-8i
|
||||||
|
`C:\Sources\Other\ModernKeePass\ModernKeePass\TemplateSelectors\SelectableDataTemplateSelector.csutf-8X
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\SettingsSaveVm.csutf-8]
|
||||||
|
TC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\DonatePage.xaml.csutf-8Q
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Services\DatabaseService.csutf-8T
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\ISettingsService.csutf-8S
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Common\MessageDialogHelper.csutf-8P
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Common\NavigationHelper.csutf-8Y
|
||||||
|
PC:\Sources\Other\ModernKeePass\ModernKeePass\Common\NotifyPropertyChangedBase.csutf-8T
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Common\ObservableDictionary.csutf-8L
|
||||||
|
CC:\Sources\Other\ModernKeePass\ModernKeePass\Common\RelayCommand.csutf-8Q
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Common\SuspensionManager.csutf-8P
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Services\LicenseService.csutf-8O
|
||||||
|
FC:\Sources\Other\ModernKeePass\ModernKeePass\Services\RecentService.csutf-8R
|
||||||
|
IC:\Sources\Other\ModernKeePass\ModernKeePass\Services\ResourcesService.csutf-8Q
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Services\SettingsService.csutf-8W
|
||||||
|
NC:\Sources\Other\ModernKeePass\ModernKeePass\Common\ToastNotificationHelper.csutf-8i
|
||||||
|
`C:\Sources\Other\ModernKeePass\ModernKeePass\Converters\DiscreteIntToSolidColorBrushConverter.csutf-8d
|
||||||
|
[C:\Sources\Other\ModernKeePass\ModernKeePass\Converters\EmptyStringToVisibilityConverter.csutf-8Z
|
||||||
|
QC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\NullToBooleanConverter.csutf-8Q
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Exceptions\SaveException.csutf-8\
|
||||||
|
SC:\Sources\Other\ModernKeePass\ModernKeePass\Extensions\DispatcherTaskExtensions.csutf-8T
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IDatabaseService.csutf-8X
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IHasSelectableObject.csutf-8T
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\ISelectableModel.csutf-8\
|
||||||
|
SC:\Sources\Other\ModernKeePass\ModernKeePass\Views\BasePages\LayoutAwarePageBase.csutf-8k
|
||||||
|
bC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsDatabasePage.xaml.csutf-8n
|
||||||
|
eC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsNewDatabasePage.xaml.csutf-8g
|
||||||
|
^C:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsSavePage.xaml.csutf-8k
|
||||||
|
bC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsSecurityPage.xaml.csutf-8j
|
||||||
|
aC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsWelcomePage.xaml.csutf-8h
|
||||||
|
_C:\Sources\Other\ModernKeePass\ModernKeePass\TemplateSelectors\FirstItemDataTemplateSelector.csutf-8U
|
||||||
|
LC:\Sources\Other\ModernKeePass\ModernKeePass\Controls\ListViewWithDisable.csutf-8f
|
||||||
|
]C:\Sources\Other\ModernKeePass\ModernKeePass\Views\UserControls\BreadCrumbUserControl.xaml.csutf-8h
|
||||||
|
_C:\Sources\Other\ModernKeePass\ModernKeePass\Views\UserControls\CompositeKeyUserControl.xaml.csutf-8S
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Controls\TextBoxWithButton.csutf-8`
|
||||||
|
WC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\BooleanToVisibilityConverter.csutf-8Y
|
||||||
|
PC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\ColorToBrushConverter.csutf-8d
|
||||||
|
[C:\Sources\Other\ModernKeePass\ModernKeePass\Converters\DoubleToSolidColorBrushConverter.csutf-8g
|
||||||
|
^C:\Sources\Other\ModernKeePass\ModernKeePass\Converters\InverseBooleanToVisibilityConverter.csutf-8Z
|
||||||
|
QC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\PluralizationConverter.csutf-8c
|
||||||
|
ZC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\ProgressBarLegalValuesConverter.csutf-8X
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\TextToWidthConverter.csutf-8Q
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Events\PasswordEventArgs.csutf-8N
|
||||||
|
EC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IIsEnabled.csutf-8M
|
||||||
|
DC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IPwEntity.csutf-8L
|
||||||
|
CC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPage.xaml.csutf-8\
|
||||||
|
SC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\AboutPage.xaml.csutf-8b
|
||||||
|
YC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\NewDatabasePage.xaml.csutf-8P
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPage.xaml.csutf-8^
|
||||||
|
UC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\WelcomePage.xaml.csutf-8K
|
||||||
|
BC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\AboutVm.csutf-8R
|
||||||
|
IC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\CompositeKeyVm.csutf-8X
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\ListMenuItemVm.csutf-8X
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\MainMenuItemVm.csutf-8V
|
||||||
|
MC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\RecentItemVm.csutf-8S
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Views\EntryDetailPage.xaml.csutf-8S
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Views\GroupDetailPage.xaml.csutf-8c
|
||||||
|
ZC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\OpenDatabasePage.xaml.csutf-8f
|
||||||
|
]C:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\RecentDatabasesPage.xaml.csutf-8c
|
||||||
|
ZC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\SaveDatabasePage.xaml.csutf-8P
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Properties\AssemblyInfo.csutf-8K
|
||||||
|
BC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\EntryVm.csutf-8K
|
||||||
|
BC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\GroupVm.csutf-8W
|
||||||
|
NC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\SettingsNewVm.csutf-8N
|
||||||
|
EC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\SettingsVm.csutf-8J
|
||||||
|
AC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\MainVm.csutf-8I
|
||||||
|
@C:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\NewVm.csutf-8J
|
||||||
|
AC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\OpenVm.csutf-8L
|
||||||
|
CC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\RecentVm.csutf-8J
|
||||||
|
AC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\SaveVm.csutf-8\
|
||||||
|
SC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\SettingsDatabaseVm.csutf-8i
|
||||||
|
`C:\Sources\Other\ModernKeePass\ModernKeePass\Views\UserControls\HamburgerMenuUserControl.xaml.csutf-8
|
139
ModernKeePass10/.sonarqube/out/0/output-cs/file-metadata.pb
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
I
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Actions\ClipboardAction.csM
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Actions\NavigateToUrlAction.csJ
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Actions\SetupFocusAction.cs:
|
||||||
|
8C:\Sources\Other\ModernKeePass\ModernKeePass\App.xaml.csQ
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\IntToSymbolConverter.csT
|
||||||
|
RC:\Sources\Other\ModernKeePass\ModernKeePass\Exceptions\DatabaseOpenedException.csL
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\ILicenseService.csT
|
||||||
|
RC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IProxyInvocationHandler.csK
|
||||||
|
IC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IRecentService.csH
|
||||||
|
FC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IRecentItem.csM
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IResourceService.csO
|
||||||
|
MC:\Sources\Other\ModernKeePass\ModernKeePass\Services\SingletonServiceBase.csb
|
||||||
|
`C:\Sources\Other\ModernKeePass\ModernKeePass\TemplateSelectors\SelectableDataTemplateSelector.csQ
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\SettingsSaveVm.csV
|
||||||
|
TC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\DonatePage.xaml.csJ
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Services\DatabaseService.csM
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\ISettingsService.csL
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Common\MessageDialogHelper.csI
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Common\NavigationHelper.csR
|
||||||
|
PC:\Sources\Other\ModernKeePass\ModernKeePass\Common\NotifyPropertyChangedBase.csM
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Common\ObservableDictionary.csE
|
||||||
|
CC:\Sources\Other\ModernKeePass\ModernKeePass\Common\RelayCommand.csJ
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Common\SuspensionManager.csI
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Services\LicenseService.csH
|
||||||
|
FC:\Sources\Other\ModernKeePass\ModernKeePass\Services\RecentService.csK
|
||||||
|
IC:\Sources\Other\ModernKeePass\ModernKeePass\Services\ResourcesService.csJ
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Services\SettingsService.csP
|
||||||
|
NC:\Sources\Other\ModernKeePass\ModernKeePass\Common\ToastNotificationHelper.csb
|
||||||
|
`C:\Sources\Other\ModernKeePass\ModernKeePass\Converters\DiscreteIntToSolidColorBrushConverter.cs]
|
||||||
|
[C:\Sources\Other\ModernKeePass\ModernKeePass\Converters\EmptyStringToVisibilityConverter.csS
|
||||||
|
QC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\NullToBooleanConverter.csJ
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Exceptions\SaveException.csU
|
||||||
|
SC:\Sources\Other\ModernKeePass\ModernKeePass\Extensions\DispatcherTaskExtensions.csM
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IDatabaseService.csQ
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IHasSelectableObject.csM
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\ISelectableModel.csU
|
||||||
|
SC:\Sources\Other\ModernKeePass\ModernKeePass\Views\BasePages\LayoutAwarePageBase.csd
|
||||||
|
bC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsDatabasePage.xaml.csg
|
||||||
|
eC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsNewDatabasePage.xaml.cs`
|
||||||
|
^C:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsSavePage.xaml.csd
|
||||||
|
bC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsSecurityPage.xaml.csc
|
||||||
|
aC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsWelcomePage.xaml.csa
|
||||||
|
_C:\Sources\Other\ModernKeePass\ModernKeePass\TemplateSelectors\FirstItemDataTemplateSelector.csN
|
||||||
|
LC:\Sources\Other\ModernKeePass\ModernKeePass\Controls\ListViewWithDisable.cs_
|
||||||
|
]C:\Sources\Other\ModernKeePass\ModernKeePass\Views\UserControls\BreadCrumbUserControl.xaml.csa
|
||||||
|
_C:\Sources\Other\ModernKeePass\ModernKeePass\Views\UserControls\CompositeKeyUserControl.xaml.csL
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Controls\TextBoxWithButton.csY
|
||||||
|
WC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\BooleanToVisibilityConverter.csR
|
||||||
|
PC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\ColorToBrushConverter.cs]
|
||||||
|
[C:\Sources\Other\ModernKeePass\ModernKeePass\Converters\DoubleToSolidColorBrushConverter.cs`
|
||||||
|
^C:\Sources\Other\ModernKeePass\ModernKeePass\Converters\InverseBooleanToVisibilityConverter.csS
|
||||||
|
QC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\PluralizationConverter.cs\
|
||||||
|
ZC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\ProgressBarLegalValuesConverter.csQ
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\TextToWidthConverter.csJ
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Events\PasswordEventArgs.csG
|
||||||
|
EC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IIsEnabled.csF
|
||||||
|
DC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IPwEntity.csE
|
||||||
|
CC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPage.xaml.csU
|
||||||
|
SC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\AboutPage.xaml.cs[
|
||||||
|
YC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\NewDatabasePage.xaml.csI
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPage.xaml.csW
|
||||||
|
UC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\WelcomePage.xaml.csD
|
||||||
|
BC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\AboutVm.csK
|
||||||
|
IC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\CompositeKeyVm.csQ
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\ListMenuItemVm.csQ
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\MainMenuItemVm.csO
|
||||||
|
MC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\RecentItemVm.csL
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Views\EntryDetailPage.xaml.csL
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Views\GroupDetailPage.xaml.cs\
|
||||||
|
ZC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\OpenDatabasePage.xaml.cs_
|
||||||
|
]C:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\RecentDatabasesPage.xaml.cs\
|
||||||
|
ZC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\SaveDatabasePage.xaml.csI
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Properties\AssemblyInfo.csD
|
||||||
|
BC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\EntryVm.csD
|
||||||
|
BC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\GroupVm.csP
|
||||||
|
NC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\SettingsNewVm.csG
|
||||||
|
EC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\SettingsVm.csC
|
||||||
|
AC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\MainVm.csB
|
||||||
|
@C:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\NewVm.csC
|
||||||
|
AC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\OpenVm.csE
|
||||||
|
CC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\RecentVm.csC
|
||||||
|
AC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\SaveVm.csU
|
||||||
|
SC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\SettingsDatabaseVm.csb
|
||||||
|
`C:\Sources\Other\ModernKeePass\ModernKeePass\Views\UserControls\HamburgerMenuUserControl.xaml.csE
|
||||||
|
AC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\App.g.i.csC
|
||||||
|
?C:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\App.g.csO
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Styles\Colors.g.i.csM
|
||||||
|
IC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Styles\Colors.g.csk
|
||||||
|
gC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\SettingsPageFrames\SettingsSavePage.g.i.csi
|
||||||
|
eC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\SettingsPageFrames\SettingsSavePage.g.csj
|
||||||
|
fC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\UserControls\BreadCrumbUserControl.g.i.csh
|
||||||
|
dC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\UserControls\BreadCrumbUserControl.g.csl
|
||||||
|
hC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\UserControls\CompositeKeyUserControl.g.i.csj
|
||||||
|
fC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\UserControls\CompositeKeyUserControl.g.csP
|
||||||
|
LC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPage.g.i.csN
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPage.g.cs`
|
||||||
|
\C:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\AboutPage.g.i.cs^
|
||||||
|
ZC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\AboutPage.g.csW
|
||||||
|
SC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\EntryDetailPage.g.i.csU
|
||||||
|
QC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\EntryDetailPage.g.csW
|
||||||
|
SC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\GroupDetailPage.g.i.csU
|
||||||
|
QC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\GroupDetailPage.g.csa
|
||||||
|
]C:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\DonatePage.g.i.cs_
|
||||||
|
[C:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\DonatePage.g.csf
|
||||||
|
bC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\NewDatabasePage.g.i.csd
|
||||||
|
`C:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\NewDatabasePage.g.csg
|
||||||
|
cC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\OpenDatabasePage.g.i.cse
|
||||||
|
aC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\OpenDatabasePage.g.csj
|
||||||
|
fC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\RecentDatabasesPage.g.i.csh
|
||||||
|
dC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\RecentDatabasesPage.g.csg
|
||||||
|
cC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\SaveDatabasePage.g.i.cse
|
||||||
|
aC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\SaveDatabasePage.g.csT
|
||||||
|
PC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\SettingsPage.g.i.csR
|
||||||
|
NC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\SettingsPage.g.csb
|
||||||
|
^C:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\WelcomePage.g.i.cs`
|
||||||
|
\C:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\MainPageFrames\WelcomePage.g.cso
|
||||||
|
kC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\SettingsPageFrames\SettingsDatabasePage.g.i.csm
|
||||||
|
iC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\SettingsPageFrames\SettingsDatabasePage.g.csr
|
||||||
|
nC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\SettingsPageFrames\SettingsNewDatabasePage.g.i.csp
|
||||||
|
lC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\SettingsPageFrames\SettingsNewDatabasePage.g.cso
|
||||||
|
kC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\SettingsPageFrames\SettingsSecurityPage.g.i.csm
|
||||||
|
iC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\SettingsPageFrames\SettingsSecurityPage.g.csn
|
||||||
|
jC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\SettingsPageFrames\SettingsWelcomePage.g.i.csl
|
||||||
|
hC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\SettingsPageFrames\SettingsWelcomePage.g.cs]
|
||||||
|
YC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Styles\HamburgerButtonStyle.g.i.cs[
|
||||||
|
WC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Styles\HamburgerButtonStyle.g.csc
|
||||||
|
_C:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Styles\ListViewLeftIndicatorStyle.g.i.csa
|
||||||
|
]C:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Styles\ListViewLeftIndicatorStyle.g.cs\
|
||||||
|
XC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Styles\NoBorderButtonStyle.g.i.csZ
|
||||||
|
VC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Styles\NoBorderButtonStyle.g.csO
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Styles\Styles.g.i.csM
|
||||||
|
IC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Styles\Styles.g.cs_
|
||||||
|
[C:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Styles\TextBoxWithButtonStyle.g.i.cs]
|
||||||
|
YC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Styles\TextBoxWithButtonStyle.g.csm
|
||||||
|
iC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\UserControls\HamburgerMenuUserControl.g.i.csk
|
||||||
|
gC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\Views\UserControls\HamburgerMenuUserControl.g.csL
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\obj\Debug\XamlTypeInfo.g.csQ
|
||||||
|
MC:\Users\GBE\AppData\Local\Temp\.NETCore,Version=v4.5.1.AssemblyAttributes.cs
|
180
ModernKeePass10/.sonarqube/out/0/output-cs/metrics.pb
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
<EFBFBD>
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Actions\ClipboardAction.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=3;2=0;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
<1A><17>
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Actions\NavigateToUrlAction.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=3;2=0;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
!x<01>
|
||||||
|
<1D>
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Actions\SetupFocusAction.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=2;2=1;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
<1B>
|
||||||
|
<18>
|
||||||
|
8C:\Sources\Other\ModernKeePass\ModernKeePass\App.xaml.cs7 8@HR 0=0;5=0;10=0;20=1;30=0;60=0;90=0Z1=5;2=1;4=2;6=1;8=0;10=0;12=0jH*>?@ABFTZ[^`fluvwz|}<7D><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01>r<>
|
||||||
|
|
||||||
|
!"#()+,-./023456789:;<CDEFGIJKLNORSUX\]_bdehjmnpqrstxy<79><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01>x<10>I !"+-./24579:EFKRX\_bdhmpsx<73><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01>
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\IntToSymbolConverter.cs7 (08;@;H;R 0=0;5=0;10=0;20=0;30=1;60=0;90=0Z1=0;2=1;4=0;6=0;8=0;10=0;12=1j<31>+,08<@JKLMZ[\]^_`abcdefgjklmnopqrstuvwxyz{|}~<><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03>r[
|
||||||
|
|
||||||
|
!"#$%&'()*-./12345679:;=>?ABCDEFGHINOPQRSUVWXYhi<68><03><03><03><03><03>x<02>?
|
||||||
|
!"#$%&'()*-./12345679:;=>?ABCDEFGHINOPQXhi<68><03>
|
||||||
|
RC:\Sources\Other\ModernKeePass\ModernKeePass\Exceptions\DatabaseOpenedException.cs(0R 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=0;2=0;4=0;6=0;8=0;10=0;12=0r <09>
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\ILicenseService.cs(08@R 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=0;2=0;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
<0C>
|
||||||
|
RC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IProxyInvocationHandler.cs(0R 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=0;2=0;4=0;6=0;8=0;10=0;12=0r <09>
|
||||||
|
IC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IRecentService.cs(08@R 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=0;2=0;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
<0F>
|
||||||
|
FC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IRecentItem.cs(08@R 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=0;2=0;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
<0B>
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IResourceService.cs(0R 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=0;2=0;4=0;6=0;8=0;10=0;12=0r<07>
|
||||||
|
MC:\Sources\Other\ModernKeePass\ModernKeePass\Services\SingletonServiceBase.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=1;2=0;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
<0C>
|
||||||
|
<EFBFBD>
|
||||||
|
`C:\Sources\Other\ModernKeePass\ModernKeePass\TemplateSelectors\SelectableDataTemplateSelector.cs (08@HR 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=4;2=1;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
x<02><0F>
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\ViewModels\Items\SettingsSaveVm.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=4;2=0;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
<18>
|
||||||
|
<15>
|
||||||
|
TC:\Sources\Other\ModernKeePass\ModernKeePass\Views\MainPageFrames\DonatePage.xaml.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=1;2=0;4=0;6=0;8=0;10=0;12=0jr
|
||||||
|
|
||||||
|
|
||||||
|
<0F><0C>
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Services\DatabaseService.csQ (082@2H2R 0=0;5=0;10=0;20=0;30=1;60=0;90=0Z1=25;2=5;4=0;6=2;8=0;10=0;12=0j$cdefghky<6B><01><01><01><01><01><01><01><01><01><01><01><01><01>r<>
|
||||||
|
|
||||||
|
!"#$%')*+,-/0123456789:<=>?@BCDEFHIJKLNOPQRTUVWYZ[]^_`ijlmnopqstuvwz{|}~<><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><02><02><02><02><02>x<16><01>"#'+,1468>?DEJKPQTUY_npstuwz{|<><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><02><02>
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\ISettingsService.cs(0R 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=0;2=0;4=0;6=0;8=0;10=0;12=0r<08>
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Common\MessageDialogHelper.cs (08@HR 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=4;2=2;4=0;6=0;8=0;10=0;12=0j9<DJMPSr?
|
||||||
|
|
||||||
|
!"$%&')*+,-./01234678:=>@ABEFHIKNQTVWXYx<03> "$%+-.028:=BENQTV<54>
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Common\NavigationHelper.csD (8>@>H>R 0=0;5=0;10=0;20=0;30=0;60=1;90=0Z1=12;2=8;4=1;6=1;8=0;10=0;12=1j<31> !"#&(*,-./02579:ABCDEFKLMSW`stuvxyz<79><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03>r<>
|
||||||
|
|
||||||
|
;<=>?GHINOTUVXYZ[\^abfghiklpq{|}~<><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03><03>x*<2A><01>?INTUXZ[afhi<69><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><02><03><03><03>
|
||||||
|
PC:\Sources\Other\ModernKeePass\ModernKeePass\Common\NotifyPropertyChangedBase.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=0;2=2;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
x<01>
|
||||||
|
<19>
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Common\ObservableDictionary.cs( (08!@&H!R 0=0;5=0;10=0;20=0;30=1;60=0;90=0Z1=18;2=5;4=1;6=0;8=0;10=0;12=0j
|
||||||
|
r<>
|
||||||
|
!"#$&'()*,-./12345679:;<=>?@ACDEFGHIJKLMOPQRSTUVWXYZ\]^_`abcdfghiklmnpqrsuvwxz{|}<><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01>x <09>. "().35;=>@FGIJLSWX^_`bhmrw|<7C><01><01><01><01><01><01><01><01>
|
||||||
|
CC:\Sources\Other\ModernKeePass\ModernKeePass\Common\RelayCommand.cs (8@HR 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=2;2=3;4=0;6=0;8=0;10=0;12=0j%
|
||||||
|
|
||||||
|
$%&'(1234567=>?@ABHIJKLr* !")*+,-./89:;CDEFMNOPQRSTUVx<03>+,-.:EPR<50>
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Common\SuspensionManager.cs8 (08@HR 0=0;5=0;10=0;20=1;30=0;60=0;90=0Z1=5;2=3;4=3;6=0;8=0;10=0;12=0j~ !"#)*+,-3456789>HIN\]^_`abcdefmqv<71><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01>r<>
|
||||||
|
$%&'./01:;<=?@ABCDEFJKLOPQRSTUVWXYZghiklnoprstwxyz{|}~<><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><02><02><02><02><02><02><02><02><02><02><02>x<15>S&0?BDLOPRSXinoswz|}<7D><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01>
|
||||||
|
GC:\Sources\Other\ModernKeePass\ModernKeePass\Services\LicenseService.cs (08@HR 0=0;5=0;10=1;20=0;30=0;60=0;90=0Z1=5;2=0;4=0;6=1;8=0;10=0;12=0j*+r?
|
||||||
|
|
||||||
|
!"#$%&'(),-./012345678:;<=>@ABCEFGHIJx<03>#$&'(),.012346<=BG<42>
|
||||||
|
FC:\Sources\Other\ModernKeePass\ModernKeePass\Services\RecentService.cs (08@HR 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=4;2=1;4=0;6=0;8=0;10=0;12=0r,
|
||||||
|
|
||||||
|
!#$%&()*+-./012x<06>
|
||||||
|
|
||||||
|
%*/<2F>
|
||||||
|
IC:\Sources\Other\ModernKeePass\ModernKeePass\Services\ResourcesService.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=1;2=0;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
<11>
|
||||||
|
<0E>
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Services\SettingsService.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=1;2=1;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
x<03>
|
||||||
|
<1C>
|
||||||
|
NC:\Sources\Other\ModernKeePass\ModernKeePass\Common\ToastNotificationHelper.cs (08@HR 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=2;2=1;4=0;6=0;8=0;10=0;12=0r0
|
||||||
|
|
||||||
|
!#$%&'(*+,-./123456x<01> %&'(,.3<EFBFBD>
|
||||||
|
`C:\Sources\Other\ModernKeePass\ModernKeePass\Converters\DiscreteIntToSolidColorBrushConverter.cs (08@HR 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=1;2=0;4=1;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
x<01>
|
||||||
|
<18>
|
||||||
|
[C:\Sources\Other\ModernKeePass\ModernKeePass\Converters\EmptyStringToVisibilityConverter.cs 8@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=1;2=1;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
x<02><11>
|
||||||
|
QC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\NullToBooleanConverter.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=2;2=0;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
<12>
|
||||||
|
<0F>
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Exceptions\SaveException.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=2;2=0;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
<0E><0B>
|
||||||
|
SC:\Sources\Other\ModernKeePass\ModernKeePass\Extensions\DispatcherTaskExtensions.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=2;2=0;4=0;6=0;8=0;10=0;12=0jr
|
||||||
|
|
||||||
|
x<03>
|
||||||
|
|
||||||
|
<1E>
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IDatabaseService.cs(08@R 0=0;5=0;10=0;20=1;30=0;60=0;90=0Z1=0;2=0;4=0;6=0;8=0;10=0;12=0jr
|
||||||
|
|
||||||
|
!"#<23>
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IHasSelectableObject.cs(08@R 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=0;2=0;4=0;6=0;8=0;10=0;12=0r<07>
|
||||||
|
KC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\ISelectableModel.cs(08@R 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=0;2=0;4=0;6=0;8=0;10=0;12=0r<07>
|
||||||
|
SC:\Sources\Other\ModernKeePass\ModernKeePass\Views\BasePages\LayoutAwarePageBase.cs" (08#@#H#R 0=0;5=0;10=0;20=0;30=1;60=0;90=0Z1=13;2=4;4=1;6=1;8=0;10=0;12=0j\
|
||||||
|
"#*+,-.456789:;<=>ABFGOWXYZ[\]^ijlmnrstuv|}~<><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01>r<>
|
||||||
|
$%&()/012?@DEHIJKLMNPQRSTU_`abcdepwxyz<79><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01>x<10>1 $%/01DHJPRacy<63><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01><01>
|
||||||
|
bC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsDatabasePage.xaml.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=1;2=0;4=0;6=0;8=0;10=0;12=0jr
|
||||||
|
|
||||||
|
|
||||||
|
<0F><0C>
|
||||||
|
eC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsNewDatabasePage.xaml.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=1;2=0;4=0;6=0;8=0;10=0;12=0jr
|
||||||
|
|
||||||
|
|
||||||
|
<0F><0C>
|
||||||
|
^C:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsSavePage.xaml.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=1;2=0;4=0;6=0;8=0;10=0;12=0jr
|
||||||
|
|
||||||
|
|
||||||
|
<0F><0C>
|
||||||
|
bC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsSecurityPage.xaml.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=2;2=0;4=0;6=0;8=0;10=0;12=0j
|
||||||
|
r
|
||||||
|
<17><14>
|
||||||
|
aC:\Sources\Other\ModernKeePass\ModernKeePass\Views\SettingsPageFrames\SettingsWelcomePage.xaml.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=1;2=0;4=0;6=0;8=0;10=0;12=0jr
|
||||||
|
|
||||||
|
|
||||||
|
<0F><0C>
|
||||||
|
_C:\Sources\Other\ModernKeePass\ModernKeePass\TemplateSelectors\FirstItemDataTemplateSelector.cs (08@HR 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=4;2=1;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
x<01>
|
||||||
|
<0F>
|
||||||
|
LC:\Sources\Other\ModernKeePass\ModernKeePass\Controls\ListViewWithDisable.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=0;2=1;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
x<02><11>
|
||||||
|
]C:\Sources\Other\ModernKeePass\ModernKeePass\Views\UserControls\BreadCrumbUserControl.xaml.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=3;2=0;4=0;6=0;8=0;10=0;12=0jr
|
||||||
|
|
||||||
|
<1D>
|
||||||
|
<1B>
|
||||||
|
_C:\Sources\Other\ModernKeePass\ModernKeePass\Views\UserControls\CompositeKeyUserControl.xaml.cs
|
||||||
|
(08@HR 0=0;5=0;10=0;20=1;30=0;60=0;90=0Z1=8;2=4;4=0;6=1;8=0;10=0;12=0j`ort
|
||||||
|
!"#$%&'()*,-./01234569;<=>@ABCEFGIJKLMNOPQRSTUVWXY[\]^_abcefghijklmpqrsuvwxyz{|~<><01><01><01>x <09>%"#&*./26=GIKLRSUW]_ajkmpqry|~<><01>
|
||||||
|
JC:\Sources\Other\ModernKeePass\ModernKeePass\Controls\TextBoxWithButton.cs (
|
||||||
|
0
|
||||||
|
8@HR 0=0;5=0;10=1;20=0;30=0;60=0;90=0Z1=8;2=1;4=0;6=0;8=0;10=0;12=0r@
|
||||||
|
|
||||||
|
!#$%&'()*+,-/0123456789;<=>?@ABCDEx<01>
|
||||||
|
!%&)-1259=>?A<>
|
||||||
|
WC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\BooleanToVisibilityConverter.cs (08@HR 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=0;2=1;4=1;6=0;8=0;10=0;12=0jr
|
||||||
|
|
||||||
|
x<04><18>
|
||||||
|
PC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\ColorToBrushConverter.cs (08@HR 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=1;2=0;4=1;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
x<03>
|
||||||
|
<17>
|
||||||
|
[C:\Sources\Other\ModernKeePass\ModernKeePass\Converters\DoubleToSolidColorBrushConverter.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=2;2=0;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
x<01><1C>
|
||||||
|
^C:\Sources\Other\ModernKeePass\ModernKeePass\Converters\InverseBooleanToVisibilityConverter.cs (08@HR 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=0;2=1;4=1;6=0;8=0;10=0;12=0jr
|
||||||
|
|
||||||
|
x<04><18>
|
||||||
|
QC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\PluralizationConverter.cs (08@HR 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=1;2=0;4=0;6=1;8=0;10=0;12=0jr
|
||||||
|
|
||||||
|
x<04>
|
||||||
|
<15>
|
||||||
|
ZC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\ProgressBarLegalValuesConverter.cs
|
||||||
|
(08@HR 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=1;2=0;4=0;6=1;8=0;10=0;12=0r
|
||||||
|
x<05> <18>
|
||||||
|
OC:\Sources\Other\ModernKeePass\ModernKeePass\Converters\TextToWidthConverter.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=1;2=1;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
<14>
|
||||||
|
<11>
|
||||||
|
HC:\Sources\Other\ModernKeePass\ModernKeePass\Events\PasswordEventArgs.cs (08@HR 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=3;2=0;4=0;6=0;8=0;10=0;12=0r
|
||||||
|
|
||||||
|
|
||||||
|
<0F><0C>
|
||||||
|
EC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IIsEnabled.cs(08@R 0=1;5=0;10=0;20=0;30=0;60=0;90=0Z1=0;2=0;4=0;6=0;8=0;10=0;12=0r<07>
|
||||||
|
DC:\Sources\Other\ModernKeePass\ModernKeePass\Interfaces\IPwEntity.cs(08 @ R 0=0;5=1;10=0;20=0;30=0;60=0;90=0Z1=0;2=0;4=0;6=0;8=0;10=0;12=0j "#$r
|
||||||
|
|
2912
ModernKeePass10/.sonarqube/out/0/output-cs/symrefs.pb
Normal file
24951
ModernKeePass10/.sonarqube/out/0/output-cs/token-cpd.pb
Normal file
2160
ModernKeePass10/.sonarqube/out/0/output-cs/token-type.pb
Normal file
210
ModernKeePass10/.sonarqube/out/sonar-project.properties
Normal file
@@ -0,0 +1,210 @@
|
|||||||
|
sonar.projectKey=ModernKeePass
|
||||||
|
sonar.working.directory=C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\.sonarqube\\out\\.sonar
|
||||||
|
sonar.projectBaseDir=C:\\Sources\\Other\\ModernKeePass\\ModernKeePass
|
||||||
|
|
||||||
|
A0CFC681-769B-405A-8482-0CDEE595A91F.sonar.projectKey=ModernKeePass:A0CFC681-769B-405A-8482-0CDEE595A91F
|
||||||
|
A0CFC681-769B-405A-8482-0CDEE595A91F.sonar.projectName=ModernKeePass.App
|
||||||
|
A0CFC681-769B-405A-8482-0CDEE595A91F.sonar.projectBaseDir=C:\\Sources\\Other\\ModernKeePass\\ModernKeePass
|
||||||
|
A0CFC681-769B-405A-8482-0CDEE595A91F.sonar.sourceEncoding=utf-8
|
||||||
|
A0CFC681-769B-405A-8482-0CDEE595A91F.sonar.sources=\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Actions\\ClipboardAction.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Actions\\NavigateToUrlAction.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Actions\\SetupFocusAction.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\App.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Converters\\IntToSymbolConverter.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Exceptions\\DatabaseOpenedException.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Interfaces\\ILicenseService.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Interfaces\\IProxyInvocationHandler.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Interfaces\\IRecentService.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Interfaces\\IRecentItem.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Interfaces\\IResourceService.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Services\\SingletonServiceBase.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\TemplateSelectors\\SelectableDataTemplateSelector.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\Items\\SettingsSaveVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\DonatePage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Services\\DatabaseService.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Interfaces\\ISettingsService.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Common\\MessageDialogHelper.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Common\\NavigationHelper.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Common\\NotifyPropertyChangedBase.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Common\\ObservableDictionary.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Common\\RelayCommand.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Common\\SuspensionManager.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Services\\LicenseService.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Services\\RecentService.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Services\\ResourcesService.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Services\\SettingsService.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Common\\ToastNotificationHelper.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Converters\\DiscreteIntToSolidColorBrushConverter.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Converters\\EmptyStringToVisibilityConverter.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Converters\\NullToBooleanConverter.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Exceptions\\SaveException.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Extensions\\DispatcherTaskExtensions.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Interfaces\\IDatabaseService.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Interfaces\\IHasSelectableObject.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Interfaces\\ISelectableModel.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\BasePages\\LayoutAwarePageBase.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\SettingsPageFrames\\SettingsDatabasePage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\SettingsPageFrames\\SettingsNewDatabasePage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\SettingsPageFrames\\SettingsSavePage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\SettingsPageFrames\\SettingsSecurityPage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\SettingsPageFrames\\SettingsWelcomePage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\TemplateSelectors\\FirstItemDataTemplateSelector.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Controls\\ListViewWithDisable.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\UserControls\\BreadCrumbUserControl.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\UserControls\\CompositeKeyUserControl.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Controls\\TextBoxWithButton.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Converters\\BooleanToVisibilityConverter.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Converters\\ColorToBrushConverter.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Converters\\DoubleToSolidColorBrushConverter.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Converters\\InverseBooleanToVisibilityConverter.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Converters\\PluralizationConverter.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Converters\\ProgressBarLegalValuesConverter.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Converters\\TextToWidthConverter.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Events\\PasswordEventArgs.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Interfaces\\IIsEnabled.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Interfaces\\IPwEntity.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\AboutPage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\NewDatabasePage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\SettingsPage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\WelcomePage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\AboutVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\CompositeKeyVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\Items\\ListMenuItemVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\Items\\MainMenuItemVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\Items\\RecentItemVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\EntryDetailPage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\GroupDetailPage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\OpenDatabasePage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\RecentDatabasesPage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\SaveDatabasePage.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Properties\\AssemblyInfo.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\EntryVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\GroupVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\Items\\SettingsNewVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\SettingsVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\MainVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\NewVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\OpenVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\RecentVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\SaveVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\ViewModels\\Items\\SettingsDatabaseVm.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\UserControls\\HamburgerMenuUserControl.xaml.cs",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\description.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\description.Entry.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\description.Filter.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\description.Group.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\description.New.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\description.Open.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\description.Recent.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\description.Semantic.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\description.Settings.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\Entry.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\Filter.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\Group.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\New.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\Open.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\Recent.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\Semantic.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\images\\Screenshot\\Settings.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\keywords.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\privacyPolicy.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\releaseNotes.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\en-us\\baselisting\\websiteUrl.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\description.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\description.Entry.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\description.Filter.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\description.Group.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\description.New.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\description.Open.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\description.Recent.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\description.Semantic.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\description.Settings.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\Entry.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\Filter.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\Group.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\New.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\Open.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\Recent.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\Semantic.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\images\\Screenshot\\Settings.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\keywords.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\privacyPolicy.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\releaseNotes.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\appMetadata\\fr-fr\\baselisting\\websiteUrl.txt",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Logo.scale-100.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Logo.scale-140.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Logo.scale-180.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Logo.scale-80.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\ModernKeePass-SmallLogo.scale-100.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\ModernKeePass-SmallLogo.scale-140.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\ModernKeePass-SmallLogo.scale-180.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\ModernKeePass-SmallLogo.scale-80.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\ModernKeePass-SmallLogo.targetsize-16.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\ModernKeePass-SmallLogo.targetsize-256.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\ModernKeePass-SmallLogo.targetsize-32.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\ModernKeePass-SmallLogo.targetsize-48.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\ModernKeePass-SplashScreen.scale-100.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\ModernKeePass-SplashScreen.scale-140.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\ModernKeePass-SplashScreen.scale-180.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Square310x310Logo.scale-100.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Square310x310Logo.scale-140.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Square310x310Logo.scale-180.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Square310x310Logo.scale-80.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Square70x70Logo.scale-100.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Square70x70Logo.scale-140.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Square70x70Logo.scale-180.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Square70x70Logo.scale-80.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\StoreLogo.scale-100.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\StoreLogo.scale-140.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\StoreLogo.scale-180.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Wide310x150Logo.scale-100.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Wide310x150Logo.scale-140.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Wide310x150Logo.scale-180.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Assets\\Wide310x150Logo.scale-80.png",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\packages.config",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Strings\\fr-FR\\Resources.resw",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Strings\\fr-FR\\CodeBehind.resw",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Strings\\en-US\\CodeBehind.resw",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Strings\\en-US\\Resources.resw",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Styles\\Colors.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\SettingsPageFrames\\SettingsSavePage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\UserControls\\BreadCrumbUserControl.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\UserControls\\CompositeKeyUserControl.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\AboutPage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\EntryDetailPage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\GroupDetailPage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\DonatePage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\NewDatabasePage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\OpenDatabasePage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\RecentDatabasesPage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\SaveDatabasePage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\SettingsPage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\MainPageFrames\\WelcomePage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\SettingsPageFrames\\SettingsDatabasePage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\SettingsPageFrames\\SettingsNewDatabasePage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\SettingsPageFrames\\SettingsSecurityPage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\SettingsPageFrames\\SettingsWelcomePage.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Styles\\HamburgerButtonStyle.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Styles\\ListViewLeftIndicatorStyle.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Styles\\NoBorderButtonStyle.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Styles\\Styles.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Styles\\TextBoxWithButtonStyle.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\Views\\UserControls\\HamburgerMenuUserControl.xaml",\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\App.xaml"
|
||||||
|
|
||||||
|
A0CFC681-769B-405A-8482-0CDEE595A91F.sonar.cs.roslyn.reportFilePath=C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\bin\\Debug\\ModernKeePass.exe.RoslynCA.json
|
||||||
|
A0CFC681-769B-405A-8482-0CDEE595A91F.sonar.cs.analyzer.projectOutPath=C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\.sonarqube\\out\\0
|
||||||
|
A0CFC681-769B-405A-8482-0CDEE595A91F.sonar.cs.analyzer.projectOutPaths=\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\.sonarqube\\out\\0"
|
||||||
|
A0CFC681-769B-405A-8482-0CDEE595A91F.sonar.cs.roslyn.reportFilePaths=\
|
||||||
|
"C:\\Sources\\Other\\ModernKeePass\\ModernKeePass\\bin\\Debug\\ModernKeePass.exe.RoslynCA.json"
|
||||||
|
|
||||||
|
sonar.organization=geogeob
|
||||||
|
sonar.host.url=https://sonarcloud.io
|
||||||
|
sonar.visualstudio.enable=false
|
||||||
|
|
||||||
|
sonar.modules=A0CFC681-769B-405A-8482-0CDEE595A91F
|
||||||
|
|
3
ModernKeePass10/.sonarqube/out/summary.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Analysis succeeded for SonarQube project "", version [Analysis results](https://sonarcloud.io/dashboard/index/ModernKeePass)
|
||||||
|
- Product projects: 1, test projects: 0
|
||||||
|
- Invalid projects: 0, skipped projects: 0, excluded projects: 0
|
27
ModernKeePass10/Actions/ClipboardAction.cs
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
using Windows.ApplicationModel.DataTransfer;
|
||||||
|
using Windows.UI.Xaml;
|
||||||
|
using Microsoft.Xaml.Interactivity;
|
||||||
|
|
||||||
|
namespace ModernKeePass.Actions
|
||||||
|
{
|
||||||
|
public class ClipboardAction : DependencyObject, IAction
|
||||||
|
{
|
||||||
|
public string Text
|
||||||
|
{
|
||||||
|
get => (string)GetValue(TextProperty);
|
||||||
|
set => SetValue(TextProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty TextProperty =
|
||||||
|
DependencyProperty.Register("Text", typeof(string), typeof(ClipboardAction), new PropertyMetadata(string.Empty));
|
||||||
|
|
||||||
|
public object Execute(object sender, object parameter)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(Text)) return null;
|
||||||
|
var dataPackage = new DataPackage { RequestedOperation = DataPackageOperation.Copy };
|
||||||
|
dataPackage.SetText(Text);
|
||||||
|
Clipboard.SetContent(dataPackage);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
65
ModernKeePass10/Actions/DeleteEntityAction.cs
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
using System.Windows.Input;
|
||||||
|
using Windows.UI.Xaml;
|
||||||
|
using Autofac;
|
||||||
|
using Microsoft.Xaml.Interactivity;
|
||||||
|
using ModernKeePass.Common;
|
||||||
|
using ModernKeePass.Domain.Entities;
|
||||||
|
using ModernKeePass.Domain.Interfaces;
|
||||||
|
|
||||||
|
namespace ModernKeePass.Actions
|
||||||
|
{
|
||||||
|
public class DeleteEntityAction : DependencyObject, IAction
|
||||||
|
{
|
||||||
|
private readonly IResourceService _resourceService;
|
||||||
|
private readonly IDatabaseService _databaseService;
|
||||||
|
|
||||||
|
public Entity Entity
|
||||||
|
{
|
||||||
|
get => (Entity)GetValue(EntityProperty);
|
||||||
|
set => SetValue(EntityProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty EntityProperty =
|
||||||
|
DependencyProperty.Register("Entity", typeof(Entity), typeof(DeleteEntityAction),
|
||||||
|
new PropertyMetadata(null));
|
||||||
|
|
||||||
|
public ICommand Command
|
||||||
|
{
|
||||||
|
get => (ICommand)GetValue(CommandProperty);
|
||||||
|
set => SetValue(CommandProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty CommandProperty =
|
||||||
|
DependencyProperty.Register("Command", typeof(ICommand), typeof(DeleteEntityAction),
|
||||||
|
new PropertyMetadata(null));
|
||||||
|
|
||||||
|
public DeleteEntityAction(): this(App.Container.Resolve<IResourceService>(), App.Container.Resolve<IDatabaseService>())
|
||||||
|
{ }
|
||||||
|
|
||||||
|
public DeleteEntityAction(IResourceService resourceService, IDatabaseService databaseService)
|
||||||
|
{
|
||||||
|
_resourceService = resourceService;
|
||||||
|
_databaseService = databaseService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public object Execute(object sender, object parameter)
|
||||||
|
{
|
||||||
|
var type = Entity is GroupEntity ? "Group" : "Entry";
|
||||||
|
|
||||||
|
var message = _databaseService.IsRecycleBinEnabled
|
||||||
|
? _resourceService.GetResourceValue($"{type}RecyclingConfirmation")
|
||||||
|
: _resourceService.GetResourceValue($"{type}DeletingConfirmation");
|
||||||
|
var text = _databaseService.IsRecycleBinEnabled ? _resourceService.GetResourceValue($"{type}Recycled") : _resourceService.GetResourceValue($"{type}Deleted");
|
||||||
|
MessageDialogHelper.ShowActionDialog(_resourceService.GetResourceValue("EntityDeleteTitle"), message,
|
||||||
|
_resourceService.GetResourceValue("EntityDeleteActionButton"),
|
||||||
|
_resourceService.GetResourceValue("EntityDeleteCancelButton"), a =>
|
||||||
|
{
|
||||||
|
ToastNotificationHelper.ShowMovedToast(Entity, _resourceService.GetResourceValue("EntityDeleting"), text);
|
||||||
|
//Entity.MarkForDelete(_resourceService.GetResourceValue("RecycleBinTitle"));
|
||||||
|
Command.Execute(null);
|
||||||
|
}, null).GetAwaiter();
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
33
ModernKeePass10/Actions/NavigateToUrlAction.cs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
using System;
|
||||||
|
using Windows.UI.Xaml;
|
||||||
|
using Microsoft.Xaml.Interactivity;
|
||||||
|
using ModernKeePass.Common;
|
||||||
|
|
||||||
|
namespace ModernKeePass.Actions
|
||||||
|
{
|
||||||
|
public class NavigateToUrlAction : DependencyObject, IAction
|
||||||
|
{
|
||||||
|
public string Url
|
||||||
|
{
|
||||||
|
get => (string)GetValue(UrlProperty);
|
||||||
|
set => SetValue(UrlProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty UrlProperty =
|
||||||
|
DependencyProperty.Register("Url", typeof(string), typeof(NavigateToUrlAction), new PropertyMetadata(string.Empty));
|
||||||
|
|
||||||
|
public object Execute(object sender, object parameter)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var uri = new Uri(Url);
|
||||||
|
return Windows.System.Launcher.LaunchUriAsync(uri).GetAwaiter().GetResult();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MessageDialogHelper.ShowErrorDialog(ex).GetAwaiter();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
27
ModernKeePass10/Actions/SetupFocusAction.cs
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
using Windows.UI.Core;
|
||||||
|
using Windows.UI.Xaml;
|
||||||
|
using Windows.UI.Xaml.Controls;
|
||||||
|
using Microsoft.Xaml.Interactivity;
|
||||||
|
|
||||||
|
namespace ModernKeePass.Actions
|
||||||
|
{
|
||||||
|
public class SetupFocusAction : DependencyObject, IAction
|
||||||
|
{
|
||||||
|
public Control TargetObject
|
||||||
|
{
|
||||||
|
get => (Control)GetValue(TargetObjectProperty);
|
||||||
|
set => SetValue(TargetObjectProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty TargetObjectProperty =
|
||||||
|
DependencyProperty.Register("TargetObject", typeof(Control), typeof(SetupFocusAction), new PropertyMetadata(null));
|
||||||
|
|
||||||
|
public object Execute(object sender, object parameter)
|
||||||
|
{
|
||||||
|
return Task.Factory.StartNew(
|
||||||
|
() => Dispatcher.RunAsync(CoreDispatcherPriority.Low,
|
||||||
|
() => TargetObject?.Focus(FocusState.Programmatic)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
33
ModernKeePass10/Actions/ToastAction.cs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
using Windows.UI.Xaml;
|
||||||
|
using Microsoft.Xaml.Interactivity;
|
||||||
|
using ModernKeePass.Common;
|
||||||
|
|
||||||
|
namespace ModernKeePass.Actions
|
||||||
|
{
|
||||||
|
public class ToastAction : DependencyObject, IAction
|
||||||
|
{
|
||||||
|
public string Title
|
||||||
|
{
|
||||||
|
get => (string)GetValue(TitleProperty);
|
||||||
|
set => SetValue(TitleProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty TitleProperty =
|
||||||
|
DependencyProperty.Register("Title", typeof(string), typeof(ToastAction), new PropertyMetadata(string.Empty));
|
||||||
|
|
||||||
|
public string Message
|
||||||
|
{
|
||||||
|
get => (string)GetValue(MessageProperty);
|
||||||
|
set => SetValue(MessageProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty MessageProperty =
|
||||||
|
DependencyProperty.Register("Message", typeof(string), typeof(ToastAction), new PropertyMetadata(string.Empty));
|
||||||
|
|
||||||
|
public object Execute(object sender, object parameter)
|
||||||
|
{
|
||||||
|
ToastNotificationHelper.ShowGenericToast(Title, Message);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
ModernKeePass10/App.xaml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<Application
|
||||||
|
x:Class="ModernKeePass.App"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
RequestedTheme="Light">
|
||||||
|
<Application.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/>
|
||||||
|
<ResourceDictionary Source="ResourceDictionaries/MasterDetailsView.xaml" />
|
||||||
|
<!--<ResourceDictionary Source="ResourceDictionaries/TextBoxWithButtonStyle.xaml" />-->
|
||||||
|
<ResourceDictionary Source="ResourceDictionaries/HamburgerButtonStyle.xaml" />
|
||||||
|
<ResourceDictionary Source="ResourceDictionaries/ListViewLeftIndicatorStyle.xaml" />
|
||||||
|
<ResourceDictionary Source="ResourceDictionaries/NoBorderButtonStyle.xaml" />
|
||||||
|
<ResourceDictionary Source="ResourceDictionaries/NoBorderToggleButtonStyle.xaml" />
|
||||||
|
<ResourceDictionary Source="ResourceDictionaries/Styles.xaml" />
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</Application.Resources>
|
||||||
|
</Application>
|
221
ModernKeePass10/App.xaml.cs
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Windows.ApplicationModel;
|
||||||
|
using Windows.ApplicationModel.Activation;
|
||||||
|
using Windows.Storage;
|
||||||
|
using Windows.Storage.AccessCache;
|
||||||
|
using Windows.Storage.Pickers;
|
||||||
|
using Windows.UI.Xaml;
|
||||||
|
using Windows.UI.Xaml.Controls;
|
||||||
|
using Windows.UI.Xaml.Navigation;
|
||||||
|
using UnhandledExceptionEventArgs = Windows.UI.Xaml.UnhandledExceptionEventArgs;
|
||||||
|
using Autofac;
|
||||||
|
using Microsoft.AppCenter;
|
||||||
|
using Microsoft.AppCenter.Analytics;
|
||||||
|
using ModernKeePass.Common;
|
||||||
|
using ModernKeePass.Composition;
|
||||||
|
using ModernKeePass.Domain.Dtos;
|
||||||
|
using ModernKeePass.Domain.Exceptions;
|
||||||
|
using ModernKeePass.Domain.Interfaces;
|
||||||
|
using ModernKeePass.Views;
|
||||||
|
|
||||||
|
// The Blank Application template is documented at http://go.microsoft.com/fwlink/?LinkId=234227
|
||||||
|
|
||||||
|
namespace ModernKeePass
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Provides application-specific behavior to supplement the default Application class.
|
||||||
|
/// </summary>
|
||||||
|
sealed partial class App
|
||||||
|
{
|
||||||
|
private readonly IDatabaseService _databaseService;
|
||||||
|
|
||||||
|
public static IContainer Container { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes the singleton application object. This is the first line of authored code
|
||||||
|
/// executed, and as such is the logical equivalent of main() or WinMain().
|
||||||
|
/// </summary>
|
||||||
|
public App()
|
||||||
|
{
|
||||||
|
AppCenter.Start("79d23520-a486-4f63-af81-8d90bf4e1bea", typeof(Analytics));
|
||||||
|
|
||||||
|
InitializeComponent();
|
||||||
|
Suspending += OnSuspending;
|
||||||
|
Resuming += OnResuming;
|
||||||
|
UnhandledException += OnUnhandledException;
|
||||||
|
|
||||||
|
// Setup DI
|
||||||
|
var builder = new ContainerBuilder();
|
||||||
|
builder.RegisterModule<SharedCompositionRoot>();
|
||||||
|
builder.RegisterModule<UwpCompositionRoot>();
|
||||||
|
Container = builder.Build();
|
||||||
|
|
||||||
|
_databaseService = Container.Resolve<IDatabaseService>();
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Event Handlers
|
||||||
|
|
||||||
|
// TODO: do something else here instead of showing dialog and handle save issues directly where it happens
|
||||||
|
private async void OnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs)
|
||||||
|
{
|
||||||
|
// Save the argument exception because it's cleared on first access
|
||||||
|
var exception = unhandledExceptionEventArgs.Exception;
|
||||||
|
var realException =
|
||||||
|
exception is TargetInvocationException &&
|
||||||
|
exception.InnerException != null
|
||||||
|
? exception.InnerException
|
||||||
|
: exception;
|
||||||
|
|
||||||
|
var resource = Container.Resolve<IResourceService>();
|
||||||
|
if (realException is SaveException)
|
||||||
|
{
|
||||||
|
unhandledExceptionEventArgs.Handled = true;
|
||||||
|
await MessageDialogHelper.ShowActionDialog(resource.GetResourceValue("MessageDialogSaveErrorTitle"),
|
||||||
|
realException.InnerException.Message,
|
||||||
|
resource.GetResourceValue("MessageDialogSaveErrorButtonSaveAs"),
|
||||||
|
resource.GetResourceValue("MessageDialogSaveErrorButtonDiscard"),
|
||||||
|
async command =>
|
||||||
|
{
|
||||||
|
var savePicker = new FileSavePicker
|
||||||
|
{
|
||||||
|
SuggestedStartLocation = PickerLocationId.DocumentsLibrary,
|
||||||
|
SuggestedFileName = $"{_databaseService.Name} - copy"
|
||||||
|
};
|
||||||
|
savePicker.FileTypeChoices.Add(resource.GetResourceValue("MessageDialogSaveErrorFileTypeDesc"),
|
||||||
|
new List<string> {".kdbx"});
|
||||||
|
|
||||||
|
var file = await savePicker.PickSaveFileAsync();
|
||||||
|
var token = StorageApplicationPermissions.FutureAccessList.Add(file);
|
||||||
|
var fileInfo = new FileInfo
|
||||||
|
{
|
||||||
|
Path = token,
|
||||||
|
Name = file.DisplayName
|
||||||
|
};
|
||||||
|
await _databaseService.SaveAs(fileInfo);
|
||||||
|
}, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Invoked when the application is launched normally by the end user. Other entry points
|
||||||
|
/// will be used such as when the application is launched to open a specific file.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="args">Details about the launch request and process.</param>
|
||||||
|
protected override async void OnLaunched(LaunchActivatedEventArgs args)
|
||||||
|
{
|
||||||
|
await OnLaunchOrActivated(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override async void OnActivated(IActivatedEventArgs args)
|
||||||
|
{
|
||||||
|
await OnLaunchOrActivated(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task OnLaunchOrActivated(IActivatedEventArgs e)
|
||||||
|
{
|
||||||
|
// Do not repeat app initialization when the Window already has content,
|
||||||
|
// just ensure that the window is active
|
||||||
|
if (!(Window.Current.Content is Frame rootFrame))
|
||||||
|
{
|
||||||
|
// Create a Frame to act as the navigation context and navigate to the first page
|
||||||
|
rootFrame = new Frame();
|
||||||
|
// Set the default language
|
||||||
|
|
||||||
|
rootFrame.NavigationFailed += OnNavigationFailed;
|
||||||
|
|
||||||
|
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
|
||||||
|
{
|
||||||
|
// Load state from previously terminated application
|
||||||
|
await SuspensionManager.RestoreAsync();
|
||||||
|
#if DEBUG
|
||||||
|
await MessageDialogHelper.ShowNotificationDialog("App terminated", "Windows or an error made the app terminate");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// Place the frame in the current Window
|
||||||
|
Window.Current.Content = rootFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e is LaunchActivatedEventArgs lauchActivatedEventArgs && rootFrame.Content == null)
|
||||||
|
{
|
||||||
|
rootFrame.Navigate(typeof(MainPage10), lauchActivatedEventArgs.Arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the current window is active
|
||||||
|
Window.Current.Activate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnResuming(object sender, object e)
|
||||||
|
{
|
||||||
|
var currentFrame = Window.Current.Content as Frame;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//_databaseService.ReOpen();
|
||||||
|
#if DEBUG
|
||||||
|
ToastNotificationHelper.ShowGenericToast(_databaseService.Name, "Database reopened (changes were saved)");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
currentFrame?.Navigate(typeof(MainPage10));
|
||||||
|
#if DEBUG
|
||||||
|
ToastNotificationHelper.ShowGenericToast("App resumed", "Nothing to do, no previous database opened");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Invoked when Navigation to a certain page fails
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">The Frame which failed navigation</param>
|
||||||
|
/// <param name="e">Details about the navigation failure</param>
|
||||||
|
private void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
|
||||||
|
{
|
||||||
|
throw new NavigationException(e.SourcePageType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Invoked when application execution is being suspended. Application state is saved
|
||||||
|
/// without knowing whether the application will be terminated or resumed with the contents
|
||||||
|
/// of memory still intact.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">The source of the suspend request.</param>
|
||||||
|
/// <param name="e">Details about the suspend request.</param>
|
||||||
|
private async void OnSuspending(object sender, SuspendingEventArgs e)
|
||||||
|
{
|
||||||
|
var deferral = e.SuspendingOperation.GetDeferral();
|
||||||
|
var settings = Container.Resolve<ISettingsService>();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// TODO: definitely do something about this to avoid DB corruption if app closes before save has completed
|
||||||
|
if (settings.GetSetting("SaveSuspend", true)) await _databaseService.Save();
|
||||||
|
_databaseService.Close();
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
ToastNotificationHelper.ShowErrorToast(exception);
|
||||||
|
}
|
||||||
|
await SuspensionManager.SaveAsync();
|
||||||
|
deferral.Complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Invoked when application is launched from opening a file in Windows Explorer
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="args">Details about the file being opened</param>
|
||||||
|
protected override void OnFileActivated(FileActivatedEventArgs args)
|
||||||
|
{
|
||||||
|
base.OnFileActivated(args);
|
||||||
|
var rootFrame = new Frame();
|
||||||
|
rootFrame.Navigate(typeof(MainPage10), args.Files[0] as StorageFile);
|
||||||
|
Window.Current.Content = rootFrame;
|
||||||
|
Window.Current.Activate();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
BIN
ModernKeePass10/Assets/Logo.scale-100.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
ModernKeePass10/Assets/Logo.scale-140.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
ModernKeePass10/Assets/Logo.scale-180.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
ModernKeePass10/Assets/Logo.scale-80.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
ModernKeePass10/Assets/ModernKeePass-SmallLogo.scale-100.png
Normal file
After Width: | Height: | Size: 700 B |
BIN
ModernKeePass10/Assets/ModernKeePass-SmallLogo.scale-140.png
Normal file
After Width: | Height: | Size: 907 B |
BIN
ModernKeePass10/Assets/ModernKeePass-SmallLogo.scale-180.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
ModernKeePass10/Assets/ModernKeePass-SmallLogo.scale-80.png
Normal file
After Width: | Height: | Size: 607 B |
BIN
ModernKeePass10/Assets/ModernKeePass-SmallLogo.targetsize-16.png
Normal file
After Width: | Height: | Size: 463 B |
After Width: | Height: | Size: 3.7 KiB |