Tesla Fleet API: příprava domény ems.vojacek.eu (cert + public key + callback)
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:
73
deploy/tesla/setup_tesla_domain.sh
Executable file
73
deploy/tesla/setup_tesla_domain.sh
Executable 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
|
||||
Reference in New Issue
Block a user