matrix: publish the appservice token from the swarm, not just read it
`glue-matrix-bao-token.nix` has read `secret/swarm/hives/<hive>/matrix/appservice-token` since it landed, but nothing ever wrote that path. The store was empty in every deployment, so every read degraded to "keep what activation minted" and each hive stayed the origin of a value the swarm has to agree on — two hives never converged. `swarm-secret-publish` is now the producer. It already holds a store identity, already writes under the hive prefix, and already runs per hive in the roster, so the mint is a third loop beside the two OIDC copies rather than a second shape of this unit. Idempotence comes from a record of its own, not from the store: this principal is granted `create`/`update` with no `read`, so it cannot ask whether a hive already has a token. It keeps what it minted under `StateDirectory=` (0700 dir, 0600 file) and mints only when that file is missing or empty; the `put` runs every time, because re-putting the same bytes changes nothing for a reader while a mint whose publish failed must not be left as a token this host holds and no hive can reach. The token never becomes a nix literal and never reaches argv: the mint redirects into a file, and the publish hands bao `value=@<path>` so bao opens it itself — the same handling the OIDC loops use. `hive-matrix.nix`'s activation mint stays as the genuine first-boot fallback. It already fires only when the token file is absent, so it cannot clobber a value the store delivered; `hs_token` has no swarm half and is still minted there for real. Refs #4402
This commit is contained in:
parent
7ee7080b21
commit
199afa41c8
5 changed files with 167 additions and 35 deletions
|
|
@ -192,8 +192,12 @@ restarts, so the first boot after the switch already has both halves.
|
|||
sets it fails to evaluate with a message naming the appservice — a hive
|
||||
that never set it (the default) is unaffected.
|
||||
- **A swarm store holding the old `matrix/registration-token` path** is
|
||||
no longer read at all; the hive uses its locally minted appservice
|
||||
token until someone `put`s a value at `matrix/appservice-token`.
|
||||
no longer read at all. The value that matters now lives at
|
||||
`matrix/appservice-token`, and `swarm-secret-publish` on the authelia
|
||||
host mints and `put`s it there — the hive uses its locally minted
|
||||
token only until the first successful read. See
|
||||
[`../swarm/secrets.md`](../swarm/secrets.md) for how that mint stays
|
||||
idempotent across runs.
|
||||
|
||||
</details>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue