Files
wevads-platform/wevads-doctor.sh
2026-02-26 04:53:11 +01:00

141 lines
5.7 KiB
Bash
Executable File

#!/bin/bash
# WEVADS DOCTOR v1.0 - Scan & Fix all known issues
# Usage: sudo bash /opt/wevads/wevads-doctor.sh [--fix]
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m'
FIX=0; [ "$1" = "--fix" ] && FIX=1
DIRS=(/opt/wevads/public /opt/wevads-arsenal/public /var/www/hamid /opt/fmgapp/public /opt/bcgapp/public)
TOTAL_FIXED=0
echo -e "${CYAN}╔══════════════════════════════════════╗"
echo -e "║ WEVADS DOCTOR v1.0 ║"
echo -e "$(date '+%Y-%m-%d %H:%M:%S')"
echo -e "╚══════════════════════════════════════╝${NC}"
# === 1. WEVADS_NUKE ===
echo -e "\n${YELLOW}[1/8] WEVADS_NUKE scan...${NC}"
nuke_files=$(grep -rl 'WEVADS_NUKE\|WEVADS_KILL_JS' ${DIRS[@]} 2>/dev/null | grep -v '.bak')
nuke_count=$(echo "$nuke_files" | grep -c '[^ ]')
if [ $nuke_count -gt 0 ]; then
echo -e " ${RED}Found: $nuke_count files${NC}"
if [ $FIX -eq 1 ]; then
for f in $nuke_files; do
sed -i 's/<style id="WEVADS_NUKE">[^<]*<\/style>//g' "$f"
sed -i '/<script id="WEVADS_KILL_JS">/,/<\/script>/d' "$f"
done
echo -e " ${GREEN}FIXED${NC}"
TOTAL_FIXED=$((TOTAL_FIXED + nuke_count))
fi
else echo -e " ${GREEN}Clean ✓${NC}"; fi
# === 2. weval-theme-system-v2 ===
echo -e "\n${YELLOW}[2/8] weval-theme-system-v2 scan...${NC}"
theme_files=$(grep -rl 'weval-theme-system-v2' ${DIRS[@]} 2>/dev/null | grep -v '.bak')
theme_count=$(echo "$theme_files" | grep -c '[^ ]')
if [ $theme_count -gt 0 ]; then
echo -e " ${RED}Found: $theme_count files${NC}"
if [ $FIX -eq 1 ]; then
for f in $theme_files; do
sed -i '/<!-- weval-theme-system-v2 -->/,/<!-- \/weval-theme-system-v2 -->/d' "$f"
done
echo -e " ${GREEN}FIXED${NC}"
TOTAL_FIXED=$((TOTAL_FIXED + theme_count))
fi
else echo -e " ${GREEN}Clean ✓${NC}"; fi
# === 3. Unbalanced <script> tags ===
echo -e "\n${YELLOW}[3/8] Unbalanced script tags...${NC}"
unbal=0
for f in ${DIRS[@]}/*.html ${DIRS[@]}/*.php; do
[ ! -f "$f" ] && continue
o=$(grep -c '<script' "$f" 2>/dev/null)
c=$(grep -c '</script>' "$f" 2>/dev/null)
if [ "$o" -gt "$c" ]; then
unbal=$((unbal+1))
diff=$((o-c))
if [ $FIX -eq 1 ]; then
for i in $(seq 1 $diff); do echo '</script>' >> "$f"; done
fi
fi
done
if [ $unbal -gt 0 ]; then
echo -e " ${RED}Found: $unbal files${NC}"
[ $FIX -eq 1 ] && echo -e " ${GREEN}FIXED${NC}" && TOTAL_FIXED=$((TOTAL_FIXED + unbal))
else echo -e " ${GREEN}Clean ✓${NC}"; fi
# === 4. Broken </script> inside URLs ===
echo -e "\n${YELLOW}[4/8] Broken script tags in URLs...${NC}"
broken_url=0
for f in ${DIRS[@]}/*.html; do
[ ! -f "$f" ] && continue
if grep -q '</script>[a-z]*=' "$f" 2>/dev/null; then
broken_url=$((broken_url+1))
if [ $FIX -eq 1 ]; then
sed -i 's|</script>\([a-z]*=\)|\&\1|g' "$f"
fi
fi
done
if [ $broken_url -gt 0 ]; then
echo -e " ${RED}Found: $broken_url files${NC}"
[ $FIX -eq 1 ] && echo -e " ${GREEN}FIXED${NC}" && TOTAL_FIXED=$((TOTAL_FIXED + broken_url))
else echo -e " ${GREEN}Clean ✓${NC}"; fi
# === 5. PHP Syntax Errors ===
echo -e "\n${YELLOW}[5/8] PHP syntax errors...${NC}"
php_bad=0
for f in /opt/wevads/public/*.php /opt/wevads-arsenal/public/api/*.php; do
[ ! -f "$f" ] && continue
php -l "$f" 2>&1 | grep -q 'Parse error' && echo -e " ${RED}$(basename $f)${NC}" && php_bad=$((php_bad+1))
done
if [ $php_bad -gt 0 ]; then
echo -e " ${RED}Found: $php_bad files (manual fix needed)${NC}"
else echo -e " ${GREEN}Clean ✓${NC}"; fi
# === 6. Content after </body></html> ===
echo -e "\n${YELLOW}[6/8] Content after closing HTML tags...${NC}"
orphan=0
for f in ${DIRS[@]}/*.html; do
[ ! -f "$f" ] && continue
line=$(grep -n '</body></html>' "$f" 2>/dev/null | head -1 | cut -d: -f1)
[ -z "$line" ] && continue
total=$(wc -l < "$f")
extra=$((total - line))
if [ $extra -gt 3 ]; then
orphan=$((orphan+1))
if [ $FIX -eq 1 ]; then
head -n "$line" "$f" > "$f.tmp" && mv "$f.tmp" "$f"
fi
fi
done
if [ $orphan -gt 0 ]; then
echo -e " ${RED}Found: $orphan files${NC}"
[ $FIX -eq 1 ] && echo -e " ${GREEN}FIXED${NC}" && TOTAL_FIXED=$((TOTAL_FIXED + orphan))
else echo -e " ${GREEN}Clean ✓${NC}"; fi
# === 7. PMTA hostname injection in PHP ===
echo -e "\n${YELLOW}[7/8] PMTA hostname injection...${NC}"
pmta_files=$(grep -rl '^host-name snapshot' ${DIRS[@]} 2>/dev/null | grep '.php')
pmta_count=$(echo "$pmta_files" | grep -c '[^ ]')
if [ $pmta_count -gt 0 ]; then
echo -e " ${RED}Found: $pmta_count files${NC}"
if [ $FIX -eq 1 ]; then
for f in $pmta_files; do sed -i '/^host-name snapshot/d' "$f"; done
echo -e " ${GREEN}FIXED${NC}"
TOTAL_FIXED=$((TOTAL_FIXED + pmta_count))
fi
else echo -e " ${GREEN}Clean ✓${NC}"; fi
# === 8. Services & Ports ===
echo -e "\n${YELLOW}[8/8] Services...${NC}"
for p in 80:Web 5821:ADX 5825:N8N 5890:Arsenal 8080:HAMID; do
port=${p%%:*}; name=${p#*:}
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 2 http://localhost:$port/ 2>/dev/null)
[ "$code" = '200' ] || [ "$code" = '301' ] && echo -e " ${GREEN}$name ($port): ✓${NC}" || echo -e " ${RED}$name ($port): HTTP $code${NC}"
done
echo -e " HAMID Chat: $(curl -s -X POST http://localhost:5821/hamid-api.php -H 'Content-Type:application/json' -d '{"message":"ping"}' | grep -q response && echo -e "${GREEN}${NC}" || echo -e "${RED}${NC}")"
echo -e "\n${CYAN}══════════════════════════════════════"
echo -e "Total fixed: $TOTAL_FIXED"
echo -e "══════════════════════════════════════${NC}"