mirror of
https://github.com/aliasvault/aliasvault.git
synced 2026-05-18 21:40:41 -04:00
Add range binds and sanity checks (#167)
This commit is contained in:
@@ -10,31 +10,36 @@
|
||||
<label for="password-length" class="block text-sm font-medium text-gray-700 dark:text-gray-300">Password Length: @PasswordSettings.Length</label>
|
||||
<input type="range" id="password-length" min="8" max="64"
|
||||
class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-primary-500 focus:ring-primary-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white"
|
||||
@bind="PasswordSettings.Length" @bind:event="oninput">
|
||||
@bind="PasswordSettings.Length" @oninput="HandleLengthInput">
|
||||
</div>
|
||||
|
||||
<div class="flex items-center">
|
||||
<input id="use-lowercase" type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded dark:bg-gray-700 dark:border-gray-600" @bind="PasswordSettings.UseLowercase">
|
||||
<input id="use-lowercase" type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded dark:bg-gray-700 dark:border-gray-600"
|
||||
@bind="PasswordSettings.UseLowercase" @bind:after="OnPasswordSettingsChanged">
|
||||
<label for="use-lowercase" class="ml-2 block text-sm text-gray-700 dark:text-gray-300">Include lowercase letters (a-z)</label>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center">
|
||||
<input id="use-uppercase" type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded dark:bg-gray-700 dark:border-gray-600" @bind="PasswordSettings.UseUppercase">
|
||||
<input id="use-uppercase" type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded dark:bg-gray-700 dark:border-gray-600"
|
||||
@bind="PasswordSettings.UseUppercase" @bind:after="OnPasswordSettingsChanged">
|
||||
<label for="use-uppercase" class="ml-2 block text-sm text-gray-700 dark:text-gray-300">Include uppercase letters (A-Z)</label>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center">
|
||||
<input id="use-numbers" type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded dark:bg-gray-700 dark:border-gray-600" @bind="PasswordSettings.UseNumbers">
|
||||
<input id="use-numbers" type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded dark:bg-gray-700 dark:border-gray-600"
|
||||
@bind="PasswordSettings.UseNumbers" @bind:after="OnPasswordSettingsChanged">
|
||||
<label for="use-numbers" class="ml-2 block text-sm text-gray-700 dark:text-gray-300">Include numbers (0-9)</label>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center">
|
||||
<input id="use-special-chars" type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded dark:bg-gray-700 dark:border-gray-600" @bind="PasswordSettings.UseSpecialChars">
|
||||
<input id="use-special-chars" type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded dark:bg-gray-700 dark:border-gray-600"
|
||||
@bind="PasswordSettings.UseSpecialChars" @bind:after="OnPasswordSettingsChanged">
|
||||
<label for="use-special-chars" class="ml-2 block text-sm text-gray-700 dark:text-gray-300">Include special characters (!@@#$%^&*)</label>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center">
|
||||
<input id="use-non-ambiguous" type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded dark:bg-gray-700 dark:border-gray-600" @bind="PasswordSettings.UseNonAmbiguousChars">
|
||||
<input id="use-non-ambiguous" type="checkbox" class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded dark:bg-gray-700 dark:border-gray-600"
|
||||
@bind="PasswordSettings.UseNonAmbiguousChars" @bind:after="OnPasswordSettingsChanged">
|
||||
<label for="use-non-ambiguous" class="ml-2 block text-sm text-gray-700 dark:text-gray-300">Avoid ambiguous characters (1, l, I, 0, O, etc.)</label>
|
||||
</div>
|
||||
|
||||
@@ -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.
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handle input from the password length input.
|
||||
/// </summary>
|
||||
private void HandleLengthInput(ChangeEventArgs e)
|
||||
{
|
||||
int newLength;
|
||||
if (int.TryParse(e.Value?.ToString(), out newLength))
|
||||
{
|
||||
PasswordSettings.Length = newLength;
|
||||
RefreshPreview();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handle changes to the password settings.
|
||||
/// </summary>
|
||||
private void OnPasswordSettingsChanged()
|
||||
{
|
||||
RefreshPreview();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user