From 65110abf4c6eedcc9d2850e9701bb6c22e8fdbc6 Mon Sep 17 00:00:00 2001 From: Leendert de Borst Date: Tue, 18 Mar 2025 10:47:06 +0100 Subject: [PATCH] Add range binds and sanity checks (#167) --- .../Settings/PasswordSettingsPopup.razor | 46 ++++++++++++++++--- .../Services/CredentialService.cs | 6 +++ 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/src/AliasVault.Client/Main/Components/Settings/PasswordSettingsPopup.razor b/src/AliasVault.Client/Main/Components/Settings/PasswordSettingsPopup.razor index e0201215b..160a52796 100644 --- a/src/AliasVault.Client/Main/Components/Settings/PasswordSettingsPopup.razor +++ b/src/AliasVault.Client/Main/Components/Settings/PasswordSettingsPopup.razor @@ -10,31 +10,36 @@ + @bind="PasswordSettings.Length" @oninput="HandleLengthInput">
- +
- +
- +
- +
- +
@@ -105,7 +110,34 @@ private void RefreshPreview() { - _previewPassword = CredentialService.GenerateRandomPassword(PasswordSettings); + try { + _previewPassword = CredentialService.GenerateRandomPassword(PasswordSettings); + } + catch + { + // If password generation fails, ignore it. This can happen if the settings are invalid. + } + } + + /// + /// Handle input from the password length input. + /// + private void HandleLengthInput(ChangeEventArgs e) + { + int newLength; + if (int.TryParse(e.Value?.ToString(), out newLength)) + { + PasswordSettings.Length = newLength; + RefreshPreview(); + } + } + + /// + /// Handle changes to the password settings. + /// + private void OnPasswordSettingsChanged() + { + RefreshPreview(); } /// diff --git a/src/AliasVault.Client/Services/CredentialService.cs b/src/AliasVault.Client/Services/CredentialService.cs index 3935c28e9..1a073aa67 100644 --- a/src/AliasVault.Client/Services/CredentialService.cs +++ b/src/AliasVault.Client/Services/CredentialService.cs @@ -40,6 +40,12 @@ public sealed class CredentialService(HttpClient httpClient, DbService dbService // Generate a random password using a IPasswordGenerator implementation. var passwordBuilder = new SpamOK.PasswordGenerator.BasicPasswordBuilder(); + // Sanity check: if all settings are false, then default to use lowercase letters only. + if (!settings.UseLowercase && !settings.UseUppercase && !settings.UseNumbers && !settings.UseSpecialChars && !settings.UseNonAmbiguousChars) + { + settings.UseLowercase = true; + } + // Apply the settings. var password = passwordBuilder .SetLength(settings.Length)