Add OperServ with AKILL network bans

The first operator module. AKILL manages network bans as a typed,
event-sourced list with lazy expiry, mirroring the patterns the other
modules use:

- AKILL ADD [+expiry] <user@host> <reason> stores the ban and drives an
  ircd G-line (applied to matching users already online and to future
  connections); AKILL DEL <mask|number> lifts it; AKILL LIST [pattern]
  shows the live list, numbered. Admin-only.
- Bans are Global events, so every node holds the list and re-asserts each
  one at burst with its remaining duration. Expired bans are hidden lazily
  and dropped at compaction.
- Masks are normalised to user@host (a nick! prefix is stripped, both
  sides lowercased) and an all-wildcard mask is refused.

Email (send_email) is already reachable from the api via ServiceCtx, and
adds AddLine/DelLine to the action vocabulary for any future X-line kinds.
This commit is contained in:
Jean Chevronnet 2026-07-14 00:12:29 +00:00
parent 253d4c2a2d
commit d2c1d076fb
No known key found for this signature in database
12 changed files with 430 additions and 12 deletions

8
Cargo.lock generated
View file

@ -333,6 +333,7 @@ dependencies = [
"fedserv-inspircd",
"fedserv-memoserv",
"fedserv-nickserv",
"fedserv-operserv",
"fedserv-statserv",
"hmac",
"pbkdf2",
@ -406,6 +407,13 @@ dependencies = [
"fedserv-api",
]
[[package]]
name = "fedserv-operserv"
version = "0.0.1"
dependencies = [
"fedserv-api",
]
[[package]]
name = "fedserv-statserv"
version = "0.0.1"