Doména slouží jen jako veřejná vizitka pro Tesla: Caddy blok vystavuje POUZE .well-known public key a statickou OAuth callback stránku (zobrazí ?code=, nic neodesílá), vše ostatní 404 — EMS zůstává na VPN. Certifikát Let's Encrypt řeší hostovský Caddy automaticky. deploy/tesla/setup_tesla_domain.sh (spustit NA SERVERU): EC keypair prime256v1 (privátní do /opt/ems-deploy/secrets 0600), public do .well-known, callback, vypíše Caddy blok. docs/tesla-fleet-api.md: developer portál, partner registrace, OAuth flow, plán EMS integrace (tesla_client + hook v _on_ev_arrival). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
74 lines
2.4 KiB
Bash
Executable File
74 lines
2.4 KiB
Bash
Executable File
#!/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
|