feat(admin): fondation auth de l'application d'administration #7
Closed
kyuno
wants to merge 1 commit from
feat/admin-auth into main
pull from: feat/admin-auth
merge into: kyuno:main
kyuno:main
kyuno:feat/release-push-docker-images
kyuno:feat/admin-user-accounts
kyuno:fix/forgejo-env-passthrough
kyuno:chore/release-0.2.3
kyuno:feat/login-password-toggle
kyuno:feat/common-source-search
kyuno:feat/onboarding-wizard-order
kyuno:feat/missing-tech-steps
kyuno:feat/auto-recipe-diets
kyuno:feat/seasoning-ingredients
kyuno:feat/recipe-form-sticky-actions
kyuno:chore/release-0.2.2
kyuno:fix/manger-bouger-empty-filter
kyuno:feat/forgejo-issue-from-contact-message
kyuno:feat/admin-contact-messages
kyuno:feat/contact-message-model-and-form
kyuno:fix/android-values-night-xml-comment
kyuno:feat/shopping-list-check-items
kyuno:fix/android-status-bar-dark-mode
kyuno:fix/hide-app-settings-tab-on-web
kyuno:fix/mobile-bottom-nav-icons-only
kyuno:fix/landing-hide-open-app-in-native
kyuno:fix/client-force-logout-on-401
kyuno:fix/mobile-update-check-on-open
kyuno:fix/layout-spec-freeze-clock
kyuno:fix/planning-grid-fluid-height
kyuno:fix/recipe-picker-dialog-mobile-empty
kyuno:chore/version-0.2.1
kyuno:feat/mobile-planning-view
kyuno:feat/mobile-landing-download
kyuno:feat/mobile-app-settings
kyuno:feat/mobile-shopping-recipes
kyuno:feat/mobile-cooking-session
kyuno:feat/mobile-cypress-viewports
kyuno:feat/mobile-popovers-safe
kyuno:feat/mobile-app-redirect
kyuno:fix/ci-test-job-serialization
kyuno:feat/mobile-ui-shell
kyuno:fix/cors-origin-capacitor-app
kyuno:fix/logout-redirect-landing
kyuno:feat/mobile-download-proxy
kyuno:fix/forgejo-latest-release-url
kyuno:fix/forgejo-release-curl-install
kyuno:fix/forgejo-release-native-api
kyuno:fix/sanity-build-docker
kyuno:fix/release-yml-forgejo
kyuno:fix/upload-artifact-ghes-compat
kyuno:feat/landing-apk-download
kyuno:fix/gradlew-executable-bit
kyuno:feat/mobile-ci-android-apk
kyuno:feat/mobile-update-check
kyuno:claude/magical-stonebraker-5dc636
kyuno:feat/capacitor-android-native
kyuno:claude/practical-swartz-648594
kyuno:feat/admin-tour-page
kyuno:feat/tour-engine
kyuno:feat/admin-tour-crud
kyuno:feat/tour-scenarios-backend
kyuno:feat/landing-page
kyuno:feat/capacitor-android-shell
kyuno:feat/mobile-responsive-pass
kyuno:feat/mobile-bearer-auth
kyuno:feat/ohmonbento-recipe-source
kyuno:feat/quitoque-recipe-source
kyuno:feat/leftovers-drag-drop
kyuno:feat/leftovers-basket
kyuno:feat/leftovers-assign-discard
kyuno:feat/leftovers-portions-foundations
kyuno:fix/correction-popover-span-selection
kyuno:fix/source-scroll-loop
kyuno:feat/admin-monitoring-websocket
kyuno:fix/admin-monitoring-spa-route-collision
kyuno:fix/step-counter-scoped-to-direct-children
kyuno:fix/admin-monitoring-intercept
kyuno:feat/tech-step-temperature-correction
kyuno:feat/tech-step-metadata-editor-redesign
kyuno:feat/cooking-recipes-inline-detail
kyuno:feat/cooking-stepper-recipe-groups
kyuno:fix/recipe-tech-step-metadata-on-update
kyuno:perf/nlp-textcat-width
kyuno:feat/cooking-session-stepper
kyuno:feat/cooking-optimizer-metadata
kyuno:feat/temperature-metadata
kyuno:ci/postgres-as-background-container
kyuno:feat/merge-admin-into-web
kyuno:docs/environment-variables
kyuno:fix/mocha-db-suites-first-run
kyuno:feat/admin-tech-steps
kyuno:feat/off-catalog-ingredients
kyuno:feat/cooking-session-ui
kyuno:feat/admin-monitoring
kyuno:feat/admin-metrics
kyuno:feat/admin-web-scaffold
kyuno:feat/cooking-session-api
kyuno:feat/cooking-optimizer-engine
kyuno:feat/tech-step-correction-merged-editor
kyuno:fix/tech-step-correction-metadata-discoverability
kyuno:feat/tech-step-correction-metadata
kyuno:feat/tech-step-metadata
kyuno:feat/tech-step-intent-service
kyuno:feat/shopping-list
kyuno:feat/fr-ingredient-unit-matching
kyuno:feat/sources-infinite-scroll
kyuno:fix/750g-browse-empty-query
kyuno:feat/marmiton-recipe-source
kyuno:feat/tech-step-detection-reliability
kyuno:experiment/llm-tech-step-poc
kyuno:feat/nlp-tech-step-detection
kyuno:chore/biome-style-rules
kyuno:feat/unify-source-detail-view
kyuno:fix/isolate-test-database
kyuno:fix/json-ld-not-a-browsable-source
kyuno:feat/browse-sources-backend
kyuno:feat/browse-sources-ui
kyuno:feat/import-recipe-review
kyuno:feat/plan-import-flow
kyuno:feat/highlight-tech-steps
kyuno:fix/runtime-seed-source-sync
kyuno:feat/english-matching
kyuno:feat/jsonld-source-adapter
kyuno:feat/recipe-step-translation
kyuno:feat/themealdb-source-icon
kyuno:feat/house-source-preferences
kyuno:feat/tech-steps-catalog
kyuno:feat/recipe-source-adapter
kyuno:feat/recipe-source-linking
kyuno:feat/ingredient-unit-catalog
kyuno:feat/ingredient-reproducible-flag
kyuno:refactor/catalog-camel-case-uids
kyuno:experiment/cucumber-cypress
kyuno:feat/recipe-catalog-v2
kyuno:feat/planning-page-design
kyuno:feat/settings-household-account
kyuno:feat/user-preferences-sidebar-nav
No reviewers
Labels
No labels
High
Low
Medium
bug
duplicate
enhancement
help wanted
invalid
planned
question
to plan
wontfix
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference: kyuno/batchCooking#7
Reference in a new issue
No description provided.
Delete branch "feat/admin-auth"
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?
Regroupée dans #15 (une seule PR pour tout le bloc « application d'administration » : auth + scaffold + métriques + monitoring + tri des corrections). Fermée.
Premiere brique de l'app d'admin independante : une surface /admin/* ajoutee a apps/api, avec une authentification totalement distincte de celle des utilisateurs. - Table AdminUser isolee (aucune relation vers UserProfile), migration 20260828120000_admin_user. - lib/admin-jwt.ts : sign/verify d'un JWT admin, secret ADMIN_JWT_SECRET propre (jamais interchangeable avec JWT_SECRET). - middlewares/require-admin.ts : cookie admin_session dedie, re-check tokenVersion, echoue ferme si ADMIN_JWT_SECRET absent (posture requireInternalWorker). res.locals.adminUser type via AdminLocals. - modules/admin/ : admin-auth.{routes,service}.ts (POST /login, POST /logout, GET /me), admin.routes.ts agregateur monte /admin. Pas de signup expose. - lib/safe-admin.ts : mapping AdminUser -> AdminUserView (drop passwordHash + tokenVersion, dates ISO). - scripts/create-admin.ts : creation du 1er admin hors-bande (flags ou ADMIN_INITIAL_*). - CORS : setupCore accepte string[] ; app.ts autorise CORS_ORIGIN + ADMIN_CORS_ORIGIN. - Shared : schemas/admin.ts (adminLoginSchema), types/admin.ts (AdminUserView). - Env : ADMIN_JWT_SECRET (optionnel), ADMIN_COOKIE_NAME, ADMIN_CORS_ORIGIN, ADMIN_INITIAL_* ; .env.example, .env.test.example, docker-compose.yml, ci.yml mis a jour. - reset-db.ts truncate admin_users. - Tests Mocha admin-auth.test.ts : 400 sans body, 401 email inconnu / mauvais mdp, login OK (cookie pose, lastLoginAt, pas de hash/tokenVersion dans la reponse), /me derriere requireAdmin, logout, et un cookie `session` d'utilisateur normal ne donne pas acces a /admin/*. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>kyuno referenced this pull request2026-08-28 12:45:23 +02:00
Pull request closed