diff --git a/scripts/bms-auth.sh b/scripts/bms-auth.sh index d01d8ad..2c252a1 100755 --- a/scripts/bms-auth.sh +++ b/scripts/bms-auth.sh @@ -29,9 +29,9 @@ token_is_valid() { save_token() { local response="$1" local access_token refresh_token expires_in expires_at - access_token=$(echo "$response" | jq -r '.AccessToken // .access_token // empty') - refresh_token=$(echo "$response" | jq -r '.RefreshToken // .refresh_token // empty') - expires_in=$(echo "$response" | jq -r '.ExpiresIn // .expires_in // 3600') + access_token=$(echo "$response" | jq -r '.result.AccessToken // .result.accessToken // .result.access_token // empty') + refresh_token=$(echo "$response" | jq -r '.result.RefreshToken // .result.refreshToken // .result.refresh_token // empty') + expires_in=$(echo "$response" | jq -r '.result.ExpiresIn // .result.expires_in // 3600') expires_at=$(( $(date +%s) + expires_in )) [[ -n "$access_token" ]] || die "No access token in auth response: $response" @@ -65,11 +65,13 @@ cmd_auth_login() { require_env BMS_USERNAME require_env BMS_PASSWORD echo "Authenticating with username/password..." >&2 - response=$(curl -sf -X POST "${BMS_API_BASE}/v2/security/authenticate" \ + local curl_args=(-s -X POST "${BMS_API_BASE}/v2/security/authenticate" \ -F "GrantType=password" \ -F "UserName=${BMS_USERNAME}" \ -F "Password=${BMS_PASSWORD}" \ - -F "Tenant=${BMS_TENANT}") || die "Authentication request failed" + -F "Tenant=${BMS_TENANT}") + [[ -n "${BMS_MFA_CODE:-}" ]] && curl_args+=(-F "MFACode=${BMS_MFA_CODE}") + response=$(curl "${curl_args[@]}") || die "Authentication request failed" fi save_token "$response" diff --git a/scripts/bms-templates.sh b/scripts/bms-templates.sh old mode 100644 new mode 100755 diff --git a/scripts/bms-tickets.sh b/scripts/bms-tickets.sh old mode 100644 new mode 100755 index 8a3d657..68b5e4d --- a/scripts/bms-tickets.sh +++ b/scripts/bms-tickets.sh @@ -30,10 +30,10 @@ bms_curl() { # Pretty-print a ticket list format_ticket_list() { jq -r ' - (.Data // .Items // .) | - if type == "array" then .[] else . end | - "\(.TicketNumber // .Id)\t[\(.StatusName // "?")] \(.Title)\t| \(.AccountName // "?")\t| Assignee: \(.AssigneeName // "unassigned")\t| Priority: \(.PriorityName // "?")" - ' | column -t -s $'\t' + (.result // .) | + if type == "array" then .[] else empty end | + "\(.ticketNumber // .Id)\t[\(.statusName // "?")] \(.title // "?")\t| \(.accountName // "?")\t| Assignee: \(.assigneeName // "unassigned")\t| Priority: \(.priorityName // "?")" + ' | sed 's/\t/ /g' } format_ticket_detail() { @@ -82,6 +82,11 @@ cmd_list() { # Build filter JSON local filter="{" local sep="" + if [[ "$status" == "open" ]]; then + filter+="\"StatusNames\":\"Escalated,Open,Waiting for Customer,Waiting for Product(s),Waiting for Vendor\"" + sep="," + status="" + fi [[ -n "$status" ]] && { filter+="${sep}\"StatusNames\":\"${status}\""; sep=","; } [[ -n "$assignee" ]] && { filter+="${sep}\"AssigneeName\":\"${assignee}\""; sep=","; } [[ -n "$from" ]] && { filter+="${sep}\"CreatedOnFrom\":\"${from}T00:00:00\""; sep=","; } diff --git a/scripts/bms.sh b/scripts/bms.sh old mode 100644 new mode 100755 diff --git a/scripts/patch.py b/scripts/patch.py new file mode 100644 index 0000000..4f2757e --- /dev/null +++ b/scripts/patch.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 + +path = "/workspace/skills/bms/scripts/bms-tickets.sh" +with open(path, "r") as f: + lines = f.readlines() + +# Find the line that is exactly ' local sep=""\n' +for i, line in enumerate(lines): + if line.strip() == 'local sep=""': + insert_idx = i + 1 + new_lines = [ + ' if [[ "$status" == "open" ]]; then\n', + ' filter+="\\"StatusNames\\":\\"Escalated,Open,Waiting for Customer,Waiting for Product(s),Waiting for Vendor\\""\n', + ' sep=","\n', + ' status=""\n', + ' fi\n', + ] + lines[insert_idx:insert_idx] = new_lines + break + +with open(path, "w") as f: + f.writelines(lines) +print("Patched after local sep line")