#!/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'
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"