#!/bin/sh

# PROVIDE: rustproxy
# REQUIRE: LOGIN NETWORKING
# KEYWORD: shutdown

. /etc/rc.subr

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

load_rc_config "$name"

: ${rustproxy_enable:="NO"}
: ${rustproxy_user:="rustproxy"}
: ${rustproxy_group:="rustproxy"}
: ${rustproxy_data_dir:="/var/db/rustproxy"}
: ${rustproxy_log_dir:="/var/log/rustproxy"}
: ${rustproxy_log_file:="${rustproxy_log_dir}/rustproxy.log"}
: ${rustproxy_command:="/usr/local/sbin/rust-proxy"}
: ${rustproxy_restart_delay:="5"}
: ${rustproxy_proxy_listen:="0.0.0.0:8080"}
: ${rustproxy_tls_enabled:="1"}
: ${rustproxy_tls_listen:="0.0.0.0:8181"}
: ${rustproxy_admin_listen:="0.0.0.0:9090"}
: ${rustproxy_allow_remote_admin:="1"}

enabled="0"
config_file="/usr/local/etc/rustproxy/opnsense.conf"
if [ -r "$config_file" ]; then
    . "$config_file"
fi

if [ "$enabled" = "1" ]; then
    rustproxy_enable="YES"
else
    rustproxy_enable="NO"
fi

rustproxy_runtime_args="--data-dir ${rustproxy_data_dir} --admin-listen ${rustproxy_admin_listen} --update-check-interval-secs 0 serve --proxy-listen ${rustproxy_proxy_listen}"
if [ "$rustproxy_tls_enabled" = "1" ]; then
    rustproxy_runtime_args="${rustproxy_runtime_args} --tls-listen ${rustproxy_tls_listen}"
fi
if [ "$rustproxy_allow_remote_admin" = "1" ]; then
    rustproxy_runtime_args="${rustproxy_runtime_args} --allow-remote-admin"
fi

pidfile="/var/run/rustproxy-daemon.pid"
child_pidfile="/var/run/rustproxy.pid"
command="/usr/sbin/daemon"
command_args="-r -R ${rustproxy_restart_delay} -P ${pidfile} -p ${child_pidfile} -u ${rustproxy_user} -o ${rustproxy_log_file} ${rustproxy_command} ${rustproxy_runtime_args}"
required_files="${rustproxy_command}"
start_precmd="rustproxy_prestart"
stop_postcmd="rustproxy_poststop"

rustproxy_prestart()
{
    /usr/bin/install -d -o "${rustproxy_user}" -g "${rustproxy_group}" -m 0700 "${rustproxy_data_dir}"
    /usr/sbin/chown "${rustproxy_user}:${rustproxy_group}" "${rustproxy_data_dir}"
    /bin/chmod 0700 "${rustproxy_data_dir}"

    /usr/bin/install -d -o "${rustproxy_user}" -g "${rustproxy_group}" -m 0750 "${rustproxy_log_dir}"
    /usr/bin/touch "${rustproxy_log_file}"
    /usr/sbin/chown "${rustproxy_user}:${rustproxy_group}" "${rustproxy_log_file}"
    /bin/chmod 0640 "${rustproxy_log_file}"
}

rustproxy_poststop()
{
    /bin/rm -f "${child_pidfile}"
}

run_rc_command "$1"
