#!/usr/bin/env bash
# Jednorázová příprava domény ems.vojacek.eu pro Tesla Fleet API.
# SPOUŠTĚT NA SERVERU (tam, kde běží hostovský Caddy): bash setup_tesla_domain.sh
#
# Co udělá:
#  1. vygeneruje EC keypair (prime256v1) pro Tesla Fleet API
#     - privátní klíč: /opt/ems-deploy/secrets/tesla-fleet-private.pem (0600)
#     - veřejný klíč:  /opt/ems-deploy/public/.well-known/appspecific/com.tesla.3p.public-key.pem
#  2. nakopíruje statickou OAuth callback stránku
#  3. vypíše Caddy blok k přidání do Caddyfile + reload příkaz
#
# Veřejně vystavené je POUZE: public key (.pem) a callback.html. Vše ostatní 404.
# EMS aplikace zůstává na VPN.

set -euo pipefail

ROOT="${EMS_DEPLOY_ROOT:-/opt/ems-deploy}"
PUB="$ROOT/public"
SEC="$ROOT/secrets"
WELLKNOWN="$PUB/.well-known/appspecific"
PRIV_KEY="$SEC/tesla-fleet-private.pem"
PUB_KEY="$WELLKNOWN/com.tesla.3p.public-key.pem"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

mkdir -p "$WELLKNOWN" "$SEC" "$PUB/tesla"
chmod 700 "$SEC"

if [[ -f "$PRIV_KEY" ]]; then
  echo "Privátní klíč už existuje: $PRIV_KEY (negeneruji znovu)"
else
  openssl ecparam -name prime256v1 -genkey -noout -out "$PRIV_KEY"
  chmod 600 "$PRIV_KEY"
  echo "Vygenerován privátní klíč: $PRIV_KEY"
fi

openssl ec -in "$PRIV_KEY" -pubout -out "$PUB_KEY" 2>/dev/null
echo "Veřejný klíč: $PUB_KEY"

install -m 0644 "$SCRIPT_DIR/callback.html" "$PUB/tesla/callback.html"
echo "Callback stránka: $PUB/tesla/callback.html"

cat <<'CADDY'

================================================================
Přidej do /etc/caddy/Caddyfile (a pak: systemctl reload caddy):
================================================================

ems.vojacek.eu {
  root * /opt/ems-deploy/public

  # Tesla Fleet API: veřejný klíč pro partner account registraci
  handle /.well-known/appspecific/com.tesla.3p.public-key.pem {
    file_server
  }

  # Jednorázový OAuth callback (statická stránka zobrazí ?code=)
  # POZOR: redirect URI registrovaná v Tesla dev portálu je /t-auth.
  handle /t-auth* {
    rewrite * /tesla/callback.html
    file_server
  }
  handle /tesla/callback* {
    file_server
  }

  # Nic dalšího neexponovat — EMS žije jen na VPN
  handle {
    respond 404
  }
}

================================================================
Ověření (z venku):
  curl -sI https://ems.vojacek.eu/.well-known/appspecific/com.tesla.3p.public-key.pem
  -> 200 + platný Let's Encrypt certifikát
  curl -sI https://ems.vojacek.eu/cokoliv  -> 404
================================================================
CADDY
