#!/sbin/openrc-run

# backward compatibility for existing gentoo layout 
#
if [ -d "/var/lib/limenka/.limenka" ]; then
	LIMENKAD_DEFAULT_DATADIR="/var/lib/limenka/.limenka"
else
	LIMENKAD_DEFAULT_DATADIR="/var/lib/limenkad"
fi

LIMENKAD_CONFIGFILE=${LIMENKAD_CONFIGFILE:-/etc/limenka/limenka.conf}
LIMENKAD_PIDDIR=${LIMENKAD_PIDDIR:-/run/limenkad}
LIMENKAD_PIDFILE=${LIMENKAD_PIDFILE:-${LIMENKAD_PIDDIR}/${SVCNAME}.pid}
LIMENKAD_DATADIR=${LIMENKAD_DATADIR:-${LIMENKAD_DEFAULT_DATADIR}}
LIMENKAD_LOGDIR=${LIMENKAD_LOGDIR:-/var/log/limenkad}
LIMENKAD_USER=${LIMENKAD_USER:-${LIMENKA_USER:-limenka}}
LIMENKAD_GROUP=${LIMENKAD_GROUP:-limenka}
LIMENKAD_BIN=${LIMENKAD_BIN:-/usr/bin/limenkad}
LIMENKAD_NICE=${LIMENKAD_NICE:-${NICELEVEL:-0}}
LIMENKAD_OPTS="${LIMENKAD_OPTS:-${LIMENKA_OPTS}}"

name="Limenka Knots daemon"
description="Limenka cryptocurrency P2P network daemon"

required_files="${LIMENKAD_CONFIGFILE}"
pidfile="${LIMENKAD_PIDFILE}"
in_background_fake="start"

depend() {
	need localmount net
}

# verify
# 1) that the datadir exists and is writable (or create it)
# 2) that a directory for the pid exists and is writable
# 3) ownership and permissions on the config file
start_pre() {
	checkpath \
	-d \
	--mode 0750 \
	--owner "${LIMENKAD_USER}:${LIMENKAD_GROUP}" \
	"${LIMENKAD_DATADIR}"

	checkpath \
	-d \
	--mode 0755 \
	--owner "${LIMENKAD_USER}:${LIMENKAD_GROUP}" \
	"${LIMENKAD_PIDDIR}"

	checkpath -f \
	-o "${LIMENKAD_USER}:${LIMENKAD_GROUP}" \
	-m 0660 \
	"${LIMENKAD_CONFIGFILE}"

	checkpath -d --mode 0755 --owner "${LIMENKAD_USER}:${LIMENKAD_GROUP}" "${LIMENKAD_LOGDIR}"

	checkconfig || return 1
}

start() {
	ebegin "Starting ${name} in background"
	mark_service_inactive
	if start-stop-daemon \
		--pidfile="${LIMENKAD_PIDFILE}" \
		--chdir="${LIMENKAD_DATADIR}" \
		--user="${LIMENKAD_USER}:${LIMENKAD_GROUP}" \
		--nice="${LIMENKAD_NICE}" \
		--exec="${LIMENKAD_BIN}" \
		-- \
		-pid="${LIMENKAD_PIDFILE}" \
		-conf="${LIMENKAD_CONFIGFILE}" \
		-datadir="${LIMENKAD_DATADIR}" \
		-daemonwait \
		-debuglogfile="${LIMENKAD_LOGDIR}/debug.log" \
		-rpccookieperms=group \
		${LIMENKAD_OPTS}
	then
		IN_BACKGROUND=yes rc-service "${SVCNAME}" --quiet start
	else
		rc-service "${SVCNAME}" --quiet zap
	fi &
}

stop() {
	ebegin "Stopping ${name}"
	start-stop-daemon --stop \
		--pidfile="${LIMENKAD_PIDFILE}" \
		--retry="${LIMENKAD_SIGTERM_TIMEOUT}" \
		--exec="${LIMENKAD_BIN}"
	eend $?
}

checkconfig()
{
	if grep -qs '^rpcuser=' "${LIMENKAD_CONFIGFILE}" && \
		! grep -qs '^rpcpassword=' "${LIMENKAD_CONFIGFILE}" ; then
		eerror ""
		eerror "ERROR: You must set a secure rpcpassword to run limenkad."
		eerror "The setting must appear in ${LIMENKAD_CONFIGFILE}"
		eerror ""
		eerror "This password is security critical to securing wallets "
		eerror "and must not be the same as the rpcuser setting."
		eerror "You can generate a suitable random password using the following "
		eerror "command from the shell:"
		eerror ""
		eerror "bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'"
		eerror ""
		eerror "It is recommended that you also set alertnotify so you are "
		eerror "notified of problems:"
		eerror ""
		eerror "ie: alertnotify=echo %%s | mail -s \"Limenka Alert\"" \
			"admin@foo.com"
		eerror ""
		return 1
	fi
}
