Actualiser api.php

This commit is contained in:
2026-07-01 09:50:03 +02:00
parent 2cd42960c4
commit 0efa3eea53
+34 -2
View File
@@ -27,10 +27,42 @@ try {
} catch (PDOException $e) { die(json_encode(["error" => "Connexion BDD échouée"])); }
// --- Fonctions Utilitaires ---
// Récupère le token d'authentification envoyé par le client, en tolérant les
// configurations Apache/WAMP qui ne transmettent pas HTTP_AUTHORIZATION à PHP
// par défaut (l'en-tête est bien envoyé par le navigateur, mais Apache le
// "mange" avant qu'il n'atteigne $_SERVER, sauf si CGIPassAuth est activé).
function getAuthToken() {
if (!empty($_SERVER['HTTP_AUTHORIZATION'])) {
return $_SERVER['HTTP_AUTHORIZATION'];
}
// Cas fréquent avec RewriteRule / certains proxys : le header est déplacé ici
if (!empty($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {
return $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
}
// Filet de sécurité générique : relire les en-têtes bruts de la requête
if (function_exists('getallheaders')) {
foreach (getallheaders() as $name => $value) {
if (strcasecmp($name, 'Authorization') === 0) {
return $value;
}
}
} elseif (function_exists('apache_request_headers')) {
foreach (apache_request_headers() as $name => $value) {
if (strcasecmp($name, 'Authorization') === 0) {
return $value;
}
}
}
return '';
}
function checkAuth($pdo) {
if ($pdo->query("SELECT COUNT(*) FROM users")->fetchColumn() == 0) return true;
$token = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
if ($token !== md5(ENCRYPTION_KEY . 'session')) { http_response_code(403); exit; }
$token = getAuthToken();
if ($token !== md5(ENCRYPTION_KEY . 'session')) {
error_log("Auth: ❌ Token invalide ou absent (HTTP_AUTHORIZATION reçu: " . (empty($token) ? "VIDE — vérifier CGIPassAuth/config Apache" : "présent mais différent") . ")");
http_response_code(403); exit;
}
}
function encryptData($data) {