#!/bin/bash # # License type: BSD 3-Clause License # License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE # # Created by Stephane Bourque on 2021-03-04. # Arilia Wireless Inc. # if [[ "$(which jq)" == "" ]] then echo "You need the package jq installed to use this script." exit 1 fi if [[ "$(which curl)" == "" ]] then echo "You need the package curl installed to use this script." exit 1 fi if [[ "${UCENTRALSEC}" == "" ]] then echo "You must set the variable UCENTRALSEC in order to use this script. Something like" echo "UCENTRALSEC=security.isp.com:16001" exit 1 fi if [[ "${FLAGS}" == "" ]] then FLAGS="-s" fi token="" result_file=result.json username="tip@ucentral.com" password="openwifi" browser_list=(firefox sensible-browser xdg-open w3m links links2 lynx youtube-dl) browser="" login() { payload="{ \"userId\" : \"$username\" , \"password\" : \"$password\" }" token=$(curl ${FLAGS} -X POST -H "Content-Type: application/json" -d "$payload" "https://${UCENTRALSEC}/api/v1/oauth2" | jq -r '.access_token') if [[ "${token}" == "" ]] then echo "Could not login. Please verify the host and username/password." exit 13 fi echo "${token}" > token.json setfms } findbrowser() { if [[ "${browser}" != "" ]] then echo elif [[ "$(uname)" == "Darwin" ]] then browser=open else BROWSER_LIST=(firefox sensible-browser xdg-open w3m links links2 lynx youtube-dl) for br_name in "${browser_list[@]}" do if [[ $(which ${br_name}) != "" ]] then browser=${br_name} break fi done fi } setfms() { curl ${FLAGS} -X GET "https://${UCENTRALSEC}/api/v1/systemEndpoints" \ -H "accept: application/json" \ -H "Authorization: Bearer ${token}" > ${result_file} # jq < ${result_file} for index in {0..10} do endpointlocation=".endpoints[${index}].uri" endpointlocationtype=".endpoints[${index}].type" rawurl="$(cat ${result_file} | jq -r ${endpointlocation})" svctype="$(cat ${result_file} | jq -r ${endpointlocationtype})" proto="$(echo $rawurl | grep :// | sed -e's,^\(.*://\).*,\1,g')" url="$(echo ${rawurl/$proto/})" user="$(echo $url | grep @ | cut -d@ -f1)" hostport="$(echo ${url/$user@/} | cut -d/ -f1)" host="$(echo $hostport | sed -e 's,:.*,,g')" port="$(echo $hostport | sed -e 's,^.*:,:,g' -e 's,.*:\([0-9]*\).*,\1,g' -e 's,[^0-9],,g')" path="$(echo $url | grep / | cut -d/ -f2-)" if [[ ${url} != "null" ]] then if [[ ${svctype} == "ucentralfms" ]] then # echo "url: $url" # echo " proto: $proto" # echo " user: $user" # echo " host: $host" # echo " port: $port" # echo " path: $path" UCENTRALFMS="${url}" break fi fi done echo "Using ${UCENTRALFMS}..." } logout() { curl ${FLAGS} -X DELETE -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ "https://${UCENTRALSEC}/api/v1/oauth2/${token}" rm -rf token.json } getfirmwares() { curl ${FLAGS} -X GET -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ "https://${UCENTRALFMS}/api/v1/firmwares?deviceType=$1" > ${result_file} jq < ${result_file} } latestfirmware() { curl ${FLAGS} -X GET -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ "https://${UCENTRALFMS}/api/v1/firmwares?latestOnly=true&deviceType=$1" > ${result_file} jq < ${result_file} } revisions() { curl ${FLAGS} -X GET -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ "https://${UCENTRALFMS}/api/v1/firmwares?revisionSet=true" > ${result_file} jq < ${result_file} } devicetypes() { curl ${FLAGS} -X GET -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ "https://${UCENTRALFMS}/api/v1/firmwares?deviceSet=true" > ${result_file} jq < ${result_file} } firmwareage() { curl ${FLAGS} -G -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ "https://${UCENTRALFMS}/api/v1/firmwareAge" --data-urlencode "deviceType=$1" --data-urlencode "revision=$2" > ${result_file} jq < ${result_file} } gethistory() { curl ${FLAGS} -X GET -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ "https://${UCENTRALFMS}/api/v1/revisionHistory/$1" > ${result_file} jq < ${result_file} } connecteddevice() { curl ${FLAGS} -X GET -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ "https://${UCENTRALFMS}/api/v1/connectedDevice/$1" > ${result_file} jq < ${result_file} } connecteddevices() { curl ${FLAGS} -X GET -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ "https://${UCENTRALFMS}/api/v1/connectedDevices" > ${result_file} jq < ${result_file} } devicereport() { curl ${FLAGS} -X GET -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ "https://${UCENTRALFMS}/api/v1/deviceReport" > ${result_file} jq < ${result_file} } fmsversion() { curl ${FLAGS} -X GET "https://${UCENTRALFMS}/api/v1/system?command=version" \ -H "accept: application/json" \ -H "Authorization: Bearer ${token}" > ${result_file} jq < ${result_file} } fmstimes() { curl ${FLAGS} -X GET "https://${UCENTRALFMS}/api/v1/system?command=times" \ -H "accept: application/json" \ -H "Authorization: Bearer ${token}" > ${result_file} jq < ${result_file} } help() { echo echo } shopt -s nocasematch case "$1" in "login") login; help ; logout ;; "getfirmwares") login; getfirmwares "$2"; logout ;; "latestfirmware") login; latestfirmware "$2"; logout ;; "revisions") login; revisions; logout ;; "devicetypes") login; devicetypes; logout ;; "firmwareage") login; firmwareage "$2" "$3"; logout ;; "gethistory") login; gethistory "$2"; logout ;; "connecteddevices") login; connecteddevices ; logout ;; "connecteddevice") login; connecteddevice "$2" ; logout ;; "devicereport") login; devicereport; logout ;; "fmsversion") login; fmsversion; logout ;; "fmstimes") login; fmstimes; logout ;; *) help ;; esac