50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
import { api, toast } from "/api/monitoring-tg/static/js/api.js";
|
|
import "/api/monitoring-tg/static/js/access.js";
|
|
|
|
const form = document.getElementById("admin-form");
|
|
const password = document.getElementById("admin-password");
|
|
const statusEl = document.getElementById("admin-status");
|
|
const logoutBtn = document.getElementById("admin-logout");
|
|
|
|
function returnUrl() {
|
|
const params = new URLSearchParams(location.search);
|
|
return params.get("return") || "/";
|
|
}
|
|
|
|
async function refresh() {
|
|
const status = await api.accessMe();
|
|
if (status.is_admin) {
|
|
statusEl.textContent = "Админ-доступ активен.";
|
|
form.hidden = true;
|
|
logoutBtn.hidden = false;
|
|
} else if (!status.admin_password_enabled) {
|
|
statusEl.textContent = "Админ пароль не задан. Доступ управляется IP-allowlist.";
|
|
form.hidden = true;
|
|
logoutBtn.hidden = true;
|
|
} else {
|
|
statusEl.textContent = "Введите админ пароль, чтобы открыть админские функции.";
|
|
form.hidden = false;
|
|
logoutBtn.hidden = true;
|
|
setTimeout(() => password.focus(), 30);
|
|
}
|
|
}
|
|
|
|
form.addEventListener("submit", async (e) => {
|
|
e.preventDefault();
|
|
try {
|
|
await api.adminLogin(password.value);
|
|
password.value = "";
|
|
toast("Админ-доступ открыт", "success");
|
|
location.href = returnUrl();
|
|
} catch (err) {
|
|
toast(err.message, "error");
|
|
}
|
|
});
|
|
|
|
logoutBtn.addEventListener("click", async () => {
|
|
await api.adminLogout();
|
|
location.reload();
|
|
});
|
|
|
|
refresh().catch(err => toast(err.message, "error"));
|