#!/bin/bash
#  Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
#
#  Shows information about the local server

# This is a generic product script used to establish an environment
# before starting/stopping a product or component.
# This script was built from shell library
#   $Id$
# This script has to run on every platform we support.  Any suggestions
# for improvement are welcome (but must be portable!)

# Version numbers
PRODUCT_VERSION="5.60.514"
PRODUCT_VERSION_FULL="5.60.514"
PRODUCT_VERSION_MAJOR=5
PRODUCT_VERSION_FEATURE=6
PRODUCT_VERSION_BUG=0
PRODUCT_VERSION_BUILD=514
PRODUCT_VERSION_BUILD_DECIMAL=514
PRODUCT_VERSION_AS_NUMBER=560514
PRODUCT_VERSION_CAB=5,6,0,514
PRODUCT_VERSION_RPM=5.60-514

# Product names
PRODUCT_FULL_NAME="Oracle Secure Global Desktop"
PRODUCT_SHORT_NAME="Secure Global Desktop"
PRODUCT_IDENT="SSGD"
PRODUCT_SHORT_FILENAME="Tarantella"
PRODUCT_LSBSCRIPTNAME="sun.com-sgd-base"
PRODUCT_LSBSCRIPT_RUN_LEVEL="90"
TSP_FULL_NAME="Oracle Secure Global Desktop Security Pack"
TSP_SHORT_NAME="Security Pack"
WCP_FULL_NAME="Oracle Secure Global Desktop Windows Connectivity Pack"
WCP_SHORT_NAME="Windows Connectivity Pack"
TN3270_FULL_NAME="Oracle Secure Global Desktop Mainframe Connectivity Pack"
TN3270_SHORT_NAME="Mainframe Connectivity Pack"
AS400_FULL_NAME="Oracle Secure Global Desktop AS/400 Connectivity Pack"
AS400_SHORT_NAME="AS/400 Connectivity Pack"
S1PSTK_FULL_NAME="Oracle Secure Global Desktop Channel for Sun ONE Portal Server"
S1PSIP_FULL_NAME="Oracle Secure Global Desktop Integration Pack for Sun ONE Portal Server"
S1PSTK_SHORT_NAME="Secure Global Desktop Channel for Sun ONE Portal Server"
S1PSIP_SHORT_NAME="Secure Global Desktop Integration Pack for Sun ONE Portal Server"

OBJECT_MGR_NAME="Object Manager"
ARRAY_MGR_NAME="Array Manager"
NATIVE_WIN16_FULL_NAME="Oracle Secure Global Desktop Native Client for Windows 3.1"
NATIVE_WIN16_SHORT_NAME="Native Client for Windows 3.1"
NATIVE_WIN32_FULL_NAME="Oracle Secure Global Desktop Native Client for Windows 95, 98 and NT"
NATIVE_WIN32_SHORT_NAME="Native Client for Windows 95, 98 and NT"
NATIVE_WYSE_FULL_NAME="Oracle Secure Global Desktop Native Client for Wyse"
NATIVE_WYSE_SHORT_NAME="Native Client for Wyse"
NATIVE_FULL_NAME="Oracle Secure Global Desktop Native Client"
NATIVE_SHORT_NAME="Native Client"
NATIVE_REGISTRY_NAME="Tarantella Native Client"
INTCLI_FULL_NAME="Oracle Secure Global Desktop Client"
INTCLI_SHORT_NAME="Client"
TCC_FULL_NAME="Oracle Secure Global Desktop Client"
TCC_HELPER_NAME="Oracle Secure Global Desktop Client Helper"
TCC_ACTIVEX_NAME="Oracle Secure Global Desktop ActiveX Control"
TCC_PLUGIN_NAME="Oracle Secure Global Desktop Netscape Plug-in"
T3COMPONENT_WIN_NAME="Oracle Secure Global Desktop Enhancement Module for Windows"
T3COMPONENT_UNIX_NAME="Oracle Secure Global Desktop Enhancement Module for UNIX(TM) and Linux Platforms"
T3COMPONENT_SHORT_UNIX_NAME="tem"
T3COMPONENT_NAME="Oracle Secure Global Desktop Enhancement Module"
T3COMPONENT_LSBSCRIPTNAME="sun.com-sgd-em"
T3COMPONENT_LSBSCRIPT_RUN_LEVEL="90"
GWCOMPONENT_UNIX_NAME="Oracle Secure Global Desktop Gateway for UNIX(TM) and Linux Platforms"
GWCOMPONENT_NAME="Oracle Secure Global Desktop Gateway"
GWCOMPONENT_SHORTNAME="SGD Gateway"
GWCOMPONENT_LSBSCRIPTNAME="sun.com-sgd-gw"
GWCOMPONENT_LSBSCRIPT_RUN_LEVEL="91"

