swarm-controller: revoke matrix admin from former operators
The operator admin sync now also takes homeserver admin away. It records each user id it sends `make-user-admin` for in `operator-matrix-admins.json` under the controller's state directory (written to a temporary file and renamed over it; a missing file is an empty set). On each pass, a recorded account that is no longer in authelia's `admins` group but is still joined to `#admins:<server>` is sent `!admin users force-leave-room <user> <admin room id>` as `@swarm`, over the same `/_matrix` path the grant uses. Leaving that room is what ends tuwunel admin. It never revokes an admin it didn't grant, `@swarm`, tuwunel's server user (`@conduit:<server>`), an agent's account (the store's `hive-agent-*` cert roles, the same roster the agent account mint uses), or anyone in the new `services.hyperhive.swarm.matrix.adminSync.ignoreUsers` list. That list reaches the daemon as `SWARM_CONTROLLER_MATRIX_ADMIN_SYNC_IGNORE_USERS`. It also never sends a revoke that would leave `#admins` with no member besides `@swarm` and the server user. A revoke is sent at most once per account per controller process, like a grant. A recorded account that is out of both the group and the room is dropped from the file. Closes #4799
This commit is contained in:
parent
40d6f30834
commit
962c1548eb
8 changed files with 515 additions and 41 deletions
|
|
@ -8,9 +8,10 @@
|
|||
//! `load_hives`. A config change means a redeploy, same as every other
|
||||
//! option this process reads.
|
||||
//!
|
||||
//! The one thing it does persist is `webhook-secret` under its
|
||||
//! `StateDirectory` (see `webhook`), because that key is handed to Forgejo
|
||||
//! at registration and so cannot be regenerated per boot.
|
||||
//! It persists `webhook-secret` under its `StateDirectory` (see `webhook`),
|
||||
//! because that key is handed to Forgejo at registration and so cannot be
|
||||
//! regenerated per boot, and the operator admin sync's granted set beside it
|
||||
//! (see `matrix_account::operator_admin`).
|
||||
//!
|
||||
//! Distinct from `hive-c0re`, which is per-hive: c0re owns the agents on
|
||||
//! one host, this owns what is true across hives.
|
||||
|
|
|
|||
Loading…
Reference in a new issue