Settings bans card: unban also requires confirmation
This commit is contained in:
+20
-5
@@ -246,18 +246,33 @@ async function loadBans() {
|
||||
const bans = await res.json();
|
||||
if (!bans.length) { el.innerHTML = '<span class="chip">Активных блокировок нет</span>'; return; }
|
||||
el.innerHTML = bans.map(b => `
|
||||
<span class="chip">
|
||||
<span class="chip" data-chip="${esc(b.ip)}">
|
||||
<b>${esc(b.ip)}</b> — ${esc(b.reason)} до ${new Date(b.banned_until).toLocaleString('ru')}
|
||||
<button type="button" data-unban="${esc(b.ip)}" title="Разблокировать" style="background:none;border:none;color:var(--primary);cursor:pointer;font-weight:700">✕</button>
|
||||
</span>`).join('');
|
||||
}
|
||||
|
||||
document.getElementById('bansList').addEventListener('click', async e => {
|
||||
async function doUnban(ip) {
|
||||
const res = await fetch(`${API}/api/bans/${encodeURIComponent(ip)}`, { method: 'DELETE', headers: hdr() });
|
||||
if (res.ok) { showToast('IP разблокирован: ' + ip); loadBans(); }
|
||||
else showToast('Ошибка разблокировки');
|
||||
}
|
||||
|
||||
document.getElementById('bansList').addEventListener('click', e => {
|
||||
const ip = e.target.closest('[data-unban]')?.dataset.unban;
|
||||
if (!ip) return;
|
||||
const res = await fetch(`${API}/api/bans/${encodeURIComponent(ip)}`, { method: 'DELETE', headers: hdr() });
|
||||
if (res.ok) { showToast('IP разблокирован'); loadBans(); }
|
||||
else showToast('Ошибка разблокировки');
|
||||
const chip = e.target.closest('[data-chip]');
|
||||
if (chip.dataset.confirming) return;
|
||||
chip.dataset.confirming = '1';
|
||||
chip.style.background = 'rgba(239,68,68,.08)';
|
||||
e.target.outerHTML = `
|
||||
<span style="white-space:nowrap">
|
||||
Убрать из блокировки?
|
||||
<button type="button" data-unban-yes style="background:none;border:none;color:#16a34a;cursor:pointer;font-weight:700">Да</button>
|
||||
<button type="button" data-unban-no style="background:none;border:none;color:var(--muted);cursor:pointer;font-weight:700">Нет</button>
|
||||
</span>`;
|
||||
chip.querySelector('[data-unban-yes]').addEventListener('click', () => doUnban(ip));
|
||||
chip.querySelector('[data-unban-no]').addEventListener('click', () => loadBans());
|
||||
});
|
||||
|
||||
document.getElementById('backupBtn').addEventListener('click', downloadBackup);
|
||||
|
||||
Reference in New Issue
Block a user