todo: headscale invites are live on all four servers

This commit is contained in:
2026-08-05 19:02:32 +00:00
parent 9dd3f76e56
commit 91ed90893d
+6 -2
View File
@@ -125,8 +125,12 @@ day. Kept here for what the policy work turned up, which is not obvious from the
proxy to the server's Officer Companion, because the joining phone has to claim without an Officer proxy to the server's Officer Companion, because the joining phone has to claim without an Officer
account and this sidecar is loopback-only behind our auth; the spec's own "an invite must work when account and this sidecar is loopback-only behind our auth; the spec's own "an invite must work when
the platform is down" argument says the same. Officer stores no invite and no claim token. the platform is down" argument says the same. Officer stores no invite and no claim token.
**Waiting on the companion:** `/officer-api/enroll/*` is not deployed anywhere yet, so the section **Live on all four servers since 2026-08-05.** The 401 that blocked it was a companion-side prefix
renders its unavailable state. Four gaps were sent back to the spec author: `keys.ts` has no parse (a Headscale key prefix is a fixed 12 chars and may contain `-`; they split on the first one);
fixed upstream. Verified end to end against pastilhas-eu: create returns the
`officer-offscale://join#…` link, list shows the record, revoke flips it to `revoked`. The list
envelope is not in the spec, so `pickInvites` takes the body's array whatever it is keyed under.
Four gaps were sent back to the spec author: `keys.ts` has no
sub-day key TTL for the 5-minute claim key, "the sidecar must refuse plaintext" is unenforceable sub-day key TTL for the 5-minute claim key, "the sidecar must refuse plaintext" is unenforceable
behind nginx, `tailnet` is not a headscale concept and has to be recorded on the invite, and behind nginx, `tailnet` is not a headscale concept and has to be recorded on the invite, and
`/api/v1/enroll/*` collides with headscale's own namespace. `/api/v1/enroll/*` collides with headscale's own namespace.