#!/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=) 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