#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>
- 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>
Le service tourne sous static-cdn — il ne pouvait pas écrire ignored_ips.json.
Corrige aussi /var/log/static-cdn.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- stats.html : bouton "Générer et ouvrir" avec polling async ; supprime
le window.open automatique (bloqué par les navigateurs)
- app.py : routes POST /stats/generate et GET /stats/status ; exécution
GoAccess en thread daemon, verrou anti-doublon
- .env.example : documente STATS_LOG_FILE et STATS_GENERATE_CMD
- README.md : flux de publication local→git→serveur, variables d'env,
procédure première installation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Push : additive uniquement (pas de suppression sur le serveur)
Pull : idem, wiki/ exclu des deux côtés
Excludes communs : .git/, scripts/, README.md, .env*, .gitignore, wiki/
Correction bug bash set -e avec ((VAR++)) → VAR=$(( VAR + 1 ))
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Connexion SSH via abonnelc (sudo NOPASSWD:ALL)
- --rsync-path="sudo rsync" pour accéder à web17/web/logo/ (owner web17)
- STATIC_PATH pointe sur web17/web/logo/ (pas la racine ISPConfig)
- .env.example neutre : STATIC_USER reste un placeholder
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
push-assets.sh : synchronise les assets locaux vers le serveur (dry-run, confirmation, --delete)
pull-assets.sh : récupère les assets distants en local (dry-run, confirmation)
Gestion des fichiers nouveaux, modifiés et supprimés via rsync --checksum.
Config SSH dans .env (non versioné).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>