grpc: full account-authority write API (Register through UngroupNick)
A trusted caller can now do everything a user does through NickServ commands — Register, Authenticate, SetPassword, SetEmail, Confirm, Drop, ForceLogout, GroupNick, UngroupNick — over gRPC instead of IRC. Each mirrors its NickServ command's exact behavior (Drop reuses the same cleanup a peer's gossiped drop already triggers; SetPassword/Register derive credentials off the shared engine lock, same as the IRC path) but is privileged: the bearer token is the authorization, so most calls skip the account's own password check the IRC command requires — the same trust model as an admin-level JSON-RPC integration. A write commits locally and gossips to every other node exactly like an IRC-originated one, no new propagation path needed. Verified end-to-end over the real wire, not just unit tests: registered an account via gRPC, changed its password via gRPC, then logged into a live IRC session with that exact password.
This commit is contained in:
parent
e5a0d2acdf
commit
d99eb16dab
4 changed files with 554 additions and 29 deletions
13
README.md
13
README.md
|
|
@ -43,6 +43,19 @@ SCRAM verifiers, cert fingerprints) and the finer channel-ops-list events
|
|||
authenticated, optional server TLS. Omit `[grpc]` in config.toml to run
|
||||
without it.
|
||||
|
||||
The same port also serves **`Accounts`**, the write side: `Register`,
|
||||
`Authenticate`, `SetPassword`, `SetEmail`, `Confirm`, `Drop`, `ForceLogout`,
|
||||
`GroupNick`, `UngroupNick` — a trusted caller (e.g. a website's own backend,
|
||||
already having done its own login/session check) managing accounts the same
|
||||
way an IRC user does through NickServ, minus the command syntax. The bearer
|
||||
token *is* the authorization: unlike the NickServ commands these mirror, most
|
||||
calls do not re-check the account's own password (an admin-level override, the
|
||||
same trust model a JSON-RPC integration to another services package would
|
||||
use) — `Register` and `Authenticate` are the two exceptions, since the
|
||||
password is the actual input there. A write committed this way replicates to
|
||||
every other fedserv node exactly like an IRC-originated one does — gossip
|
||||
doesn't know or care where it came from.
|
||||
|
||||
## Config
|
||||
|
||||
```toml
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue