#!/usr/bin/env bash

# Find directory for this script
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ] ; do SOURCE="$(readlink -f "$SOURCE")"; done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

# OS specific support.
cygwin=false;
case "`uname`" in
  CYGWIN*) cygwin=true ;;
esac

# Check that JAVA_HOME is set
if [ ! -n "$JAVA_HOME" ]; then
    JAVACMD=`command -v java`
    if [ ! -n "$JAVACMD" ]
    then
        echo "You must set JAVA_HOME before running the SignServer cli."
        exit 1
    fi
else
    JAVACMD=$JAVA_HOME/bin/java
fi


class_name=org.signserver.admin.gui.SignServerAdminGUIApplication

# discard $1 from the command line args
#shift

# J2EE server classpath
if [ ! -n "$APPSRV_HOME" ]; then
    if [ -n "$JBOSS_HOME" ]; then
        APPSRV_HOME=$JBOSS_HOME
    elif [ -n "$WEBLOGIC_HOME" ]; then
        APPSRV_HOME=$WEBLOGIC_HOME
    fi
fi
if [ ! -n "$APPSRV_HOME" ]; then
    echo "To connect to a local SignServer please set APPSRV_HOME first."
fi


if [ ! -n "${SIGNSERVER_HOME}" ]; then
  if [ -f $DIR/signserver-gui ]; then
    SIGNSRV_HOME=$DIR/..
  fi
  if [ -f /etc/signserver/signservermgmt.env ]; then
     . /etc/signserver/signservermgmt.env
  fi
  if [ -f /etc/mailsigner/mailsignermgmt.env ]; then
     . /etc/mailsigner/mailsignermgmt.env
  fi
  if [ -f /usr/share/signserver/bin/signserver ]; then
     SIGNSRV_HOME=/usr/share/signserver
  fi
  if [ -f /opt/signserver/bin/signserver-gui ]; then
     SIGNSRV_HOME=/opt/signserver
  fi
  if [ -f /usr/local/signserver/bin/signserver-gui ]; then
     SIGNSRV_HOME=/usr/local/signserver
  fi
  if [ -f ./signserver-gui ]; then
     SIGNSRV_HOME=`pwd`/..
  fi
  if [ -f bin/signserver-gui ]; then
     SIGNSRV_HOME=`pwd`
  fi
else
  SIGNSRV_HOME=$SIGNSERVER_HOME
fi 

ADMINGUI_JAR=`find "${SIGNSRV_HOME}/lib" -name "SignServer-AdminGUI*.jar"`

# Check that classes exist
if [ ! -f "${ADMINGUI_JAR}" ]
then
	echo "SignServer AdminGUI not available. Build it first."
        exit 1
fi

# Optional JARs
OPTIONAL_CLASSPATH=${EXTRA_CLASSPATH}

# Construct the classpath
CP="${ADMINGUI_JAR}"
CP="${SIGNSRV_HOME}/conf":"$CP"
CP="$CP:${OPTIONAL_CLASSPATH}"

# Application server dependencies
if [ -f $APPSRV_HOME/lib/appserv-rt.jar ]; then
    CP=$CP:"${SIGNSRV_HOME}/conf/glassfish"
    CP=$CP:"$APPSRV_HOME/lib/appserv-rt.jar"
    CP="$APPSRV_HOME/lib/gf-client.jar":$CP
fi
if [ -f $APPSRV_HOME/client/jbossall-client.jar ]; then
    CP=$CP:"${SIGNSRV_HOME}/conf/jboss"
    CP=$CP:"$APPSRV_HOME/client/jbossall-client.jar"
fi
if [ -f $APPSRV_HOME/bin/standalone.sh ]; then
    CP="$APPSRV_HOME/bin/client/jboss-client.jar":$CP
    CP="${SIGNSRV_HOME}/conf/jboss7":$CP
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
  CP=`cygpath --path --windows "$CP"`
fi

# Enable Java network debug logs
#JAVA_OPTS="$JAVA_OPTS -Djavax.net.debug=all"
#JAVA_OPTS="$JAVA_OPTS -Djavax.net.debug=ssl"

# Enable Java PKCS#11 debug logs
#JAVA_OPTS="$JAVA_OPTS -Djava.security.debug=sunpkcs11"

# Enable Java debugging
#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8788,server=y,suspend=n"
#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8788,server=y,suspend=y"

# Disable TLS Server Name Indication (SNI)
#JAVA_OPTS="$JAVA_OPTS -Djsse.enableSNIExtension=false"

# Execute the command
#echo Class-Path: $CP
$JAVACMD -version

exec "$JAVACMD" $JAVA_OPTS -cp "${CP}" -splash:"${SIGNSRV_HOME}/res/admingui-splash.png" $class_name "$@" -connectfile "${SIGNSRV_HOME}/conf/admingui.properties" -defaultconnectfile "${SIGNSRV_HOME}/conf/admingui_default.properties" -basedir "${SIGNSRV_HOME}"
