补充漏推送的东西
This commit is contained in:
@@ -36,6 +36,20 @@ async function aesGcmEncrypt(aesKey, ivBytes, dataBytes) {
|
||||
return new Uint8Array(ct);
|
||||
}
|
||||
|
||||
let needCaptcha = false;
|
||||
|
||||
async function loadCaptcha() {
|
||||
const csrftoken = getCookie('csrftoken');
|
||||
const resp = await fetch('/accounts/captcha/', { method: 'GET', credentials: 'same-origin', headers: { 'X-CSRFToken': csrftoken || '' } });
|
||||
const data = await resp.json();
|
||||
if (resp.ok && data.ok) {
|
||||
const img = document.getElementById('captchaImg');
|
||||
const box = document.getElementById('captchaBox');
|
||||
img.src = 'data:image/png;base64,' + data.image_b64;
|
||||
box.style.display = 'block';
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById('loginForm').addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
const errorEl = document.getElementById('error');
|
||||
@@ -68,7 +82,9 @@ document.getElementById('loginForm').addEventListener('submit', async (e) => {
|
||||
|
||||
const aesKey = await importAesKey(aesKeyRaw);
|
||||
const iv = new Uint8Array(12); window.crypto.getRandomValues(iv);
|
||||
const payload = new TextEncoder().encode(JSON.stringify({ username, password }));
|
||||
const obj = { username, password };
|
||||
if (needCaptcha) obj.captcha = (document.getElementById('captcha').value || '').trim();
|
||||
const payload = new TextEncoder().encode(JSON.stringify(obj));
|
||||
const ct = await aesGcmEncrypt(aesKey, iv, payload);
|
||||
const ctB64 = arrayBufferToBase64(ct);
|
||||
const ivB64 = arrayBufferToBase64(iv);
|
||||
@@ -77,7 +93,10 @@ document.getElementById('loginForm').addEventListener('submit', async (e) => {
|
||||
method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': csrftoken || '' }, body: JSON.stringify({ iv: ivB64, ciphertext: ctB64 })
|
||||
});
|
||||
const submitJson = await submitResp.json();
|
||||
if (!submitResp.ok || !submitJson.ok) throw new Error(submitJson.message || '登录失败');
|
||||
if (!submitResp.ok || !submitJson.ok) {
|
||||
if (submitJson && submitJson.captcha_required) { needCaptcha = true; await loadCaptcha(); }
|
||||
throw new Error(submitJson.message || '登录失败');
|
||||
}
|
||||
window.location.href = submitJson.redirect_url;
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
@@ -85,4 +104,9 @@ document.getElementById('loginForm').addEventListener('submit', async (e) => {
|
||||
} finally {
|
||||
btn.disabled = false;
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById('refreshCaptcha').addEventListener('click', async () => {
|
||||
needCaptcha = true;
|
||||
await loadCaptcha();
|
||||
});
|
||||
Reference in New Issue
Block a user