From 5db6b1e2b0d59b0880880f839ac7ca1c64153040 Mon Sep 17 00:00:00 2001 From: Matthieu Date: Tue, 17 Mar 2026 15:22:55 +0100 Subject: [PATCH] fix(security) : replace real secrets in .env with placeholders and create .env.example Secrets moved to .env.local (gitignored). Added .env.example for new developers. Also added .idea/ and docker/.env.docker.local to .gitignore and removed them from tracking. Tickets: T-001, T-013, T-018 Co-Authored-By: Claude Opus 4.6 (1M context) --- .env | 6 +- .env.example | 99 ++++++++++++++++++++++++++++ .gitignore | 8 +++ .idea/.gitignore | 10 --- .idea/Lesstime.iml | 8 --- .idea/db-forest-config.xml | 6 -- .idea/material_theme_project_new.xml | 10 --- .idea/modules.xml | 8 --- .idea/php.xml | 20 ------ .idea/vcs.xml | 6 -- docker/.env.docker.local | 9 --- 11 files changed, 110 insertions(+), 80 deletions(-) create mode 100644 .env.example delete mode 100644 .idea/.gitignore delete mode 100644 .idea/Lesstime.iml delete mode 100644 .idea/db-forest-config.xml delete mode 100644 .idea/material_theme_project_new.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/php.xml delete mode 100644 .idea/vcs.xml delete mode 100644 docker/.env.docker.local diff --git a/.env b/.env index b1d0ee8..0a412c9 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ APP_ENV=dev -APP_SECRET="a64f5614357bf56aecb1d7470e431535" +APP_SECRET="change_me_in_env_local" APP_DEBUG=1 DEFAULT_URI=http://localhost/ @@ -11,7 +11,7 @@ CORS_ALLOW_ORIGIN='^https?://(localhost|127.0.0.1)(:[0-9]+)?$' ###> lexik/jwt-authentication-bundle ### JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem -JWT_PASSPHRASE=c2dbeec8fa8255bdab24e88b9fc1e57927740c429ae3b930d03e51b92e13a85f +JWT_PASSPHRASE=change_me_in_env_local JWT_COOKIE_SECURE=0 JWT_TOKEN_TTL=86400 JWT_COOKIE_TTL=86400 @@ -20,4 +20,4 @@ JWT_COOKIE_TTL=86400 DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:${POSTGRES_PORT}/${POSTGRES_DB}?serverVersion=16&charset=utf8" -ENCRYPTION_KEY=aaaaaaaaa \ No newline at end of file +ENCRYPTION_KEY=change_me_in_env_local \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..55794b5 --- /dev/null +++ b/.env.example @@ -0,0 +1,99 @@ +############################################################################### +# Lesstime — Fichier d'environnement de reference +# +# Copiez ce fichier en .env.local et remplissez les valeurs sensibles. +# Les valeurs par defaut dans .env suffisent pour le developpement ; +# seuls les secrets (APP_SECRET, JWT_PASSPHRASE, ENCRYPTION_KEY) doivent +# etre definis dans .env.local. +# +# Ne commitez JAMAIS de vrais secrets dans .env ou .env.example. +############################################################################### + +# =========================================================================== +# App +# =========================================================================== + +# Environnement Symfony : dev, test, prod +APP_ENV=dev + +# Secret applicatif Symfony (32 chars hex) — a generer pour chaque installation +# Generer avec : php -r "echo bin2hex(random_bytes(16));" +APP_SECRET="change_me_in_env_local" + +# Active/desactive le mode debug (1 = oui, 0 = non) +APP_DEBUG=1 + +# URI par defaut de l'application (utilise pour les liens absolus) +DEFAULT_URI=http://localhost/ + +# =========================================================================== +# CORS (nelmio/cors-bundle) +# =========================================================================== + +# Origines autorisees pour les requetes cross-origin (regex) +CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$' + +# =========================================================================== +# JWT (lexik/jwt-authentication-bundle) +# =========================================================================== + +# Chemin vers la cle privee RSA pour signer les tokens JWT +JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem + +# Chemin vers la cle publique RSA pour verifier les tokens JWT +JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem + +# Passphrase de la cle privee JWT — a generer pour chaque installation +# Generer avec : php -r "echo bin2hex(random_bytes(32));" +JWT_PASSPHRASE=change_me_in_env_local + +# Cookie securise (1 = HTTPS uniquement, 0 = HTTP autorise — dev seulement) +JWT_COOKIE_SECURE=0 + +# Duree de vie du token JWT en secondes (86400 = 24h) +JWT_TOKEN_TTL=86400 + +# Duree de vie du cookie JWT en secondes (86400 = 24h) +JWT_COOKIE_TTL=86400 + +# =========================================================================== +# Base de donnees (Doctrine / PostgreSQL) +# =========================================================================== + +# Les variables POSTGRES_* sont definies dans docker/.env.docker +# et injectees automatiquement par Docker Compose. +# DATABASE_URL est construite a partir de ces variables. +DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:${POSTGRES_PORT}/${POSTGRES_DB}?serverVersion=16&charset=utf8" + +# =========================================================================== +# Chiffrement +# =========================================================================== + +# Cle de chiffrement pour les donnees sensibles (64 chars hex = 256 bits) +# Generer avec : php -r "echo bin2hex(random_bytes(32));" +ENCRYPTION_KEY=change_me_in_env_local + +# =========================================================================== +# Docker (docker/.env.docker) +# +# Ces variables sont lues par Docker Compose. Voir docker/.env.docker +# pour les valeurs par defaut. Creez docker/.env.docker.local pour +# surcharger localement. +# =========================================================================== + +# DOCKER_APP_NAME=lesstime +# DOCKER_PHP_VERSION=8.4.6 +# DOCKER_NODE_VERSION=24.12.0 +# APP_USER=www-data +# POSTGRES_DB=lesstime +# POSTGRES_USER=root +# POSTGRES_PASSWORD=root +# POSTGRES_PORT=5435 +# XDEBUG_CLIENT_HOST=host.docker.internal + +# =========================================================================== +# Frontend (frontend/.env) +# =========================================================================== + +# Base URL de l'API pour le client Nuxt (relative, proxifiee par Nginx) +# NUXT_PUBLIC_API_BASE=/api diff --git a/.gitignore b/.gitignore index 10642cc..1e60d19 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,11 @@ ###> lexik/jwt-authentication-bundle ### /config/jwt/*.pem ###< lexik/jwt-authentication-bundle ### + +###> ide ### +.idea/ +###< ide ### + +###> docker local ### +docker/.env.docker.local +###< docker local ### diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index ab1f416..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Ignored default folder with query files -/queries/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -# Editor-based HTTP Client requests -/httpRequests/ diff --git a/.idea/Lesstime.iml b/.idea/Lesstime.iml deleted file mode 100644 index bf4c9d3..0000000 --- a/.idea/Lesstime.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/db-forest-config.xml b/.idea/db-forest-config.xml deleted file mode 100644 index 62bb30c..0000000 --- a/.idea/db-forest-config.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/material_theme_project_new.xml b/.idea/material_theme_project_new.xml deleted file mode 100644 index 5f23c8f..0000000 --- a/.idea/material_theme_project_new.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 885af30..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml deleted file mode 100644 index 50688a4..0000000 --- a/.idea/php.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 9661ac7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/docker/.env.docker.local b/docker/.env.docker.local deleted file mode 100644 index 807b9cc..0000000 --- a/docker/.env.docker.local +++ /dev/null @@ -1,9 +0,0 @@ -DOCKER_APP_NAME=lesstime -DOCKER_PHP_VERSION=8.4.6 -DOCKER_NODE_VERSION=24.12.0 -APP_USER=www-data -POSTGRES_DB=lesstime -POSTGRES_USER=root -POSTGRES_PASSWORD=root -POSTGRES_PORT=5435 -XDEBUG_CLIENT_HOST=192.168.0.124