#!/bin/sh set -eu normalize_http_url() { variable_name=$1 value=$2 printf '%s\n' "$value" | awk \ -v variable_name="$variable_name" \ -f "${WORKSHOP_URL_VALIDATOR_PATH:-/usr/local/lib/workshop-url.awk}" } if [ "${1:-}" = "--validate-url" ]; then normalize_http_url "${2:-URL}" "${3:-}" exit fi HOMARR_WEBSITE_URL=$(normalize_http_url HOMARR_WEBSITE_URL "${HOMARR_WEBSITE_URL:-https://homarr.dev}") WORKSHOP_API_URL=$(normalize_http_url WORKSHOP_API_URL "${WORKSHOP_API_URL:-$HOMARR_WEBSITE_URL}") WORKSHOP_WEB_URL=$(normalize_http_url WORKSHOP_WEB_URL "${WORKSHOP_WEB_URL:-$HOMARR_WEBSITE_URL/workshop}") if [ "${WORKSHOP_REQUIRE_PUBLIC_ORIGIN:-false}" = "true" ] && [ -z "${WORKSHOP_PUBLIC_ORIGIN:-}" ]; then echo "WORKSHOP_PUBLIC_ORIGIN must be set explicitly in production" >&2 exit 1 fi if [ -n "${WORKSHOP_PUBLIC_ORIGIN:-}" ]; then WORKSHOP_PUBLIC_ORIGIN=$(normalize_http_url WORKSHOP_PUBLIC_ORIGIN "$WORKSHOP_PUBLIC_ORIGIN") fi export HOMARR_WEBSITE_URL WORKSHOP_API_URL WORKSHOP_WEB_URL WORKSHOP_PUBLIC_ORIGIN if [ "$(id -u)" -eq 0 ]; then chown -R pocketbase:pocketbase /pb_data exec su -p -s /bin/sh pocketbase -c 'exec /usr/local/bin/workshop-entrypoint' fi if [ -d /pb_public ]; then docs_base_url=${DOCS_BASE_URL:-/} case "$docs_base_url" in /*) ;; *) echo "DOCS_BASE_URL must start with '/'" >&2 exit 1 ;; esac case "$docs_base_url" in *[!A-Za-z0-9._~/-]* | *".."*) echo "DOCS_BASE_URL must be a safe URL path without traversal" >&2 exit 1 ;; esac docs_base_url="/$(printf '%s' "$docs_base_url" | sed 's#^/*##; s#/*$##')" runtime_directory="/pb_public${docs_base_url%/}" mkdir -p "$runtime_directory" cat >"$runtime_directory/workshop-runtime-config.js" <