Admin fixes, bang-triggered hub menu, and OIDC SSO #2
No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
tweek/cairn!2
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "session/june-2026-part2"
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?
Résumé
Trois axes : correction des bugs admin/sécurité de la session précédente, refonte du menu en hub plein écran déclenché par bang, et intégration SSO OpenID Connect.
1 — Correctifs (TODO session précédente)
Cause racine commune : les structs
modeln'avaient pas de tags JSON → les endpoints admin sérialisaient en PascalCase alors que le front lit du snake_case (« undefined » partout, « Invalid Date »). En prime,User.Password(hash argon2) fuitait via/admin/users.userJSON,auditJSON) ; stats en snake_case ; timestamps unixUser.Passwordtaguéjson:"-"(defense-in-depth)register_blocked_duplicate_email)audit_log.actionwindow.onerror2 — Menu hub (bang configurable)
Plus de barre de navigation. Un bang (défaut
!menu, configurable) tapé dans la recherche morph en hub plein écran liquid-glass avec tuiles : Marque-pages, Compte, Administration (admin), Déconnexion.SettingsService: résolution env-verrouillé → DB-éditable → défaut/api/meexposemenu_bang; admin GET/PUT/api/admin/settings/menudocker_terre_ginyu/go3 — SSO OpenID Connect
OIDC standard (Authorization Code + PKCE, discovery
.well-known, claims via userinfo), sans dépendance externe (image scratch préservée).OIDCService(discovery cache, state/PKCE store TTL, exchange, userinfo)ProvisionSSO: création JIT, liaison par email, username unique, mot de passe aléatoire inutilisable/api/auth/sso/{config,login,callback}CAIRN_OIDC_*, verrouillé) ou admin → Réglages → SSO (secret write-only)Test plan (vérifié via preview navigateur)
!menumorph plein écran, tuiles fonctionnelles, greeting = username!Cadmtesté) et/me/api/auth/sso/loginredirige (302) ou échoue gracieusement🤖 Generated with Claude Code