You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

180 lines
3.7 KiB
Bash

#!/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