feat(admin-web): IP auto-bans list view and unban action #330

Merged
Claude-Run merged 1 commit from feat/BUNYIP-320-web-ip-bans into main 2026-07-04 01:03:01 +02:00
Member

Add an /admin/ip-bans page to bunyip-web that lists the currently-active IP auto-bans (IP, reason, strikes, banned-at, expires-at) via the subtask 7 endpoint GET /v1/admin/ip-bans, with an Unban button per row that POSTs to a lift handler (DELETE /v1/admin/ip-bans/{ip}) and redirects back with a success/error toast, mirroring the existing admin POST -> redirect-with-?toast_ok= pattern.

The API client gains ip_bans() and unban_ip() in api/admin.rs plus an AdminIpBan type mirroring the domain BanInfo serialization. The unban IP travels in a hidden form field so an IPv6 address never sits in the web route path; unban_ip percent-encodes it into the API path. The page is AdminUser-guarded like every other admin page and linked from the admin sidebar nav.

#BUNYIP-320

Add an /admin/ip-bans page to bunyip-web that lists the currently-active IP auto-bans (IP, reason, strikes, banned-at, expires-at) via the subtask 7 endpoint GET /v1/admin/ip-bans, with an Unban button per row that POSTs to a lift handler (DELETE /v1/admin/ip-bans/{ip}) and redirects back with a success/error toast, mirroring the existing admin POST -> redirect-with-?toast_ok= pattern. The API client gains ip_bans() and unban_ip() in api/admin.rs plus an AdminIpBan type mirroring the domain BanInfo serialization. The unban IP travels in a hidden form field so an IPv6 address never sits in the web route path; unban_ip percent-encodes it into the API path. The page is AdminUser-guarded like every other admin page and linked from the admin sidebar nav. #BUNYIP-320
feat(admin-web): IP auto-bans list view and unban action
All checks were successful
E2E / Playwright against deployment (pull_request) Successful in 37s
Check / fmt + clippy + build + tests (pull_request) Successful in 16m27s
Create release / Create release from merged PR (pull_request) Has been skipped
cfed80e6a5
Add an /admin/ip-bans page to bunyip-web that lists the currently-active IP auto-bans (IP, reason, strikes, banned-at, expires-at) via the subtask 7 endpoint GET /v1/admin/ip-bans, with an Unban button per row that POSTs to a lift handler (DELETE /v1/admin/ip-bans/{ip}) and redirects back with a success/error toast, mirroring the existing admin POST -> redirect-with-?toast_ok= pattern.

The API client gains ip_bans() and unban_ip() in api/admin.rs plus an AdminIpBan type mirroring the domain BanInfo serialization. The unban IP travels in a hidden form field so an IPv6 address never sits in the web route path; unban_ip percent-encodes it into the API path. The page is AdminUser-guarded like every other admin page and linked from the admin sidebar nav.

#BUNYIP-320
Claude-Run deleted branch feat/BUNYIP-320-web-ip-bans 2026-07-04 01:03:01 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/bunyip!330
No description provided.