59 lines
1.6 KiB
Bash
Executable File
59 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
PORT="${PORT:-3010}"
|
|
BASE_URL="${BASE_URL:-http://localhost:${PORT}/api}"
|
|
|
|
EMAIL="${EMAIL:-}"
|
|
PASSWORD="${PASSWORD:-}"
|
|
BACKUP_NAME="${BACKUP_NAME:-backup-2026-04-04T06-33-19-418Z}"
|
|
MODE="${MODE:-dropAndInsert}"
|
|
|
|
if [[ -z "${EMAIL}" || -z "${PASSWORD}" ]]; then
|
|
echo "Imposta EMAIL e PASSWORD. Esempio:" >&2
|
|
echo " EMAIL='superadmin@gmail.com' PASSWORD='...' $0" >&2
|
|
exit 1
|
|
fi
|
|
|
|
login_payload="$(printf '{"email":"%s","password":"%s"}' "${EMAIL//\"/\\\"}" "${PASSWORD//\"/\\\"}")"
|
|
|
|
login_resp="$(curl -sS -X POST "${BASE_URL}/auth/login" \
|
|
-H "Content-Type: application/json" \
|
|
-d "${login_payload}")"
|
|
|
|
extract_token() {
|
|
local resp="$1"
|
|
if command -v jq >/dev/null 2>&1; then
|
|
jq -r '.token // empty' <<<"$resp"
|
|
return
|
|
fi
|
|
if command -v python3 >/dev/null 2>&1; then
|
|
python3 - <<'PY' "$resp"
|
|
import json, sys
|
|
try:
|
|
print(json.loads(sys.argv[1]).get("token","") or "")
|
|
except Exception:
|
|
print("")
|
|
PY
|
|
return
|
|
fi
|
|
sed -n 's/.*"token"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' <<<"$resp" | head -n 1
|
|
}
|
|
|
|
token="$(extract_token "$login_resp")"
|
|
if [[ -z "${token}" ]]; then
|
|
echo "Login fallito o token non trovato. Risposta:" >&2
|
|
printf '%s\n' "$login_resp" >&2
|
|
exit 1
|
|
fi
|
|
|
|
restore_payload="$(printf '{"backupName":"%s","mode":"%s"}' "${BACKUP_NAME//\"/\\\"}" "${MODE//\"/\\\"}")"
|
|
|
|
echo "Restore start: backup=${BACKUP_NAME} mode=${MODE} collections=ALL"
|
|
restore_resp="$(curl -sS -X POST "${BASE_URL}/admin/database/restore" \
|
|
-H "Authorization: Bearer ${token}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "${restore_payload}")"
|
|
|
|
echo "$restore_resp"
|