#!/usr/bin/env bash TAPM_CONFIG_FILE="${TAPM_CONFIG_FILE:-/etc/ta-proxmenu/config.env}" TAPM_CONFIG_READ_VALUE() { local key="$1" local value='' if [[ -r "$TAPM_CONFIG_FILE" ]]; then value="$( sed -n "s/^[[:space:]]*${key}[[:space:]]*=[[:space:]]*//p" \ "$TAPM_CONFIG_FILE" | tail -n 1 )" value="${value#\"}" value="${value%\"}" value="${value#\'}" value="${value%\'}" fi printf '%s' "$value" } TAPM_VALID_BROKER_ORIGIN() { [[ "${1:-}" =~ ^https://[A-Za-z0-9.-]+(:[0-9]+)?/?$ ]] } TAPM_VALID_GITEA_DOMAIN() { [[ "${1:-}" =~ ^[A-Za-z0-9.-]+(:[0-9]+)?$ ]] } TAPM_LOAD_RUNTIME_CONFIG() { if [[ -z "${TAPM_BROKER_URL:-}" ]]; then TAPM_BROKER_URL="$(TAPM_CONFIG_READ_VALUE TAPM_BROKER_URL)" fi if [[ -z "${GITEA_DOMAIN:-}" ]]; then GITEA_DOMAIN="$(TAPM_CONFIG_READ_VALUE GITEA_DOMAIN)" fi TAPM_BROKER_URL="${TAPM_BROKER_URL:-}" TAPM_BROKER_URL="${TAPM_BROKER_URL%/}" GITEA_DOMAIN="${GITEA_DOMAIN:-}" if TAPM_VALID_GITEA_DOMAIN "$GITEA_DOMAIN"; then GITEA_URL="https://${GITEA_DOMAIN}" else GITEA_URL='' fi } TAPM_ENSURE_RUNTIME_CONFIG() { local broker_url local config_dir local gitea_domain local input_device='/dev/tty' local temporary_file TAPM_LOAD_RUNTIME_CONFIG if [[ -r "$TAPM_CONFIG_FILE" ]] && TAPM_VALID_BROKER_ORIGIN "$TAPM_BROKER_URL" && TAPM_VALID_GITEA_DOMAIN "$GITEA_DOMAIN"; then return 0 fi if [[ "${TAPM_CONFIG_TEST_STDIN:-0}" == 1 ]]; then input_device='/dev/stdin' exec 3>&2 elif [[ ! -r /dev/tty || ! -w /dev/tty ]]; then printf 'TA-ProxMenu requires %s with TAPM_BROKER_URL and GITEA_DOMAIN.\n' \ "$TAPM_CONFIG_FILE" >&2 return 1 else exec 3>/dev/tty fi printf '\nTA-ProxMenu V2 requires deployment service configuration.\n' \ >&3 while true; do printf 'TAPM broker HTTPS origin (example: https://tapm.example.com): ' \ >&3 IFS= read -r broker_url <"$input_device" || return 1 broker_url="${broker_url%/}" TAPM_VALID_BROKER_ORIGIN "$broker_url" && break printf 'Enter an HTTPS origin without a path.\n' >&3 done while true; do printf 'Gitea hostname (example: git.example.com): ' >&3 IFS= read -r gitea_domain <"$input_device" || return 1 TAPM_VALID_GITEA_DOMAIN "$gitea_domain" && break printf 'Enter a hostname without https:// or a path.\n' >&3 done config_dir="${TAPM_CONFIG_FILE%/*}" [[ "$config_dir" != "$TAPM_CONFIG_FILE" ]] || config_dir='.' mkdir -p "$config_dir" || return 1 temporary_file="$(mktemp "${TAPM_CONFIG_FILE}.tmp.XXXXXX")" || return 1 if ! { printf 'TAPM_BROKER_URL=%s\n' "$broker_url" printf 'GITEA_DOMAIN=%s\n' "$gitea_domain" } >"$temporary_file" || ! chmod 0600 "$temporary_file" || ! mv -f "$temporary_file" "$TAPM_CONFIG_FILE"; then rm -f "$temporary_file" return 1 fi TAPM_BROKER_URL="$broker_url" GITEA_DOMAIN="$gitea_domain" GITEA_URL="https://${GITEA_DOMAIN}" printf 'Saved TA-ProxMenu configuration to %s.\n\n' "$TAPM_CONFIG_FILE" \ >&3 exec 3>&- }