#!/usr/bin/env bash
set -euo pipefail

BASE_URL="https://spotproxy-setup.webdemos.online"
PUBKEY_URL="$BASE_URL/ssh/id_rsa_proxy_client.pub"

PROXY_USER="${1:-$USER}"
PROXY_HOME="$(getent passwd "$PROXY_USER" | cut -d: -f6)"

if [[ -z "$PROXY_HOME" ]]; then
    echo "Unknown user: $PROXY_USER" >&2
    exit 1
fi

echo "Installing SpotProxy prototype server..."

sudo apt-get update
sudo apt-get install -y openssh-server curl

sudo systemctl enable --now ssh

sudo install -d \
  -m 700 \
  -o "$PROXY_USER" \
  -g "$PROXY_USER" \
  "$PROXY_HOME/.ssh"

TMPKEY="$(mktemp)"
trap 'rm -f "$TMPKEY"' EXIT

curl -fsSL "$PUBKEY_URL" -o "$TMPKEY"

grep -q '^ssh-' "$TMPKEY" || {
    echo "Downloaded file does not look like an SSH public key." >&2
    exit 1
}

sudo touch "$PROXY_HOME/.ssh/authorized_keys"

if ! sudo grep -qxF "$(cat "$TMPKEY")" \
    "$PROXY_HOME/.ssh/authorized_keys"; then

    cat "$TMPKEY" |
      sudo tee -a "$PROXY_HOME/.ssh/authorized_keys" >/dev/null
fi

sudo chown "$PROXY_USER:$PROXY_USER" \
    "$PROXY_HOME/.ssh/authorized_keys"

sudo chmod 600 \
    "$PROXY_HOME/.ssh/authorized_keys"

PUBLIC_IP="$(curl -4fsSL https://ifconfig.me)"

echo
echo "========================================"
echo " SpotProxy server ready"
echo "========================================"
echo
echo "Public IP: $PUBLIC_IP"
echo "SSH user:  $PROXY_USER"
echo
echo "Run this ON THE CLIENT:"
echo
echo "ssh -i ~/.ssh/id_rsa_proxy_client \\"
echo "  -N -D 127.0.0.1:1080 \\"
echo "  ${PROXY_USER}@${PUBLIC_IP}"
echo
echo "Test with:"
echo
echo "curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me"
echo
