12]); if ($hash === false) { App::flash('error', 'Erreur lors du hachage du mot de passe.'); header('Location: ' . $backUrl); exit; } // 4. Write credentials file. $configContent = ' 12]);"' . "\n" . ' */' . "\n" . "\n" . 'define(\'ADMIN_PASSWORD_HASH\', ' . var_export($hash, true) . ');' . "\n"; // Write atomically via a temp file. $tmpFile = $credentialsFile . '.tmp.' . bin2hex(random_bytes(6)); if (file_put_contents($tmpFile, $configContent, LOCK_EX) === false) { @unlink($tmpFile); App::flash('error', 'Impossible d\'écrire le fichier de configuration. Vérifiez les permissions sur config/.'); header('Location: ' . $backUrl); exit; } if (!rename($tmpFile, $credentialsFile)) { @unlink($tmpFile); App::flash('error', 'Impossible de mettre à jour le fichier de configuration.'); header('Location: ' . $backUrl); exit; } // 5. Regenerate session (password changed — invalidate old sessions). session_regenerate_id(true); $_SESSION['admin_authenticated'] = true; App::flash('success', $hasPassword ? 'Mot de passe mis à jour avec succès.' : 'Mot de passe défini avec succès. L\'authentification PHP est maintenant active.'); header('Location: ' . $backUrl); exit;