4407bbfbb8
Zwei kleine Bash-Wrapper im Repo-Root, die den vorhandenen Export- und Import-Endpoint per curl ansteuern und damit den Hin- und Her-Transfer von Stammdaten + HTML-Templates zwischen Instanzen ohne Browser ermöglichen. ./factory-export.sh # ZIP nach factory-exports/ ./factory-import.sh # nimmt jüngste ZIP automatisch ./factory-import.sh path/zur.zip # explizit Konfigurierbar via OPENCRM_URL / OPENCRM_EMAIL / OPENCRM_PASSWORD; ohne PASSWORD wird interaktiv abgefragt. Workflow: prod erweitert Anbieter → ./factory-export.sh → scp → dev ./factory-import.sh – funktioniert in beide Richtungen. `factory-exports/` ist gitignored (nur .gitkeep getrackt). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
65 lines
2.0 KiB
Bash
Executable File
65 lines
2.0 KiB
Bash
Executable File
#!/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/^/ /'
|