matrix apiUrl: default to https on the gateway vhost
hive-c0re logs in with the hive's matrix sender token and creates the Space and rooms over swarm.matrix.apiUrl. On a hive that does not run the homeserver that crosses the network, so the default is now https://<gatewayHost>. hive-c0re already verifies against the hive trust bundle (SSL_CERT_FILE: system CAs, swarm root and the store's services root), which covers the gateway's leaf for that name. Also drops the remaining loopback-default wording in hive-c0re's matrix module and the openFirewall description, and pins the https default on a hive host without the homeserver in module-eval-matrix-core.
This commit is contained in:
parent
bed4358e19
commit
55a67e38fa
7 changed files with 56 additions and 35 deletions
|
|
@ -126,15 +126,12 @@ in
|
|||
imports = [
|
||||
./options.nix
|
||||
./theme.nix
|
||||
# Hive-CA trust for this daemon's outbound TLS. Nothing it is given by
|
||||
# default is https — the forge and matrix URLs are plain http, and the
|
||||
# queue's TLS is verified against `HIVE_C0RE_OIDC_CA_FILE`
|
||||
# (../hive-tls.nix), not this bundle — so this
|
||||
# changes nothing on an all-local hive. It matters for the split-host
|
||||
# shape the options invite: `swarm.matrix.apiUrl`'s own example is
|
||||
# `https://matrix.example.com`, and pointing it at another hive's
|
||||
# gateway means verifying a leaf signed by a CA generated at runtime,
|
||||
# which no build-time trust store can contain.
|
||||
# Hive-CA trust for this daemon's outbound TLS. The matrix provisioning
|
||||
# URL (`swarm.matrix.apiUrl`) defaults to https on the homeserver's
|
||||
# gateway vhost, which serves a leaf chaining to the store's services
|
||||
# root or the swarm root — CAs generated at runtime, which no
|
||||
# build-time trust store can contain. The queue's TLS is verified
|
||||
# against `HIVE_C0RE_OIDC_CA_FILE` (../hive-tls.nix), not this bundle.
|
||||
#
|
||||
# ⚠️ `SSL_CERT_FILE` REPLACES the trust store, and unlike the other
|
||||
# consumers of this helper, hive-c0re already makes a *public*-TLS call:
|
||||
|
|
|
|||
|
|
@ -181,9 +181,9 @@ in
|
|||
# Client-server API base hive-c0re uses to provision matrix (register
|
||||
# agent users, create the hive space + chat room, invite members).
|
||||
# Supplied by `services.hyperhive.swarm.matrix.apiUrl`, which defaults to
|
||||
# the same gateway vhost as HIVE_MATRIX_URL above but is its own option,
|
||||
# so an operator can point provisioning elsewhere without changing what
|
||||
# agents are handed.
|
||||
# the same gateway vhost as HIVE_MATRIX_URL above, over https because it
|
||||
# carries the hive's matrix token and may cross the network. Its own
|
||||
# option, so provisioning can point elsewhere without changing agents.
|
||||
HIVE_MATRIX_API_URL = config.services.hyperhive.swarm.matrix.apiUrl;
|
||||
}
|
||||
// {
|
||||
|
|
|
|||
|
|
@ -64,10 +64,10 @@ in
|
|||
|
||||
apiUrl = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = if cfg.gatewayHost == null then null else "http://${cfg.gatewayHost}";
|
||||
default = if cfg.gatewayHost == null then null else "https://${cfg.gatewayHost}";
|
||||
defaultText = lib.literalExpression ''
|
||||
if services.hyperhive.swarm.matrix.gatewayHost == null then null
|
||||
else "http://''${services.hyperhive.swarm.matrix.gatewayHost}"
|
||||
else "https://''${services.hyperhive.swarm.matrix.gatewayHost}"
|
||||
'';
|
||||
example = "https://matrix.example.com";
|
||||
description = ''
|
||||
|
|
@ -77,10 +77,14 @@ in
|
|||
`hyperhive.matrix.url`, which is the gateway vhost handed to
|
||||
each agent's `hive-matrix-daemon`.
|
||||
|
||||
Defaults to the homeserver's gateway vhost (`gatewayHost`), the
|
||||
same name on every hive whichever host runs tuwunel, and `null`
|
||||
when there is no vhost. Set it explicitly when the homeserver is
|
||||
reachable only some other way.
|
||||
Defaults to `https://` on the homeserver's gateway vhost
|
||||
(`gatewayHost`), the same name on every hive whichever host runs
|
||||
tuwunel, and `null` when there is no vhost. hive-c0re logs in
|
||||
with the hive's matrix sender token over this URL, so it crosses
|
||||
the network whenever hive-c0re is not on the homeserver's host:
|
||||
an `http://` value sends that token in cleartext. hive-c0re
|
||||
verifies the gateway's certificate against the hive trust bundle
|
||||
(system CAs plus the swarm and services roots).
|
||||
|
||||
`null` means hive-c0re has no homeserver to provision against
|
||||
and matrix provisioning no-ops. There is deliberately no
|
||||
|
|
|
|||
|
|
@ -431,10 +431,10 @@ in
|
|||
example = true;
|
||||
description = ''
|
||||
Open `httpPort` in the host firewall. Off by default
|
||||
(secure-by-default): the host reaches the homeserver on
|
||||
loopback, and agent containers reach it at `gatewayHost`'s vhost
|
||||
(`chat.<swarm-domain>` by default) via the gateway — so the firewall open only matters for
|
||||
access from outside the host. Flip to `true` when announcing
|
||||
(secure-by-default): hive-c0re and agent containers reach the
|
||||
homeserver at `gatewayHost`'s vhost (`chat.<swarm-domain>` by
|
||||
default) via the gateway, so the open port only matters for
|
||||
direct access to `httpPort` from outside the host. Flip to `true` when announcing
|
||||
the homeserver to other hives or when an external matrix
|
||||
client needs to reach the client-server API directly.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue