#!/bin/bash
#  $Id:
#  Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
#  This software code contains proprietary information
#  and should be treated as confidential.
#
#  Prepares SGD to be used in an image

source "common.sh"

# 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}/prepare_image.msg ]; then
  . ${TTAMSG}/common
  . ${TTAMSG}/prepare_image.msg
else
  echo "Unable to open message file: ${TTAMSG}/prepare_image.msg"
  exit 1
fi


usage() {
   exit_usage_error "${long_usage}"
}

editConfig() {
    attr=$1
    value=$2

    RESULT=$("${TTABINDIR}"/tarantella config edit --${attr} ${value} | grep Changed)
    if [ -z "${RESULT}" ]; then
	exit_on_error "${error_config} ${attr}"
    fi    
}

enableRequiredParam()
{
    param="$1"

    editConfig "tarantella-config-server-template-image-require${param}" 1
    editConfig "tarantella-config-server-template-instance-require${param}" 1
}

# Check the arguments
while [ -n "$1" ]; do
   case "$1" in
       --help)
	   usage
	   ;;
       --deployment-script)	   
	   if [ -z "$2" ]
	   then
	       echo "${missing_deployscript}"
	       exit_usage_error "${short_usage}"
	   fi

	   deployment_script=$2
	   shift
	   ;;
       --require-password)
	   require_password=1
	   ;;
       --require-externalname)
	   require_externalname=1
	   ;;
       --require-externalaccessport)
	   require_externalaccessport=1
	   ;;
       *)
	   echo "${bad_argument} $1"
	   usage
	   ;;
   esac
   shift
done

# Enable autorename
editConfig "tarantella-config-server-autorenameonstart" 1

# Run app setup
"${TTABINDIR}"/tarantella prepare local_apps

if [ "${require_password}" = "1" ] 
then
    "${TTABINDIR}"/tarantella prepare sgdadmin_user --no-password
    enableRequiredParam "${DEPLOYCONF_PASSWORD}"
fi

if [ "${require_externalname}" = "1" ] 
then
    enableRequiredParam "${DEPLOYCONF_EXTERNAL_NAME}"
fi

if [ "${require_externalaccessport}" = "1" ] 
then
    enableRequiredParam "${DEPLOYCONF_EXTERNAL_PORT}"
fi

if [ -n "${deployment_script}" ] 
then
    # Validate the provided deployment script
    deployment_script_path=$(GetDeploymentScript "${TTADIR}" "${deployment_script}")
    ValidateDeploymentScript "${TTADIR}" "${deployment_script_path}"
    return_code=$?
    if [ ${return_code} -eq ${COMMON_RETURN_ERROR} ]
    then
        # The deployment script could not be found
        warn_on_error "${invalid_deployscript}"
        echo "${will_ask_for_missing_info}"
    elif [ ${return_code} -eq ${COMMON_RETURN_FALSE} ]
    then
        # The deployment script is missing some functions it needs.
        # This is not a fatal case, so report it but carry on.
        warn_on_error "${deployscript_missing_functions}"
        echo "${will_ask_for_missing_info}"
    fi

    # Set the deployment script
    editConfig "tarantella-config-server-deploymentscript" "${deployment_script}"
fi

# Image will always require the regeneration of the Diffie-Hellman parameters
# for SGD.
enableRequiredParam "${DEPLOYCONF_DHPARAMS}"
