#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" RENDER_SCRIPT="$SCRIPT_DIR/render-rpc-access-gate-nginx.sh" PRODUCT_SLUG="" SERVER_NAME="" SSH_HOST="" REMOTE_PATH="" REMOTE_TEST_CMD="nginx -t" REMOTE_RELOAD_CMD="systemctl reload nginx" INTERNAL_SECRET="${ACCESS_INTERNAL_SECRET:-}" VALIDATOR_URL="http://127.0.0.1:8081/api/v1/access/internal/validate-key" UPSTREAM_URL="" APPLY=0 usage() { cat <<'EOF' Safely render and install an explorer-managed RPC edge gate onto a remote nginx host. Default mode is plan-only. Use --apply to copy the rendered config, run nginx -t, and reload nginx over SSH. Usage: bash explorer-monorepo/scripts/install-rpc-access-gate-nginx-via-ssh.sh \ --product thirdweb-rpc \ --server-name thirdweb-rpc.example.org \ --ssh-host root@192.168.11.217 \ --internal-secret "$ACCESS_INTERNAL_SECRET" \ [--remote-path /etc/nginx/conf.d/thirdweb-rpc-gated.conf] \ [--validator-url http://127.0.0.1:8081/api/v1/access/internal/validate-key] \ [--upstream http://192.168.11.217:8545] \ [--apply] EOF } while [[ $# -gt 0 ]]; do case "$1" in --product) PRODUCT_SLUG="$2" shift 2 ;; --server-name) SERVER_NAME="$2" shift 2 ;; --ssh-host) SSH_HOST="$2" shift 2 ;; --remote-path) REMOTE_PATH="$2" shift 2 ;; --internal-secret) INTERNAL_SECRET="$2" shift 2 ;; --validator-url) VALIDATOR_URL="$2" shift 2 ;; --upstream) UPSTREAM_URL="$2" shift 2 ;; --remote-test-cmd) REMOTE_TEST_CMD="$2" shift 2 ;; --remote-reload-cmd) REMOTE_RELOAD_CMD="$2" shift 2 ;; --apply) APPLY=1 shift ;; -h|--help) usage exit 0 ;; *) echo "Unknown argument: $1" >&2 usage >&2 exit 1 ;; esac done if [[ -z "$PRODUCT_SLUG" || -z "$SERVER_NAME" || -z "$SSH_HOST" ]]; then echo "ERROR: --product, --server-name, and --ssh-host are required." >&2 exit 1 fi if [[ -z "$INTERNAL_SECRET" ]]; then echo "ERROR: --internal-secret is required. Set ACCESS_INTERNAL_SECRET or pass --internal-secret." >&2 exit 1 fi REMOTE_PATH="${REMOTE_PATH:-/etc/nginx/conf.d/${PRODUCT_SLUG}-gated.conf}" TMP_RENDER="$(mktemp)" trap 'rm -f "$TMP_RENDER"' EXIT render_args=( --product "$PRODUCT_SLUG" --server-name "$SERVER_NAME" --internal-secret "$INTERNAL_SECRET" --validator-url "$VALIDATOR_URL" --output "$TMP_RENDER" ) if [[ -n "$UPSTREAM_URL" ]]; then render_args+=(--upstream "$UPSTREAM_URL") fi bash "$RENDER_SCRIPT" "${render_args[@]}" >/dev/null echo "== RPC access gate installer ==" echo "Product: $PRODUCT_SLUG" echo "Server name: $SERVER_NAME" echo "SSH host: $SSH_HOST" echo "Remote path: $REMOTE_PATH" echo "Validator: $VALIDATOR_URL" if [[ -n "$UPSTREAM_URL" ]]; then echo "Upstream: $UPSTREAM_URL" fi echo echo "-- Rendered config preview --" sed -n '1,220p' "$TMP_RENDER" echo if [[ "$APPLY" -ne 1 ]]; then cat <