#!/usr/bin/env bash set -euo pipefail REPO_URL="${REPO_URL:-}" BRANCH="${BRANCH:-main}" PORT="${PORT:-6969}" OPEN_FIREWALL="${OPEN_FIREWALL:-yes}" INSTALL_DIR="/opt/dragoncore-bridge" CONFIG_DIR="/etc/dragoncore-bridge" BIN="/usr/local/bin/dragoncore-bridge" SERVICE="/etc/systemd/system/dragoncore-bridge.service" while [ $# -gt 0 ]; do case "$1" in --repo) REPO_URL="$2"; shift 2 ;; --branch) BRANCH="$2"; shift 2 ;; --port) PORT="$2"; shift 2 ;; --open-firewall) OPEN_FIREWALL="$2"; shift 2 ;; *) echo "Unknown option: $1"; exit 1 ;; esac done if [ "$(id -u)" != "0" ]; then echo "Run as root." exit 1 fi need_cmd() { command -v "$1" >/dev/null 2>&1; } rand_hex() { openssl rand -hex "$1"; } export DEBIAN_FRONTEND=noninteractive if need_cmd apt-get; then apt-get update -y apt-get install -y ca-certificates curl wget git openssl build-essential if ! need_cmd go; then apt-get install -y golang-go fi elif need_cmd yum; then yum install -y ca-certificates curl wget git openssl gcc make golang elif need_cmd dnf; then dnf install -y ca-certificates curl wget git openssl gcc make golang fi mkdir -p "$INSTALL_DIR" "$CONFIG_DIR" chmod 700 "$CONFIG_DIR" if [ -n "$REPO_URL" ]; then rm -rf "$INSTALL_DIR/src" git clone --depth 1 --branch "$BRANCH" "$REPO_URL" "$INSTALL_DIR/src" else # Local install: useful if this script is executed from inside the repository. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" rm -rf "$INSTALL_DIR/src" mkdir -p "$INSTALL_DIR/src" cp -a "$SCRIPT_DIR"/. "$INSTALL_DIR/src/" fi cd "$INSTALL_DIR/src" go build -trimpath -ldflags "-s -w" -o "$BIN" . chmod 755 "$BIN" USER_NAME="admin" PASSWORD="$(rand_hex 10)" TOKEN="$(rand_hex 24)" if [ -f "$CONFIG_DIR/config.json" ]; then echo "Existing config found: $CONFIG_DIR/config.json" USER_NAME="$(grep -o '"username"[[:space:]]*:[[:space:]]*"[^"]*"' "$CONFIG_DIR/config.json" | head -1 | cut -d '"' -f4 || echo admin)" PASSWORD="$(grep -o '"password"[[:space:]]*:[[:space:]]*"[^"]*"' "$CONFIG_DIR/config.json" | head -1 | cut -d '"' -f4 || rand_hex 10)" TOKEN="$(grep -o '"token"[[:space:]]*:[[:space:]]*"[^"]*"' "$CONFIG_DIR/config.json" | head -1 | cut -d '"' -f4 || rand_hex 24)" fi cat > "$CONFIG_DIR/config.json" < "$SERVICE" </dev/null | grep -qi "Status: active"; then ufw allow "$PORT"/tcp || true fi if need_cmd firewall-cmd && firewall-cmd --state >/dev/null 2>&1; then firewall-cmd --permanent --add-port="$PORT/tcp" || true firewall-cmd --reload || true fi if need_cmd iptables; then iptables -C INPUT -p tcp --dport "$PORT" -j ACCEPT 2>/dev/null || iptables -I INPUT -p tcp --dport "$PORT" -j ACCEPT || true if need_cmd netfilter-persistent; then netfilter-persistent save || true; fi if need_cmd iptables-save && [ -d /etc/iptables ]; then iptables-save > /etc/iptables/rules.v4 || true; fi fi fi PUBLIC_IP="$(curl -fsS --max-time 4 https://api.ipify.org 2>/dev/null || hostname -I | awk '{print $1}')" echo printf '%s\n' '============================================================' printf '%s\n' 'DragonCore Bridge installed.' printf '%s\n' 'Use these values in the DragonCore Panel:' printf 'API Type : %s\n' 'Bridge Generic' printf 'IP : %s\n' "$PUBLIC_IP" printf 'API Port : %s\n' "$PORT" printf 'User : %s\n' "$USER_NAME" printf 'Password : %s\n' "$PASSWORD" printf 'Legacy token/Senha header: %s\n' "$TOKEN" printf '%s\n' 'Service commands:' printf '%s\n' ' systemctl status dragoncore-bridge' printf '%s\n' ' journalctl -u dragoncore-bridge -f' printf '%s\n' '============================================================'