From a50b2e573f21bfa834e0844af8ab3e6c9dd7bd30 Mon Sep 17 00:00:00 2001 From: Denis Ranneft Date: Mon, 30 Mar 2026 00:46:59 +0200 Subject: [PATCH] Add 'scripts/admin.sh' --- scripts/admin.sh | 180 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 scripts/admin.sh diff --git a/scripts/admin.sh b/scripts/admin.sh new file mode 100644 index 0000000..79383e7 --- /dev/null +++ b/scripts/admin.sh @@ -0,0 +1,180 @@ +#!/usr/bin/env bash +set -euo pipefail + +COMMAND="${1:-}" + +HERO_ID="" +TOWN_ID="" +LEVEL="" +GOLD="" +HP="" +LIMIT=20 +OFFSET=0 +N="" + +BASE_URL="${ADMIN_BASE_URL:-http://localhost:8080}" +USERNAME="${ADMIN_BASIC_AUTH_USERNAME:-}" +PASSWORD="${ADMIN_BASIC_AUTH_PASSWORD:-}" + +shift || true + +# --- parse args --- +while [[ $# -gt 0 ]]; do + case "$1" in + --hero-id) HERO_ID="$2"; shift 2 ;; + --town-id) TOWN_ID="$2"; shift 2 ;; + --level) LEVEL="$2"; shift 2 ;; + --gold) GOLD="$2"; shift 2 ;; + --hp) HP="$2"; shift 2 ;; + --limit) LIMIT="$2"; shift 2 ;; + --offset) OFFSET="$2"; shift 2 ;; + --n) N="$2"; shift 2 ;; + --base-url) BASE_URL="$2"; shift 2 ;; + --username) USERNAME="$2"; shift 2 ;; + --password) PASSWORD="$2"; shift 2 ;; + *) echo "Unknown arg: $1"; exit 1 ;; + esac +done + +if [[ -z "$USERNAME" || -z "$PASSWORD" ]]; then + echo "Missing admin credentials. Set ADMIN_BASIC_AUTH_USERNAME and ADMIN_BASIC_AUTH_PASSWORD." + exit 1 +fi + +require_value() { + local name="$1" + local value="$2" + if [[ -z "$value" ]]; then + echo "Parameter --$name is required for '$COMMAND'" + exit 1 + fi +} + +request() { + local method="$1" + local path="$2" + local body="${3:-}" + + local url="${BASE_URL%/}${path}" + + if [[ -n "$body" ]]; then + curl -sS -X "$method" "$url" \ + -u "$USERNAME:$PASSWORD" \ + -H "Accept: application/json" \ + -H "Content-Type: application/json" \ + -d "$body" | jq . + else + curl -sS -X "$method" "$url" \ + -u "$USERNAME:$PASSWORD" \ + -H "Accept: application/json" | jq . + fi +} + +case "$COMMAND" in + info) + request GET "/admin/info" + ;; + + heroes) + request GET "/admin/heroes?limit=$LIMIT&offset=$OFFSET" + ;; + + hero) + require_value "hero-id" "$HERO_ID" + request GET "/admin/heroes/$HERO_ID" + ;; + + set-level) + require_value "hero-id" "$HERO_ID" + require_value "level" "$LEVEL" + request POST "/admin/heroes/$HERO_ID/set-level" \ + "{\"level\": $LEVEL}" + ;; + + set-gold) + require_value "hero-id" "$HERO_ID" + require_value "gold" "$GOLD" + request POST "/admin/heroes/$HERO_ID/set-gold" \ + "{\"gold\": $GOLD}" + ;; + + set-hp) + require_value "hero-id" "$HERO_ID" + require_value "hp" "$HP" + request POST "/admin/heroes/$HERO_ID/set-hp" \ + "{\"hp\": $HP}" + ;; + + revive) + require_value "hero-id" "$HERO_ID" + request POST "/admin/heroes/$HERO_ID/revive" "{}" + ;; + + reset) + require_value "hero-id" "$HERO_ID" + request POST "/admin/heroes/$HERO_ID/reset" "{}" + ;; + + reset-buffs) + require_value "hero-id" "$HERO_ID" + request POST "/admin/heroes/$HERO_ID/reset-buff-charges" "{}" + ;; + + add-potions) + require_value "hero-id" "$HERO_ID" + require_value "n" "$N" + request POST "/admin/heroes/$HERO_ID/add-potions" \ + "{\"potions\": $N}" + ;; + + delete) + require_value "hero-id" "$HERO_ID" + request DELETE "/admin/heroes/$HERO_ID" + ;; + + engine-status) + request GET "/admin/engine/status" + ;; + + engine-combats) + request GET "/admin/engine/combats" + ;; + + ws-connections) + request GET "/admin/ws/connections" + ;; + + towns) + request GET "/admin/towns" + ;; + + start-adventure) + require_value "hero-id" "$HERO_ID" + request POST "/admin/heroes/$HERO_ID/start-adventure" "{}" + ;; + + teleport-town) + require_value "hero-id" "$HERO_ID" + require_value "town-id" "$TOWN_ID" + request POST "/admin/heroes/$HERO_ID/teleport-town" \ + "{\"townId\": $TOWN_ID}" + ;; + + start-rest) + require_value "hero-id" "$HERO_ID" + request POST "/admin/heroes/$HERO_ID/start-rest" "{}" + ;; + + time-pause) + request POST "/admin/time/pause" "{}" + ;; + + time-resume) + request POST "/admin/time/resume" "{}" + ;; + + *) + echo "Unsupported command: $COMMAND" + exit 1 + ;; +esac \ No newline at end of file