#!/bin/bash

I3DH_ROOT=${INSTANT3DHUB_ROOT:="/"}

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
}

echo "starting instant3Dhub License Server"

[ -e ${I3DH_ROOT}/opt/instant3Dhub/etc/sysconfig/instant3DhubLicenseServer ] && . ${I3DH_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="${I3DH_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 [[ -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

exit $?