# Watch the length of these names: IE refuses to remove packages if
# the name is too long.
ARCHIVE_NAME_ttalw="TCC Helper, version"
ARCHIVE_NAME_asad="3.x Framework Java Archive"
#ARCHIVE_NAME_tta="3.x Java Archive"
#ARCHIVE_NAME_tta="3.x Combined Java Archive"
ARCHIVE_NAME_tta="Client, "
ARCHIVE_NAME_tsp="3.x Security Java Archive"
ARCHIVE_NAME_proxy="3.x Proxy Java Archive"
WEBSTART_JAR_NAME="sgdwscs"
ARCHIVE_SUFFIX="K"

NS_REGKEY="java/download/com/tarantella/tta"

PRODUCT_VENDOR="Oracle Corporation, Inc."
PRODUCT_SHORT_VENDOR="Oracle"

# Capabilities:
# The format for the capabilities required by the client end of a
# connection is: CAPABILITIES_protocol_type_REQUIRED="expression"

# The format for the capabilities provided by the server end of a
# connection is: CAPABILITIES_protocol_type_PROVIDED="c1 c2 ... c3"

# Asad between a webtop client and server:
CAPABILITIES_ASAD_WEBTOPCLIENT_REQUIRED="(1.1 || 1.2)"
CAPABILITIES_ASAD_WEBTOPCLIENT_PROVIDED="1.1 1.2"

# Asad between two peer servers, or an admin tool and a server:
# 1.1 is core E3 array functionality.
# 1.2 is 3.01 array interoperability functionality.
# 2.1 is core Pisa client device mapping functionality (not a requirement)
CAPABILITIES_ASAD_PEER_REQUIRED="(1.1 || 1.2)"
CAPABILITIES_ASAD_PEER_PROVIDED="1.1 1.2 2.1"

# Client versions of server strings; same format, name prefixed by CLIENT
# Asad between a webtop client and server:
CLIENTCAPABILITIES_ASAD_WEBTOPCLIENT_REQUIRED="(1.1 || 1.2)"
CLIENTCAPABILITIES_ASAD_WEBTOPCLIENT_PROVIDED="1.1 1.2"

# Top-level item names in ENS datastore
DEFAULT_ROOT_ENS="organization"
SYSTEM_ROOT_ENS="Tarantella System Objects"
APP_ROOT_ENS="applications"
APPSERVER_ROOT_ENS="appservers"

WEB_SERVICES_VERSION=1.9


# be paranoid about the current path
if [ -d /bin ]; then
  PATH=/bin:$PATH
fi
if [ -d /sbin ]; then
  PATH=/sbin:$PATH
fi
if [ -d /usr/bin ]; then
  PATH=/usr/bin:$PATH
fi
if [ -d /usr/sbin ]; then
  PATH=/usr/sbin:$PATH
fi
if [ -d /etc ]; then
  PATH=/etc:$PATH
fi
export PATH

if [ -f $TTAMSG/common -a -f $TTAMSG/tta_info ]; then
  . $TTAMSG/common
  . $TTAMSG/tta_info
else
  echo "Unable to open message file: $TTAMSG/tta_info"
  exit 1
fi

if [ -z "$0" ]; then
  who_i_am=""
else
  who_i_am=`expr "//$0" : '.*/\(.*\)' `
fi



case "$trace" in
x) set -x
esac


# Constants
TTAVARINFODIR="${TTAINSTDIR}/var/info"
SGD_RPM_PACKAGE_NAME=oracle-sgd-server
SGD_UPGRADESTATE_FILE="${TTAVARINFODIR}/upgradestate"
SGD_PRIMARY_FILE="${TTAVARINFODIR}/primary"
SGD_STARTED_FILE="${TTAVARINFODIR}/started"
SGD_STOPPED_FILE="${TTAVARINFODIR}/stopped"


