#!/bin/sh
#
# PROVIDE: caddy
# REQUIRE: networking
# KEYWORD: shutdown

#
# Add the following lines to /etc/rc.conf to enable caddy:
# caddy_enable (bool):        Set to "NO" by default.
#                             Set it to "YES" to enable caddy
#
# caddy_cert_email (str):     Set to "" by default.
#                             Defines the SSL certificate issuer email. By providing an
#                             email address you automatically agree to letsencrypt.org's
#                             general terms and conditions
#
# caddy_bin_path (str):       Set to "/usr/local/bin/caddy" by default.
#                             Provides the path to the caddy server executable
#
# caddy_cpu (str):            Set to "99%" by default.
#                             Configures, how much CPU capacity caddy may gain
#
# caddy_config_path (str):    Set to "/usr/local/www/Caddyfile" by default.
#                             Defines the path for the configuration file caddy will load on boot
#
# caddy_user (str):           Set to "root" by default.
#                             Defines the user that caddy will run on
#
# caddy_group (str):  	      Set to "wheel" by default.
#                             Defines the group that caddy files will be attached to
#
# caddy_logfile (str)	      Set to "/var/log/caddy.log" by default.
#			      Defines where the process log file is written, this is not a web access log
#
# caddy_env (str)	      Set to "" by default.
#			      This allows environment variable to be set that may be required, for example when using "DNS Challenge" account credentials are required.
#			      e.g. (in your rc.conf)   caddy_env="CLOUDFLARE_EMAIL=me@domain.com CLOUDFLARE_API_KEY=my_api_key"
#
# caddy_options (str)           Set to "" by default.
#                             This allows flags to be set such as "-disable-tls-alpn-challenge" to disable the tls-alpn challenge and fall back to http-01.
#                             e.g. (in your rc.conf) set caddy_options="-disable-tls-alpn-challenge"
#

. /etc/rc.subr

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

load_rc_config ${name}

: ${caddy_enable:="NO"}
: ${caddy_cert_email=""}
: ${caddy_bin_path="/usr/local/bin/caddy"}
: ${caddy_cpu="99%"} # was a bug for me that caused a crash within jails
: ${caddy_config_path="/usr/local/www/Caddyfile"}
: ${caddy_logfile="/var/log/caddy.log"}
: ${caddy_user="root"}
: ${caddy_group="wheel"}

if [ "$caddy_cert_email" = "" ]
then
    echo "rc variable \$caddy_cert_email is not set. Please provide a valid SSL certificate issuer email."
    exit 1
fi

pidfile="/var/run/${name}.pid"
procname="${caddy_bin_path}" #enabled builtin pid checking for start / stop
command="/usr/sbin/daemon"
command_args="-p ${pidfile} /usr/bin/env ${caddy_env} ${procname} ${caddy_options} -cpu ${caddy_cpu} -log stdout -conf ${caddy_config_path} -agree -email ${caddy_cert_email} < /dev/null >> ${caddy_logfile} 2>&1"

start_precmd="caddy_startprecmd"

caddy_startprecmd()
{
	if [ ! -e "${pidfile}" ]; then
		install -o "${caddy_user}" -g "${caddy_group}" "/dev/null" "${pidfile}"
	fi

	if [ ! -e "${caddy_logfile}" ]; then
		install -o "${caddy_user}" -g "${caddy_group}" "/dev/null" "${caddy_logfile}"
	fi
}

required_files="${caddy_config_path}"

run_rc_command "$1"
