2023-01-26 05:57:31 +00:00
|
|
|
let adminToken = null;
|
2023-01-28 07:28:15 +00:00
|
|
|
const adminWrapper = document.getElementById("adminWrapper");
|
|
|
|
const adminZone = document.getElementById("adminZone");
|
|
|
|
const createTableForm = document.getElementById("createTableForm");
|
|
|
|
const newTableName = document.getElementById("newTableName");
|
|
|
|
const newTablePass = document.getElementById("newTablePass");
|
2023-01-26 05:57:31 +00:00
|
|
|
|
2023-02-10 05:45:09 +00:00
|
|
|
async function getTable(name, pass) {
|
|
|
|
try {
|
|
|
|
const headers = new Headers();
|
|
|
|
headers.set('Authorization', 'Bearer ' + adminToken.access_token);
|
|
|
|
const res = await fetch(`/admin/api/table/${name}?passcode=${pass}`, {
|
|
|
|
method: 'GET',
|
|
|
|
headers: headers,
|
|
|
|
});
|
|
|
|
|
|
|
|
if (res.ok) {
|
|
|
|
infoHtml = "<a href='#' onclick='getTables()'>← table list</a><br><pre>";
|
|
|
|
infoHtml += await res.text();
|
|
|
|
infoHtml += "</pre>"
|
|
|
|
adminZone.innerHTML = infoHtml;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
console.log(res.status);
|
|
|
|
}
|
|
|
|
} catch (err) {
|
|
|
|
console.dir(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-01-27 04:44:03 +00:00
|
|
|
async function getTables() {
|
|
|
|
try {
|
|
|
|
const headers = new Headers();
|
2023-01-28 07:28:15 +00:00
|
|
|
headers.set('Authorization', 'Bearer ' + adminToken.access_token);
|
2023-01-27 04:44:03 +00:00
|
|
|
const res = await fetch('/admin/api/table/', {
|
|
|
|
method: 'GET',
|
|
|
|
headers: headers
|
|
|
|
});
|
|
|
|
if (res.ok) {
|
2023-01-28 07:28:15 +00:00
|
|
|
const tableList = await res.json();
|
|
|
|
let tableListHTML = "<ul>\n";
|
|
|
|
for (const t of tableList) {
|
2023-02-10 05:45:09 +00:00
|
|
|
tableListHTML += `<li><a href="#" onclick="getTable('${t.name}','${t.passcode}');return false;">${t.name}</a></li>\n`
|
2023-01-28 07:28:15 +00:00
|
|
|
}
|
|
|
|
tableListHTML += "</ul>"
|
|
|
|
adminZone.innerHTML = tableListHTML;
|
2023-01-27 04:44:03 +00:00
|
|
|
} else {
|
2023-01-28 07:28:15 +00:00
|
|
|
if (res.status == 404) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
setErr(await res.headers.get("Quartzgun-Error"));
|
2023-01-27 04:44:03 +00:00
|
|
|
}
|
|
|
|
} catch {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-01-26 05:57:31 +00:00
|
|
|
async function doLogin() {
|
|
|
|
const adminUsrInput = document.getElementById("input_admin_usr");
|
|
|
|
const adminPassInput = document.getElementById("input_admin_pass");
|
|
|
|
|
|
|
|
if (adminUsrInput && adminPassInput) {
|
|
|
|
adminToken = await getAdminToken(adminUsrInput.value, adminPassInput.value);
|
|
|
|
if (adminToken) {
|
2023-01-28 07:28:15 +00:00
|
|
|
adminWrapper.style.display="block";
|
2023-01-27 04:44:03 +00:00
|
|
|
getTables();
|
2023-01-26 05:57:31 +00:00
|
|
|
} else {
|
2023-01-28 07:28:15 +00:00
|
|
|
setErr("Incorrect credentials");
|
2023-01-26 05:57:31 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function getAdminToken(user, pass) {
|
|
|
|
const headers = new Headers();
|
|
|
|
headers.set('Authorization', 'Basic ' + btoa(user + ":" + pass));
|
|
|
|
try {
|
|
|
|
const res = await fetch('/admin/api/auth/', {
|
|
|
|
method: 'POST',
|
|
|
|
headers: headers
|
|
|
|
});
|
|
|
|
|
|
|
|
if (res.ok) {
|
|
|
|
return await res.json();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
} catch (err) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
2023-01-28 07:28:15 +00:00
|
|
|
|
|
|
|
function setTableCreateFormVisible(v) {
|
|
|
|
if (createTableForm) {
|
|
|
|
createTableForm.style.display = v ? "block" : "none";
|
|
|
|
}
|
|
|
|
if (!v) {
|
|
|
|
if (newTableName) {
|
|
|
|
newTableName.value = "";
|
|
|
|
}
|
|
|
|
if (newTablePass) {
|
|
|
|
newTablePass.value = "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function createTable() {
|
|
|
|
const headers = new Headers();
|
|
|
|
headers.set('Authorization', 'Bearer ' + adminToken.access_token);
|
|
|
|
|
|
|
|
const formData = new FormData();
|
|
|
|
formData.set("name", newTableName.value);
|
|
|
|
formData.set("passcode", newTablePass.value);
|
|
|
|
|
|
|
|
let bodyStr = "{";
|
|
|
|
for (const pair of formData.entries()) {
|
|
|
|
bodyStr += `"${pair[0]}": "${pair[1]}",`;
|
|
|
|
}
|
|
|
|
bodyStr = bodyStr.slice(0, -1);
|
|
|
|
bodyStr += "}";
|
|
|
|
const res = await fetch('/admin/api/table/', {
|
|
|
|
method: 'POST',
|
|
|
|
headers: headers,
|
|
|
|
body: bodyStr,
|
|
|
|
});
|
|
|
|
if (res.ok) {
|
|
|
|
getTables();
|
|
|
|
setTableCreateFormVisible(false);
|
|
|
|
}
|
|
|
|
}
|