diff --git a/CHANGELOG.md b/CHANGELOG.md index d95493c..a8e8e01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,15 @@ Format : [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/) — versionnag --- +## [1.6.2] - 2026-05-15 + +### Corrigé +- `oidc/start.php` : garde explicite après `session_start()` — erreur 500 immédiate si `session.save_path` est inaccessible, évite un flux OIDC condamné à l'échec silencieux +- `oidc/callback.php` : même garde de session ; `error_log` en cas d'échec du contrôle de state pour faciliter le diagnostic +- `consignes.md` : règle ajoutée — pool PHP-FPM avec `user = www-data`, pas le compte admin personnel + +--- + ## [1.6.1] - 2026-05-15 ### Corrigé diff --git a/consignes.md b/consignes.md index 01205d5..d67544f 100644 --- a/consignes.md +++ b/consignes.md @@ -90,8 +90,8 @@ Chemin serveur : `varlog:/var/www/lan.acegrp.varlog/` ```bash cp /var/www/lan.acegrp.abonnel-www/.env /tmp/.env.bak -rm -rf /var/www/lan.acegrp.abonnel-www -git clone --depth=1 https://cedricAbonnel:TOKEN@git.abonnel.fr/cedricAbonnel/folio.git /var/www/lan.acegrp.abonnel-www +sudo rm -rf /var/www/lan.acegrp.abonnel-www +git clone --depth=1 https://git.abonnel.fr/cedricAbonnel/folio.git /var/www/lan.acegrp.abonnel-www cp /tmp/.env.bak /var/www/lan.acegrp.abonnel-www/.env cd /var/www/lan.acegrp.abonnel-www && composer install --no-dev --optimize-autoloader php database/migrate.php @@ -106,3 +106,4 @@ git -C /var/www/lan.acegrp.abonnel-www config user.name 'Cédrix' - Ne **jamais** écraser le `.env` serveur (ni scp, ni réécriture). Indiquer les variables à l'utilisateur pour qu'il les saisisse lui-même. - Ne **jamais** versionner `data/`, `.env`, ou `vendor/` dans le dépôt folio. - Toujours bumper la version **et** mettre à jour le changelog dans le même commit que la PR. +- Dans les pools PHP-FPM, toujours utiliser `user = www-data` / `group = www-data`. `cedrix` est un admin ordinaire, pas un compte de service. diff --git a/public/oidc/callback.php b/public/oidc/callback.php index a538cf6..549a168 100644 --- a/public/oidc/callback.php +++ b/public/oidc/callback.php @@ -39,7 +39,15 @@ if (!$OIDC_ISSUER || !$OIDC_CLIENT_ID || !$OIDC_REDIRECT_URI) { $tokenEndpoint = $OIDC_ISSUER . '/protocol/openid-connect/token'; $userInfoEndpoint = $OIDC_ISSUER . '/protocol/openid-connect/userinfo'; +if (session_status() !== PHP_SESSION_ACTIVE) { + error_log('[OIDC/callback] session_start() a échoué — vérifier session.save_path'); + http_response_code(500); + echo $debug ? 'Erreur de session (session.save_path inaccessible ?).' : 'Erreur interne.'; + exit; +} + if (!isset($_GET['state'], $_SESSION['oidc_state']) || !hash_equals((string)$_SESSION['oidc_state'], (string)$_GET['state'])) { + error_log('[OIDC/callback] State invalide — GET:' . ($_GET['state'] ?? 'absent') . ' SESSION:' . (isset($_SESSION['oidc_state']) ? 'présent' : 'absent') . ' session_id:' . session_id()); http_response_code(400); echo $debug ? 'State invalide.' : 'Requête invalide.'; exit; diff --git a/public/oidc/start.php b/public/oidc/start.php index fb823bd..ce1ca37 100644 --- a/public/oidc/start.php +++ b/public/oidc/start.php @@ -9,6 +9,13 @@ require_once dirname(__DIR__, 2) . '/vendor/autoload.php'; require_once dirname(__DIR__, 2) . '/config/config.php'; require_once dirname(__DIR__, 2) . '/bootstrap.php'; +if (session_status() !== PHP_SESSION_ACTIVE) { + error_log('[OIDC/start] session_start() a échoué — vérifier session.save_path'); + http_response_code(500); + echo 'Erreur de session. Contactez l\'administrateur.'; + exit; +} + if (!function_exists('env')) { function env(string $key, ?string $default = null): ?string { diff --git a/public/version.txt b/public/version.txt index 9c6d629..fdd3be6 100644 --- a/public/version.txt +++ b/public/version.txt @@ -1 +1 @@ -1.6.1 +1.6.2