You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

63 lines
2.2 KiB

"use strict";
/* eslint-env es2017, browser */
/* global BASE_URL:readable, _post:readable */
function totpGenerate() {
fetch(`${BASE_URL}/admin/totp/generate`, {
method: "POST",
mode: "same-origin",
credentials: "same-origin",
headers: { "Content-Type": "application/json" },
}).then(resp => {
if (!resp.ok) {
return resp.text().then(body => Promise.reject(body));
}
return resp.json();
}).then(data => {
const enroll = document.getElementById("totp-enroll");
enroll.dataset.secret = data.secret;
document.getElementById("totp-qr").innerHTML = data.qr_svg;
document.getElementById("totp-secret").textContent = data.secret;
enroll.classList.remove("d-none");
document.getElementById("totp-generate").textContent = "Generate a new secret";
document.getElementById("totp-enable-code").focus();
}).catch(e => {
alert(`Failed to generate a TOTP secret\n${e}`);
});
}
function totpEnable() {
const secret = document.getElementById("totp-enroll").dataset.secret;
const code = document.getElementById("totp-enable-code").value.trim();
if (!code) {
alert("Please enter the 6-digit code from your authenticator app");
return;
}
_post(`${BASE_URL}/admin/totp/enable`,
"2FA for the admin page is now enabled",
"Failed to enable 2FA",
JSON.stringify({ secret, code })
);
}
function totpDisable() {
const code = document.getElementById("totp-disable-code").value.trim();
if (!code) {
alert("Please enter the current 6-digit code from your authenticator app");
return;
}
if (!confirm("Really disable two-factor authentication for the admin page?")) {
return;
}
_post(`${BASE_URL}/admin/totp/disable`,
"2FA for the admin page is now disabled",
"Failed to disable 2FA",
JSON.stringify({ code })
);
}
document.addEventListener("DOMContentLoaded", (/*event*/) => {
document.getElementById("totp-generate")?.addEventListener("click", totpGenerate);
document.getElementById("totp-enable")?.addEventListener("click", totpEnable);
document.getElementById("totp-disable")?.addEventListener("click", totpDisable);
});