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.
233 lines
4.8 KiB
Bash
233 lines
4.8 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
COMMAND="${1:-help}"
|
|
|
|
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
|
|
|
|
show_help() {
|
|
cat <<EOF
|
|
Usage:
|
|
./admin.sh <command> [options]
|
|
|
|
Commands:
|
|
info
|
|
heroes [--limit N --offset N]
|
|
hero --hero-id ID
|
|
set-level --hero-id ID --level N
|
|
set-gold --hero-id ID --gold N
|
|
set-hp --hero-id ID --hp N
|
|
revive --hero-id ID
|
|
reset --hero-id ID
|
|
reset-buffs --hero-id ID
|
|
add-potions --hero-id ID --n N
|
|
delete --hero-id ID
|
|
engine-status
|
|
engine-combats
|
|
ws-connections
|
|
towns
|
|
start-adventure --hero-id ID
|
|
teleport-town --hero-id ID --town-id ID
|
|
start-rest --hero-id ID
|
|
time-pause
|
|
time-resume
|
|
|
|
Options:
|
|
--hero-id ID
|
|
--town-id ID
|
|
--level N
|
|
--gold N
|
|
--hp N
|
|
--limit N (default: 20)
|
|
--offset N (default: 0)
|
|
--n N
|
|
|
|
Env:
|
|
ADMIN_BASE_URL
|
|
ADMIN_BASIC_AUTH_USERNAME
|
|
ADMIN_BASIC_AUTH_PASSWORD
|
|
|
|
Examples:
|
|
./admin.sh heroes --limit 50
|
|
./admin.sh hero --hero-id 123
|
|
./admin.sh set-level --hero-id 123 --level 10
|
|
EOF
|
|
}
|
|
|
|
# --- 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
|
|
help)
|
|
show_help
|
|
;;
|
|
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"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac |