#!/bin/sh
# ####################################################################
# Exceed Connection Server 13.7
# Copyright (c) 1997-2009 Open Text Corporation. All Rights Reserved.
# ####################################################################
# install
# $Revision: 15689 $
# #####################################################################

# master install script for Exceed Connection Server, start install log, 
# check for essential files and permissions then call component install scripts

. ./sys/msg.txt

init_variables()
{
  pre="    "
  conf_dir="../conf"
  admin_dir="${conf_dir}/admin"
  home_dir="${conf_dir}/home"
  users_dir="${conf_dir}/users"
  config_file="${admin_dir}/node.cfg.tmp"  
  config_file_final="${admin_dir}/node.cfg"
  cluster_file="${admin_dir}/cluster.cfg.tmp"
  cluster_file_final="${admin_dir}/cluster.cfg"
  key_file="${admin_dir}/akeys"

  eodcmporttmp="eodcmport.tmp"
  eodfirstdisplaytmp="eodfirstdisplay.tmp"
  
  cd ..
  logDir=`pwd`/log

  ssh_available="${logDir}/ssh_available"
  ssl_available="${logDir}/ssl_available"
  data_store_warning="${logDir}/data_store_warning" 
}

export_globals()
{
  export config_file
  export cluster_file
  export admin_dir
  export eodcmporttmp
  export eodfirstdisplaytmp
  export ssh_available
  export ssl_available
  export data_store_warning
}

chmodThisDir()
{
  ${ECHO} ".\c" 
  
  chmod $2 "$1" > /dev/null 2>&1
  
  for f in `ls "$1"` ;
  do
    chmodThisFile "$1/$f" $2 $3
  done
}

chmodThisFile()
{
  if [ -f "$1" ] ; then
    chmod $3 "$1" > /dev/null 2>&1
  elif [ -d "$1" ] ; then
    chmodThisDir "$1" $2 $3
  fi
}

chmod_conf_dir()
{
  ${ECHO} "${pre}\c"
  chmodThisDir "${admin_dir}" $1 $2
  chmod $1 "${users_dir}"
  
  ${ECHO}
}

chmod_files_here()
{
  for chmod_files_here_f in $1 ; do
    chmod "$3" "$2/$chmod_files_here_f" > /dev/null 2>&1
  done
}

do_ecsinstall2()
{
  if  sh sys/ecsinstall2 $logfile ; then
    # do nothing
    true
  else
    ${ECHO} $PROXY_MANAGER_INSTALL_STOPPED
    ${ECHO} "$FATAL $PROXY_MANAGER_INSTALL_STOPPED" >> $logfile
    exit 1
  fi
}

do_migration()
{
  ${ECHO} "$TITLE_BAR"
  ${ECHO} "$MIGRATION_TITLE"
  ${ECHO} "$TITLE_BAR"
  ${ECHO} "$INFO ${MIGRATION_RUN_SCRIPT}" >> $logfile

  if  sh sys/migration $logfile $InstallDir; then
    needToDoConfig=0
  else
    needToDoConfig=1
  fi
}

do_activation()
{
  ${ECHO}
  ${ECHO} "$TITLE_BAR"
  ${ECHO} "$ACTIVATION_TITLE"
  ${ECHO} "$TITLE_BAR"
  ${ECHO} "${pre}${ACTIVATION_CONTINUE}"
  read foo
  touch $key_file
  sys/keymgr $key_file
  ${ECHO} ""
}

copyAllFilesFromHereToThere()
{
  for aFile in `ls $1` ; 
  do
    cp -pf ${1}/${aFile} ${2} > /dev/null 2>&1
  done
}

populateTemplatesCommonDirs()
{
  Templates_dir="${admin_dir}/Templates"
  
  TemplatesGroup_dir="${Templates_dir}/Group"
  TemplatesGroupXconfig_dir="${TemplatesGroup_dir}/Xconfig"
  TemplatesGroupXconfigCommon_dir="${TemplatesGroupXconfig_dir}/Common"
  
  TemplatesUser_dir="${Templates_dir}/User"
  TemplatesUserXconfig_dir="${TemplatesUser_dir}/Xconfig"
  TemplatesUserXconfigCommon_dir="${TemplatesUserXconfig_dir}/Common"
  
  adminXconfig_dir="${admin_dir}/Xconfig"
  adminXconfigCommon_dir="${adminXconfig_dir}/Common"
  
  already_populated=${Templates_dir}/"common_files_were_installed"

  if [ ! -r ${already_populated} ] ; then
    ${ECHO}
    ${ECHO} "$TITLE_BAR"
    ${ECHO} "$POPULATE_TEMPLATES_COMMON_DIRS"
    ${ECHO} "$TITLE_BAR"
    ${ECHO}
    ${ECHO} "${pre}${COPYING_FILES}"
    
    copyAllFilesFromHereToThere ${adminXconfigCommon_dir} ${TemplatesGroupXconfigCommon_dir}
    copyAllFilesFromHereToThere ${adminXconfigCommon_dir} ${TemplatesUserXconfigCommon_dir}
    
    touch ${already_populated} > /dev/null 2>&1
  fi
}

set_export_echo()
{
  if [ ${OSTYPE:="UNKNOWN"} = "Linux" \
    -o $OSTYPE = "linux-gnu" \
    -o $OSTYPE = "linux" \
    ]; then
    ECHO="echo -e"
  else
    ECHO="echo"
  fi

  export ECHO
}

display_install_banner()
{
  InstallBanner="install - ${PROD_NAME}"
  BannerBar="================================================="
  
  clear

  ${ECHO}
  ${ECHO} "${BannerBar}"
  ${ECHO}
  ${ECHO} "    ${InstallBanner}"
  ${ECHO}
  ${ECHO} "${BannerBar}"
  ${ECHO}
}

init_log_file()
{
  ${ECHO} "$TITLE_BAR"
  ${ECHO} "$LOG_TITLE"
  ${ECHO} "$TITLE_BAR"
  
  logfile=${logDir}/install.log

  touch $logfile

  if [ ! -w "$logfile"  ] ; then
    ${ECHO} "${pre}${LOG_CANT_CREATE_LOG} $logfile. $Q_CONTINUE"
    read resp

    if [ "${resp}xxxx" = "yxxxx" -o "${resp}xxxx" = "Yxxxx" ]; then
      logfile=/dev/null
    else
      ${ECHO} $ABORTING
      exit 1
    fi
  fi

  ${ECHO} "${pre}${LOG_TO} $logfile"
  ${ECHO} $LOG_HEADER_BEGIN > $logfile
  ${ECHO} $LOG_HEADER_BANNER >> $logfile
  ${ECHO} $LOG_HEADER_END >> $logfile
  ${ECHO} "" >> $logfile
  ${ECHO} "$INFO $logfile" >> $logfile
  ${ECHO} "$INFO $LOG_DATE" >> $logfile
  ${ECHO} ""
}

create_this_config_file()
{
  this_config_file=$1
  
  [ -f "${this_config_file}" ] && rm -f "${this_config_file}"
  
  touch "${this_config_file}" >> /dev/null

  if [ ! -w "${this_config_file}" ]  ; then
    ${ECHO} "${COULDNT_CREATE_CONFIG} ${this_config_file}"
    ${ECHO} "${ABORTING}"
    exit 1
  fi
}

handle_license()
{
  ${ECHO} "$TITLE_BAR"
  ${ECHO} "$LICENSE_TITLE"
  ${ECHO} "$TITLE_BAR"
  ${ECHO} "${pre}${LICENSE_CONTINUE_Q}"
  
  read foo

  if ./sys/license ; then
    ${ECHO} "$INFO $LICENSE_ACCEPTED" >> $logfile
  else
    ${ECHO} "$FATAL $LICENSE_NOT_ACCEPTED" >> $logfile
    ${ECHO} "$ABORTING"
    exit 1
  fi

  clear
}

initialize_from_install_dir()
{
  init_variables
  export_globals
  set_export_echo
  display_install_banner
  init_log_file
}

install_the_server()
{
  ${ECHO} "$INFO $PROXY_MANAGER_RUN_SCRIPT" >> $logfile

  if  sh sys/ecsinstall $logfile ; then
    # do nothing
    true
  else
    ${ECHO} $PROXY_MANAGER_INSTALL_STOPPED
    ${ECHO} "$FATAL $PROXY_MANAGER_INSTALL_STOPPED" >> $logfile
    exit 1
  fi
  
  ${ECHO} ""

  CDir=`pwd`
  cd ..
  InstallDir=`pwd`
  cd ${CDir}

  num=1
  export num

  cmport=5500
  export cmport

  needToDoConfig=1  
}

