#!/bin/bash

I3DHUB_ROOT=${INSTANT3DHUB_ROOT:="/"}

[ -e ${I3DHUB_ROOT}/opt/instant3Dhub/etc/sysconfig/instant3Dhub ] && . ${I3DHUB_ROOT}/opt/instant3Dhub/etc/sysconfig/instant3Dhub

trap 'echo TERMinated; exit' TERM

# Functions are necessary to forward the TERM signal to the child process, 
# otherwise systemctl stop / restart will just hang on the license server.
#
# https://unix.stackexchange.com/questions/146756/forward-sigterm-to-child-in-bash/444676#444676
prep_term()
{
    unset term_child_pid
    unset term_kill_needed
    trap 'handle_term' TERM INT
}

handle_term()
{
    if [ "${term_child_pid}" ]; then
        kill -TERM "${term_child_pid}" 2>/dev/null
    else
        term_kill_needed="yes"
    fi
}

wait_term()
{
    term_child_pid=$!
    if [ "${term_kill_needed}" ]; then
        kill -TERM "${term_child_pid}" 2>/dev/null 
    fi
    wait ${term_child_pid} 2>/dev/null
    trap - TERM INT
    wait ${term_child_pid} 2>/dev/null
}

case "$1" in

  instant3DhubBooster)
    echo "starting instant3Dhub booster"
    [ -e ${I3DHUB_ROOT}/opt/instant3Dhub/etc/sysconfig/instant3DhubBooster ] && . ${I3DHUB_ROOT}/opt/instant3Dhub/etc/sysconfig/instant3DhubBooster ]
    sleep ${SERVICE_DELAY}
    if [ -z "${BOOSTER_LOG_FILE}" ]; then
      echo "## ${I3DHUB_ROOT}/opt/instant3Dhub/bin/booster ${BOOSTER_HUBURL_OPT} ${BOOSTER_LOG_LEVEL_OPT} ${BOOSTER_CACHE_PATH_OPT} ${BOOSTER_PORT_OPT} ${BOOSTER_URN_MAPPER_RULES_OPT} ${BOOSTER_PROXY_PATH_OPT} ${BOOSTER_SERVICE_CONFIG_OVERRIDE_OPT} ${BOOSTER_CONFIG_OVERRIDE_OPT} ${BOOSTER_BASE_OPT}"
      ${I3DHUB_ROOT}/opt/instant3Dhub/bin/booster ${BOOSTER_HUBURL_OPT} ${BOOSTER_LOG_LEVEL_OPT} ${BOOSTER_CACHE_PATH_OPT} ${BOOSTER_PORT_OPT} ${BOOSTER_URN_MAPPER_RULES_OPT} ${BOOSTER_PROXY_PATH_OPT} ${BOOSTER_SERVICE_CONFIG_OVERRIDE_OPT} ${BOOSTER_CONFIG_OVERRIDE_OPT} ${BOOSTER_BASE_OPT}
    else
      echo "## ${I3DHUB_ROOT}/opt/instant3Dhub/bin/booster ${BOOSTER_HUBURL_OPT} ${BOOSTER_LOG_LEVEL_OPT} ${BOOSTER_CACHE_PATH_OPT} ${BOOSTER_PORT_OPT} ${BOOSTER_URN_MAPPER_RULES_OPT} ${BOOSTER_PROXY_PATH_OPT} ${BOOSTER_SERVICE_CONFIG_OVERRIDE_OPT} ${BOOSTER_CONFIG_OVERRIDE_OPT} ${BOOSTER_BASE_OPT} 2>&1 >> ${BOOSTER_LOG_FILE}"
      ${I3DHUB_ROOT}/opt/instant3Dhub/bin/booster ${BOOSTER_HUBURL_OPT} ${BOOSTER_LOG_LEVEL_OPT} ${BOOSTER_CACHE_PATH_OPT} ${BOOSTER_PORT_OPT} ${BOOSTER_URN_MAPPER_RULES_OPT} ${BOOSTER_PROXY_PATH_OPT} ${BOOSTER_SERVICE_CONFIG_OVERRIDE_OPT} ${BOOSTER_CONFIG_OVERRIDE_OPT} ${BOOSTER_BASE_OPT} 2>&1 >> ${BOOSTER_LOG_FILE}
    fi
    ;;


  instantDeliveryNginx)
    ${I3DHUB_ROOT}/opt/instant3Dhub/opt/nginx/sbin/nginx -p ${I3DHUB_ROOT}/opt/instant3Dhub/opt/nginx ${NGINX_CONF}
    ;;


  instant3DhubLicenseServer)
    echo "starting instant3Dhub License Server"
    [ -e ${I3DHUB_ROOT}/opt/instant3Dhub/etc/sysconfig/instant3DhubLicenseServer ] && . ${I3DHUB_ROOT}/opt/instant3Dhub/etc/sysconfig/instant3DhubLicenseServer ]

    if [ -e ${I3DH_ROOT}/opt/instant3Dhub.custom/license_config.yml ] && grep -q -E "^use-bios-uuid:\s*true" ${I3DH_ROOT}/opt/instant3Dhub.custom/license_config.yml; then 
      STAY_ROOT=true
    fi

    COMMAND="${I3DHUB_ROOT}/opt/instant3Dhub/bin/licenseServer ${LSERVER_CONFIG_FILE_OPT} ${LSERVER_LICENSE_FILE_OPT} ${LSERVER_SSL_KEY_FILE_OPT} ${LSERVER_SSL_CRT_FILE_OPT} ${LSERVER_ADDRESS_OPT} ${LSERVER_LOG_LEVEL_OPT} ${LSERVER_PG_OPT}"
    if [ -z ${LSERVER_LOG_FILE} ]; then
      COMMAND+=" 2>&1 >> ${LSERVER_LOG_FILE}"
    fi

    if [[ -v STAY_ROOT ]]; then
      echo "## ${COMMAND}"
      ${COMMAND}
    else 
      echo "## su instant3dhub -s /bin/bash -c \"${COMMAND}\""
      prep_term
      su instant3dhub -s /bin/bash -c "${COMMAND}" &
      wait_term
    fi
    ;;


  *)
    echo "Usage: $0 {instant3DhubBooster|instant3DhubLicenseServer}"
    exit 2
    ;;
esac
exit $?
