diff --git a/utils/janus-admin-cli b/utils/janus-admin-cli new file mode 100755 index 00000000000..d7524942986 --- /dev/null +++ b/utils/janus-admin-cli @@ -0,0 +1,105 @@ +#!/bin/sh + +# exit on failure +set -e + +# exit on unassigned variable +set -u + +# variables +janus_request="none" +janus_options="none" +janus_addr="${JANUS_HOST:-localhost}" +janus_port="${JANUS_ADMIN_PORT:-7088}" +janus_pass="${JANUS_ADMIN_SECRET:-janusoverlord}" + +# define usage +usage() { + cat <&2 + usage 1 +} + +# get random string +rand_str() { + length=${1:-32} + LC_CTYPE=C tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w ${length} | head -n 1 +} + +# parse parameters +while getopts "ha:p:s:o:r:" opt; do + case $opt in + h) usage 0 ;; + r) janus_request="${OPTARG}" ;; + o) janus_options="${janus_options},${OPTARG}" ;; + a) janus_addr="${OPTARG}" ;; + p) janus_port="${OPTARG}" ;; + s) janus_pass="${OPTARG}" ;; + esac +done + +# check parameters +if [ "${janus_request}" = "none" ]; then + fatal "Janus request parameter is mandatory" +fi + +# parse optional parameter +http_session_id= +http_handle_id= +http_payload_opts="" +for opt in $(echo ${janus_options} | sed 's/,/ /g'); do + if [ "${opt}" = "none" ]; then + continue + fi + + opt_name="$(echo ${opt} | cut -d= -f1)" + opt_value="$(echo ${opt} | cut -d= -f2-)" + + # append double-quotes to JSON strings + if echo "${opt_value}" | grep -qE '^([0-9]+|true|false|null)$'; then + http_payload_opts="${http_payload_opts}\"${opt_name}\": ${opt_value}," + else + http_payload_opts="${http_payload_opts}\"${opt_name}\": \"${opt_value}\"," + fi + + if [ "${opt_name}" = "session_id" ]; then + http_session_id="/${opt_value}" + elif [ "${opt_name}" = "handle_id" ]; then + http_handle_id="/${opt_value}" + fi +done + +# prepare payload +http_payload=$(cat <