#!/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 Client Secret OIDC_CLIENT_SECRET="${VITE_OIDC_CLIENT_SECRET:-${OIDC_CLIENT_SECRET:-${SecuritySettings__ClientSecret:-${SecuritySettings_ClientSecret:-${CLIENT_SECRET:-}}}}}" # 6. OIDC Scope OIDC_SCOPE="${VITE_OIDC_SCOPE:-${OIDC_SCOPE:-${SecuritySettings__Scope:-${SecuritySettings_Scope:-${SCOPE:-}}}}}" # 7. Hasher Settings HASHER_SALT="${VITE_HASHER_SALT:-${HASHER_SALT:-${HasherSettings__Salt:-${HasherSettings_Salt:-}}}}}" 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 cat < "$TARGET_DIR/env-config.js" // Generated dynamically at container startup from deployment environment variables 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_CLIENT_SECRET: "${OIDC_CLIENT_SECRET}", VITE_OIDC_CLIENT_SECRET: "${OIDC_CLIENT_SECRET}", OIDC_SCOPE: "${OIDC_SCOPE}", VITE_OIDC_SCOPE: "${OIDC_SCOPE}", HASHER_SALT: "${HASHER_SALT}", VITE_HASHER_SALT: "${HASHER_SALT}", 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}", ClientSecret: "${OIDC_CLIENT_SECRET}", Scope: "${OIDC_SCOPE}" }, HasherSettings: { Salt: "${HASHER_SALT}", MinHashLength: "${HASHER_MIN_LENGTH}" } }; EOF # Generate config.json for REST-based runtime retrieval cat < "$TARGET_DIR/config.json" { "ApiSettings": { "BaseUrl": "${API_BASE_URL}" }, "SecuritySettings": { "Authority": "${OIDC_AUTHORITY}", "Audience": "${OIDC_AUDIENCE}", "ClientId": "${OIDC_CLIENT_ID}", "ClientSecret": "${OIDC_CLIENT_SECRET}", "Scope": "${OIDC_SCOPE}" }, "HasherSettings": { "Salt": "${HASHER_SALT}", "MinHashLength": "${HASHER_MIN_LENGTH}" } } EOF echo "[docker-entrypoint] Successfully wrote $TARGET_DIR/env-config.js and $TARGET_DIR/config.json." fi exec "$@"