#!/bin/bash # ========================================================== # Compare les data-website-id entre Nginx Proxy Manager (NPM) # et Umami (PostgreSQL) # !!! UMAMI and NPM need to be in DOCKER !!!!! # ========================================================== NPM_PATH="/home/docker/nginx_proxy/data/nginx/proxy_host/" OUT_DIR="$(pwd)" INVALID_FILE="$OUT_DIR/npm_invalid.txt" # --- Vérification des fichiers NPM --- echo "[+] Vérification des fichiers NPM..." > "$INVALID_FILE" for f in "$NPM_PATH"/*.conf; do id=$(grep -o 'data-website-id="[a-f0-9-]*"' "$f" | sed -E 's/.*="([a-f0-9-]+)".*/\1/') name=$(grep -m2 '^# ' "$f" | tail -n1 | grep -v -- '------------------------------------------------------------' | sed 's/^# //') num=$(basename "$f") if [[ -n "$id" && -z "$name" ]]; then echo "$id | (vide) | $num" >> "$INVALID_FILE" fi done # --- Extraction NPM (valide uniquement) --- echo "[+] Extraction des sites NPM..." > "$OUT_DIR/npm_sites.txt" for file in "$NPM_PATH"/*.conf; do site=$(grep -m2 '^# ' "$file" | tail -n1 | grep -v -- '------------------------------------------------------------' | sed 's/^# //') id=$(grep -o 'data-website-id="[a-f0-9-]*"' "$file" | sed -E 's/.*="([a-f0-9-]+)".*/\1/') conf=$(basename "$file") if [[ -n "$id" && -n "$site" && "$site" != "------------------------------------------------------------" ]]; then echo "$id | $site | $conf" >> "$OUT_DIR/npm_sites.txt" fi done sort -u "$OUT_DIR/npm_sites.txt" -o "$OUT_DIR/npm_sites.txt" # --- Nettoyage avant fusion --- grep -E '[0-9a-f-]{8}-' "$OUT_DIR/npm_sites.txt" | grep '|' > "$OUT_DIR/npm_sites.tmp" && mv "$OUT_DIR/npm_sites.tmp" "$OUT_DIR/npm_sites.txt" # --- Extraction Umami --- echo "[+] Extraction des sites Umami (PostgreSQL)..." docker exec -t umami-db psql -U umami -d umami -P pager=off \ -c "SELECT website_id, name FROM website;" > "$OUT_DIR/umami_sites_raw.txt" grep -oE '[0-9a-f-]{36} *\| *[A-Za-z0-9._-]+' "$OUT_DIR/umami_sites_raw.txt" \ | sed 's/ *| */ | /' | sort -u > "$OUT_DIR/umami_sites.txt" # Nettoyage des lignes Umami vides ou invalides grep -E '[0-9a-f-]{8}-' "$OUT_DIR/umami_sites.txt" | grep '|' > "$OUT_DIR/umami_sites.tmp" && mv "$OUT_DIR/umami_sites.tmp" "$OUT_DIR/umami_sites.txt" # --- Fusion --- echo "[+] Fusion des deux listes..." echo "UUID | NPM_SITE | CONF_FILE | UMAMI_SITE" > "$OUT_DIR/merged_sites.txt" echo "----------------------------------------------------------------" >> "$OUT_DIR/merged_sites.txt" join -t'|' -a1 -a2 -e" " -o '0,1.2,1.3,2.2' \ <(sort -t'|' -k1,1 "$OUT_DIR/npm_sites.txt") \ <(sort -t'|' -k1,1 "$OUT_DIR/umami_sites.txt") \ >> "$OUT_DIR/merged_sites.txt" # --- Résumé --- echo echo "=== Résumé ===" echo "→ NPM valides : $OUT_DIR/npm_sites.txt" echo "→ NPM invalides : $OUT_DIR/npm_invalid.txt" echo "→ Umami : $OUT_DIR/umami_sites.txt" echo "→ Fusion : $OUT_DIR/merged_sites.txt" echo echo "✅ IDs présents dans les deux = deux noms affichés" echo "❌ Champ vide = site manquant d’un côté" echo echo "=== Résultat du fichier fusionné ===" echo column -t -s'|' "$OUT_DIR/merged_sites.txt" # --- Tableau séparé : fichiers NPM invalides --- if [[ -s "$INVALID_FILE" ]]; then echo echo "=== FICHIERS NPM SANS NOM DE DOMAINE VALIDE ===" echo echo "UUID | NPM_SITE | CONF_FILE" echo "-------------------------------------------" column -t -s'|' "$INVALID_FILE" else echo echo "✅ Aucun fichier NPM vide détecté." fi