#!/bin/bash

#
# Copyright 2015-present Open Networking Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# -----------------------------------------------------------------------------
# Tool to manage ONOS applications using REST API.
# -----------------------------------------------------------------------------

# If ONOS_HOME is set, respect its value.
# If ONOS_HOME is not set (e.g. in the init or service environment),
# set it based on this script's path.
ONOS_HOME=${ONOS_HOME:-$(cd $(dirname $0)/.. >/dev/null 2>&1 && pwd)}
ONOS_WEB_USER=${ONOS_WEB_USER:-onos} # ONOS WEB User defaults to 'onos'
ONOS_WEB_PASS=${ONOS_WEB_PASS:-rocks} # ONOS WEB Password defaults to 'rocks'

. ${ONOS_HOME}/bin/_find-node

node=$(find_node $1)
cmd=${2:-list}
app=${3}

export URL=http://$node:8181/onos/v1/applications
export HDR="-HContent-Type:application/octet-stream"
export HAJ="-HContent-Type:application/json"
export curl="curl -sS --user $ONOS_WEB_USER:$ONOS_WEB_PASS --noproxy localhost "

# Prints usage help
function usage {
    echo "usage: onos-app <node-ip> list" >&2
    echo "       onos-app <node-ip> {install|install!} <app-file>" >&2
    echo "       onos-app <node-ip> {reinstall|reinstall!} [<app-name>] <app-file>" >&2
    echo "       onos-app <node-ip> {activate|deactivate|uninstall} <app-name>" >&2
    exit 1
}

# Extract app name from the specified *.oar file
function appName {
    aux=/tmp/aux$$.jar
    cp $1 $aux
    pushd /tmp >/dev/null
    jar xf $aux app.xml && grep name= app.xml | cut -d\" -f2
    rm -f $aux /tmp/app.xml
    popd >/dev/null
}

[ -z $node -o "$node" = "-h" -o "$node" = "--help" -o "$node" = "-?" ] && usage

case $cmd in
    list) $curl -X GET $URL;;
    installUrl!|installUrl)
        activate="false"
        [ $cmd = "installUrl!" ] && activate="true"
        [ $# -lt 3 ] && usage
        appurl=$3
        $curl -X POST $HAJ -d '{"url" : "'"$appurl"'", "activate" : "'$activate'" }' $URL
        ;;
    install!|install)
        [ $cmd = "install!" ] && activate="?activate=true"
        [ $# -lt 3 -o ! -f $app ] && usage
        $curl -X POST $HDR $URL$activate --data-binary @$app
        ;;

    reinstall!|reinstall)
        [ $cmd = "reinstall!" ] && activate="?activate=true"
        [ $# -lt 4 -a ! -f "$3" ] && usage
        [ $# -eq 4 -a ! -f "$4" ] && usage
        oar=$4
        [ $# -lt 4 ] && oar=$3 && app=$(appName $oar)
        $curl -X DELETE $URL/$app
        $curl -X POST $HDR $URL$activate --data-binary @$oar
        ;;

    uninstall)
        [ $# -lt 3 ] && usage
        $curl -X DELETE $URL/$app
        ;;
    activate)
        [ $# -lt 3 ] && usage
        $curl -X POST $URL/$app/active
        ;;
    deactivate)
        [ $# -lt 3 ] && usage
        $curl -X DELETE $URL/$app/active
        ;;

    *) usage;;
esac


status=$?
echo # new line for prompt
exit $status
