Skip to content

Commit cdbbf10

Browse files
committed
GH-1 # add GUI input to parametrize password generation
1 parent 23db9c5 commit cdbbf10

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

src/static/interface_password_generation.js

+31-1
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,40 @@ document.getElementById('generatePasswordButton').addEventListener('click', (e)
77
})
88

99
function generatePasswordForUI() {
10-
let password = generatePassword(10);
10+
let length = document.getElementById('passwordLengthInput').value;
11+
let min_lowercase = 0; // option not exposed to the user
12+
let has_uppercase = document.getElementById('hasUpperCaseInput').checked;
13+
let min_uppercase = parseInt(document.getElementById('minUpperCaseInput').value);
14+
15+
let has_number = document.getElementById('hasNumberInput').checked;
16+
let min_number = parseInt(document.getElementById('minNumberInput').value);
17+
18+
let has_special_char = document.getElementById('hasSpecialCharInput').checked;
19+
let min_special_char = parseInt(document.getElementById('minSpecialCharInput').value);
20+
21+
// Weak input verification
22+
if (min_lowercase + min_uppercase + min_number + min_special_char > length) {
23+
displayPasswordGenerationInvalidChoice();
24+
return;
25+
}
26+
27+
let password = generatePassword(
28+
length,
29+
min_lowercase,
30+
has_uppercase,
31+
min_uppercase,
32+
has_number,
33+
min_number,
34+
has_special_char,
35+
min_special_char,
36+
);
1137
displayPasswordGenerationResult(password)
1238
}
1339

1440
function displayPasswordGenerationResult(password){
1541
passwordGenerationResult.innerHTML = `Mot de passe généré: <div id="passwordGenerated">${password}</div>`
42+
}
43+
44+
function displayPasswordGenerationInvalidChoice(){
45+
passwordGenerationResult.innerHTML = '❌ Les paramètres ne sont pas cohérent'
1646
}

src/static/password_generation.html

+20-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,26 @@
1616
<div class="content">
1717
<h2>Génération de mot de passe</h2>
1818
<div>Cette page permet de générer un mot de passe fort</div>
19-
<input id="generatePasswordButton" type="button" value="Générer">
19+
<input id="passwordLengthInput" type="range" value="15" min="1" max="64" oninput="this.nextElementSibling.value = this.value">
20+
<output>15</output>
21+
<p>
22+
<input type="checkbox" id="hasUpperCaseInput" checked/>
23+
<label for="hasUpperCaseInput">Le mot de passe inclut des majuscules, au minimum:</label>
24+
<input type="number" id="minUpperCaseInput" value="1" />
25+
</p>
26+
<p>
27+
<input type="checkbox" id="hasNumberInput" checked/>
28+
<label for="hasNumberInput">Le mot de passe inclut des nombres, au minimum:</label>
29+
<input type="number" id="minNumberInput" value="1" />
30+
</p>
31+
<p>
32+
<input type="checkbox" id="hasSpecialCharInput" checked/>
33+
<label for="hasSpecialCharInput">Le mot de passe inclut des caractères spéciaux, au minimum:</label>
34+
<input type="number" id="minSpecialCharInput" value="1" />
35+
</p>
36+
<p>
37+
<input id="generatePasswordButton" type="button" value="Générer">
38+
</p>
2039
<div id="passwordGenerationResultDiv"></div>
2140
</div>
2241

0 commit comments

Comments
 (0)