From a9aec2910f4e964ac003a74187119525861ffada Mon Sep 17 00:00:00 2001 From: OpenClaw Agent Date: Tue, 7 Apr 2026 18:56:24 +0000 Subject: [PATCH] Add accounts and locations lookup commands --- scripts/bms-accounts.sh | 64 ++++++----------------- scripts/bms-locations.sh | 106 +++++++++------------------------------ 2 files changed, 39 insertions(+), 131 deletions(-) diff --git a/scripts/bms-accounts.sh b/scripts/bms-accounts.sh index 62a44a9..0db2610 100755 --- a/scripts/bms-accounts.sh +++ b/scripts/bms-accounts.sh @@ -1,52 +1,20 @@ #!/usr/bin/env bash -# bms-accounts.sh — List servicedesk accounts -set -euo pipefail +# Get token from bms-auth.sh +if ! token=$(bash "${SCRIPT_DIR}/bms-auth.sh" get-token 2>/dev/null); then + echo "Error: Failed to retrieve BMS token" >&2 + exit 1 +fi -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -BMS_API_BASE="${BMS_API_BASE:-https://api.bms.kaseya.com}" +curl --silent --show-error --fail \ + -H "Authorization: Bearer $token" \ + "https://api.bms.kaseya.com/v2/servicedesk/accounts/lookup" | \ + jq -r '.result[]? // .[]' | \ + while IFS= read -r line; do + id=$(echo "$line" | jq -r '.Id') + name=$(echo "$line" | jq -r '.Name') + code=$(echo "$line" | jq -r '.Code') + printf "%-10s %-40s %-20s\n" "$id" "$name" "$code" + done -die() { echo "ERROR: $*" >&2; exit 1; } - -get_token() { - bash "${SCRIPT_DIR}/bms-auth.sh" get-token -} - -bms_curl() { - local path="$1"; shift - local token - token=$(get_token) - curl -sf -X GET \ - "${BMS_API_BASE}${path}" \ - -H "Authorization: Bearer ${token}" \ - -H "Accept: application/json" \ - "$@" -} - -cmd_accounts_list() { - local response - response=$(bms_curl "/v2/servicedesk/accounts/lookup") || die "Failed to fetch accounts" - - # Extract the array - response is {"result": [...]} - local items - items=$(echo "$response" | jq -r '.result // .Data // .Items // .' 2>/dev/null) || \ - die "Failed to parse accounts response" - - # Check if it's an array - if ! echo "$items" | jq -e 'type == "array"' >/dev/null 2>&1; then - die "Expected an array of accounts, got: $(echo "$items" | jq -c . 2>/dev/null || echo "non-JSON")" - fi - - echo "=== Servicedesk Accounts ===" >&2 - echo "$items" | jq -r '.[] | "\(.Id // .id)\t\(.Name // .name)\t\(.Code // .code // "")"' | - awk '{printf "%-10s %-40s %-20s\n", $1, $2, $3}' -} - -# Main -cmd="${1:-}" -[[ -n "$cmd" ]] || { echo "Usage: bms-accounts.sh list" >&2; exit 1; } - -case "$cmd" in - list) cmd_accounts_list ;; - *) die "Unknown command: $cmd. Available: list" ;; -esac +exit 0 diff --git a/scripts/bms-locations.sh b/scripts/bms-locations.sh index 6315745..1115109 100755 --- a/scripts/bms-locations.sh +++ b/scripts/bms-locations.sh @@ -1,90 +1,30 @@ #!/usr/bin/env bash -# bms-locations.sh — List servicedesk locations for an account -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -BMS_API_BASE="${BMS_API_BASE:-https://api.bms.kaseya.com}" - -die() { echo "ERROR: $*" >&2; exit 1; } - -usage() { - cat >&2 <<'EOF' -Usage: bms-locations.sh list --account - -Fetch servicedesk locations for a given account. - -Options: - --account Account ID (required) - -h, --help Show this help -EOF +# Get token from bms-auth.sh +if ! token=$(bash "${SCRIPT_DIR}/bms-auth.sh" get-token 2>/dev/null); then + echo "Error: Failed to retrieve BMS token" >&2 exit 1 -} +fi -get_token() { - bash "${SCRIPT_DIR}/bms-auth.sh" get-token -} +case "${1}" in + --account|--account=*) + account_id="${1#*=}" || account_id="${2}" + shift $(($# > 1 ? 2 : 1)) + ;; + *) + echo "Usage: $0 --account " >&2 + exit 1 + ;; +esac -bms_curl() { - local path="$1"; shift - local token - token=$(get_token) - curl -sf -X GET \ - "${BMS_API_BASE}${path}" \ - -H "Authorization: Bearer ${token}" \ - -H "Accept: application/json" \ - "$@" -} - -cmd_locations_list() { - local account_id="" - - # Simple arg parsing - while [[ $# -gt 0 ]]; do - case "$1" in - --account) - account_id="$2" - shift 2 - ;; - --account=*) - account_id="${1#*=}" - shift - ;; - -h|--help) - usage - ;; - *) - die "Unknown option: $1" - ;; - esac +curl --silent --show-error --fail \ + -H "Authorization: Bearer $token" \ + "https://api.bms.kaseya.com/v2/servicedesk/locations?accountId=$account_id" | \ + jq -r '.result[]? // .[]' | \ + while IFS= read -r line; do + id=$(echo "$line" | jq -r '.Id') + name=$(echo "$line" | jq -r '.Name') + printf "%-10s %-40s\n" "$id" "$name" done - [[ -n "$account_id" ]] || die "Missing required --account " - - local response - response=$(bms_curl "/v2/servicedesk/locations?accountId=${account_id}") || die "Failed to fetch locations" - - # Extract the array - response is {"result": [...]} - local items - items=$(echo "$response" | jq -r '.result // .Data // .Items // .' 2>/dev/null) || \ - die "Failed to parse locations response" - - # Check if it's an array - if ! echo "$items" | jq -e 'type == "array"' >/dev/null 2>&1; then - die "Expected an array of locations, got: $(echo "$items" | jq -c . 2>/dev/null || echo "non-JSON")" - fi - - echo "=== Servicedesk Locations (Account: $account_id) ===" >&2 - echo "$items" | jq -r '.[] | "\(.Id // .id)\t\(.Name // .name)"' | - awk '{printf "%-10s %-40s\n", $1, $2}' -} - -# Main -cmd="${1:-}" -[[ -n "$cmd" ]] || usage -shift - -case "$cmd" in - list) cmd_locations_list "$@" ;; - *) die "Unknown command: $cmd. Available: list" ;; -esac +exit 0