#!/bin/ash
set -e

SETUP_DIR="/app/setup"

trap appStop SIGINT SIGTERM

appStart () {

  BURP_UID=${BURP_UID:-5337}
  BURP_GID=${BURP_GID:-5337}
  CHOWN_SPOOL=${CHOWN_SPOOL:-NO}
  TIMEZONE=${TIMEZONE:-Europe/Paris}

  CHOWN_SPOOL=$(echo $CHOWN_SPOOL | tr [A-Z] [a-z])

  [ -e /usr/share/zoneinfo/$TIMEZONE ] && {
    cp /usr/share/zoneinfo/$TIMEZONE /etc/localtime
    echo "$TIMEZONE" >/etc/timezone
  }

  # Create burp-ui User
  getent group | grep -q burp || addgroup -g $BURP_GID burp
  getent passwd | grep -q burp || adduser -h /var/spool/burp -D -s /sbin/nologin -u $BURP_UID -G burp burp

  [ "$(ls /etc/burp | wc -l)" -eq 0 ] && {
    echo "No burp-server config found. Copying default config..."
    cp -a /etc/ori.burp/* /etc/burp/
  }

  pidfile=$(grep -E "^pidfile" /etc/burp/burp-server.conf | sed -r "s/^pidfile *= *(.*)$/\1/")
  [ -n "$pidfile" ] && touch $pidfile && chown burp: $pidfile
  directory=$(grep -E "^directory" /etc/burp/burp-server.conf | sed -r "s/^directory *= *(.*)$/\1/")
  [ -n "$directory" ] && [ "$CHOWN_SPOOL" == "yes" ] && chown -R burp: $directory

  [ "$(ls /var/lib/burp | wc -l)" -eq 0 ] && {
    echo "Empty default burp PKI location. Creating initial skeleton..."
    mkdir -p /var/lib/burp/ssl/client /var/lib/burp/ssl/server
    chown -R burp: /var/lib/burp
  }

  # generate CA if necessary
  /usr/sbin/burp -c /etc/burp/burp-server.conf -g

  # start supervisord
  /usr/bin/supervisord -c /etc/supervisord.conf

  echo "Starting crond..."
  supervisorctl start cron >/dev/null

  echo "Starting burp-server..."
  supervisorctl start burp-server >/dev/null

  echo "Checking burp-server status..."
  sleep 2
  if ! supervisorctl status burp-server | awk '{print $2}' | grep -q RUNNING; then
    echo "There seem to be a problem with your burp-server setup. Trying to fix it..."
    echo "Saving your current config into the 'sav' sub-directory"
    mkdir /etc/burp/sav
    if [ $(ls /etc/burp/ | grep -vE "^(burpui|bui.*).cfg$" | wc -l) != 0 ]; then
      mkdir /tmp/buisav
      mv /etc/burp/burpui.cfg /etc/burp/bui* /tmp/buisav || true
    fi
    mv /etc/burp/* /etc/burp/sav/ || true
    if [ $(ls /etc/burp/ | grep -vE "^(burpui|bui.*).cfg$" | wc -l) != 0 ]; then
      mv /tmp/buisav/* /etc/burp/ || true
    fi
    echo "Copying default known good config..."
    cp -a /etc/ori.burp/* /etc/burp/

    supervisorctl restart burp-server
  fi

  # watch the access logs
  tail -F /var/log/supervisor/burp-server.log
}

appStop() {
  echo ""
  echo "Stopping burp-server..."
  supervisorctl stop burp-server >/dev/null
  echo "Stopping crond..."
  supervisorctl stop cron >/dev/null
  echo "Stopping supervisord..."
  kill -15 $(cat /var/run/supervisord.pid)
  exit
}

appHelp () {
  echo "Available options:"
  echo " app:start          - Starts the burp-ui server (default)"
  echo " app:help           - Displays the help"
  echo " [command]          - Execute the specified linux command eg. bash."
}

case "$1" in
  app:start)
    appStart
    ;;
  *)
    if [ -x $1 ]; then
      $1
    else
      prog=$(which $1)
      if [ -n "${prog}" ] ; then
        shift 1
        su -l burpui -c "$prog $@"
      else
        appHelp
      fi
    fi
    ;;
esac

exit 0
