From dbb0a331794b26893fd255fcb7a2d0f8cf76706f Mon Sep 17 00:00:00 2001 From: Leendert de Borst Date: Fri, 8 Nov 2024 17:31:32 +0100 Subject: [PATCH] Get latest vault by revision number instead of updated at timestamp (#347) --- src/AliasVault.Admin/Main/Pages/Home.razor | 11 ++++++++++ .../Main/Pages/Users/Delete.razor | 4 ++-- .../Users/View/Components/VaultTable.razor | 20 +++++++++++++++---- src/AliasVault.Api/Helpers/AuthHelper.cs | 2 +- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/AliasVault.Admin/Main/Pages/Home.razor b/src/AliasVault.Admin/Main/Pages/Home.razor index b5867c293..1d8eace4e 100644 --- a/src/AliasVault.Admin/Main/Pages/Home.razor +++ b/src/AliasVault.Admin/Main/Pages/Home.razor @@ -8,3 +8,14 @@ Title="AliasVault Admin" Description="Welcome to the AliasVault admin portal."> + +@code { + /// + protected override void OnInitialized() + { + base.OnInitialized(); + + // Redirect to users page. + NavigationService.RedirectTo("/users"); + } +} diff --git a/src/AliasVault.Admin/Main/Pages/Users/Delete.razor b/src/AliasVault.Admin/Main/Pages/Users/Delete.razor index 0046ae3b8..cccd1384b 100644 --- a/src/AliasVault.Admin/Main/Pages/Users/Delete.razor +++ b/src/AliasVault.Admin/Main/Pages/Users/Delete.razor @@ -21,11 +21,11 @@ else

User

-
@Id
+
@Id
-
@Obj?.UserName
+
@Obj?.UserName
diff --git a/src/AliasVault.Admin/Main/Pages/Users/View/Components/VaultTable.razor b/src/AliasVault.Admin/Main/Pages/Users/View/Components/VaultTable.razor index ebccee2d3..6cd9d82d2 100644 --- a/src/AliasVault.Admin/Main/Pages/Users/View/Components/VaultTable.razor +++ b/src/AliasVault.Admin/Main/Pages/Users/View/Components/VaultTable.razor @@ -17,7 +17,7 @@ { Current } - @if (_previousEntry != null && HasPasswordChanged(entry, _previousEntry)) + @if (_previousEntry != null && HasPasswordChanged(entry, SortedVaultList)) { Password Changed } @@ -46,7 +46,7 @@ [Parameter] public EventCallback OnMakeCurrent { get; set; } - private string SortColumn { get; set; } = "UpdatedAt"; + private string SortColumn { get; set; } = "RevisionNumber"; private SortDirection SortDirection { get; set; } = SortDirection.Descending; private Vault? _previousEntry; @@ -90,9 +90,21 @@ }; } - private static bool HasPasswordChanged(Vault current, Vault previous) + /// + /// Checks if the password has changed between the current and previous vault entry based on revision number.. + /// + private static bool HasPasswordChanged(Vault current, IEnumerable vaultList) { - return current.Salt != previous.Salt || current.Verifier != previous.Verifier; + // Get the previous vault entry to compare to based on revision number. + var previousEntry = vaultList.FirstOrDefault(v => v.RevisionNumber == current.RevisionNumber - 1); + + if (previousEntry == null) + { + // If the previous entry is null it means we have nothing to compare to so assume that it has not changed. + return false; + } + + return current.Salt != previousEntry?.Salt || current.Verifier != previousEntry?.Verifier; } private async Task MakeCurrentAsync(Vault vault) diff --git a/src/AliasVault.Api/Helpers/AuthHelper.cs b/src/AliasVault.Api/Helpers/AuthHelper.cs index 6f427b0d6..4d49fd9ca 100644 --- a/src/AliasVault.Api/Helpers/AuthHelper.cs +++ b/src/AliasVault.Api/Helpers/AuthHelper.cs @@ -64,7 +64,7 @@ public static class AuthHelper public static (string Salt, string Verifier, string EncryptionType, string EncryptionSettings) GetUserLatestVaultEncryptionSettings(AliasVaultUser user) { // Retrieve latest vault of user which contains the encryption settings. - var latestVault = user.Vaults.OrderByDescending(x => x.UpdatedAt).Select(x => new { x.Salt, x.Verifier, x.EncryptionType, x.EncryptionSettings }).First(); + var latestVault = user.Vaults.OrderByDescending(x => x.RevisionNumber).Select(x => new { x.Salt, x.Verifier, x.EncryptionType, x.EncryptionSettings }).First(); return (latestVault.Salt, latestVault.Verifier, latestVault.EncryptionType, latestVault.EncryptionSettings); } }