112 lines
2.9 KiB
Bash
112 lines
2.9 KiB
Bash
#!/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>&-
|
|
}
|