93 lines
3.1 KiB
Bash
93 lines
3.1 KiB
Bash
#!/bin/sh
|
|
set -e
|
|
|
|
# Target directory for Nginx static assets in container
|
|
TARGET_DIR="/usr/share/nginx/html"
|
|
|
|
# If not in standard nginx container, fallback to ./dist or ./public if present
|
|
if [ ! -d "$TARGET_DIR" ]; then
|
|
if [ -d "./dist" ]; then
|
|
TARGET_DIR="./dist"
|
|
elif [ -d "./public" ]; then
|
|
TARGET_DIR="./public"
|
|
fi
|
|
fi
|
|
|
|
# Prioritize deployment environment variables from all common naming patterns:
|
|
# 1. API Base URL
|
|
API_BASE_URL="${VITE_API_BASE_URL:-${API_BASE_URL:-${ApiSettings__BaseUrl:-${ApiSettings_BaseUrl:-${PFM_API_BASE_URL:-}}}}}"
|
|
|
|
# 2. OIDC Security Authority
|
|
OIDC_AUTHORITY="${VITE_OIDC_AUTHORITY:-${OIDC_AUTHORITY:-${SecuritySettings__Authority:-${SecuritySettings_Authority:-${AUTHORITY:-}}}}}"
|
|
|
|
# 3. OIDC Audience
|
|
OIDC_AUDIENCE="${VITE_OIDC_AUDIENCE:-${OIDC_AUDIENCE:-${SecuritySettings__Audience:-${SecuritySettings_Audience:-${AUDIENCE:-}}}}}"
|
|
|
|
# 4. OIDC Client ID
|
|
OIDC_CLIENT_ID="${VITE_OIDC_CLIENT_ID:-${OIDC_CLIENT_ID:-${SecuritySettings__ClientId:-${SecuritySettings_ClientId:-${CLIENT_ID:-}}}}}"
|
|
|
|
# 5. OIDC Scope
|
|
OIDC_SCOPE="${VITE_OIDC_SCOPE:-${OIDC_SCOPE:-${SecuritySettings__Scope:-${SecuritySettings_Scope:-${SCOPE:-}}}}}"
|
|
|
|
# 6. Hasher Settings
|
|
HASHER_MIN_LENGTH="${VITE_HASHER_MIN_LENGTH:-${HASHER_MIN_LENGTH:-${HasherSettings__MinLength:-${HasherSettings_MinLength:-}}}}}"
|
|
|
|
if [ -d "$TARGET_DIR" ]; then
|
|
echo "[docker-entrypoint] Generating runtime configuration files in $TARGET_DIR..."
|
|
|
|
# Generate env-config.js for instant, synchronous window.__RUNTIME_CONFIG__ initialization
|
|
# Public SPA clients use Authorization Code flow with PKCE; client secrets and hasher salts must NEVER be injected or exposed here.
|
|
cat <<EOF > "$TARGET_DIR/env-config.js"
|
|
// Generated dynamically at container startup from deployment environment variables
|
|
// Note: Secrets such as client secrets, private keys, or hashing salts must NEVER be exposed here.
|
|
window.__RUNTIME_CONFIG__ = {
|
|
API_BASE_URL: "${API_BASE_URL}",
|
|
VITE_API_BASE_URL: "${API_BASE_URL}",
|
|
OIDC_AUTHORITY: "${OIDC_AUTHORITY}",
|
|
VITE_OIDC_AUTHORITY: "${OIDC_AUTHORITY}",
|
|
OIDC_AUDIENCE: "${OIDC_AUDIENCE}",
|
|
VITE_OIDC_AUDIENCE: "${OIDC_AUDIENCE}",
|
|
OIDC_CLIENT_ID: "${OIDC_CLIENT_ID}",
|
|
VITE_OIDC_CLIENT_ID: "${OIDC_CLIENT_ID}",
|
|
OIDC_SCOPE: "${OIDC_SCOPE}",
|
|
VITE_OIDC_SCOPE: "${OIDC_SCOPE}",
|
|
HASHER_MIN_LENGTH: "${HASHER_MIN_LENGTH}",
|
|
VITE_HASHER_MIN_LENGTH: "${HASHER_MIN_LENGTH}",
|
|
ApiSettings: {
|
|
BaseUrl: "${API_BASE_URL}"
|
|
},
|
|
SecuritySettings: {
|
|
Authority: "${OIDC_AUTHORITY}",
|
|
Audience: "${OIDC_AUDIENCE}",
|
|
ClientId: "${OIDC_CLIENT_ID}",
|
|
Scope: "${OIDC_SCOPE}"
|
|
},
|
|
HasherSettings: {
|
|
MinHashLength: "${HASHER_MIN_LENGTH}"
|
|
}
|
|
};
|
|
EOF
|
|
|
|
# Generate config.json for REST-based runtime retrieval
|
|
cat <<EOF > "$TARGET_DIR/config.json"
|
|
{
|
|
"ApiSettings": {
|
|
"BaseUrl": "${API_BASE_URL}"
|
|
},
|
|
"SecuritySettings": {
|
|
"Authority": "${OIDC_AUTHORITY}",
|
|
"Audience": "${OIDC_AUDIENCE}",
|
|
"ClientId": "${OIDC_CLIENT_ID}",
|
|
"Scope": "${OIDC_SCOPE}"
|
|
},
|
|
"HasherSettings": {
|
|
"MinHashLength": "${HASHER_MIN_LENGTH}"
|
|
}
|
|
}
|
|
EOF
|
|
|
|
echo "[docker-entrypoint] Successfully wrote $TARGET_DIR/env-config.js and $TARGET_DIR/config.json."
|
|
fi
|
|
|
|
exec "$@"
|