feat: POST /service-token — Service-Token für weckruf-<org> erzeugen/rotieren #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Kontext
Der Service-Token (Credential C, womit WeckRuf gegen ntfy publisht) ist
aktuell das einzige Credential im ntfy-Setup, das komplett manuell gehalten
wird: Service-User
weckruf-<org>wird von Hand viantfy token adderzeugt,der Wert per Klartext-
.txtausgelesen und in die WeckRuf-Config kopiert.Operator-Passwörter (Credential B) sind dagegen vollautomatisch über
/set-password. Diese Asymmetrie ist die Wurzel der.txt-Krücke.Vorschlag:
POST /service-tokenNeuer Endpoint analog zu
/set-password, Bearer-Auth (org-scoped wie/sync):Logik:
user := cfg.ServiceUser(org)→weckruf-<org>— existiert bereits(
internal/config/config.go:50-52)AddUser(user)idempotent — existiert (internal/ntfy/ntfy.go)SetAccess(user, org+"-*", "write")— existiert (internal/ntfy/ntfy.go)userrevoken, dann genau einenneuen erzeugen → immer exakt 1 aktiver Token
/set-password)Warum Rotation statt Append (wichtig)
ntfy überschreibt Tokens nie — jedes
ntfy token addlegt eine neue Zeile an.Ein naiver „Token erzeugen"-Button würde bei jedem Klick einen weiteren
weckruf-<org>-Token anhäufen — alle bleiben gültig (Sicherheits- + Hygiene-Problem, kein Überblick, welcher in welcher
.envsteckt). Real beobachtet: derAdmin-User
tobiashat durch wiederholtes Erzeugen bereits 4 Tokens. Daher:revoke-all-then-create-one.
Neue CLI-Wrapper nötig
AddToken(user) (string, error)→ntfy token add <user>, Token aus stdout parsenListTokens(user)+RemoveToken(user, id)→ntfy token remove <user> <id>(für die Rotation)
Sicherheit
/set-password.PlanReconcile) bleibt: dieser Endpointist ein separater, expliziter Aufruf, kein Teil von
/sync.Schwester-Issues (Stufe 2 / Voll-Automatik, Cross-Repo)
WeckRuf/configWeckRuf/configstatt staticconfig.yamllesenUmgesetzt in v0.2.0 (Commit
f3a5f96).Eine bewusste Abweichung von der Issue-Spec: statt revoke-all-then-create-one wurde create-one-then-revoke-old implementiert — frischen Token zuerst prägen, dann die alten widerrufen. Selbes Endergebnis (genau 1 aktiver Token, kein Anhäufen), aber kein Zeitfenster ohne gültigen Token → WeckRuf publisht durchgehend weiter. Per Test abgesichert, dass der frisch geprägte Token nie widerrufen wird.
Release: https://git.te-c.net/TEC/ntfy-user-provisioner/releases/tag/v0.2.0