run_boottime()
{
  ${ECHO} ""
  ${ECHO} "$TITLE_BAR"
  ${ECHO} "$BOOTTIME_TITLE"
  ${ECHO} "$TITLE_BAR"
  ${ECHO} "$INFO ${BOOTTIME_RUN_SCRIPT}" >> $logfile
  sh sys/boottime $InstallDir
}

create_admin_account()
{
  if [ ${needToDoConfig} = "1" ] ; then
    ${ECHO}
    ${ECHO} "$TITLE_BAR"
    ${ECHO} "$ADMIN_TITLE"
    ${ECHO} "$TITLE_BAR"

    if sh sys/admin $logfile ; then
      # do nothing
      true
    else
      ${ECHO} "$FATAL $PROXY_MANAGER_INSTALL_FAILED" >> $logfile
      ${ECHO} "$ABORTING"
      exit 1
    fi

    ${ECHO}
  fi
}

display_warning_message()
{
  ${ECHO}
  ${ECHO} "Warning: ${this_msg}"
}

show_this_warning()
{
  this_log="$1"
  
  if [ -r ${this_log} ] ; then
    rm -f ${this_log}
  else
    this_msg="$2"
    display_warning_message
  fi
}

show_this_warning2()
{
  this_log="$1"
  
  if [ -r ${this_log} ] ; then
    this_msg="$2"
    display_warning_message
    rm -f ${this_log}
  fi
}

show_warnings()
{
  show_this_warning "${ssh_available}" "${SSH_NOT_FOUND}"
  show_this_warning "${ssl_available}" "${SSL_LIB_NOT_FOUND}"
  
  if [ -r ${data_store_warning} ] ; then
    this_msg="${DS_WARNING2} `cat ${data_store_warning}`"
    display_warning_message 
    rm -f ${data_store_warning}
  fi
}

wrap_it_up()
{
  mv "$config_file" "$config_file_final"
  mv "$cluster_file" "$cluster_file_final"

  thisFileMode="0644"
  thisDirMode="0755"
  
  chmod_conf_dir $thisDirMode $thisFileMode


  ${ECHO} "$INFO $PROD_INSTALL_OK" >> $logfile
  ${ECHO} "$INFO $PROD_INSTALL_TIME" >> $logfile
  ${ECHO} ""
  
  ${ECHO} "$PROD_INSTALL_LAST_WORDS1"
  
  show_warnings
  
  ${ECHO} ""
  ${ECHO} "$PROD_INSTALL_LAST_WORDS2"
  ${ECHO} "$logfile"
  ${ECHO} ""
}

launch_the_server()
{
  ${ECHO} "$TITLE_BAR"
  ${ECHO} "$LAUNCHING_TITLE"
  ${ECHO} "$TITLE_BAR"
  ${ECHO} "${pre}${QUERY_LAUNCH_MGR0}"
  ${ECHO} "${pre}${QUERY_LAUNCH_MGR}"
  read resp

  if [ $resp"xxxx" = "yxxxx"  -o $resp"xxxx" = "Yxxxx" ] ; then
    ./ecsstart
  fi
}

configure_ssr()
{
  ssrconfig="${InstallDir}/bin/ssrconfig"
  if [ -f "$ssrconfig" ]; then
    ${ECHO} ""
    ${ECHO} "$TITLE_BAR"
    ${ECHO} "$SSRCONFIG_TITLE"
    ${ECHO} "$TITLE_BAR"
    ${ECHO} "${pre}${QUERY_LAUNCH_SSRCONFIG1}"
    ${ECHO} "${pre}${QUERY_LAUNCH_SSRCONFIG2}"
    ${ECHO} "${pre}${ssrconfig}"
    ${ECHO} ""
  fi
}

proceed_from_bin_dir()
{
  cd bin

  handle_license
  create_this_config_file "${config_file}"
  create_this_config_file "${cluster_file}"
  populateTemplatesCommonDirs

  install_the_server
  do_migration
  do_ecsinstall2
  run_boottime

  sh sys/makescripts ${InstallDir}

  do_activation
  create_admin_account
  wrap_it_up
  configure_ssr
  launch_the_server
}

initialize_from_install_dir
proceed_from_bin_dir
