fix(deploy): 初始化并校验公开 API 地址
This commit is contained in:
Executable
+93
@@ -0,0 +1,93 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
# shellcheck source=scripts/init-public-api-base-url.sh
|
||||
. "${SCRIPT_DIR}/init-public-api-base-url.sh"
|
||||
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
trap 'rm -rf "$TMP_DIR"' EXIT
|
||||
|
||||
fail() {
|
||||
echo "FAIL: $*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
assert_env_value() {
|
||||
local file="$1"
|
||||
local expected="$2"
|
||||
local actual
|
||||
actual="$(public_url_read_env_value "$file" "CONFIG_PUBLIC_API_BASE_URL")"
|
||||
[ "$actual" = "$expected" ] || fail "expected $expected, got $actual"
|
||||
}
|
||||
|
||||
write_env() {
|
||||
local file="$1"
|
||||
shift
|
||||
printf '%s\n' "$@" > "$file"
|
||||
}
|
||||
|
||||
existing="$TMP_DIR/existing.env"
|
||||
write_env "$existing" \
|
||||
"CONFIG_PUBLIC_API_BASE_URL=https://existing.example.com:8443/api" \
|
||||
"NUXT_PUBLIC_BASE_APIURL=/api"
|
||||
init_public_api_base_url "$existing" upgrade >/dev/null
|
||||
assert_env_value "$existing" "https://existing.example.com:8443/api"
|
||||
|
||||
absolute="$TMP_DIR/absolute.env"
|
||||
write_env "$absolute" \
|
||||
"CONFIG_PUBLIC_API_BASE_URL=" \
|
||||
"NUXT_PUBLIC_BASE_APIURL=http://10.0.0.8:4100"
|
||||
init_public_api_base_url "$absolute" upgrade >/dev/null
|
||||
assert_env_value "$absolute" "http://10.0.0.8:4100"
|
||||
|
||||
websocket="$TMP_DIR/websocket.env"
|
||||
write_env "$websocket" \
|
||||
"CONFIG_PUBLIC_API_BASE_URL=" \
|
||||
"NUXT_PUBLIC_BASE_APIURL=/api" \
|
||||
"NUXT_PUBLIC_BASE_SOCKETURL=wss://demo.example.com/socket.io"
|
||||
init_public_api_base_url "$websocket" upgrade >/dev/null
|
||||
assert_env_value "$websocket" "https://demo.example.com/api"
|
||||
|
||||
security_origin="$TMP_DIR/security-origin.env"
|
||||
write_env "$security_origin" \
|
||||
"CONFIG_PUBLIC_API_BASE_URL=" \
|
||||
"NUXT_PUBLIC_BASE_APIURL=/api" \
|
||||
"NUXT_PUBLIC_BASE_SOCKETURL=" \
|
||||
"CONFIG_SECURITY_ORIGIN=http://demo.example.com,https://demo.example.com"
|
||||
init_public_api_base_url "$security_origin" upgrade >/dev/null
|
||||
assert_env_value "$security_origin" "http://demo.example.com/api"
|
||||
|
||||
file_override="$TMP_DIR/file-override.env"
|
||||
write_env "$file_override" \
|
||||
"CONFIG_PUBLIC_API_BASE_URL=" \
|
||||
"DEPLOY_PUBLIC_API_BASE_URL=https://proxy.example.com:9443/custom-api" \
|
||||
"NUXT_PUBLIC_BASE_APIURL=/api"
|
||||
init_public_api_base_url "$file_override" upgrade >/dev/null
|
||||
assert_env_value "$file_override" "https://proxy.example.com:9443/custom-api"
|
||||
|
||||
explicit_override="$TMP_DIR/explicit-override.env"
|
||||
write_env "$explicit_override" \
|
||||
"CONFIG_PUBLIC_API_BASE_URL=" \
|
||||
"NUXT_PUBLIC_BASE_APIURL=/api"
|
||||
init_public_api_base_url "$explicit_override" configure "http://192.168.1.20:4567" >/dev/null
|
||||
assert_env_value "$explicit_override" "http://192.168.1.20:4567"
|
||||
|
||||
invalid="$TMP_DIR/invalid.env"
|
||||
write_env "$invalid" \
|
||||
"CONFIG_PUBLIC_API_BASE_URL=ftp://bad.example.com/api" \
|
||||
"NUXT_PUBLIC_BASE_APIURL=https://good.example.com/api"
|
||||
if init_public_api_base_url "$invalid" upgrade >/dev/null 2>&1; then
|
||||
fail "invalid existing CONFIG_PUBLIC_API_BASE_URL must block startup"
|
||||
fi
|
||||
|
||||
unresolved="$TMP_DIR/unresolved.env"
|
||||
write_env "$unresolved" \
|
||||
"CONFIG_PUBLIC_API_BASE_URL=" \
|
||||
"NUXT_PUBLIC_BASE_APIURL=/api"
|
||||
if init_public_api_base_url "$unresolved" upgrade >/dev/null 2>&1; then
|
||||
fail "unresolved public API URL must block startup"
|
||||
fi
|
||||
|
||||
echo "Public API base URL shell tests passed"
|
||||
Reference in New Issue
Block a user