#!/bin/bash

# determine the config directory
configDirs="$XDG_CONFIG_DIRS:/etc"
IFS=':' read -ra configDirList <<< "$configDirs"
for configDir in "${configDirList[@]}"
do
   if test -e "$configDir/rstudio/jupyter.conf"
   then
      configFile="$configDir/rstudio/jupyter.conf"
      break
   fi
done

# load jupyter-profile script
if test -e "$configDir/rstudio/jupyter-profile"
then
   . "$configDir/rstudio/jupyter-profile"
fi

# session arguments
# escape backslashes in arguments to pass safely to bash below
JUPYTER_ARGS="${@//\\/\\\\}"

if [[ -n "${RS_SESSION_SSL_CERT}" ]]; then
   if [[ -z "${RS_SESSION_SSL_CERT_KEY}" ]]; then
      echo "Error - public key without private key"
      exit 10
   fi

   CERT_DIR="${HOME}/.local/share/rstudio/ssl"
   mkdir -p "${CERT_DIR}"
   find "${CERT_DIR}" -maxdepth 1 -name "cert-*.pem" -mtime +1 -exec rm -f {} \;
   find "${CERT_DIR}" -maxdepth 1 -name "key-*.pem" -mtime +1 -exec rm -f {} \;
   CERT_PID=$$
   CERT_FILE="${CERT_DIR}/cert-${CERT_PID}.pem"
   KEY_FILE="${CERT_DIR}/key-${CERT_PID}.pem"
   rm -f ${CERT_FILE} ${KEY_FILE}
   echo "${RS_SESSION_SSL_CERT}" > "${CERT_FILE}"
   echo "${RS_SESSION_SSL_CERT_KEY}" > "${KEY_FILE}"
   JUPYTER_ARGS="${JUPYTER_ARGS} --certfile ${CERT_FILE} --keyfile ${KEY_FILE}"
elif [[ -n "${RS_SESSION_SSL_CERT_PATH}" ]] ; then
   # eval variables like $HOME and $USER in RS_SESSION_CERT_PATH
   eval CERT_PATH=`echo ${RS_SESSION_SSL_CERT_PATH}`
   eval KEY_PATH=`echo ${RS_SESSION_SSL_CERT_KEY_PATH}`
   JUPYTER_ARGS="${JUPYTER_ARGS} --certfile ${CERT_PATH} --keyfile ${KEY_PATH}"
fi

if [[ "${JUPYTER_ARGS}" == "lab"* ]]; then
   manage_jlab_script=$(dirname $(readlink -f $0))/../extras/scripts/manage-jlab-ext.sh
   if [ -f "$manage_jlab_script" ]; then
      source ${manage_jlab_script}
   
      # check if the expected version of the jupyterlab extension has been installed
      echo "Checking if the extension ${RSW_JLAB_EXT_NAME} v${RSW_JLAB_EXT_VERSION} is installed..."
   
      if [ "$(echo $(${JUPYTER_EXEC_COMMAND} labextension list 2>&1) | grep -c ${RSW_JLAB_EXT_NAME}.*${RSW_JLAB_EXT_VERSION})" -lt 1 ]; then
         # locate pip from jupyter's path
         pip_path=$(dirname ${JUPYTER_EXEC_COMMAND})/pip
         if [ -f "${pip_path}" ]; then
            echo "Installing the RStudio Workbench JupyterLab extension..."
            ${pip_path} install ${RSW_JLAB_EXT_NAME} --verbose
            echo "RStudio Workbench JupyterLab extension install finished."
         else
            echo "Could not install the RStudio Workbench JupyterLab extension - could not locate pip from Jupyter path. To manually install the extension, run 'python -m pip install jupyterlab_rsw' using the same version of python that ${JUPYTER_EXEC_COMMAND} relies on"
         fi
      else
         echo "..the extension has already been installed"
      fi
   else
      echo "Skipping JupyterLab extension updates because $manage_jlab_script was not found."
   fi
fi

# run the session
/bin/bash --login $JUPYTER_PROFILE_OPTIONS -c "$JUPYTER_EXEC_COMMAND $JUPYTER_ARGS"

# store exit code of command
EXIT_CODE=$?

if [[ -n "${CERT_DIR}" ]]; then
   rm -f "${CERT_FILE}"
   rm -f "${KEY_FILE}"
fi

# exit with previously-stored exit code, after cleanup
exit $EXIT_CODE
