#!/bin/sh # SecuBox Hub Generator v3 - Dynamic portal with categories and thumbnails OUTPUT="/www/gk2-hub/index.html" TEMP="/tmp/hub_gen_$$.html" CACHE_DIR="/tmp/hub-cache" DATE=$(date "+%Y-%m-%d %H:%M") mkdir -p "$CACHE_DIR" # Categorize site based on name categorize_site() { local name=$(echo "$1" | tr '[:upper:]' '[:lower:]') case "$name" in *intel*|*dgse*|*osint*|*threat*|*secu*|*raid*|*confid*|*mku*|*bdgse*|*camus*) echo "Intelligence" ;; *game*|*play*|*comic*|*virus*|*survie*) echo "Divertissement" ;; *dev*|*code*|*git*|*sdlc*|*crt*|*fabric*) echo "Développement" ;; *doc*|*manual*|*guide*|*how*|*fm*|*bgp*|*lrh*|*bcf*) echo "Documentation" ;; *media*|*video*|*tube*|*stream*|*radio*|*lyrion*|*jellyfin*) echo "Média" ;; *blog*|*news*|*press*|*zine*|*flash*|*pub*) echo "Actualités" ;; *cloud*|*file*|*nextcloud*) echo "Cloud" ;; *admin*|*control*|*status*|*hub*|*glances*|*holo*) echo "Administration" ;; *money*|*coin*|*crypto*|*cgv*|*cpi*|*apr*) echo "Finance" ;; *geo*|*map*|*gondwana*|*earth*) echo "Géographie" ;; *psy*|*oracle*|*yijing*|*bazi*|*equa*|*lunaquar*|*clock*) echo "Ésotérique" ;; *) echo "Projets" ;; esac } get_emoji() { case "$1" in "Intelligence") echo "🔍" ;; "Divertissement") echo "🎮" ;; "Développement") echo "💻" ;; "Documentation") echo "📚" ;; "Média") echo "🎬" ;; "Actualités") echo "📰" ;; "Cloud") echo "☁️" ;; "Administration") echo "⚙️" ;; "Finance") echo "💰" ;; "Géographie") echo "🌍" ;; "Ésotérique") echo "🔮" ;; *) echo "📄" ;; esac } # Start HTML cat > "$TEMP" << 'HTMLHEAD' GK² Hub — Portal SecuBox
HTMLHEAD # Header cat >> "$TEMP" << EOF
EOF # Collect sites SITES_FILE="/tmp/hub_sites_$$.txt" CAT_FILE="/tmp/hub_cats_$$.txt" > "$SITES_FILE" > "$CAT_FILE" uci show metablogizer 2>/dev/null | grep "=site$" | sed "s/metablogizer\.\(.*\)=site/\1/" | while read site; do name=$(uci -q get "metablogizer.$site.name") domain=$(uci -q get "metablogizer.$site.domain") enabled=$(uci -q get "metablogizer.$site.enabled") [ "$enabled" != "1" ] && continue [ -z "$domain" ] && continue cat=$(categorize_site "$name") emoji=$(get_emoji "$cat") echo "$cat" >> "$CAT_FILE" printf '%s\t%s\t%s\t%s\n' "$domain" "$name" "$cat" "$emoji" >> "$SITES_FILE" done # Stats TOTAL=$(wc -l < "$SITES_FILE" | tr -d ' ') [ -z "$TOTAL" ] && TOTAL=0 CAT_COUNTS=$(sort "$CAT_FILE" 2>/dev/null | uniq -c | sort -rn) # Stats bar cat >> "$TEMP" << EOF
$TOTALSites
EOF echo "$CAT_COUNTS" | head -5 | while read count cat; do [ -n "$cat" ] && printf '
%s%s
\n' "$count" "$cat" >> "$TEMP" done echo "
" >> "$TEMP" # Tag cloud echo '
' >> "$TEMP" echo 'Tous' >> "$TEMP" echo "$CAT_COUNTS" | while read count cat; do [ -n "$cat" ] && printf '%s%s\n' "$cat" "$cat" "$count" >> "$TEMP" done echo '
' >> "$TEMP" # Category tabs echo '
' >> "$TEMP" printf '
📁 Tous%s
\n' "$TOTAL" >> "$TEMP" echo "$CAT_COUNTS" | while read count cat; do emoji=$(get_emoji "$cat") [ -n "$cat" ] && printf '
%s %s%s
\n' "$cat" "$emoji" "$cat" "$count" >> "$TEMP" done echo '
' >> "$TEMP" # Sites grid with iframe preview echo '
' >> "$TEMP" while IFS=' ' read -r domain name cat emoji; do [ -z "$domain" ] && continue cat >> "$TEMP" << CARD
$name
$domain
$emoji $cat
CARD done < "$SITES_FILE" echo '
' >> "$TEMP" # Footer and JS cat >> "$TEMP" << 'FOOTER'
FOOTER rm -f "$SITES_FILE" "$CAT_FILE" mv "$TEMP" "$OUTPUT" chmod 644 "$OUTPUT" logger -t hub-generator "Hub v3: $TOTAL sites"