Files
amneziavpnphp/scripts/api_regen_and_dump_conf.sh
2026-01-23 17:55:40 +03:00

58 lines
1.7 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
PANEL_URL="${PANEL_URL:-http://localhost:8082}"
EMAIL="${EMAIL:-admin@amnez.ia}"
PASSWORD="${PASSWORD:-admin123}"
CLIENT_NAME="${CLIENT_NAME:-}"
CLIENT_ID="${CLIENT_ID:-}"
OUT_DIR="${OUT_DIR:-scripts/_cycle_out}"
mkdir -p "$OUT_DIR"
if [[ -z "$CLIENT_ID" && -z "$CLIENT_NAME" ]]; then
echo "ERROR: set CLIENT_ID or CLIENT_NAME" >&2
exit 2
fi
TOKEN_JSON=$(curl -sS -X POST "$PANEL_URL/api/auth/token" -d "email=$EMAIL&password=$PASSWORD")
TOKEN=$(printf '%s' "$TOKEN_JSON" | python3 -c 'import sys,json; print(json.load(sys.stdin).get("token",""))')
if [[ -z "${TOKEN:-}" ]]; then
echo "ERROR: token empty" >&2
printf '%s' "$TOKEN_JSON" | head -c 200 >&2
echo >&2
exit 3
fi
if [[ -z "$CLIENT_ID" ]]; then
CLIENTS_JSON=$(curl -fsS "$PANEL_URL/api/clients" -H "Authorization: Bearer $TOKEN")
CLIENT_ID=$(printf '%s' "$CLIENTS_JSON" | python3 -c 'import sys,json; j=json.load(sys.stdin); needle=sys.argv[1];
for c in j.get("clients",[]):
if str(c.get("name",""))==needle:
print(c.get("id",""));
raise SystemExit
print("")' "$CLIENT_NAME")
fi
if [[ -z "${CLIENT_ID:-}" ]]; then
echo "ERROR: client not found" >&2
exit 4
fi
RESP=$(curl -fsS -X POST "$PANEL_URL/api/clients/$CLIENT_ID/regenerate-config" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{}' )
JSON_OUT="$OUT_DIR/regenerate_${CLIENT_ID}.json"
CONF_OUT="$OUT_DIR/${CLIENT_NAME:-client_${CLIENT_ID}}_regenerated.conf"
printf '%s' "$RESP" >"$JSON_OUT"
# Extract config field
printf '%s' "$RESP" | python3 -c 'import sys,json; j=json.load(sys.stdin); c=(j.get("client") or {}).get("config") or ""; sys.stdout.write(c)' >"$CONF_OUT"
echo "saved_json:$JSON_OUT"
echo "saved_conf:$CONF_OUT"