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 MIN_LEN = 16; gensaltBtn.addEventListener('click', async () => { const len = Math.max(MIN_LEN, MIN_LEN); 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_LEN) { alert('Password must be at least ' + MIN_LEN + ' characters'); return; } if (s.length < MIN_LEN) { alert('Salt must be at least ' + MIN_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 = ''; });