feat: bulk unban via checkboxes
All checks were successful
Deploy / deploy (push) Successful in 23s

Adds per-row checkboxes, a select-all toggle, a live "N selected" counter,
and an /unban-bulk endpoint that DELETEs each chosen decision id. Single-row
Unban buttons still work via hx-vals so they don't accidentally submit the
bulk form.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-17 00:02:59 +02:00
parent ffe08a3fc4
commit a324d5a68d
2 changed files with 64 additions and 24 deletions

View File

@@ -122,6 +122,25 @@ def unban():
return list_decisions()
@app.post("/unban-bulk")
def unban_bulk():
ids = [i for i in request.form.getlist("id") if i.isdigit()]
if not ids:
return list_decisions()
deleted = 0
errors = []
for did in ids:
r = _machine("DELETE", f"/v1/decisions/{did}")
if r.status_code in (200, 204):
deleted += 1
else:
errors.append(f"{did}:{r.status_code}")
log.info("unban-bulk by=%s count=%d errors=%s", caller_ip(), deleted, errors)
if errors:
return f"deleted {deleted}/{len(ids)}; errors: {', '.join(errors[:5])}", 502
return list_decisions()
@app.post("/unban-me")
def unban_me():
ip = caller_ip()