Skip to content

Commit f3dfdc1

Browse files
committed
feat(Passphrase Generator): add a passphrase minimum length
Fix #343
1 parent 06afc29 commit f3dfdc1

2 files changed

Lines changed: 15 additions & 5 deletions

File tree

locales/en.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2869,6 +2869,11 @@ tools:
28692869
placeholder-passphrase: Passphrase...
28702870
tag-copy: Copy
28712871
tag-refresh: Refresh
2872+
cannot-generate-a-passphrase-of-minlen-value-maxlen-value-characters-please-retry:
2873+
"# Cannot generate a passphrase of [{0} - {1}] characters with current
2874+
settings, try to change words count"
2875+
words-words: Words ({0})
2876+
label-min-passphrase-len: "Min passphrase len:"
28722877
paste-as-markdown:
28732878
title: Paste as Markdown
28742879
description: Paste cells/tables and links from clipboard content as Markdown

src/tools/passphrase-generator/passphrase-generator.vue

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const numbers = useQueryParamOrStorage({ name: 'nums', storageName: 'pass-genera
1414
const capitalize = useQueryParamOrStorage({ name: 'capitalize', storageName: 'pass-generator:capitalize', defaultValue: false });
1515
const saltChars = useQueryParamOrStorage({ name: 'salt', storageName: 'pass-generator:salt', defaultValue: '' });
1616
const separator = useQueryParamOrStorage({ name: 'sep', storageName: 'pass-generator:sep', defaultValue: '-' });
17+
const minLen = useQueryParamOrStorage({ name: 'minlen', storageName: 'pass-generator:minlen', defaultValue: 0 });
1718
const maxLen = useQueryParamOrStorage({ name: 'maxlen', storageName: 'pass-generator:maxlen', defaultValue: 100 });
1819
1920
const [passphrases, refreshPassphrases] = computedRefreshable(
@@ -35,7 +36,7 @@ const [passphrases, refreshPassphrases] = computedRefreshable(
3536
}
3637
}
3738
38-
let maxIter = 10;
39+
let maxIter = 1000;
3940
while (maxIter > 0) {
4041
const passphrase = generateSillyPassword({
4142
capitalize: capitalize.value,
@@ -47,12 +48,13 @@ const [passphrases, refreshPassphrases] = computedRefreshable(
4748
}
4849
return word;
4950
}).join(separator.value);
50-
if (passphrase.length < maxLen.value) {
51+
if (minLen.value < passphrase.length && passphrase.length < maxLen.value) {
5152
return passphrase;
5253
}
5354
maxIter -= 1;
5455
}
55-
return `# Cannot generate a passphrase of max ${maxLen.value} characters`;
56+
return t('tools.passphrase-generator.texts.cannot-generate-a-passphrase-of-minlen-value-maxlen-value-characters-please-retry',
57+
[minLen.value, maxLen.value]);
5658
}).join('\n'),
5759
);
5860
@@ -63,7 +65,7 @@ const { copy } = useCopy({ source: passphrases, text: t('tools.passphrase-genera
6365
<div>
6466
<c-card>
6567
<n-space>
66-
<n-form-item :label="`Words (${words})`" label-placement="left">
68+
<n-form-item :label="t('tools.passphrase-generator.texts.words-words', [words])" label-placement="left">
6769
<n-slider v-model:value="words" :step="1" :min="1" :max="512" mr-2 />
6870
<n-input-number-i18n v-model:value="words" size="small" />
6971
</n-form-item>
@@ -74,8 +76,11 @@ const { copy } = useCopy({ source: passphrases, text: t('tools.passphrase-genera
7476
</n-space>
7577

7678
<n-space>
79+
<n-form-item :label="t('tools.passphrase-generator.texts.label-min-passphrase-len')" label-placement="left">
80+
<n-input-number-i18n v-model:value="minLen" :max="maxLen" size="small" />
81+
</n-form-item>
7782
<n-form-item :label="t('tools.passphrase-generator.texts.label-max-passphrase-len')" label-placement="left">
78-
<n-input-number-i18n v-model:value="maxLen" size="small" />
83+
<n-input-number-i18n v-model:value="maxLen" :min="minLen" size="small" />
7984
</n-form-item>
8085

8186
<n-form-item :label="t('tools.passphrase-generator.texts.label-capitalize')" label-placement="left">

0 commit comments

Comments
 (0)