### Process options

OPTS=`getopt -q -o hs --long help,summary -- "$@"`

[ $? != 0 ] && { echo "$lf_badarg $1" 1>&2; echo "$l_shortusage" 1>&2; exit 1; }

eval set -- "$OPTS"

if  [ $1 == "--" ]
then
    # Default: output all messages
    shift
else
    while true
    do
        case "$1" in
            -h|--help) echo "$l_longusage" 1>&2; exit 0 ;;
            -s|--summary) opt_summary=true;     shift ;;
            --) shift; break ;;
            *) echo "$lf_badarg $1" 1>&2; echo "$l_shortusage" 1>&2; exit 1 ;;
        esac
    done
fi

[ $# != 0 ] && { echo "$lf_badarg $1" 1>&2; echo "$l_shortusage" 1>&2; exit 1; }


### Obtain local SGD server information

# Version
version=${PRODUCT_VERSION_FULL}

# Platform
platform="$(uname -s) $(uname -i)"

# Upgrade date
if rpmpkglastdate="$(rpm -q ${SGD_RPM_PACKAGE_NAME} --last)"
then
    upgradedate="$(echo -n ${rpmpkglastdate#* })"
else
    upgradedate=""
fi

# Upgrade state
. ${TTAINSTDIR}/bin/scripts/upgrade
upgradestate=`sgd_upgrade_state_get`

# Run state

# Params:
# $1 - the pid file
# Returns:
# 0 (success) - iff $1 exists and all pids it contains are running
# 1 (failure)
function _pidfile_running()
{
    [ -r "$1" ] || return 1
    # Get a list of running pids from the specified pid file.
    [ -x "/usr/bin/nawk" ] && AWK="nawk" || AWK="awk"
    local pids=`${AWK} -f ${TTAINSTDIR}/bin/scripts/getrunningpids.awk "$1"`
    for p in ${pids}
    do
        ps -p $p > /dev/null || return 1
    done
    return 0
}

# We consider SGD to be running it find all pid files present and pids running
pidfiles=0
_pidfile_running "${TTAVARINFODIR}/jserver.pid"   && pidfiles=$((++pidfiles))
_pidfile_running "${TTAVARINFODIR}/auxserver.pid" && pidfiles=$((++pidfiles))
_pidfile_running "${TTAVARINFODIR}/ssldaemons.pid" && pidfiles=$((++pidfiles))
runstate=PARTIAL
if [ "${pidfiles}" = 3 ]
then
    runstate=STARTED
elif [ "${pidfiles}" = 0 ]
then
    runstate=STOPPED
fi
    

### Output UI messages

msg_upgradestate=""
case "${upgradestate}" in
    "HOT")
        msg_upgradestate="${l_msg_upgradestate_hot}"
        ;;
    "COLD")
        msg_upgradestate="${l_msg_upgradestate_cold}"
        ;;
esac

case "${runstate}" in
    "STARTED"|"PARTIAL")
        [ -r "${SGD_STARTED_FILE}" ] && \
            msg_runstate="`printf "${l_msg_runstate_started}" "$(cat ${SGD_STARTED_FILE})"`"
        ;;
    "STOPPED")
        [ -f "${SGD_STOPPED_FILE}" ] && \
            msg_runstate="`printf "${l_msg_runstate_stopped}" "$(cat ${SGD_STOPPED_FILE})"`"
        ;;
esac

printf "${l_msg_product_version}\n" "${version}" "${platform}"

[ -n "${msg_runstate}" ] && printf "${msg_runstate}\n"
[ -n "${upgradedate}" ] && printf "${l_msg_last_updated}" "${upgradedate}"

if [ ! ${opt_summary} ]
then
    printf "\n"
    [ -f "${SGD_PRIMARY_FILE}" ] || printf "${l_msg_not_configured}"
    [ "${runstate}" == "PARTIAL" ] && printf "${l_msg_runstate_partial_warning}"
    [ -z "${msg_upgradestate}" ] || printf "${msg_upgradestate}"
fi

exit 0

