#!/bin/sh

# PROVIDE: paperless-webui
# REQUIRE: LOGIN
# BEFORE:  paperless-worker
# KEYWORD: shutdown
#
# Add the following line(s) to /etc/rc.conf to enable the paperless
# celery webui process:
#
# paperless_webui_enable (bool):	Set to "NO" by default.
#					Set it to "YES" to enable
#					paperless_webui
# paperless_webui_user (str):		Set to "paperless" by default.
#					User to run webui.
# paperless_webui_log_facility (str):	Set to "daemon" by default.
#					WebUI logging syslog facility.
# paperless_webui_log_priority (str):	Set to "notice" by default.
#					WebUI logging syslog priority.
# paperless_webui_log_tag (str):	Set to "paperless-webui" by default.
#					WebUI logging syslog tag.
# paperless_webui_listen_address (str):	Set to "127.0.0.1" by default.
#					IP address to listen on.
# paperless_webui_listen_port (int):	Set to "8000" by default.
#					Port to listen on.
# paperless_webui_restart_delay (int):	Set to "5" by default.
#					WebUI automatic restart delay in
#					seconds.
# paperless_webui_secret_key (str):	Set to
#					"%%PREFIX%%/etc/paperless_secret_key"
#					by default. Load PAPERLESS_SECRET_KEY
#					from this file from start, in case it
#					is not in the environment already.
#					Will be created on start in case it
#					does not exist.
#					Content of PAPERLESS_SECRET_KEY can be
#					overridden in
#					%%PREFIX%%/etc/paperless.conf.
# paperless_webui_tmpdir (str):		If set, overrides TMPDIR

. /etc/rc.subr

name="paperless_webui"
rcvar="${name}_enable"

# read configuration and set defaults
load_rc_config "$name"
paperless_webui_enable=${paperless_webui_enable:-"NO"}
paperless_webui_daemon_user=${paperless_webui_user:-"paperless"}
paperless_webui_log_facility=${paperless_webui_log_facility:-"daemon"}
paperless_webui_log_priority=${paperless_webui_log_priority:-"notice"}
paperless_webui_log_tag=${paperless_webui_log_tag:-"paperless-webui"}
paperless_webui_listen_address=${paperless_webui_listen_address:-"127.0.0.1"}
paperless_webui_listen_port=${paperless_webui_listen_port:-"8000"}
paperless_webui_restart_delay=${paperless_webui_restart_delay:-"5"}
paperless_webui_secret_key=${\
paperless_webui_secret_key:-"%%PREFIX%%/etc/paperless_secret_key"}
paperless_webui_tmpdir=${paperless_webui_tmpdir:-"$TMPDIR"}

paperless_webui_env="LANG=en_US.UTF-8 PATH=$PATH:%%PREFIX%%/bin\
  PYTHONPATH=%%PYTHONPREFIX_SITELIBDIR%%/paperless \
  GRANIAN_HOST=${paperless_webui_listen_address} \
  GRANIAN_PORT=${paperless_webui_listen_port}"

if [ -n "$paperless_webui_tmpdir" ]; then
	paperless_webui_env="$paperless_webui_env TMPDIR=\
$paperless_webui_tmpdir"
fi

start_precmd="paperless_webui_prestart"
pidfile="/var/run/paperless/webui.pid"
command="/usr/sbin/daemon"
command_args="-cS -u ${paperless_webui_daemon_user} \
	-P ${pidfile} \
	-t paperless-webui \
	-l ${paperless_webui_log_facility} \
	-s ${paperless_webui_log_priority} \
	-T ${paperless_webui_log_tag} \
	-R ${paperless_webui_restart_delay} \
	%%PREFIX%%/bin/granian --interface asginl \
	--ws --loop uvloop paperless.asgi:application"

paperless_webui_prestart()
{
	if [ -z "$PAPERLESS_SECRET_KEY" ]; then
		if [ ! -s "$paperless_webui_secret_key" ]; then
			echo "Creating $paperless_webui_secret_key"
			(
				set -eo pipefail; umask 077
				uuidgen -crn 10 | xargs | tr ' ' 'x' \
				>"$paperless_webui_secret_key"
			) || return 1
		fi
		PAPERLESS_SECRET_KEY=$(cat "$paperless_webui_secret_key")
		export PAPERLESS_SECRET_KEY
	fi
	if [ "${#PAPERLESS_SECRET_KEY}" -lt "128" ]; then
		>&2 echo "PAPERLESS_SECRET_KEY is shorter than 128 chars"
		return 1
	fi
}

run_rc_command "$1"
