diff --git a/deploy/selfhost/install.sh b/deploy/selfhost/install.sh index 20fdbec..9ed4c1e 100755 --- a/deploy/selfhost/install.sh +++ b/deploy/selfhost/install.sh @@ -144,6 +144,32 @@ create_admin() { node "$REPO/scripts/create-admin.mjs" "$ADMIN_EMAIL" --name "$ADMIN_NAME" --role admin } +# SQL-Literal-Escaping (einfache Anführungszeichen verdoppeln). +sqlq() { printf "'%s'" "$(printf '%s' "$1" | sed "s/'/''/g")"; } + +# Admin-Anlage DIREKT in die DB (Modus 2). Vermeidet den Zugriff auf die +# öffentliche URL — die ist auf der Host-Maschine wegen Hairpin-NAT / noch +# nicht gesetztem DNS oft nicht erreichbar. Braucht nur bcryptjs (für den +# Hash, identisch zur App: cost 12) + dbsql. +create_admin_db() { + ensure_node_deps + head "Ersten Admin anlegen ($ADMIN_EMAIL)" + local pw pw2 hash + while :; do + printf 'Passwort (min. 10 Zeichen): '; read -rs pw; printf '\n' + if [ "${#pw}" -lt 10 ]; then warn "Mindestens 10 Zeichen."; continue; fi + printf 'Passwort wiederholen: '; read -rs pw2; printf '\n' + if [ "$pw" != "$pw2" ]; then warn "Passwörter stimmen nicht überein."; continue; fi + break + done + hash="$(node -e "process.stdout.write(require('bcryptjs').hashSync(process.argv[1],12))" "$pw")" \ + || die "Hash-Berechnung fehlgeschlagen." + printf "insert into public.admin_users (email,password_hash,name,role,must_change_password) values (%s,%s,%s,'admin',true);\n" \ + "$(sqlq "$ADMIN_EMAIL")" "$(sqlq "$hash")" "$(sqlq "$ADMIN_NAME")" | dbsql \ + && ok "Admin angelegt: $ADMIN_EMAIL" \ + || die "Admin-Anlage fehlgeschlagen (existiert die E-Mail schon?)." +} + ####################################################################### # MODUS 1 — Bestehende/eigene Supabase ####################################################################### @@ -470,7 +496,9 @@ SQL ( cd "$TARGET" && docker compose up -d ) ok "Stack läuft." - create_admin "$SITE_URL" "$SERVICE_ROLE_KEY" + # Admin direkt in die DB (nicht über die öffentliche URL — die ist auf dem + # Host wegen Hairpin-NAT / noch nicht gesetztem DNS oft nicht erreichbar). + create_admin_db fi #######################################################################