Skip to content

Commit a3caaf2

Browse files
committed
GH-2 # display password check result
1 parent 6204d79 commit a3caaf2

File tree

4 files changed

+49
-8
lines changed

4 files changed

+49
-8
lines changed

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ Plusieurs solutions sont envisagées. La première est de pousser les données e
6161

6262
---
6363

64-
Pour la partie frontend, je n'ai pas réussie à mon grand regret à utiliser la librairie npm dans le navigateur d'une manière compatible avec Jest. Je me suis rabattu sur `browserify` puis sur `esbuild`.
64+
Pour la partie frontend, je n'ai pas réussie à mon grand regret à utiliser la librairie npm dans le navigateur d'une manière compatible avec Jest. Je me suis rabattu sur `browserify` puis sur `esbuild`.
65+
Cela m'a obligé à supprimer les références au JS dans le HTML et a séparer le JS entre les éléments qui font appel au DOM (non compatible avec Jest) avec le code que l'on souhaite tester (voir [commit](https://github.com/Hugo-C/HIBP/commit/6204d792616d1e2dca3550e355350d4feeee047e)).
6566

6667
### Partie génération de mot de passe
6768

src/static/check_password_leak.js

+31-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { hashPrefix } from './hash.js';
22

3-
document.addEventListener("keyup", ({key}) => {
3+
const API_URL = 'http://localhost:8000/api/v1/haveibeenrocked/';
4+
5+
const passwordLeakCheckResult = document.getElementById('passwordLeakCheckResult')
6+
7+
document.addEventListener('keyup', ({key}) => {
48
if (key === 'Enter') {
59
submitPassword()
610
}
@@ -9,7 +13,30 @@ document.getElementById('submittedPasswordButton').addEventListener('click', (e)
913
submitPassword();
1014
})
1115

12-
function submitPassword() {
13-
let password = document.getElementById('submittedPassword').value;
14-
hashPrefix(password).then(prefix => alert(prefix));
16+
async function submitPassword() {
17+
let submittedPassword = document.getElementById('submittedPassword').value;
18+
let prefix = await hashPrefix(submittedPassword);
19+
let passwords = await fetchMatchingPasswords(prefix);
20+
21+
if (passwords.includes(submittedPassword)) {
22+
passwordIsLeakedResult(submittedPassword)
23+
} else {
24+
passwordIsClearedResult(submittedPassword)
25+
}
26+
}
27+
28+
async function fetchMatchingPasswords(prefix) {
29+
let response = await fetch(API_URL + prefix);
30+
let data = await response.json();
31+
return data[prefix];
32+
}
33+
34+
function passwordIsLeakedResult(submittedPassword){
35+
passwordLeakCheckResult.innerHTML = `🫠 le mot de passe "${submittedPassword}" est présent dans la base`
36+
passwordLeakCheckResult.className = "resultLeak";
37+
}
38+
39+
function passwordIsClearedResult(submittedPassword){
40+
passwordLeakCheckResult.innerHTML = `🥳 le mot de passe "${submittedPassword}" n'est pas dans la base`
41+
passwordLeakCheckResult.className = "resultClear";
1542
}

src/static/index.html

+7-3
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,15 @@
1515

1616
<div class="content">
1717
<h2>Test de la fuite de mot de passe</h2>
18-
<p>Cette page permet de tester si votre mot de passe est présent dans la base <a
19-
href="https://en.wikipedia.org/wiki/RockYou#Data_breach" target="_blank">RockYou</a>.</p>
18+
<div>Cette page permet de tester si votre mot de passe est présent dans la base <a
19+
href="https://en.wikipedia.org/wiki/RockYou#Data_breach" target="_blank">RockYou</a>.
20+
</div>
21+
<div>
22+
Le mot de passe n'est pas envoyé au serveur, uniquement les premiers caractères de son hash.
23+
</div>
2024
<input id="submittedPassword"/>
2125
<input id="submittedPasswordButton" type="button" value="Tester">
22-
<p>Le mot de passe n'est pas envoyé au serveur, uniquement les premiers caractères de son hash.</p>
26+
<div id="passwordLeakCheckResult"></div>
2327
</div>
2428

2529
</body>

src/static/main.css

+9
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,13 @@ body {
4040
.content {
4141
margin-left: 200px;
4242
padding-left: 20px;
43+
}
44+
45+
/* --- custom from here --- */
46+
.resultLeak {
47+
background-color: #cb4335;
48+
}
49+
50+
.resultClear {
51+
background-color: #28b463;
4352
}

0 commit comments

Comments
 (0)