#53 résumé req/IPs par statut dans Erreurs 404
#54 titre onglet avec compteur non résolus
#2 Tout/Aucun dans resize (tailles + formats)
#7 backup filename affiché dans résultats resize
#8 flash message résumé après upload
#6 renommage inline sur preview_text + preview_other
#23 filtre + tri par nom/taille/date dans corbeille
#20 sélection multiple + batch restore/delete corbeille
#45 /sitemap.xml (assets publics)
#52 ignoreip fail2ban sync sur Ignorer/Retirer une IP
#1 cairosvg>=2.7 dans requirements.txt
#51 ignored_ips.json exclu du rsync --delete
#48 as_cache/ exclu du rsync --delete
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Nouveau endpoint POST /errors/status-batch (jusqu'à 200 chemins)
- Au chargement de la page, tous les dots rouges sont vérifiés en batch
et passent automatiquement en vert si le fichier existe désormais
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- timeout fail2ban-client 5 s → 30 s (sous charge le résultat vide
était mis en cache 60 s, causant « Aucune IP bannie »)
- log explicite en cas d'erreur (returncode, stderr, exception)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
La page /errors/ intègre désormais deux onglets (Erreurs 404 et Bannissements)
activés via hash URL (#errors / #banned). Le lien "Bannis" disparaît de la nav,
la route /errors/banned/ redirige vers /errors/#banned.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- /errors/banned/ : bannissements groupés par AS (nom, pays, nb entrées)
- Déblocage IP seule ou AS entier via POST /errors/unban
- Filtre dynamique par IP/CIDR/nom AS, mise à jour DOM sans rechargement
- Nav header + sudoers unbanip
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Clic 🔨 : lookup AS via ip-api.com, propose 🔨 IP ou 🔨 AS (N préfixes)
- Ban AS : récupère les CIDRs via RIPE Stat, cache 30 j dans as_cache/
- IPs déjà bannies (global-blacklist) masquées du tableau et du détail AJAX
- ignoreip fail2ban : 82.65.88.34 protégée sur toutes les jails
- Sudoers : permission status global-blacklist pour static-cdn
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Champ de filtre en temps réel au-dessus du tableau des 404 ;
ferme le panneau de détail des lignes masquées.
Corrige aussi rsync via sudo pour préserver les droits static-cdn.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Invalidation du cache 404 basée sur mtime de ignored_ips.json (tous les workers gunicorn voient la mise à jour)
- Chemins complets /usr/bin/sudo et /usr/bin/fail2ban-client pour éviter les erreurs PATH dans systemd
- Version 1.5.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fichier VERSION (1.4.0) lu par l'app au démarrage
- CHANGELOG.md versionné (v1.0.0 → v1.4.0)
- Route /changelog avec parsing du markdown et rendu structuré
- Lien cliquable sur le numéro de version dans le footer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>