#!/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 [[ "${OWSEC}" == "" ]] then echo "You must set the variable OWSEC in order to use this script. Something like" echo "OWSEC=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://${OWSEC}/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 setprov } 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 } setprov() { curl ${FLAGS} -X GET "https://${OWSEC}/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} == "owprov" ]] then OWPROV="${url}" break fi fi done echo "Using ${OWPROV}..." } logout() { curl ${FLAGS} -X DELETE -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ "https://${OWSEC}/api/v1/oauth2/${token}" rm -rf token.json } getroot() { curl ${FLAGS} \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" \ "https://${OWPROV}/api/v1/entity/0000-0000-0000" > ${result_file} jq < ${result_file} } setroot() { payload="{ \"name\" : \"Arilia Root\", \"description\" : \"This is the top level entry in the hierarchy.\" }"; curl ${FLAGS} -X POST "https://${OWPROV}/api/v1/entity/0000-0000-0000" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" \ -d "$payload" > ${result_file} jq < ${result_file} } addentity() { payload="{ \"name\" : \"$1\", \"description\" : \"sub entity.\", \"parent\" : \"0000-0000-0000\", \"notes\" : [ {\"note\" : \"CLI added\"} ] }"; curl ${FLAGS} -X POST "https://${OWPROV}/api/v1/inventory/1" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" \ -d "$payload" > ${result_file} jq < ${result_file} } getentities() { curl ${FLAGS} "https://${OWPROV}/api/v1/entity" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" > ${result_file} jq < ${result_file} } tree() { curl ${FLAGS} "https://${OWPROV}/api/v1/entity?getTree=true" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" > ${result_file} jq < ${result_file} } importtree() { curl ${FLAGS} -X POST "https://${OWPROV}/api/v1/entity?setTree=true" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json " \ --data "@$1" > ${result_file} jq < ${result_file} } gettag() { curl ${FLAGS} "https://${OWPROV}/api/v1/inventory?entity=$1" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" > ${result_file} jq < ${result_file} } addtag() { payload="{ \"name\" : \"$1\",\"entity\" : \"$2\", \"serialNumber\" : \"$1\", \"deviceType\" : \"linksys_ea8300\" }"; curl ${FLAGS} -X POST "https://${OWPROV}/api/v1/inventory/1" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" \ -d "$payload" > ${result_file} jq < ${result_file} } addunassignedtag() { payload="{ \"name\" : \"$1\", \"serialNumber\" : \"$1\", \"deviceType\" : \"linksys_ea8300\" }"; curl ${FLAGS} -X POST "https://${OWPROV}/api/v1/inventory/1" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" \ -d "$payload" > ${result_file} jq < ${result_file} } assigntag() { payload="{\"serialNumber\" : \"$1\", \"deviceType\" : \"linksys_ea8300\" ,\"entity\" : \"$2\"}"; curl ${FLAGS} -X PUT "https://${OWPROV}/api/v1/inventory/$1" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" \ -d "$payload" > ${result_file} jq < ${result_file} } unassigntag() { payload="{\"serialNumber\" : \"$1\" }"; curl ${FLAGS} -X PUT "https://${OWPROV}/api/v1/inventory/$1?unassign=true" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" \ -d "$payload" > ${result_file} jq < ${result_file} } gettags() { curl ${FLAGS} "https://${OWPROV}/api/v1/inventory" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" > ${result_file} jq < ${result_file} } getunassignedtags(){ curl ${FLAGS} "https://${OWPROV}/api/v1/inventory?unassigned=true" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" > ${result_file} jq < ${result_file} } tagcount() { curl ${FLAGS} "https://${OWPROV}/api/v1/inventory?countOnly=true" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" > ${result_file} jq < ${result_file} } entitycount() { curl ${FLAGS} "https://${OWPROV}/api/v1/entity?countOnly=true" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" > ${result_file} jq < ${result_file} } venuecount() { curl ${FLAGS} "https://${OWPROV}/api/v1/venue?countOnly=true" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" > ${result_file} jq < ${result_file} } contactcount() { curl ${FLAGS} "https://${OWPROV}/api/v1/contact?countOnly=true" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" > ${result_file} jq < ${result_file} } locationcount() { curl ${FLAGS} "https://${OWPROV}/api/v1/location?countOnly=true" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${token}" \ -H "accept: application/json" > ${result_file} jq < ${result_file} } shopt -s nocasematch case "$1" in "login") login; help ; logout ;; "getroot") login; getroot; logout;; "setroot") login; setroot; logout;; "addentity") login; addentity "$2" ; logout;; "addtag") login; addtag $2 $3; logout;; "unassigntag") login; unassigntag $2; logout;; "addunassignedtag") login; addunassignedtag $2 ; logout;; "getentities") login; getentities ; logout;; "tree") login; tree ; logout;; "gettags") login; gettags ; logout;; "gettag") login; gettag $2 ; logout;; "tagcount") login; tagcount ; logout;; "entitycount") login; entitycount ; logout;; "venuecount") login; venuecount ; logout;; "contactcount") login; contactcount ; logout;; "locationcount") login; locationcount ; logout;; "getunassignedtags") login; getunassignedtags ; logout;; *) help ;; esac