#!/bin/bash

set -e

MAIL_HANDLERS_CONTROL=/usr/local/psa/admin/bin/mail_handlers_control
PLESKRC=/usr/local/psa/admin/sbin/pleskrc
HANDLER_PRIORITY=20
KAVEHOST_HOME=/opt/kav/sdk8l3
HANDLER_CONFIG=${KAVEHOST_HOME}/etc/kav-handler.cfg
HANDLER_EXECUTABLE=${KAVEHOST_HOME}/bin/kav-handler
KEYFILE=${KAVEHOST_HOME}/bin/kav.key
KAV_UPDATER=${KAVEHOST_HOME}/bin/kav8update

service_start() {
	if [ -x "$PLESKRC" ]; then
		$PLESKRC kavehost start
	else
		systemctl start $SERVICE_NAME
	fi
}

service_stop() {
	if [ -x "$PLESKRC" ]; then
		$PLESKRC kavehost stop || true
	else
		systemctl stop $SERVICE_NAME || true
	fi
}

service_restart() {
	if [ -x "$PLESKRC" ]; then
		$PLESKRC kavehost restart || true
	else
		systemctl restart $SERVICE_NAME || true
	fi
}

service_status() {
	local cmd="${INITSCRIPT} status"
	if [ -x "$PLESKRC" ]; then
		cmd="$PLESKRC kavehost status"
	else
		cmd="systemctl is-active $SERVICE_NAME"
		:
	fi

	if eval $cmd > /dev/null 2>&1; then
		echo is running
	else
		echo is stopped
	fi
}

updates_on () {
	ln -sf $KAV_UPDATER /etc/cron.daily
}

updates_off() {
	rm -f /etc/cron.daily/kav8update
}

service_off() {
	service_stop
	${MAIL_HANDLERS_CONTROL} --remove --name=kav-snd --type=sender --queue=before-remote
	${MAIL_HANDLERS_CONTROL} --remove --name=kav-rcpt --type=recipient --queue=before-queue
	updates_off
	/usr/local/psa/admin/sbin/register_service --disable kavehost || :
}

service_on() {
	updates_off
	updates_on
	/usr/local/psa/admin/sbin/register_service --enable kavehost
	service_start
}

mailname_add() {
	ht=$1
	mailname=$2
	case $ht in
		incoming|outgoing|both) break;;
		*) echo "Bad direction $ht"; usage;;
	esac

	[ -n "$mailname" ] || usage
	
	mailname_remove $mailname

	if [ "$ht" != "incoming" ]; then
		${MAIL_HANDLERS_CONTROL} --add --name=kav-snd --type=sender --mailname=$mailname --priority=${HANDLER_PRIORITY} 			--queue=before-remote --context=$HANDLER_CONFIG --executable=${HANDLER_EXECUTABLE} --enabled --dont-preserve-on-restore
	fi

	if [ "$ht" != "outgoing" ]; then
		${MAIL_HANDLERS_CONTROL} --add --name=kav-rcpt --type=recipient --mailname=$mailname --priority=${HANDLER_PRIORITY} 			--queue=before-queue --context=$HANDLER_CONFIG --executable=${HANDLER_EXECUTABLE} --enabled --dont-preserve-on-restore
	fi
}

mailname_remove() {
	mailname=$1
	${MAIL_HANDLERS_CONTROL} --remove --name=kav-snd --type=sender --mailname=${mailname} --queue=before-remote
	${MAIL_HANDLERS_CONTROL} --remove --name=kav-rcpt --type=recipient --mailname=${mailname} --queue=before-queue
}

set_key() {
	tmpf=`mktemp ${KAVEHOST_HOME}/bin/keytmpXXXXXXXX`
	cat > $tmpf
	mv $tmpf ${KEYFILE}
	service_restart
}

remove_key() {
	rm ${KEYFILE}
	service_stop
}

usage() {
	echo "Usage:
$0 command
, where command is one of:
	on					-- turns kavehost service on
	off 					-- turns kavehost service off
	add [incoming|outgoing|both] mailname	-- turns AV check for mailname on
	remove mailname				-- turns AV checks for mailname off
	setkey					-- sets new license key (read from stdin)
	removekey				-- removes license key
	usage
	help					-- displays this help text
"
exit 2
}

exec 2>&1 # w/a Plesk util_exec function which gets only stdout, and looses stderr.

cmd=$1

[ -n "$cmd" ] || usage

cmd=${cmd#--}

case $cmd in
	on)		service_on ;;
	off)		service_off ;;
	add)		mailname_add $2 $3 ;;
	remove)		mailname_remove $2 ;;
	setkey)		set_key ;;
	removekey) 	remove_key ;;
	start)		service_start ;;
	restart)	service_restart ;;
	stop)		service_stop ;;
	status)		service_status ;;	
	help|usage) 	usage;;
	*)		echo "Bad command $cmd"; usage;;
esac
