#!/bin/sh

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

. /etc/rc.subr

name=keycloak
rcvar=keycloak_enable
desc="Identity and access management solution"

load_rc_config $name

: ${keycloak_enable:=NO}
: ${keycloak_user:=keycloak}
: ${keycloak_group:=keycloak}
: ${keycloak_flags="start"}
: ${keycloak_java_home="/usr/local/openjdk17"}

pidfile=/var/run/keycloak/keycloak.pid
command=/usr/sbin/daemon
command_args="-u ${keycloak_user} -o /var/log/keycloak/keycloak.out -t keycloak -R 60 -P ${pidfile}"

start_cmd="keycloak_start"
stop_cmd="keycloak_stop"
build_cmd="keycloak_build"

export JAVA_HOME=${keycloak_java_home}

keycloak_start()
{
	if [ ! -d "/var/log/keycloak" ]; then
		install -d -o ${keycloak_user} /var/log/keycloak
	fi
	if [ ! -d "/var/run/keycloak" ]; then
		install -d -o ${keycloak_user} /var/run/keycloak
	fi

	chown -R ${keycloak_user} /var/log/keycloak

	echo "Starting keycloak."
        ${command} ${command_args} \
                /usr/local/share/java/keycloak/bin/kc.sh \
                ${keycloak_flags}
}

keycloak_stop()
{
    local pid_daemon
    local pid_child

    echo "Stopping keycloak."

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

    pid_child=$(pgrep -U ${keycloak_user} -f /usr/local/share/java/keycloak/)
    if [ ! -z "${pid_child}" ]; then
        kill -TERM ${pid_child}
    fi

    wait_for_pids ${pid_daemon} ${pid_child}
}

keycloak_build()
{
    su -m ${keycloak_user} -c "/usr/local/share/java/keycloak/bin/kc.sh build"
}

extra_commands="build"
run_rc_command "$1"
