#!/bin/sh

MODULE_NAME=nodered
MODULE_DAEMON=node-red
MODULE_CHAIN=mod_$MODULE_NAME
MODULE_CFG=/opt/$MODULE_NAME/etc/settings
MODNAME=Node-RED

add_chain() {
  /sbin/iptables -N $MODULE_CHAIN || return
  /sbin/iptables -A $MODULE_CHAIN -p tcp --dport $MOD_NODERED_PORT -j ACCEPT
  /sbin/iptables -A in_mod -j $MODULE_CHAIN
}

del_chain() {
  /sbin/iptables -D in_mod -j $MODULE_CHAIN
  /sbin/iptables -F $MODULE_CHAIN
  /sbin/iptables -X $MODULE_CHAIN
}


#Load up node red when called
case "$1" in

start)
  SECRET_OPT=MOD_NODERED_CREDSECRET
  if ! grep -qE "^$SECRET_OPT=\S+$" $MODULE_CFG; then
    sed -i -e "$ a $SECRET_OPT=`openssl rand -base64 45`" -e "/^$SECRET_OPT=/d" $MODULE_CFG
  fi
  set -o allexport
  . $MODULE_CFG
  set +o allexport
  [ "$MOD_NODERED_ENABLED" != "1" ] && echo "$MODNAME start skipped." && exit 0
  if [ "$(pidof $MODULE_DAEMON)" ]; then
    echo "$MODNAME already running."
  else
    echo "Starting $MODNAME..."
    [ "$MOD_NODERED_FLOWS" == "" ] && MOD_NODERED_FLOWS="/var/data/node-red"
    mkdir -p "$MOD_NODERED_FLOWS"
    . /etc/settings.http
    if [ "$HTTP_TLS_MIN_PROTO" == "" ]; then
      TLS_VERSION="--tls-min-v1.0"
    else
      TLS_VERSION="--tls-min-v1.${HTTP_TLS_MIN_PROTO: -1}"
    fi
    add_chain
    logger -t nodejs "$MODNAME service start"
    NODE_LOG_SIZE=10485760 \
    NODE_LOG_HISTORY=2 \
    NODE_ENV=production \
    /usr/bin/node \
      $TLS_VERSION \
      --logfile /var/log/module-nodered \
      /usr/lib/node_modules/node-red/red.js \
        --userDir /usr/lib/node_modules/node-red &
  fi
;;

stop)
  echo "Stopping $MODNAME..."
  killall -q $MODULE_DAEMON
  sleep 2
  del_chain
  logger -t nodejs "$MODNAME service stop"
  echo "Stopped."
;;

restart)
  echo "Restarting $MODNAME..."
  $0 stop
  sleep 2
  $0 start
  echo "Restarted."
;;

reload)
  echo "Reloading $MODNAME..."
  if [ "$(pidof $MODULE_DAEMON)" ]
  then
    $0 stop
    sleep 2
    $0 start
  fi
  echo "Reloaded."
;;

status)
  echo -n "Module $MODNAME is "
  killall -0 $MODULE_DAEMON 2> /dev/null
  RETVAL=$?
  if [ $RETVAL = 0 ]; then echo "running"; else echo "stopped"; fi
  exit $RETVAL
;;

defaults)
  cp /opt/$MODULE_NAME/etc/defaults $MODULE_CFG 2> /dev/null
;;

*)
  echo "Usage: $0 {start|stop|restart|reload|status|defaults}"
  exit 1

esac
