#!/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/vscode.conf"
   then
      configFile="$configDir/rstudio/vscode.conf"
      break
   fi
done

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

# session arguments
# escape backslashes in arguments to pass safely to bash below
VSCODE_ARGS="${@//\\/\\\\}"
RS_VSCODE_USER_EXT=${RS_VSCODE_USER_EXT:-0}

# install extension
if [ ! -z "$RS_VSCODE_EXT_VERSION" ] || [ $RS_VSCODE_USER_EXT -eq 1 ]
then
   if [ -f /usr/lib/rstudio-server/extras/scripts/install-vs-code-ext.sh ]
   then
      if [ ! -z "$RS_VSCODE_EXT_VERSION" ]; then
         args="-v $RS_VSCODE_EXT_VERSION"
      fi
      if [ ! -z "$RS_VSCODE_USER_EXT" ]; then
         args=$args" -f"
      fi
      /usr/lib/rstudio-server/extras/scripts/install-vs-code-ext.sh -l $args
   else
     echo "Skipping VS Code extension updates because /usr/lib/rstudio-server/extras/scripts/install-vs-code-ext.sh was not found."
   fi
fi

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}"
   VSCODE_ARGS="${VSCODE_ARGS} --cert ${CERT_FILE} --cert-key ${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}`
   VSCODE_ARGS="${VSCODE_ARGS} --cert ${CERT_PATH} --cert-key ${KEY_PATH}"
fi

# run the session
/bin/bash --login $VSCODE_PROFILE_OPTIONS -c "$VSCODE_EXEC_COMMAND $VSCODE_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
