#!/bin/sh set -eu if [ -z "${PROXY_PATH:-}" ]; then PROXY_PATH="/" fi case "${PROXY_PATH}" in /*) ;; *) PROXY_PATH="/${PROXY_PATH}" ;; esac CONFIG_PATH="${CONFIG_PATH:-/data/config.yaml}" AUTH_DIR="${AUTH_DIR:-/data/auth}" mkdir -p "$(dirname "${CONFIG_PATH}")" "${AUTH_DIR}" if [ -n "${CONFIG_CONTENT_B64:-}" ]; then echo "Writing config from CONFIG_CONTENT_B64 to ${CONFIG_PATH}" echo "${CONFIG_CONTENT_B64}" | base64 -d > "${CONFIG_PATH}" elif [ -n "${CONFIG_CONTENT:-}" ]; then echo "Writing config from CONFIG_CONTENT to ${CONFIG_PATH}" printf '%s\n' "${CONFIG_CONTENT}" > "${CONFIG_PATH}" fi if [ ! -f "${CONFIG_PATH}" ]; then for candidate in \ /app/config.yaml \ /app/config.yml \ /CLIProxyAPI/config.yaml \ /CLIProxyAPI/config.yml \ /CLIProxyAPI/config.example.yaml \ /CLIProxyAPI/config.example.yml \ /CLIProxyAPI/config.sample.yaml \ /CLIProxyAPI/config.sample.yml \ /CLIProxyAPI/config.template.yaml \ /CLIProxyAPI/config.template.yml; do if [ -f "${candidate}" ]; then echo "Copying default config from ${candidate} to ${CONFIG_PATH}" cp "${candidate}" "${CONFIG_PATH}" break fi done fi if [ -n "${CLI_PROXY_KEY:-}" ]; then if [ -z "${MANAGEMENT_KEY:-}" ]; then MANAGEMENT_KEY="${CLI_PROXY_KEY}" fi if [ -z "${API_KEYS:-}" ]; then API_KEYS="${CLI_PROXY_KEY}" fi fi if [ -f "${CONFIG_PATH}" ]; then if [ -n "${MANAGEMENT_KEY:-}" ]; then MGMT_ESCAPED="$(printf '%s' "${MANAGEMENT_KEY}" | sed 's/[\\/&]/\\&/g')" if grep -q '^[[:space:]]*secret-key:' "${CONFIG_PATH}"; then sed -i "s|^\([[:space:]]*secret-key:\).*|\1 \"${MGMT_ESCAPED}\"|" "${CONFIG_PATH}" fi fi if [ -n "${API_KEYS:-}" ]; then TMP_CONFIG="${CONFIG_PATH}.tmp" awk -v keys="${API_KEYS}" ' BEGIN { n=split(keys, arr, /[ ,]+/); in_api=0; found=0; } function emit_keys() { print "api-keys:"; for (i=1; i<=n; i++) { if (length(arr[i]) > 0) { print " - \"" arr[i] "\""; } } } { if (in_api) { if ($0 ~ /^[[:space:]]*-/) { next; } else { in_api=0; } } if ($0 ~ /^api-keys:[[:space:]]*$/) { emit_keys(); in_api=1; found=1; next; } print $0; } END { if (!found) { emit_keys(); } } ' "${CONFIG_PATH}" > "${TMP_CONFIG}" && mv "${TMP_CONFIG}" "${CONFIG_PATH}" fi fi if [ -f "${CONFIG_PATH}" ]; then ln -sf "${CONFIG_PATH}" /CLIProxyAPI/config.yaml elif [ -f "/CLIProxyAPI/config.yaml" ]; then echo "Using existing /CLIProxyAPI/config.yaml" else echo "No config file found. Set CONFIG_CONTENT or mount CONFIG_PATH." fi if [ -e /root/.cli-proxy-api ] && [ ! -L /root/.cli-proxy-api ]; then rm -rf /root/.cli-proxy-api fi ln -sfn "${AUTH_DIR}" /root/.cli-proxy-api NGINX_CONF_DIR="/etc/nginx/conf.d" if [ -d "/etc/nginx/http.d" ]; then NGINX_CONF_DIR="/etc/nginx/http.d" fi if [ -z "${MANAGEMENT_KEY:-}" ] && [ -f "${CONFIG_PATH}" ]; then MGMT_KEY_LINE="$(sed -n 's/^[[:space:]]*secret-key[[:space:]]*:[[:space:]]*//p' "${CONFIG_PATH}" | head -n 1)" MGMT_KEY_LINE="$(printf '%s' "${MGMT_KEY_LINE}" | sed 's/[[:space:]]*$//')" MANAGEMENT_KEY="${MGMT_KEY_LINE#\"}" MANAGEMENT_KEY="${MANAGEMENT_KEY%\"}" MANAGEMENT_KEY="${MANAGEMENT_KEY#\'}" MANAGEMENT_KEY="${MANAGEMENT_KEY%\'}" export MANAGEMENT_KEY fi export PROXY_PATH CLI_PROXY_HOST CLI_PROXY_PORT PORT MANAGEMENT_KEY envsubst '${PORT} ${CLI_PROXY_HOST} ${CLI_PROXY_PORT} ${MANAGEMENT_KEY}' \ < /etc/nginx/templates/default.conf.template \ > "${NGINX_CONF_DIR}/default.conf" detect_cmd() { if [ -n "${CLI_PROXY_CMD:-}" ]; then echo "${CLI_PROXY_CMD}" return 0 fi if [ -x "/docker-entrypoint.sh" ]; then echo "/docker-entrypoint.sh" return 0 fi if [ -x "/entrypoint.sh" ]; then echo "/entrypoint.sh" return 0 fi if [ -x "/CLIProxyAPI/cli-proxy-api" ]; then echo "/CLIProxyAPI/cli-proxy-api" return 0 fi if [ -x "/CLIProxyAPI/start.sh" ]; then echo "/CLIProxyAPI/start.sh" return 0 fi if [ -x "/CLIProxyAPI/run.sh" ]; then echo "/CLIProxyAPI/run.sh" return 0 fi if [ -x "/CLIProxyAPI/CLIProxyAPI" ]; then echo "/CLIProxyAPI/CLIProxyAPI" return 0 fi if [ -f "/CLIProxyAPI/main.py" ]; then echo "python /CLIProxyAPI/main.py" return 0 fi if [ -f "/CLIProxyAPI/app.py" ]; then echo "python /CLIProxyAPI/app.py" return 0 fi if [ -f "/CLIProxyAPI/server.py" ]; then echo "python /CLIProxyAPI/server.py" return 0 fi if [ -f "/CLIProxyAPI/index.js" ]; then echo "node /CLIProxyAPI/index.js" return 0 fi if [ -f "/CLIProxyAPI/package.json" ]; then echo "npm start --prefix /CLIProxyAPI" return 0 fi return 1 } if [ "$#" -gt 0 ]; then echo "Starting CLIProxyAPI from base CMD: $*" "$@" & else CLI_CMD="$(detect_cmd || true)" if [ -z "${CLI_CMD}" ]; then echo "Cannot detect how to start CLIProxyAPI." echo "Set CLI_PROXY_CMD in Space Variables to the correct launch command." exit 1 fi echo "Starting CLIProxyAPI: ${CLI_CMD}" sh -c "${CLI_CMD}" & fi echo "Starting nginx on port ${PORT}, proxy path ${PROXY_PATH}" exec nginx -g 'daemon off;'