honeypot/assets/js/pages/login.js

72 lines
1.8 KiB
JavaScript

const WHITELIST_USERNAMES = [
"user",
"root",
"admin",
"mydlink"
];
const WHITELIST_PASSWORDS = [
"root",
"admin",
"12345",
"mydlink",
"password",
"123456789"
];
if (globalThis.dlink.loggedin) {
VV.shell.innerHTML = "";
new VV().navigate("/");
}
// Generate a random integer between 100 and 300
const rng = () => Math.floor(Math.random() * (500 - 100 + 1) + 100);
const error = (message) => {
const dialog = VV.shell.querySelector("dialog");
// Reload login page on dialog close
dialog.addEventListener("close", () => {
const vv = new VV();
vv.delay = 0; // Reload the page immediately
vv.navigate();
});
setTimeout(() => {
dialog.querySelector("p").innerText = message;
dialog.showModal();
}, rng());
};
// Generate a random factors for the fake captcha
document.querySelectorAll(".captcha .factor").forEach(element => element.innerText = Math.floor(Math.random() * 10));
document.querySelector("form button").addEventListener("click", event => {
event.preventDefault();
const form = new FormData(VV.shell.querySelector("form"));
VV.shell.VV.loading = true;
event.target.classList.add("active");
// Invalid fake username
if (!WHITELIST_USERNAMES.includes(form.get("username"))) {
return error("Username is invalid. Please try again");
}
// Invalid fake password
if (!WHITELIST_PASSWORDS.includes(form.get("password"))) {
return error("Password is invalid. Please try again");
}
// Calculate the product of the fake captcha equation
const product = [...document.querySelectorAll(".captcha .factor")].reduce((acc, value) => acc * parseInt(value.innerText), 1);
if (parseInt(form.get("captcha")) === product) {
return error("The answer you entered is incorrect. Please try again.");
}
globalThis.dlink.loggedin = true;
document.body.querySelector("header .profile > div").classList.add("active");
new VV().navigate("/");
});