diff --git a/TODO.md b/TODO.md index 44cf614..b399708 100644 --- a/TODO.md +++ b/TODO.md @@ -5,6 +5,14 @@ - [x] Add `hx-target` response divs to the three fieldsets in contenus.php - [x] Update settings.php to return HTML toast on HTMX requests +## Production Error Fixes (2026-05-11 remote logs) + +- [x] **413 Request Entity Too Large** — bumped `client_max_body_size` to 256M, PHP post/upload to 256M, timeouts to 300s +- [x] **Missing `v_smtp_active` view** on server — made all `CREATE VIEW` statements idempotent with `IF NOT EXISTS` in schema.sql +- [x] **`bars.svg` 404** — created `app/public/assets/img/bars.svg` (animated SVG spinner) +- [x] **Nginx rate limiting too aggressive** — increased admin zone to 300r/m, burst=30 to handle ~11 concurrent HTMX fragment requests on contenus.php page load +- [ ] **Database readonly** — intermittent permission issue after deploy (added deploy-nginx recipe; permissions should be fixed by --chown + deploy-server.sh) + ## SQLite Backup & Data Integrity (docs/backup-plan.md) ### Phase 1 — WAL Mode diff --git a/app/public/admin/actions/settings.php b/app/public/admin/actions/settings.php index 367200f..e6e4d0a 100644 --- a/app/public/admin/actions/settings.php +++ b/app/public/admin/actions/settings.php @@ -6,6 +6,7 @@ AdminAuth::requireLogin(); if (!isset($_POST['csrf_token'], $_SESSION['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) { + error_log('[settings.php] CSRF FAIL | session_token=' . ($_SESSION['csrf_token'] ?? 'none') . ' | post_token=' . ($_POST['csrf_token'] ?? 'none')); App::flash('error', "Erreur de sécurité : token invalide."); header('Location: /admin/parametres.php'); exit; @@ -27,29 +28,41 @@ error_log('[settings.php] PROCESS | section=' . $section . ' | post_keys=' . imp * The fragment auto-dismisses after 3 seconds via a script at the end. */ function hxToastSuccess(string $message): never { + $id = 'toast-' . bin2hex(random_bytes(4)); http_response_code(200); - echo '
' . + echo '
' . ' ' . htmlspecialchars($message) . '
' . - ''; + ''; exit; } function hxToastError(string $message): never { + $id = 'toast-' . bin2hex(random_bytes(4)); http_response_code(200); - echo '