mirror of
https://github.com/wismna/ModernKeePass.git
synced 2025-10-03 15:40:18 -04:00
Create entry history only if DB is open
Fix issues in entry field names Entry field names cleanup and refactoring
This commit is contained in:
@@ -40,17 +40,17 @@ namespace ModernKeePass.Application.Entry.Models
|
||||
{
|
||||
profile.CreateMap<EntryEntity, EntryVm>()
|
||||
.ForMember(d => d.Title, opts => opts.MapFrom(s => s.Fields.FirstOrDefault(f =>
|
||||
f.Name.Equals(EntryFieldName.Title, StringComparison.OrdinalIgnoreCase)) ?? new FieldEntity { Name = EntryFieldName.Title, IsProtected = false } ))
|
||||
f.Name.Equals(EntryFieldName.Title, StringComparison.Ordinal)) ?? new FieldEntity { Name = EntryFieldName.Title, IsProtected = false } ))
|
||||
.ForMember(d => d.Username, opts => opts.MapFrom(s => s.Fields.FirstOrDefault(f =>
|
||||
f.Name.Equals(EntryFieldName.UserName, StringComparison.OrdinalIgnoreCase)) ?? new FieldEntity { Name = EntryFieldName.UserName, IsProtected = false } ))
|
||||
f.Name.Equals(EntryFieldName.UserName, StringComparison.Ordinal)) ?? new FieldEntity { Name = EntryFieldName.UserName, IsProtected = false } ))
|
||||
.ForMember(d => d.Password, opts => opts.MapFrom(s => s.Fields.FirstOrDefault(f =>
|
||||
f.Name.Equals(EntryFieldName.Password, StringComparison.OrdinalIgnoreCase)) ?? new FieldEntity { Name = EntryFieldName.Password, IsProtected = true } ))
|
||||
f.Name.Equals(EntryFieldName.Password, StringComparison.Ordinal)) ?? new FieldEntity { Name = EntryFieldName.Password, IsProtected = true } ))
|
||||
.ForMember(d => d.Url, opts => opts.MapFrom(s => s.Fields.FirstOrDefault(f =>
|
||||
f.Name.Equals(EntryFieldName.Url, StringComparison.OrdinalIgnoreCase)) ?? new FieldEntity { Name = EntryFieldName.Url, IsProtected = false } ))
|
||||
f.Name.Equals(EntryFieldName.Url, StringComparison.Ordinal)) ?? new FieldEntity { Name = EntryFieldName.Url, IsProtected = false } ))
|
||||
.ForMember(d => d.Notes, opts => opts.MapFrom(s => s.Fields.FirstOrDefault(f =>
|
||||
f.Name.Equals(EntryFieldName.Notes, StringComparison.OrdinalIgnoreCase)) ?? new FieldEntity { Name = EntryFieldName.Notes, IsProtected = false } ))
|
||||
f.Name.Equals(EntryFieldName.Notes, StringComparison.Ordinal)) ?? new FieldEntity { Name = EntryFieldName.Notes, IsProtected = false } ))
|
||||
.ForMember(d => d.AdditionalFields, opts => opts.MapFrom(s =>
|
||||
s.Fields.Where(f => !EntryFieldName.StandardFieldNames.Contains(f.Name, StringComparer.OrdinalIgnoreCase))))
|
||||
s.Fields.Where(f => !EntryFieldName.StandardFieldNames.Contains(f.Name, StringComparer.Ordinal))))
|
||||
.ForMember(d => d.History, opts => opts.MapFrom(s => s.History.Reverse()))
|
||||
.ForMember(d => d.Icon, opts => opts.MapFrom(s => s.HasExpirationDate && s.ExpirationDate < DateTimeOffset.Now ? Icon.ReportHacked : s.Icon));
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@ namespace ModernKeePass.Domain.Enums
|
||||
public const string Title = nameof(Title);
|
||||
public const string UserName = nameof(UserName);
|
||||
public const string Password = nameof(Password);
|
||||
public const string Url = nameof(Url);
|
||||
public const string Url = "URL";
|
||||
public const string Notes = nameof(Notes);
|
||||
public const string Icon = nameof(Icon);
|
||||
public const string ExpirationDate = nameof(ExpirationDate);
|
||||
|
@@ -79,7 +79,6 @@
|
||||
<Compile Include="Common\MachineDateTime.cs" />
|
||||
<Compile Include="DependencyInjection.cs" />
|
||||
<Compile Include="File\CsvImportFormat.cs" />
|
||||
<Compile Include="KeePass\EntryFieldMapper.cs" />
|
||||
<Compile Include="KeePass\MappingProfiles.cs" />
|
||||
<Compile Include="KeePass\IconMapper.cs" />
|
||||
<Compile Include="KeePass\KeePassDatabaseSettingsProxy.cs" />
|
||||
|
@@ -1,33 +0,0 @@
|
||||
using ModernKeePass.Domain.Enums;
|
||||
using ModernKeePassLib;
|
||||
|
||||
namespace ModernKeePass.Infrastructure.KeePass
|
||||
{
|
||||
public static class EntryFieldMapper
|
||||
{
|
||||
public static string MapPwDefsToField(string value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case PwDefs.TitleField: return EntryFieldName.Title;
|
||||
case PwDefs.UserNameField: return EntryFieldName.UserName;
|
||||
case PwDefs.PasswordField: return EntryFieldName.Password;
|
||||
case PwDefs.NotesField: return EntryFieldName.Notes;
|
||||
case PwDefs.UrlField: return EntryFieldName.Url;
|
||||
default: return value;
|
||||
}
|
||||
}
|
||||
public static string MapFieldToPwDef(string value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case EntryFieldName.Title: return PwDefs.TitleField;
|
||||
case EntryFieldName.UserName: return PwDefs.UserNameField;
|
||||
case EntryFieldName.Password: return PwDefs.PasswordField;
|
||||
case EntryFieldName.Notes: return PwDefs.NotesField;
|
||||
case EntryFieldName.Url: return PwDefs.UrlField;
|
||||
default: return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -248,15 +248,6 @@ namespace ModernKeePass.Infrastructure.KeePass
|
||||
|
||||
switch (fieldName)
|
||||
{
|
||||
case EntryFieldName.Title:
|
||||
case EntryFieldName.UserName:
|
||||
case EntryFieldName.Password:
|
||||
case EntryFieldName.Notes:
|
||||
case EntryFieldName.Url:
|
||||
var stringValue = fieldValue == null ? string.Empty: fieldValue.ToString();
|
||||
var unprotectedFieldValue = isProtected ? await _cryptography.UnProtect(stringValue) : stringValue;
|
||||
pwEntry.Strings.Set(EntryFieldMapper.MapFieldToPwDef(fieldName), new ProtectedString(isProtected, unprotectedFieldValue));
|
||||
break;
|
||||
case EntryFieldName.HasExpirationDate:
|
||||
pwEntry.Expires = (bool)fieldValue;
|
||||
break;
|
||||
@@ -273,9 +264,9 @@ namespace ModernKeePass.Infrastructure.KeePass
|
||||
pwEntry.ForegroundColor = (Color)fieldValue;
|
||||
break;
|
||||
default:
|
||||
var additionalStringValue = fieldValue == null ? string.Empty: fieldValue.ToString();
|
||||
var unprotectedAdditionalFieldValue = isProtected ? await _cryptography.UnProtect(additionalStringValue) : additionalStringValue;
|
||||
pwEntry.Strings.Set(fieldName, new ProtectedString(isProtected, unprotectedAdditionalFieldValue));
|
||||
var stringValue = fieldValue == null ? string.Empty: fieldValue.ToString();
|
||||
var unprotectedFieldValue = isProtected ? await _cryptography.UnProtect(stringValue) : stringValue;
|
||||
pwEntry.Strings.Set(fieldName, new ProtectedString(isProtected, unprotectedFieldValue));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -121,7 +121,7 @@ namespace ModernKeePass.ViewModels
|
||||
set
|
||||
{
|
||||
SelectedItem.Title.Value = value;
|
||||
SetFieldValue(nameof(Title), value, false).ConfigureAwait(false).GetAwaiter();
|
||||
SetFieldValue(SelectedItem.Title.Name, value, false).ConfigureAwait(false).GetAwaiter();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,7 +131,7 @@ namespace ModernKeePass.ViewModels
|
||||
set
|
||||
{
|
||||
SelectedItem.Username.Value = value;
|
||||
SetFieldValue(nameof(UserName), value, false).ConfigureAwait(false).GetAwaiter();
|
||||
SetFieldValue(SelectedItem.Username.Name, value, false).ConfigureAwait(false).GetAwaiter();
|
||||
RaisePropertyChanged(nameof(UserName));
|
||||
}
|
||||
}
|
||||
@@ -143,7 +143,7 @@ namespace ModernKeePass.ViewModels
|
||||
{
|
||||
var protectedPassword = _cryptography.Protect(value).ConfigureAwait(false).GetAwaiter().GetResult();
|
||||
SelectedItem.Password.Value = protectedPassword;
|
||||
SetFieldValue(nameof(Password), protectedPassword, true).ConfigureAwait(false).GetAwaiter();
|
||||
SetFieldValue(SelectedItem.Password.Name, protectedPassword, true).ConfigureAwait(false).GetAwaiter();
|
||||
|
||||
RaisePropertyChanged(nameof(Password));
|
||||
}
|
||||
@@ -155,7 +155,7 @@ namespace ModernKeePass.ViewModels
|
||||
set
|
||||
{
|
||||
SelectedItem.Url.Value = value;
|
||||
SetFieldValue(nameof(Url), value, false).ConfigureAwait(false).GetAwaiter();
|
||||
SetFieldValue(SelectedItem.Url.Name, value, false).ConfigureAwait(false).GetAwaiter();
|
||||
RaisePropertyChanged(nameof(Url));
|
||||
}
|
||||
}
|
||||
@@ -166,7 +166,7 @@ namespace ModernKeePass.ViewModels
|
||||
set
|
||||
{
|
||||
SelectedItem.Notes.Value = value;
|
||||
SetFieldValue(nameof(Notes), value, false).ConfigureAwait(false).GetAwaiter();
|
||||
SetFieldValue(SelectedItem.Notes.Name, value, false).ConfigureAwait(false).GetAwaiter();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -176,7 +176,7 @@ namespace ModernKeePass.ViewModels
|
||||
set
|
||||
{
|
||||
SelectedItem.Icon = (Icon)Enum.Parse(typeof(Icon), value.ToString());
|
||||
SetFieldValue(nameof(Icon), SelectedItem.Icon, false).ConfigureAwait(false).GetAwaiter();
|
||||
SetFieldValue(EntryFieldName.Icon, SelectedItem.Icon, false).ConfigureAwait(false).GetAwaiter();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@ namespace ModernKeePass.ViewModels
|
||||
if (!HasExpirationDate) return;
|
||||
|
||||
SelectedItem.ExpirationDate = value.Date;
|
||||
SetFieldValue("ExpirationDate", SelectedItem.ExpirationDate, false).ConfigureAwait(false).GetAwaiter();
|
||||
SetFieldValue(EntryFieldName.ExpirationDate, SelectedItem.ExpirationDate, false).ConfigureAwait(false).GetAwaiter();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ namespace ModernKeePass.ViewModels
|
||||
if (!HasExpirationDate) return;
|
||||
|
||||
SelectedItem.ExpirationDate = SelectedItem.ExpirationDate.Date.Add(value);
|
||||
SetFieldValue("ExpirationDate", SelectedItem.ExpirationDate, false).ConfigureAwait(false).GetAwaiter();
|
||||
SetFieldValue(EntryFieldName.ExpirationDate, SelectedItem.ExpirationDate, false).ConfigureAwait(false).GetAwaiter();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,7 +210,7 @@ namespace ModernKeePass.ViewModels
|
||||
set
|
||||
{
|
||||
SelectedItem.HasExpirationDate = value;
|
||||
SetFieldValue(nameof(HasExpirationDate), value, false).ConfigureAwait(false).GetAwaiter();
|
||||
SetFieldValue(EntryFieldName.HasExpirationDate, value, false).ConfigureAwait(false).GetAwaiter();
|
||||
RaisePropertyChanged(nameof(HasExpirationDate));
|
||||
}
|
||||
}
|
||||
@@ -221,7 +221,7 @@ namespace ModernKeePass.ViewModels
|
||||
set
|
||||
{
|
||||
SelectedItem.BackgroundColor = value.ToColor();
|
||||
SetFieldValue(nameof(BackgroundColor), SelectedItem.BackgroundColor, false).ConfigureAwait(false).GetAwaiter();
|
||||
SetFieldValue(EntryFieldName.BackgroundColor, SelectedItem.BackgroundColor, false).ConfigureAwait(false).GetAwaiter();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -231,7 +231,7 @@ namespace ModernKeePass.ViewModels
|
||||
set
|
||||
{
|
||||
SelectedItem.ForegroundColor = value.ToColor();
|
||||
SetFieldValue(nameof(ForegroundColor), SelectedItem.ForegroundColor, false).ConfigureAwait(false).GetAwaiter();
|
||||
SetFieldValue(EntryFieldName.ForegroundColor, SelectedItem.ForegroundColor, false).ConfigureAwait(false).GetAwaiter();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -316,7 +316,7 @@ namespace ModernKeePass.ViewModels
|
||||
|
||||
public async Task AddHistory()
|
||||
{
|
||||
if (_isDirty) await _mediator.Send(new AddHistoryCommand { Entry = History[0] });
|
||||
if (_isDirty && Database.IsOpen) await _mediator.Send(new AddHistoryCommand { Entry = History[0] });
|
||||
}
|
||||
|
||||
public void GoToGroup(string groupId)
|
||||
|
@@ -361,7 +361,7 @@
|
||||
BorderBrush="{Binding BorderBrush, ElementName=UserControl}" />
|
||||
<controls:TextBoxWithButton
|
||||
x:Uid="PasswordTextBox"
|
||||
Text="{Binding Password, Mode=TwoWay}"
|
||||
Text="{Binding Password, Mode=TwoWay, ElementName=UserControl}"
|
||||
Visibility="{Binding IsRevealPassword, Converter={StaticResource BooleanToVisibilityConverter}}"
|
||||
Style="{StaticResource TextBoxWithButtonStyle}"
|
||||
ButtonContent=""
|
||||
|
@@ -1,2 +1,4 @@
|
||||
Data is now protected in memory as well as at rest
|
||||
Fix clipboard copy expiration issue
|
||||
Fix some field mapping issues
|
||||
Fix a resume bug
|
@@ -1,2 +1,4 @@
|
||||
Protection des donnees en memoire en plus du chiffrement de la base de donnees
|
||||
Correction d'un bug dans l'expiration des donnees copiees
|
||||
Correction d'un souci de mapping de champs
|
||||
Correction d'un bug de resume de l'app
|
Reference in New Issue
Block a user