PATCH — Logos uploadables pour providers et interfaces BDD ============================================================ Date : 21 mai 2026 Sur la base de : patch-db-providers (donc v0.2 + accès URLs + db_providers) Vue d'ensemble -------------- Permet d'uploader un logo personnalisé pour chaque provider (hébergeur, domaine, DNS) et chaque interface BDD (phpMyAdmin OVH, Adminer…) depuis la page Paramètres. Si un logo est uploadé, il prime sur le favicon Google s2 automatique. Sinon comportement inchangé (Google s2 + fallback DDG). Formats acceptés : PNG, JPG, SVG, WebP — 200 Ko max. Les SVG sont sanitizés (scripts, foreignObject, handlers d'événements javascript:, etc. sont retirés avant stockage). Fichiers modifiés / ajoutés --------------------------- NOUVEAU : database/migrations/017_provider_logos.sql public/uploads/provider-logos/.htaccess (bloque exécution PHP) public/uploads/provider-logos/index.html (empêche listing) MODIFIÉS : src/bootstrap.php (helpers upload + sanitize SVG + favicon prime logo_path) src/Controllers/SettingsController.php (CRUD avec upload) src/Controllers/SiteController.php (addProvider avec upload + JOINs) templates/settings/index.php (colonne Logo + checkbox retirer) templates/sites_list.php (logo_path dans arrays) templates/site_detail.php (logo_path dans arrays) templates/site_subscription.php (logo_path dans arrays) templates/site_access.php (logo_path dans arrays) templates/site_client.php (logo_path dans arrays) public/assets/css/style.css (styles colonne Logo) Installation ------------ 1. Appliquer la migration SQL 017 via phpMyAdmin OVH : - Sélectionner la base `monitoring` - Onglet SQL → coller le contenu de database/migrations/017_provider_logos.sql - Exécuter 2. Uploader tous les fichiers en respectant l'arborescence - Important : créer le dossier `public/uploads/provider-logos/` s'il n'existe pas, et y déposer le `.htaccess` et `index.html` fournis - Le dossier doit avoir les droits d'écriture pour PHP (755 ou 775) 3. /opcache-reset.php 4. Hard reload (Cmd+R / Ctrl+F5) Sécurité : ce qui est protégé ------------------------------ 1. Validation du type MIME réel (pas confiance dans l'extension client) 2. Double validation getimagesize() pour PNG/JPG/WebP 3. Sanitization SVG via DOMDocument : - Suppression :