mirror of
https://github.com/KeyZox71/knl_meowscendence.git
synced 2025-12-31 21:56:41 +01:00
「✨」 feat: added 2fa to login page :D
This commit is contained in:
@ -53,7 +53,40 @@ export default class extends Aview {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async run() {
|
async run() {
|
||||||
dragElement(document.getElementById("window"));
|
dragElement(document.getElementById("window"));
|
||||||
|
|
||||||
|
const totpVerify = async () => {
|
||||||
|
const username = (document.getElementById("username") as HTMLInputElement).value;
|
||||||
|
const password = (document.getElementById("password") as HTMLInputElement).value;
|
||||||
|
const totpPin = (document.getElementById('totpPin') as HTMLInputElement).value;
|
||||||
|
try {
|
||||||
|
const data_req = await fetch("http://localhost:3001/login", {
|
||||||
|
method: "POST",
|
||||||
|
headers: { "Content-Type": "application/json", },
|
||||||
|
credentials: "include",
|
||||||
|
body: JSON.stringify({ user: username, password: password, token: totpPin }),
|
||||||
|
});
|
||||||
|
if (data_req.status === 200) {
|
||||||
|
isLogged();
|
||||||
|
navigationManager("/");
|
||||||
|
} else if (data_req.status === 401) {
|
||||||
|
const data = await data_req.json();
|
||||||
|
|
||||||
|
const error = document.createElement("p");
|
||||||
|
error.innerHTML = data.error;
|
||||||
|
error.classList.add("text-red-700", "dark:text-red-500");
|
||||||
|
|
||||||
|
idWindow.appendChild(error);
|
||||||
|
} else {
|
||||||
|
console.log(data_req.status)
|
||||||
|
console.log(await data_req.json())
|
||||||
|
// throw new Error("invalid response");
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const login = async () => {
|
const login = async () => {
|
||||||
const username = (document.getElementById("username") as HTMLInputElement).value;
|
const username = (document.getElementById("username") as HTMLInputElement).value;
|
||||||
const password = (document.getElementById("password") as HTMLInputElement).value;
|
const password = (document.getElementById("password") as HTMLInputElement).value;
|
||||||
@ -71,11 +104,69 @@ export default class extends Aview {
|
|||||||
isLogged();
|
isLogged();
|
||||||
navigationManager("/");
|
navigationManager("/");
|
||||||
}
|
}
|
||||||
|
else if (data_req.status === 402) {
|
||||||
|
const popup: HTMLDivElement = document.createElement("div");
|
||||||
|
popup.id = "2fa-popup";
|
||||||
|
popup.classList.add("z-10", "absolute", "default-border");
|
||||||
|
const header = popup.appendChild(document.createElement("div"));;
|
||||||
|
header.classList.add("bg-linear-to-r", "from-orange-200", "to-orange-300", "flex", "flex-row", "min-w-35", "justify-between", "px-2");
|
||||||
|
header.id = "2fa-header";
|
||||||
|
header.appendChild(document.createElement("span")).innerText = "2fa.ts";
|
||||||
|
const btn = header.appendChild(document.createElement("button"));
|
||||||
|
btn.innerText = " × ";
|
||||||
|
btn.onclick = () => { document.getElementById("2fa-popup").remove(); };
|
||||||
|
|
||||||
|
const popup_content: HTMLSpanElement = popup.appendChild(document.createElement("div"));
|
||||||
|
popup_content.id = "2fa-popup-content";
|
||||||
|
popup_content.classList.add("flex", "flex-col", "bg-neutral-200", "dark:bg-neutral-800", "p-6", "pt-4", "text-neutral-900", "dark:text-white", "space-y-4");
|
||||||
|
|
||||||
|
const tokenInput = document.createElement("input");
|
||||||
|
tokenInput.type = "tel";
|
||||||
|
tokenInput.id = "totpPin";
|
||||||
|
tokenInput.name = "totpPin";
|
||||||
|
tokenInput.placeholder = "TOTP code";
|
||||||
|
tokenInput.required = true;
|
||||||
|
tokenInput.autocomplete = "off";
|
||||||
|
tokenInput.pattern = "[0-9]*";
|
||||||
|
tokenInput.setAttribute("inputmode", "numeric");
|
||||||
|
tokenInput.classList.add("bg-white", "text-neutral-900","w-full", "px-4", "py-2", "input-border");
|
||||||
|
|
||||||
|
const tokenSubmit = document.createElement("button");
|
||||||
|
tokenSubmit.type = "submit";
|
||||||
|
tokenSubmit.classList.add("default-button", "w-full");
|
||||||
|
tokenSubmit.id = "totp-submit";
|
||||||
|
tokenSubmit.innerHTML = "submit";
|
||||||
|
|
||||||
|
const tokenTitle = document.createElement("h1");
|
||||||
|
tokenTitle.innerHTML = `hey ${username}, please submit your 2fa code below :`;
|
||||||
|
tokenTitle.classList.add("text-gray-900", "dark_text-white", "text-lg", "pt-0", "pb-4", "justify-center");
|
||||||
|
|
||||||
|
const form = document.createElement("form");
|
||||||
|
form.method = "dialog";
|
||||||
|
form.classList.add("space-y-4");
|
||||||
|
form.appendChild(tokenTitle);
|
||||||
|
form.appendChild(tokenInput);
|
||||||
|
form.appendChild(tokenSubmit);
|
||||||
|
|
||||||
|
popup_content.appendChild(form);
|
||||||
|
|
||||||
|
const uu = document.getElementById("username") as HTMLInputElement;
|
||||||
|
const pass = document.getElementById("password") as HTMLInputElement;
|
||||||
|
|
||||||
|
uu.disabled = true;
|
||||||
|
pass.disabled = true;
|
||||||
|
|
||||||
|
document.getElementById("app")?.appendChild(popup);
|
||||||
|
tokenInput.focus();
|
||||||
|
dragElement(document.getElementById("2fa-popup"));
|
||||||
|
|
||||||
|
document.getElementById("totp-submit")?.addEventListener("click", totpVerify);
|
||||||
|
}
|
||||||
else if (data_req.status === 400)
|
else if (data_req.status === 400)
|
||||||
{
|
{
|
||||||
const data = await data_req.json();
|
const data = await data_req.json();
|
||||||
document.getElementById("login-error-message").innerHTML = "error: " + data.error;
|
document.getElementById("login-error-message").innerHTML = "error: " + data.error;
|
||||||
document.getElementById("login-error-message").classList.remove("hidden");
|
document.getElementById("login-error-message").classList.remove("hidden");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -127,6 +127,7 @@ export default class extends Aview {
|
|||||||
if (!main)
|
if (!main)
|
||||||
return console.error("what");
|
return console.error("what");
|
||||||
|
|
||||||
|
// don't read this shit for you mental health
|
||||||
if (matches.matchHistory) {
|
if (matches.matchHistory) {
|
||||||
for (let match of matches.matchHistory) {
|
for (let match of matches.matchHistory) {
|
||||||
const newEntry = document.createElement("li");
|
const newEntry = document.createElement("li");
|
||||||
|
|||||||
Reference in New Issue
Block a user