From 643fb9a3f2ab9e91d8978fee0ad84e6ee8aba7f4 Mon Sep 17 00:00:00 2001 From: Geoffroy BONNEVILLE Date: Wed, 20 May 2020 11:59:40 +0200 Subject: [PATCH] Working protected fields (warning: check performance) --- ModernKeePass/ViewModels/EntryDetailVm.cs | 36 +++++++++++-------- ModernKeePass/Views/EntryDetailPage.xaml | 9 +++-- WinAppCommon/ViewModels/Items/EntryFieldVm.cs | 6 ++-- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/ModernKeePass/ViewModels/EntryDetailVm.cs b/ModernKeePass/ViewModels/EntryDetailVm.cs index f3e961f..be58161 100644 --- a/ModernKeePass/ViewModels/EntryDetailVm.cs +++ b/ModernKeePass/ViewModels/EntryDetailVm.cs @@ -35,6 +35,7 @@ using ModernKeePass.Domain.Dtos; using ModernKeePass.Domain.Exceptions; using ModernKeePass.Extensions; using ModernKeePass.Models; +using ModernKeePass.ViewModels.ListItems; namespace ModernKeePass.ViewModels { @@ -107,7 +108,7 @@ namespace ModernKeePass.ViewModels } public ObservableCollection History { get; private set; } - public ObservableCollection AdditionalFields { get; private set; } + public ObservableCollection AdditionalFields { get; private set; } public ObservableCollection Attachments { get; private set; } /// @@ -123,7 +124,15 @@ namespace ModernKeePass.ViewModels Set(() => SelectedItem, ref _selectedItem, value, true); if (value != null) { - AdditionalFields = new ObservableCollection(SelectedItem.AdditionalFields); + //AdditionalFields = new ObservableCollection(SelectedItem.AdditionalFields); + AdditionalFields = + new ObservableCollection( + SelectedItem.AdditionalFields.Select(f => + { + var field = new EntryFieldVm(_cryptography); + field.Initialize(f.Name, f.Value, f.IsProtected); + return field; + })); Attachments = new ObservableCollection(SelectedItem.Attachments.Select(f => new Attachment { @@ -157,13 +166,13 @@ namespace ModernKeePass.ViewModels { Set(() => AdditionalFieldSelectedIndex, ref _additionalFieldSelectedIndex, value); DeleteAdditionalField.RaiseCanExecuteChanged(); - if (value != -1) + /*if (value != -1) { var additionalField = AdditionalFields[value]; Set(nameof(AdditionalFieldName), ref _additionalFieldName, additionalField.Name); Set(nameof(AdditionalFieldValue), ref _additionalFieldValue, additionalField.IsProtected ? _cryptography.UnProtect(additionalField.Value).GetAwaiter().GetResult() : additionalField.Value); Set(nameof(AdditionalFieldIsProtected), ref _additionalFieldIsProtected, additionalField.IsProtected); - } + }*/ } } @@ -193,10 +202,10 @@ namespace ModernKeePass.ViewModels get { return _cryptography.UnProtect(SelectedItem.Password.Value).GetAwaiter().GetResult(); } set { - // TODO: cleanup this var protectedPassword = _cryptography.Protect(value).ConfigureAwait(false).GetAwaiter().GetResult(); SelectedItem.Password.Value = protectedPassword; - SetFieldValue(nameof(Password), value, true).ConfigureAwait(false).GetAwaiter(); + SetFieldValue(nameof(Password), protectedPassword, true).ConfigureAwait(false).GetAwaiter(); + RaisePropertyChanged(nameof(Password)); RaisePropertyChanged(nameof(PasswordComplexityIndicator)); } @@ -300,7 +309,7 @@ namespace ModernKeePass.ViewModels set { Set(() => IsRevealPassword, ref _isRevealPassword, value); } } - private string _additionalFieldName; + /*private string _additionalFieldName; private string _additionalFieldValue; private bool _additionalFieldIsProtected; @@ -333,7 +342,7 @@ namespace ModernKeePass.ViewModels { SetFieldValue(AdditionalFieldName, AdditionalFieldValue, value).ConfigureAwait(false).GetAwaiter(); } - } + }*/ public RelayCommand SaveCommand { get; } public RelayCommand GeneratePasswordCommand { get; } @@ -343,7 +352,7 @@ namespace ModernKeePass.ViewModels public RelayCommand GoBackCommand { get; } public RelayCommand GoToParentCommand { get; set; } public RelayCommand AddAdditionalField { get; set; } - public RelayCommand DeleteAdditionalField { get; set; } + public RelayCommand DeleteAdditionalField { get; set; } public RelayCommand OpenAttachmentCommand { get; set; } public RelayCommand AddAttachmentCommand { get; set; } public RelayCommand DeleteAttachmentCommand { get; set; } @@ -385,7 +394,7 @@ namespace ModernKeePass.ViewModels GoBackCommand = new RelayCommand(() => _navigation.GoBack()); GoToParentCommand = new RelayCommand(() => GoToGroup(_parent.Id)); AddAdditionalField = new RelayCommand(AddField, () => IsCurrentEntry); - DeleteAdditionalField = new RelayCommand(async field => await DeleteField(field), field => field != null && IsCurrentEntry); + DeleteAdditionalField = new RelayCommand(async field => await DeleteField(field), field => field != null && IsCurrentEntry); OpenAttachmentCommand = new RelayCommand(async attachment => await OpenAttachment(attachment)); AddAttachmentCommand = new RelayCommand(async () => await AddAttachment(), () => IsCurrentEntry); DeleteAttachmentCommand = new RelayCommand(async attachment => await DeleteAttachment(attachment), _ => IsCurrentEntry); @@ -448,8 +457,7 @@ namespace ModernKeePass.ViewModels private async Task SetFieldValue(string fieldName, object value, bool isProtected) { - var protectedValue = isProtected ? await _cryptography.Protect(value?.ToString()) : value; - await _mediator.Send(new UpsertFieldCommand { EntryId = Id, FieldName = fieldName, FieldValue = protectedValue, IsProtected = isProtected}); + await _mediator.Send(new UpsertFieldCommand { EntryId = Id, FieldName = fieldName, FieldValue = value, IsProtected = isProtected}); UpdateDirtyStatus(true); } @@ -461,11 +469,11 @@ namespace ModernKeePass.ViewModels private void AddField() { - AdditionalFields.Add(new FieldVm()); + AdditionalFields.Add(new EntryFieldVm(_cryptography)); AdditionalFieldSelectedIndex = AdditionalFields.Count - 1; } - private async Task DeleteField(FieldVm field) + private async Task DeleteField(EntryFieldVm field) { AdditionalFields.Remove(field); if (!string.IsNullOrEmpty(field.Name)) diff --git a/ModernKeePass/Views/EntryDetailPage.xaml b/ModernKeePass/Views/EntryDetailPage.xaml index fde95d6..0f8c65b 100644 --- a/ModernKeePass/Views/EntryDetailPage.xaml +++ b/ModernKeePass/Views/EntryDetailPage.xaml @@ -505,12 +505,12 @@ - - +