diff --git a/src/KeyKeeper/RepositoryWindow.axaml b/src/KeyKeeper/RepositoryWindow.axaml
index 8e26036..1913b2d 100644
--- a/src/KeyKeeper/RepositoryWindow.axaml
+++ b/src/KeyKeeper/RepositoryWindow.axaml
@@ -56,10 +56,12 @@
HorizontalAlignment="Center"
VerticalAlignment="Center">
diff --git a/src/KeyKeeper/ViewModels/LockedRepositoryViewModel.cs b/src/KeyKeeper/ViewModels/LockedRepositoryViewModel.cs
index 360db26..2c57b0e 100644
--- a/src/KeyKeeper/ViewModels/LockedRepositoryViewModel.cs
+++ b/src/KeyKeeper/ViewModels/LockedRepositoryViewModel.cs
@@ -1,13 +1,44 @@
+using System;
+using System.Threading.Tasks;
+using CommunityToolkit.Mvvm.Input;
using KeyKeeper.PasswordStore;
+using KeyKeeper.PasswordStore.Crypto;
namespace KeyKeeper.ViewModels;
-public class LockedRepositoryViewModel : ViewModelBase
+public partial class LockedRepositoryViewModel : ViewModelBase
{
+ RepositoryWindowViewModel parent;
private IPassStore passStore;
+ private string password;
- public LockedRepositoryViewModel(IPassStore store)
+ public LockedRepositoryViewModel(IPassStore store, RepositoryWindowViewModel parent)
{
passStore = store;
+ this.parent = parent;
+ }
+
+ public string UnlockPassword
+ {
+ get => password;
+ set { password = value; OnPropertyChanged(nameof(UnlockPassword)); }
+ }
+
+ [RelayCommand]
+ public void TryUnlock()
+ {
+ try
+ {
+ passStore.Unlock(new CompositeKey(UnlockPassword, null));
+ parent.UpdateLockStatus();
+ } catch (PassStoreFileException e)
+ {
+ // TODO
+ Console.WriteLine("pass store file exception: " + e.Message);
+ } catch (Exception e)
+ {
+ // TODO
+ Console.WriteLine(e);
+ }
}
}
\ No newline at end of file
diff --git a/src/KeyKeeper/ViewModels/RepositoryWindowViewModel.cs b/src/KeyKeeper/ViewModels/RepositoryWindowViewModel.cs
index df0c910..ea74ced 100644
--- a/src/KeyKeeper/ViewModels/RepositoryWindowViewModel.cs
+++ b/src/KeyKeeper/ViewModels/RepositoryWindowViewModel.cs
@@ -1,8 +1,11 @@
+using System;
+using System.Threading.Tasks;
+using CommunityToolkit.Mvvm.Input;
using KeyKeeper.PasswordStore;
namespace KeyKeeper.ViewModels;
-public class RepositoryWindowViewModel : ViewModelBase
+public partial class RepositoryWindowViewModel : ViewModelBase
{
private object currentPage;
private IPassStore passStore;
@@ -19,7 +22,7 @@ public class RepositoryWindowViewModel : ViewModelBase
UpdateLockStatus();
}
- private void UpdateLockStatus()
+ public void UpdateLockStatus()
{
if ((currentPage == null || currentPage is LockedRepositoryViewModel) && !passStore.Locked)
SwitchToUnlocked();
@@ -29,11 +32,11 @@ public class RepositoryWindowViewModel : ViewModelBase
private void SwitchToUnlocked()
{
- currentPage = new UnlockedRepositoryViewModel(passStore);
+ CurrentPage = new UnlockedRepositoryViewModel(passStore);
}
private void SwitchToLocked()
{
- currentPage = new LockedRepositoryViewModel(passStore);
+ CurrentPage = new LockedRepositoryViewModel(passStore, this);
}
}
\ No newline at end of file