#!/bin/sh

# PROVIDE: oauth2_proxy
# REQUIRE: NETWORKING SERVERS
# KEYWORD: shutdown
#
# Add these following line to /etc/rc.conf.local or /etc/rc.conf
# to enable this service:
#
# oauth2_proxy_enable (bool):         Set it to YES to enable keycloak on startup.
#                                 Default: NO
# oauth2_proxy_user (string):         User account to run with.
#                                 Default: www
# oauth2_proxy_flags (string):        Additional flags for the startup script.
#

. /etc/rc.subr

case $0 in
/etc/rc*)
	# during boot (shutdown) $0 is /etc/rc (/etc/rc.shutdown),
	# so get the name of the script from $_file
	name=$_file
	;;
*)
	name=$0
	;;
esac
 
name=${name##*/}
rcvar=${name}_enable
desc="OAuth 2.0 proxy server"

load_rc_config "$name"

eval "${rcvar}=\${${rcvar}:-'NO'}"
eval "${name}_svcj_options=\${${name}_svcj_options:-'net_basic'}"
eval "_oauth2_proxy_user=\${${name}_user:-'%%USER%%'}"
eval "_oauth2_proxy_group=\${${name}_group:-'%%GROUP%%'}"
eval "_oauth2_proxy_flags=\${${name}_flags:-''}"
eval "_oauth2_proxy_restart=\${${name}_restart:-'60'}"

configname=$(echo ${name}.cfg | sed -e 's:_:-:g')

pidfile=%%RUN_DIR%%/${name}.pid
childpidfile=%%RUN_DIR%%/${name}_child.pid
command=/usr/sbin/daemon
command_args="-u ${_oauth2_proxy_user} -o %%LOG_DIR%%/${name}.out -t ${name} -R ${_oauth2_proxy_restart} -P ${pidfile} -p ${childpidfile}"

start_cmd="oauth2_proxy_start"
stop_cmd="oauth2_proxy_stop"

oauth2_proxy_start()
{
	if [ ! -d "%%LOG_DIR%%" ]; then
		install -d -o ${_oauth2_proxy_user} %%LOG_DIR%%
	fi
	if [ ! -d "%%RUN_DIR%%" ]; then
		install -d -o ${_oauth2_proxy_user} %%RUN_DIR%%
	fi

	chown -R ${_oauth2_proxy_user} %%LOG_DIR%%

	echo "Starting ${name}."
        ${command} ${command_args} \
                %%PREFIX%%/bin/%%PORTNAME%% \
                --config %%PREFIX%%/etc/${configname} \
                ${_oauth2_proxy_flags}
}

oauth2_proxy_stop()
{
    local pid_daemon
    local pid_child

    echo "Stopping ${name}."

    pid_daemon=$(check_pidfile ${pidfile} ${command})
    if [ ! -z "${pid_daemon}" ]; then
        kill -TERM ${pid_daemon}
    fi


    pid_child=$(check_pidfile ${childpidfile} %%PREFIX%%/bin/%%PORTNAME%%)
    if [ ! -z "${pid_child}" ]; then
        kill -TERM ${pid_child}
    fi

    wait_for_pids ${pid_daemon} ${pid_child}
}

run_rc_command "$1"
