The three client registrations move into glue-{controller,nats,matrix}-oidc-client.nix,
gated only on deploy.authelia.enable and reading their ids from swarm.* options,
so the host running authelia registers every one of them whichever host runs
the service. The matrix callback is a new read-only swarm.matrix.sso.redirectUri,
read by both the homeserver's config and its client entry.
swarm-secret-publish now also publishes the queue's and the homeserver's minted
secrets to swarm/services/<id>/oidc/client. The queue host reads its responder's
secret there with swarm-bao-nats-auth-oidc under the responder's own leaf
(swarm-nats-auth role gains that one read path), and the homeserver's host with
swarm-bao-matrix-oidc under matrix-ctl's leaf (swarm-matrix-ctl role gains its
one read path). The host-file copies are gone: swarm-nats-auth-secrets now
delivers only the callout seeds and the store identity, and
hive-matrix-oidc-secret is removed. A fetch unit whose leaf is unset still
renders and fails naming the option pair.
Closes #4943
45 lines
1.7 KiB
Nix
45 lines
1.7 KiB
Nix
# Glue: register the swarm queue as an OIDC client wherever authelia runs.
|
|
#
|
|
# ONE PAIRING PER FILE — swarm-nats ← authelia, and nothing else. Deleting this
|
|
# leaves a queue responder whose introspection calls authelia refuses, so it
|
|
# denies every client, and no minted secret for swarm-secret-publish to put in
|
|
# the store.
|
|
#
|
|
# ⚠️ Gated on authelia being HERE, and NOT on this host running the queue. A
|
|
# client is a row in THIS host's provider config, so it is declared where that
|
|
# config is rendered; ./swarm-nats.nix's `config` hangs off
|
|
# `deploy.nats.enable`, which answers a question about a different host. Same
|
|
# shape as ./glue-grafana-oidc-client.nix.
|
|
#
|
|
# Registered whether or not the swarm runs a queue: nothing in `swarm.*` records
|
|
# that, so the cost of a swarm without one is one unused client and one unused
|
|
# minted secret.
|
|
{
|
|
lib,
|
|
config,
|
|
...
|
|
}:
|
|
let
|
|
hyperhiveCfg = config.services.hyperhive;
|
|
deployCfg = hyperhiveCfg.deploy;
|
|
natsCfg = hyperhiveCfg.swarm.nats;
|
|
in
|
|
{
|
|
config = lib.mkIf deployCfg.authelia.enable {
|
|
services.hyperhive.swarm.authelia.oidc.clients = [
|
|
{
|
|
id = natsCfg.clientId;
|
|
description = "HyperHive swarm queue";
|
|
# `client_credentials`: a queue's clients are daemons with nobody to
|
|
# redirect, and no redirect URI exists.
|
|
#
|
|
# ⚠️ `kind` says that, and an empty `redirectUris` does NOT: authelia
|
|
# permits only the grants a client names, and an omitted `grant_types`
|
|
# means authorization-code alone. Introspection, which is all the
|
|
# responder calls, works either way, so the token endpoint's
|
|
# `unauthorized_client` is the only place a wrong kind shows.
|
|
kind = "machine";
|
|
}
|
|
];
|
|
};
|
|
}
|