diff --git a/hass-n8n/docker-entrypoint.sh b/hass-n8n/docker-entrypoint.sh index 667c14b..4587b65 100755 --- a/hass-n8n/docker-entrypoint.sh +++ b/hass-n8n/docker-entrypoint.sh @@ -1,7 +1,8 @@ -#!/bin/bash +#!/bin/sh +set -eu CONFIG_PATH="/data/options.json" -N8N_PATH="$(jq --raw-output '.user_folder // empty' $CONFIG_PATH)" +N8N_PATH="$(jq -r '.user_folder // empty' "$CONFIG_PATH")" mkdir -p "${N8N_PATH}/.n8n/.cache" @@ -9,42 +10,34 @@ mkdir -p "${N8N_PATH}/.n8n/.cache" ## USER PARAMETERS ## ##################### -# REQUIRED - -# Extract the values from env_vars_list -values=$(jq -r '.env_vars_list | .[]' "$CONFIG_PATH") - -# Convert the values to an array -IFS=$'\n' read -r -d '' -a array <<< "$values" - -# Export keys and values -for element in "${array[@]}" -do +# Read env_vars_list line by line (NO arrays) +jq -r '.env_vars_list[]?' "$CONFIG_PATH" | while IFS= read -r element; do key="${element%%:*}" value="${element#*:}" - value=$(echo "$value" | xargs) # Remove leading and trailing whitespace - export "$key"="$value" - echo "exported ${key}=${value}" + + # trim whitespace (POSIX) + value="$(printf '%s' "$value" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')" + + export "$key=$value" + echo "exported $key=$value" done -export N8N_HOST="$(jq --raw-output '.n8n_host // empty' $CONFIG_PATH)" -export N8N_PORT="$(jq --raw-output '.n8n_port // empty' $CONFIG_PATH)" -export NODE_ENV="$(jq --raw-output '.node_env // empty' $CONFIG_PATH)" -export WEBHOOK_TUNNEL_URL="$(jq --raw-output '.webhook_tunnel_url // empty' $CONFIG_PATH)" -export N8N_BASIC_AUTH_ACTIVE="$(jq --raw-output '.auth // empty' $CONFIG_PATH)" -export N8N_BASIC_AUTH_USER="$(jq --raw-output '.auth_username // empty' $CONFIG_PATH)" -export N8N_BASIC_AUTH_PASSWORD="$(jq --raw-output '.auth_password // empty' $CONFIG_PATH)" -export GENERIC_TIMEZONE="$(jq --raw-output '.timezone // empty' $CONFIG_PATH)" -export N8N_PROTOCOL="$(jq --raw-output '.protocol // empty' $CONFIG_PATH)" -export N8N_SSL_CERT="/ssl/$(jq --raw-output '.certfile // empty' $CONFIG_PATH)" -export N8N_SSL_KEY="/ssl/$(jq --raw-output '.keyfile // empty' $CONFIG_PATH)" -export N8N_ENCRYPTION_KEY="$(jq --raw-output '.encryption_key // empty' $CONFIG_PATH)" -export N8N_USER_FOLDER="${N8N_PATH}" +export N8N_HOST="$(jq -r '.n8n_host // empty' "$CONFIG_PATH")" +export N8N_PORT="$(jq -r '.n8n_port // empty' "$CONFIG_PATH")" +export NODE_ENV="$(jq -r '.node_env // empty' "$CONFIG_PATH")" +export WEBHOOK_TUNNEL_URL="$(jq -r '.webhook_tunnel_url // empty' "$CONFIG_PATH")" +export N8N_BASIC_AUTH_ACTIVE="$(jq -r '.auth // empty' "$CONFIG_PATH")" +export N8N_BASIC_AUTH_USER="$(jq -r '.auth_username // empty' "$CONFIG_PATH")" +export N8N_BASIC_AUTH_PASSWORD="$(jq -r '.auth_password // empty' "$CONFIG_PATH")" +export GENERIC_TIMEZONE="$(jq -r '.timezone // empty' "$CONFIG_PATH")" +export N8N_PROTOCOL="$(jq -r '.protocol // empty' "$CONFIG_PATH")" +export N8N_SSL_CERT="/ssl/$(jq -r '.certfile // empty' "$CONFIG_PATH")" +export N8N_SSL_KEY="/ssl/$(jq -r '.keyfile // empty' "$CONFIG_PATH")" +export N8N_ENCRYPTION_KEY="$(jq -r '.encryption_key // empty' "$CONFIG_PATH")" +export N8N_USER_FOLDER="$N8N_PATH" +export N8N_CMD_LINE="$(jq -r '.cmd_line_args // empty' "$CONFIG_PATH")" -export N8N_CMD_LINE="$(jq --raw-output '.cmd_line_args // empty' $CONFIG_PATH)" - - -if [ -z "${N8N_BASIC_AUTH_USER}" ] || [ -z "${N8N_BASIC_AUTH_ACTIVE}" ]; then +if [ -z "$N8N_BASIC_AUTH_USER" ] || [ -z "$N8N_BASIC_AUTH_ACTIVE" ]; then export N8N_BASIC_AUTH_ACTIVE=false unset N8N_BASIC_AUTH_USER unset N8N_BASIC_AUTH_PASSWORD @@ -54,20 +47,11 @@ fi ## MAIN ## ########### -if [ "$#" -gt 0 ]; then - # Got started with arguments - exec n8n "${N8N_CMD_LINE}" -else - # Got started without arguments - exec n8n start -fi - -chown -R node /home/node +# Fix ownership BEFORE exec +chown -R node /home/node || true if [ "$#" -gt 0 ]; then - # Got started with arguments - exec su-exec node "$@" + exec su-exec node n8n $N8N_CMD_LINE else - # Got started without arguments - exec su-exec node n8n + exec su-exec node n8n start fi \ No newline at end of file