Page de connexion pour AUTH_MODE=local #8

Merged
claude Bot merged 1 commits from feat/login-page into main 2026-10-03 11:12:29 +02:00

Requested by Cédric

Avant : en mode local avec AUTH_USER / AUTH_PASS, le navigateur affichait sa popup HTTP Basic, sans déconnexion possible.

Après : une page de connexion aux couleurs de l'interface (thème clair/sombre, FR/EN, mêmes réglages que l'UI) avec un logo optionnel, une session par cookie signé et le bouton de déconnexion en haut à droite, comme en OIDC.

Comment

  • auth_local.go : /login.html (page embarquée), POST /auth/login, /auth/logout, /auth/me (mode: local), /auth/logo. Les pages non connectées redirigent vers la connexion avec retour à la page demandée (redirection limitée à logstream), l'API répond 401 comme en OIDC.
  • Cookie signé avec la clé de /data/session.key, dérivée du compte : changer AUTH_USER ou AUTH_PASS termine les sessions. Flag Secure quand la requête arrive en HTTPS (direct ou X-Forwarded-Proto).
  • Échec : délai d'1 s et ligne de log avec l'adresse du client. Les identifiants HTTP Basic restent acceptés pour les scripts (curl -u), sans popup.
  • LOGIN_LOGO : chemin d'un PNG monté dans le conteneur, rien si vide. Documenté dans .env.example, docker-compose.yml (montage en commentaire) et les deux README.
  • SESSION_TTL vaut pour les deux modes ; OIDC_SESSION_TTL reste accepté (compose et code).
  • Le code de signature des cookies est partagé entre local et oidc (auth.go).

Tests : auth_local_test.go (parcours complet, mauvais mot de passe, redirection ouverte, Basic pour scripts, changement de mot de passe, logo). go vet et go test passent. Page vérifiée visuellement en clair et en sombre ; le serveur n'a pas pu être lancé en local (écoute de port bloquée dans mon bac à sable), donc à essayer sur l'instance.

🤖 Generated with Claude Code

<!-- ccr-projects-attribution: {"github_login":"vblogio"} --> _Requested by **Cédric**_ Avant : en mode `local` avec `AUTH_USER` / `AUTH_PASS`, le navigateur affichait sa popup HTTP Basic, sans déconnexion possible. Après : une page de connexion aux couleurs de l'interface (thème clair/sombre, FR/EN, mêmes réglages que l'UI) avec un logo optionnel, une session par cookie signé et le bouton de déconnexion en haut à droite, comme en OIDC. **Comment** - `auth_local.go` : `/login.html` (page embarquée), `POST /auth/login`, `/auth/logout`, `/auth/me` (`mode: local`), `/auth/logo`. Les pages non connectées redirigent vers la connexion avec retour à la page demandée (redirection limitée à logstream), l'API répond 401 comme en OIDC. - Cookie signé avec la clé de `/data/session.key`, dérivée du compte : changer `AUTH_USER` ou `AUTH_PASS` termine les sessions. Flag `Secure` quand la requête arrive en HTTPS (direct ou `X-Forwarded-Proto`). - Échec : délai d'1 s et ligne de log avec l'adresse du client. Les identifiants HTTP Basic restent acceptés pour les scripts (`curl -u`), sans popup. - `LOGIN_LOGO` : chemin d'un PNG monté dans le conteneur, rien si vide. Documenté dans `.env.example`, `docker-compose.yml` (montage en commentaire) et les deux README. - `SESSION_TTL` vaut pour les deux modes ; `OIDC_SESSION_TTL` reste accepté (compose et code). - Le code de signature des cookies est partagé entre `local` et `oidc` (`auth.go`). **Tests** : `auth_local_test.go` (parcours complet, mauvais mot de passe, redirection ouverte, Basic pour scripts, changement de mot de passe, logo). `go vet` et `go test` passent. Page vérifiée visuellement en clair et en sombre ; le serveur n'a pas pu être lancé en local (écoute de port bloquée dans mon bac à sable), donc à essayer sur l'instance. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude Bot added 1 commit 2026-10-03 11:11:24 +02:00
The local mode now shows a login page in the colors of the UI (light/dark theme, FR/EN)
with a signed session cookie and the log out button, like the OIDC mode. LOGIN_LOGO shows
a PNG mounted in the container on that page. SESSION_TTL applies to both modes
(OIDC_SESSION_TTL still works). HTTP Basic credentials are still accepted for scripts.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
claude Bot marked the pull request as ready for review 2026-10-03 11:12:23 +02:00
claude Bot merged commit 19ed16ac12 into main 2026-10-03 11:12:29 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: vLab-BZH/logstream#8