API interne pour la façade Rust : clé de pilotage à la demande

Lot 2 de la migration : la façade va authentifier elle-même ses routes
/api/*. La clé de pilotage vit dans la base bbolt, verrouillée par ce
process ; la façade la demande donc à GET /internal/v1/auth, à chaque
requête — un changement de clé prend effet tout de suite, comme avant.

La réponse contient un secret, d'où trois verrous : route branchée
uniquement sur l'écoute TCP directe (le tunnel du relais sert le mux nu),
jeton tiré au hasard par la façade à chaque démarrage et exigé en
temps constant, 404 sans rien révéler sinon. Base illisible : 503, la
façade fermera l'accès plutôt que de l'ouvrir.

Spec du lot 2 jointe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 5.5 committed 2026-10-13 22:35:00 +02:00
1 parent 4b859c4eb6
commit a99d988e70
4 files changed
+233 -1

No files matched your search

+3 -1
View File
@@ -96,7 +96,9 @@ func cmdWeb(args []string) error {
// clients tiers, en plein milieu d'une génération.
// gzipHandler : l'UI (~590 Ko) et les gros JSON partent compressés ; les flux
// SSE et les binaires passent tels quels (voir web_gzip.go).
srv := &http.Server{Handler: gzipHandler(mux), ReadHeaderTimeout: 10 * time.Second}
// withInternalAPI : l'API interne de la façade Rust (web_internal.go) n'est
// branchée QUE sur cette écoute directe — le tunnel sert le mux nu.
srv := &http.Server{Handler: gzipHandler(withInternalAPI(mux)), ReadHeaderTimeout: 10 * time.Second}
return srv.Serve(ln)
}