Tesla Fleet API: příprava domény ems.vojacek.eu (cert + public key + callback)
All checks were successful
CI and deploy / migration-check (push) Successful in 33s
CI and deploy / deploy (push) Successful in 1m30s

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>
This commit is contained in:
Dusan Vojacek
2026-06-11 22:58:28 +02:00
parent 0ed6f18e1a
commit 620cea8b9b
3 changed files with 191 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
#!/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