#!/usr/bin/env bash # Factory-Defaults-Export – holt eine ZIP vom laufenden OpenCRM und legt sie # in ./factory-exports/ ab. Dieselbe ZIP, die du auch über die UI bekommst. # # Workflow: # ./factory-export.sh # default: localhost:3010, admin@admin.com # OPENCRM_URL=https://crm.example.de \ # OPENCRM_EMAIL=admin@example.de \ # ./factory-export.sh # gegen die Prod-Instanz # # Optional: # OPENCRM_PASSWORD=… (sonst wird interaktiv abgefragt) # # Die ZIP ist gitignored – du kannst sie via scp transferieren und mit # ./factory-import.sh auf der anderen Seite einspielen. set -euo pipefail URL="${OPENCRM_URL:-http://localhost:3010}" EMAIL="${OPENCRM_EMAIL:-admin@admin.com}" PASSWORD="${OPENCRM_PASSWORD:-}" REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" EXPORT_DIR="$REPO_ROOT/factory-exports" mkdir -p "$EXPORT_DIR" if [ -z "$PASSWORD" ]; then read -r -s -p "Passwort für $EMAIL @ $URL: " PASSWORD echo fi echo "→ Login als $EMAIL @ $URL" LOGIN_RESPONSE="$(curl -sS -X POST "$URL/api/auth/login" \ -H 'Content-Type: application/json' \ --data-raw "$(E="$EMAIL" P="$PASSWORD" python3 -c 'import json,os;print(json.dumps({"email":os.environ["E"],"password":os.environ["P"]}))')")" TOKEN="$(printf '%s' "$LOGIN_RESPONSE" | python3 -c 'import json,sys;d=json.load(sys.stdin);print((d.get("data") or {}).get("token","") or d.get("token",""))')" if [ -z "$TOKEN" ]; then echo "✗ Login fehlgeschlagen. Antwort:" echo "$LOGIN_RESPONSE" | head -c 500 echo exit 1 fi TIMESTAMP="$(date +%Y-%m-%d-%H%M)" DEST="$EXPORT_DIR/factory-defaults-$TIMESTAMP.zip" echo "→ Lade ZIP nach $DEST" HTTP_CODE="$(curl -sS -o "$DEST" -w '%{http_code}' \ -H "Authorization: Bearer $TOKEN" \ "$URL/api/factory-defaults/export")" if [ "$HTTP_CODE" != "200" ]; then echo "✗ Export-Endpoint antwortete mit HTTP $HTTP_CODE" rm -f "$DEST" exit 1 fi SIZE_KB="$(du -k "$DEST" | cut -f1)" echo "✓ Export erfolgreich: $DEST (${SIZE_KB} KB)" echo echo "Inhalt:" unzip -l "$DEST" | sed 's/^/ /'