#!/bin/bash set -e cat <<'EOF' __ __ __ __ / | / | / | / | $$ | $$ | ______ ______ _$$ |_ ______ __ __ $$/ $$ | $$ |/ \ / \ / $$ | / \ / \ / |/ | $$ \ /$$//$$$$$$ |/$$$$$$ |$$$$$$/ /$$$$$$ |$$ \/$$/ $$ | $$ /$$/ $$ | $$ |$$ | $$/ $$ | __ $$ $$ | $$ $$< $$ | $$ $$/ $$ \__$$ |$$ | $$ |/ |$$$$$$$$/ /$$$$ \ $$ | $$$/ $$ $$/ $$ | $$ $$/ $$ |/$$/ $$ |$$ | $/ $$$$$$/ $$/ $$$$/ $$$$$$$/ $$/ $$/ $$/ SETUP WIZARD EOF echo "" echo "=== Basic Configuration ===" read -p "Enter your domain [default: localhost]: " DOMAIN_INPUT DOMAIN="${DOMAIN_INPUT:-localhost}" DEFAULT_RCC_KEY=$(python3 -c "import secrets; print(secrets.token_hex(6))" 2>/dev/null || openssl rand -hex 6 2>/dev/null || echo "rcc_$(date +%s)") read -p "Enter RCC Access Key [press enter to auto-generate: ${DEFAULT_RCC_KEY}]: " RCC_INPUT RCC_KEY="${RCC_INPUT:-${DEFAULT_RCC_KEY}}" read -p "PostgreSQL User [default: vortexi]: " DB_USER_INPUT DB_USER="${DB_USER_INPUT:-vortexi}" DEFAULT_DB_PASS=$(python3 -c "import secrets; print(secrets.token_hex(16))" 2>/dev/null || openssl rand -hex 16 2>/dev/null || echo "dbpass_$(date +%s)") read -p "PostgreSQL Password [press enter to auto-generate]: " DB_PASS_INPUT DB_PASS="${DB_PASS_INPUT:-${DEFAULT_DB_PASS}}" read -p "PostgreSQL Database Name [default: vortexidb]: " DB_NAME_INPUT DB_NAME="${DB_NAME_INPUT:-vortexidb}" DEFAULT_SESSION_KEY=$(python3 -c "import secrets; print(secrets.token_hex(32))" 2>/dev/null || openssl rand -hex 32 2>/dev/null || echo "sess_$(date +%s)") read -p "Flask Session Secret Key [press enter to auto-generate]: " SESSION_INPUT SESSION_KEY="${SESSION_INPUT:-${DEFAULT_SESSION_KEY}}" DEFAULT_AUTH_KEY=$(python3 -c "import secrets; print(secrets.token_hex(32))" 2>/dev/null || openssl rand -hex 32 2>/dev/null || echo "auth_$(date +%s)") read -p "API Authorization Key [press enter to auto-generate]: " AUTH_INPUT AUTH_KEY="${AUTH_INPUT:-${DEFAULT_AUTH_KEY}}" echo "" echo "=== Optional External Services (Press Enter to leave blank / skip) ===" read -p "Cloudflare Turnstile Site Key (optional) []: " TURNSTILE_SITE_KEY_INPUT CLOUDFLARE_TURNSTILE_SITE_KEY="${TURNSTILE_SITE_KEY_INPUT:-}" read -p "Cloudflare Turnstile Secret Key (optional) []: " TURNSTILE_SECRET_KEY_INPUT CLOUDFLARE_TURNSTILE_SECRET_KEY="${TURNSTILE_SECRET_KEY_INPUT:-}" read -p "Discord Client ID (optional) []: " DISCORD_CLIENT_ID_INPUT DISCORD_CLIENT_ID="${DISCORD_CLIENT_ID_INPUT:-}" read -p "Discord Client Secret (optional) []: " DISCORD_CLIENT_SECRET_INPUT DISCORD_CLIENT_SECRET="${DISCORD_CLIENT_SECRET_INPUT:-}" read -p "Discord Bot Token (optional) []: " DISCORD_BOT_TOKEN_INPUT DISCORD_BOT_TOKEN="${DISCORD_BOT_TOKEN_INPUT:-}" read -p "Discord Admin Logs Webhook (optional) []: " DISCORD_ADMIN_LOGS_WEBHOOK_INPUT DISCORD_ADMIN_LOGS_WEBHOOK="${DISCORD_ADMIN_LOGS_WEBHOOK_INPUT:-}" read -p "Mailjet API Key (optional) []: " MAILJET_APIKEY_INPUT MAILJET_APIKEY="${MAILJET_APIKEY_INPUT:-}" read -p "Mailjet Secret Key (optional) []: " MAILJET_SECRETKEY_INPUT MAILJET_SECRETKEY="${MAILJET_SECRETKEY_INPUT:-}" read -p "AWS S3 Access Key (optional, press enter for local storage) []: " AWS_ACCESS_KEY_INPUT AWS_ACCESS_KEY="${AWS_ACCESS_KEY_INPUT:-}" read -p "AWS S3 Secret Key (optional) []: " AWS_SECRET_KEY_INPUT AWS_SECRET_KEY="${AWS_SECRET_KEY_INPUT:-}" read -p "AWS S3 Bucket Name (optional) []: " AWS_S3_BUCKET_NAME_INPUT AWS_S3_BUCKET_NAME="${AWS_S3_BUCKET_NAME_INPUT:-}" read -p "AWS S3 Custom Domain / CDN URL (optional) []: " AWS_S3_CUSTOM_DOMAIN_INPUT AWS_S3_CUSTOM_DOMAIN="${AWS_S3_CUSTOM_DOMAIN_INPUT:-}" USE_LOCAL_STORAGE="True" if [ -n "$AWS_ACCESS_KEY" ] && [ -n "$AWS_SECRET_KEY" ] && [ -n "$AWS_S3_BUCKET_NAME" ]; then USE_LOCAL_STORAGE="False" fi BASE_URL="https://www.${DOMAIN}" if [ "$DOMAIN" = "localhost" ] || [ "$DOMAIN" = "127.0.0.1" ]; then BASE_URL="http://${DOMAIN}:3003" fi cat > .env </dev/null 2>&1; then openssl rsa -pubin -inform PEM -in ./app/files/rsa_public_1024.pub -outform "MS PUBLICKEYBLOB" 2>/dev/null | base64 > ./app/files/2016pub.blob || true openssl rsa -pubin -inform PEM -in ./app/files/rsa_public_2048.pub -outform "MS PUBLICKEYBLOB" 2>/dev/null | base64 > ./app/files/2018pub.blob || true fi echo "" echo "Setup finished successfully!" echo "Keys, blobs, and configuration generated." echo "" read -p "Start the site now? [Y/n]: " START_INPUT START_INPUT="${START_INPUT:-Y}" if [[ "$START_INPUT" =~ ^[Yy]$ ]]; then exec ./start.sh else echo "To start all services later, run: ./start.sh" fi