#!/bin/bash
# ###########################################################################
# Copyright (c) 2011, Dell Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
#    * Redistributions of source code must retain the above copyright
#      notice, this list of conditions and the following disclaimer.
#    * Redistributions in binary form must reproduce the above copyright
#      notice, this list of conditions and the following disclaimer in the
#      documentation and/or other materials provided with the distribution.
#    * Neither the name of Dell Inc. nor the names of its contributors
#      may be used to endorse or promote products derived from this software
#      without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL DELL INC. BE LIABLE FOR ANY DIRECT,
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
# ###########################################################################
# Authors: Chris A. Poblete
# Version: 1.0.0
# ###########################################################################

MYNAME=`basename $0`
MYPATH=${0%/*}
NODATEDUMP=1
KEEPHISTORY=0

# source function library
. /etc/wsl/wsl-functions

usage() {
  fUsageheader
  cat <<EOF
USAGE: $MYNAME COMMAND [PARAMS...]

COMMANDS:
identify  - WS-Identify
enum      - WS-Enumerate
get       - WS-Get
put       - WS-Put
invoke    - WS-Invoke
xclean    - Delete all files generated by this tool set
xcred     - Create or display credential file
xcert     - Get server certificate (saved to <IPADDRESS>.crt)

PARAMS specification is specific to a COMMAND. 

${CommonUsage1}
EOF
  $WSCOLORNORM
  exit 1
}

cleanup() {
  quiet="$1"
  $WSCOLORERR
  cat <<EOF
NOTICE: 
  About to delete files generated by this tool set. Files to be deleted:
  *response*.xml *request*.xml *log*.txt *tmp*.xml .*wslrun *xform.xml
EOF
  $WSCOLORNORM
  if [ -z "${quiet}" ]; then
    read -p "Type ENTER to continue or CTRL+C to cancel... "
    echo
  fi
  cd ${OUTPREFIX}
  /bin/rm *response*.xml *request*.xml *log*.txt *tmp*.xml .*wslrun *xform.xml >/dev/null 2>&1
  ls -al
  cd - 
}

getcert() {
  ipaddress=$1
  [ -z "${ipaddress}" ] && ipaddress="${WSENDPOINT}"
  [ -z "${ipaddress}" ] && usage
  outfile="${ipaddress}.crt"

  (echo | openssl s_client -connect ${ipaddress}:443 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' 2>&1)|tee ${outfile}
}

export WSENUMOPTIMIZE=1
export WSENUMMAXELEM=512

[ "${ECHOCMD}" = "true" ] && echo -e "$0 $@"

[ $# -lt 1 ] && usage
CMD="$1"; shift
case "${CMD}" in
  e|enum|enumerate) 
    ${SHELL} ${MYPATH}/wslenum "$@" ; STAT=$? 
    ;;
  g|get) 
    ${SHELL} ${MYPATH}/wslget "$@" ; STAT=$? 
    ;;
  p|s|put|set) 
    ${SHELL} ${MYPATH}/wslput "$@" ; STAT=$? 
    ;;
  id|identify)
    ${SHELL} ${MYPATH}/wslid "$@" ; STAT=$?
    ;;
  i|invoke) 
    ${SHELL} ${MYPATH}/wslinvoke "$@" ; STAT=$? 
    ;;
  xclean) 
    cleanup $1 ; STAT=0 
    ;;
  xcred)
    ${SHELL} ${MYPATH}/wslcred "$@" ; STAT=$?
    ;;
  xcert)
    getcert $1 ; STATU=0
    ;;
  *)      
    echo "Unknown command: ${CMD}" ; usage 
    ;;
esac

exit ${STAT}

# ###########################################################################
# End of Code
# ###########################################################################
