Fix --only mode credential parsing for values with spaces

Replace source+grep with a safe line-by-line reader so SITE_NAME and
ADMIN_PASS with spaces do not get interpreted as shell commands. Also
quote SITE_NAME and ADMIN_PASS in the written credentials file.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
jtricerolph 2026-07-01 19:10:25 +00:00
parent 259a1457aa
commit 285d6609b1

View file

@ -272,10 +272,10 @@ gen_secrets() {
# Hotel Manage credentials — generated $(date '+%Y-%m-%d %H:%M')
# !! KEEP THIS FILE SAFE — store a copy offsite !!
SITE_NAME=${SITE_NAME}
SITE_NAME="${SITE_NAME}"
DOMAIN=${DOMAIN}
ADMIN_EMAIL=${ADMIN_EMAIL}
ADMIN_PASS=${ADMIN_PASS}
ADMIN_PASS="${ADMIN_PASS}"
OFFICE_IP_CHECK=${OFFICE_IP}
PG_SUPERPASS=${PG_SUPERPASS}
@ -956,7 +956,12 @@ if [[ "${1:-}" == "--only" ]]; then
grep -qw "$ONLY" <<< "$VALID" || msg_error "Unknown service '${ONLY}'. Valid: ${VALID}"
CREDS_FILE=/root/hotel-manage-credentials.txt
[[ -f "$CREDS_FILE" ]] || msg_error "No credentials file at ${CREDS_FILE} — run the full installer first"
set -a; source <(grep -v '^#' "$CREDS_FILE" | grep '='); set +a
# Read key=value pairs safely — handles values that contain spaces (e.g. SITE_NAME)
while IFS= read -r line; do
[[ "$line" =~ ^[A-Z_][A-Z0-9_]*= ]] || continue
key="${line%%=*}"; value="${line#*=}"
export "$key"="$value"
done < "$CREDS_FILE"
USE_FORGEJO=true
[[ -f /root/.ssh/hotel-manage_deploy.pub ]] \
&& MGMT_PUBKEY=$(cat /root/.ssh/hotel-manage_deploy.pub) || MGMT_PUBKEY=""