fix(local-agent): start-agent.sh 補設 VISIONA_CLOUD_ORIGINS(ADR-019 localhost 直連 CORS)

start-agent.sh 漏設 VISIONA_CLOUD_ORIGINS → local-agent CORS 白名單為空 →
影片分頁從瀏覽器打 local-agent 的 preflight 被 403 → 前端判 LOCAL_AGENT_NOT_FOUND
(顯示「需同一台電腦操作」)。

依 MODE 補設雙入口白名單(public: 公網 https + 內網 http;internal 同);
用 ${VISIONA_CLOUD_ORIGINS:-預設} 尊重外部覆寫;啟動 log 印出白名單。
origin 字串與 middleware.go 完整精確比對相容。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
jim800121chen 2026-08-02 03:16:05 +08:00
parent d0ab479a7f
commit 145ed8e960

View File

@ -35,12 +35,18 @@ case "$MODE" in
CLOUD_API_URL="https://$HOST" CLOUD_API_URL="https://$HOST"
RELAY_URL="wss://$HOST/tunnel/connect" RELAY_URL="wss://$HOST/tunnel/connect"
WS_SCHEME="https" WS_SCHEME="https"
# ADR-019 §2.5 CORS 白名單stage 雙入口):影片分頁 localhost 直連時,
# 瀏覽器可能從公網 HTTPS 或內網純 HTTP 任一入口開啟,兩者都要放行。
CLOUD_ORIGINS="https://stage-9527.innovedus.com:9527,http://192.168.0.130:9527"
;; ;;
internal) internal)
HOST="192.168.0.130:9527" HOST="192.168.0.130:9527"
CLOUD_API_URL="http://$HOST" CLOUD_API_URL="http://$HOST"
RELAY_URL="ws://$HOST/tunnel/connect" RELAY_URL="ws://$HOST/tunnel/connect"
WS_SCHEME="http" WS_SCHEME="http"
# ADR-019 §2.5 CORS 白名單internal 走內網純 HTTP 入口;一併帶公網入口
# 以便同一台 agent 兩種路徑都能開影片分頁(多帶白名單不會放寬安全性)。
CLOUD_ORIGINS="http://192.168.0.130:9527,https://stage-9527.innovedus.com:9527"
;; ;;
*) *)
echo "用法:$0 [public|internal]" >&2 echo "用法:$0 [public|internal]" >&2
@ -105,6 +111,16 @@ echo ""
export VISIONA_CLOUD_API_URL="$CLOUD_API_URL" export VISIONA_CLOUD_API_URL="$CLOUD_API_URL"
export VISIONA_RELAY_URL="$RELAY_URL" export VISIONA_RELAY_URL="$RELAY_URL"
# ADR-019 localhost 直連的 CORS 白名單server 讀 middleware.go:46 os.Getenv
# 漏設會導致影片分頁的 preflightOPTIONS被 local-agent 回 403 → 前端 port 探測
# 掃不到同機 agent → 影片分頁顯示 LOCAL_AGENT_NOT_FOUND「需在同一台電腦操作」
# 格式:逗號分隔的完整 originscheme+host+port 一字不差、結尾無斜線),與
# middleware.go 的「完整 origin 精確比對」相容。
# 尊重外部覆寫(與上方優先級 env > 內建預設一致):若使用者已設則沿用其值。
export VISIONA_CLOUD_ORIGINS="${VISIONA_CLOUD_ORIGINS:-$CLOUD_ORIGINS}"
echo " CORS 白名單VISIONA_CLOUD_ORIGINS$VISIONA_CLOUD_ORIGINS"
echo ""
# public 模式stage 用自簽憑證agent 需明確 opt-in 跳過 TLS 驗證 # public 模式stage 用自簽憑證agent 需明確 opt-in 跳過 TLS 驗證
# pairing exchange + tunnel WSS + 設定頁「測試連線」三條路徑共用此開關), # pairing exchange + tunnel WSS + 設定頁「測試連線」三條路徑共用此開關),
# 否則全部 x509 失敗,與本腳本的 demo 目的自相矛盾。 # 否則全部 x509 失敗,與本腳本的 demo 目的自相矛盾。