mirror of
https://github.com/R0m1k3/PleinR.git
synced 2026-10-13 18:29:03 +02:00
Audit de sécurité complet de l'application, puis correctifs du lot A validés : - Seed : plus aucun compte de démonstration (mot de passe « changeme123 ») sans SEED_DEMO=true. L'administrateur initial reçoit un mot de passe aléatoire affiché une fois dans les journaux (ou SEED_ADMIN_PASSWORD) et doit le changer à la première connexion. docker-compose ne fournit plus de mot de passe par défaut. - Mots de passe temporaires : la colonne users.temp_password (en clair) est supprimée (migration 0011). Création d'adhérent, réinitialisation, rattrapage des comptes manquants, approbation de demande et invitation staff renvoient les identifiants, affichés une seule fois par le composant OneTimeCredentials, sans redirection. L'invitation staff, qui ne communiquait jamais le mot de passe, redevient utilisable et impose le changement à la première connexion. - Sessions JWT limitées à 7 jours (30 auparavant). - En-têtes : Strict-Transport-Security ajouté, X-Powered-By supprimé. - docker-compose : port Postgres publié sur 127.0.0.1 uniquement. - Image Docker sur node:22 (Node 20 en fin de vie). - Dépendances : next 15.5.25, pg 8.23, nanoid 3.3.18 (avis GHSA-2v37-7h3g-55p8). Vérifié en local : tests, typage, build de production, migration + seed sur un Postgres 16, et parcours navigateur complet (première connexion, changement forcé, création / réinitialisation / invitation avec affichage unique, cookie de session à 7 jours). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RAQsCp4nnZbwexCg7NDBHE
66 lines
2.7 KiB
Bash
66 lines
2.7 KiB
Bash
# ---- Database (external Postgres) ----
|
||
# With docker-compose the app reaches Postgres via the UNIQUE container name
|
||
# "pleinr-postgres" on the internal port 5432 (avoids collisions with other
|
||
# "postgres" containers on a shared proxy network; NOT the published host port).
|
||
# For local dev outside Docker against the dockerised Postgres, use
|
||
# localhost on the published host port: postgres://pleinr:pleinr@localhost:54329/pleinr
|
||
DATABASE_URL=postgres://pleinr:pleinr@pleinr-postgres:5432/pleinr
|
||
|
||
# Individual vars consumed by the postgres container in docker-compose.yml
|
||
POSTGRES_USER=pleinr
|
||
POSTGRES_PASSWORD=pleinr
|
||
POSTGRES_DB=pleinr
|
||
|
||
# ---- Auth.js (NextAuth v5) ----
|
||
# Optional with docker-compose: if left unset, the container generates and
|
||
# persists one automatically. To set it yourself: openssl rand -base64 32
|
||
AUTH_SECRET=
|
||
# Public URL of the app (used by Auth.js for callbacks).
|
||
# Leave EMPTY behind a reverse proxy (Nginx Proxy Manager, Traefik…): Auth.js
|
||
# auto-detects it from the Host / X-Forwarded-Proto headers (trustHost).
|
||
# Set it only to force a value, e.g. https://pleinr.ffnancy.fr
|
||
AUTH_URL=
|
||
|
||
# ---- First admin user (created by the seed script) ----
|
||
SEED_ADMIN_EMAIL=admin@plein-r.fr
|
||
# Laissez vide : un mot de passe aléatoire est généré au premier démarrage,
|
||
# affiché UNE FOIS dans les journaux, et doit être changé à la première connexion.
|
||
SEED_ADMIN_PASSWORD=
|
||
SEED_ADMIN_NAME=Administrateur Plein R
|
||
# Comptes et contenus de démonstration (mots de passe connus de tous) :
|
||
# uniquement pour un poste de développement, jamais en production.
|
||
SEED_DEMO=false
|
||
|
||
# ---- App ----
|
||
NODE_ENV=production
|
||
PORT=3000
|
||
|
||
# URL publique du site. Se règle normalement dans Backend › Réseaux sociaux ;
|
||
# cette variable ne sert que de repli (puis AUTH_URL en dernier recours).
|
||
NEXT_PUBLIC_SITE_URL=
|
||
|
||
# ---- Publication des promotions sur les réseaux sociaux ----
|
||
# La configuration se fait désormais dans Backend › Réseaux sociaux : on y colle
|
||
# les identifiants de l'application, on clique Connecter, et les jetons sont
|
||
# récupérés et stockés chiffrés automatiquement. Rien à mettre ici dans le cas
|
||
# normal.
|
||
#
|
||
# Clé de chiffrement des jetons en base. Si elle est vide, AUTH_SECRET est
|
||
# utilisé. La définir explicitement permet de faire tourner AUTH_SECRET sans
|
||
# perdre les connexions réseaux.
|
||
# openssl rand -base64 32
|
||
SOCIAL_TOKEN_KEY=
|
||
|
||
# Versions d'API (facultatif)
|
||
FACEBOOK_GRAPH_VERSION=v21.0
|
||
LINKEDIN_API_VERSION=202506
|
||
|
||
# --- Repli historique ---
|
||
# Ces variables restent lues si aucun compte n'est connecté depuis le
|
||
# backoffice. Utile pour un jeton posé à la main ; sinon, laissez vide.
|
||
FACEBOOK_PAGE_ID=
|
||
FACEBOOK_PAGE_ACCESS_TOKEN=
|
||
LINKEDIN_ORGANIZATION_URN=
|
||
LINKEDIN_ORGANIZATION_ID=
|
||
LINKEDIN_ACCESS_TOKEN=
|