Added a button to copy result. Plus note for password.

This commit is contained in:
2026-01-19 16:47:13 +01:00
parent 5b88979921
commit af7fa0b87e
5 changed files with 80 additions and 3 deletions

View File

@@ -5,6 +5,7 @@ const salt = document.getElementById('salt');
const hashBtn = document.getElementById('hashBtn');
const result = document.getElementById('result');
const clearBtn = document.getElementById('clearBtn');
const resultBtn = document.getElementById('resultBtn');
const MIN_PASS_LEN = 16;
const MIN_SALT_LEN = 8;
@@ -54,3 +55,15 @@ clearBtn.addEventListener('click', () => {
result.value = '';
});
resultBtn.addEventListener('click', async () => {
if (!result.value) {
alert('Nothing to copy.');
}
try {
await navigator.clipboard.writeText(result.value);
alert('Copied to clipboard.');
} catch (err) {
alert('Failed to copy: ' + err);
}
});

62
static/js/main.js.save Normal file
View File

@@ -0,0 +1,62 @@
const gensaltBtn = document.getElementById('gensaltBtn');
const algorithm = document.getElementById('algorithm');
const password = document.getElementById('password');
const salt = document.getElementById('salt');
const hashBtn = document.getElementById('hashBtn');
const result = document.getElementById('result');
const clearBtn = document.getElementById('clearBtn');
const resultBtn = document.getElementById('resultBtn');
const MIN_PASS_LEN = 16;
const MIN_SALT_LEN = 8;
const MAX_SALT_LEN = 16;
gensaltBtn.addEventListener('click', async () => {
const len = MAX_SALT_LEN; // can be adjusted or user-defined
const res = await fetch('/gensalt?length=' + len);
if (!res.ok) { alert('Could not generate salt'); return; }
const data = await res.json();
salt.value = data.salt;
});
hashBtn.addEventListener('click', async () => {
const pass = password.value || '';
const s = salt.value || '';
const alg = algorithm.value;
if (pass.length < MIN_PASS_LEN) {
alert('Password must be at least ' + MIN_PASS_LEN + ' characters');
return;
}
if (s.length < MIN_SALT_LEN || s.length > MAX_SALT_LEN) {
alert('Salt must be between ' + MIN_SALT_LEN + ' and ' + MAX_SALT_LEN + ' characters');
return;
}
const payload = { password: pass, salt: s, algorithm: alg };
const res = await fetch('/hash', {
method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload)
});
if (!res.ok) {
const txt = await res.text();
alert('Error: ' + txt);
return;
}
const data = await res.json();
result.value = data.hash;
});
clearBtn.addEventListener('click', () => {
password.value = '';
salt.value = '';
result.value = '';
});
btnResult.addEventListener('click', () => {
navigator.clipboard.writeText(result.value);
alert("Copied text: " + result.value);
});