Adicionar web/admin/admin.js

This commit is contained in:
2026-08-19 21:07:04 -03:00
parent 0eefa3b456
commit 5cb9d78679
+70
View File
@@ -0,0 +1,70 @@
async function loadUsers() {
const r = await fetch("/admin/users");
const users = await r.json();
const container = document.getElementById("users");
container.innerHTML = "";
users.forEach(u => {
const div = document.createElement("div");
div.className = "user-card";
div.innerHTML = `
<strong>${u.name}</strong> (${u.email}) — ${u.role}
<button onclick="selectUser('${u.email}')">Manage</button>
`;
container.appendChild(div);
});
}
async function selectUser(email) {
const r = await fetch(`/admin/conversations/${email}`);
const convs = await r.json();
const details = document.getElementById("user-details");
details.innerHTML = `
<h3>${email}</h3>
<button onclick="promote('${email}')">Promote to Admin</button>
<h4>Conversations</h4>
<ul>${convs.map(c => `<li>${c.title}</li>`).join("")}</ul>
<h4>ACL</h4>
<div id="acl"></div>
`;
loadACL(email);
}
async function loadACL(email) {
const r = await fetch("/admin/users");
const users = await r.json();
const u = users.find(x => x.email === email);
const aclDiv = document.getElementById("acl");
aclDiv.innerHTML = `
${Object.keys(u).map(key => {
if (typeof u[key] === "boolean") {
return `
<label>
<input type="checkbox" onchange="updateACL('${email}', '${key}', this.checked)" ${u[key] ? "checked" : ""}>
${key}
</label><br>
`;
}
return "";
}).join("")}
`;
}
async function updateACL(email, key, value) {
await fetch(`/admin/update_acl/${email}`, {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify({[key]: value})
});
}
async function promote(email) {
await fetch(`/admin/promote/${email}`, {method: "POST"});
loadUsers();
}
window.onload = loadUsers;