#!/bin/sh

set -e

INITSCRIPT=/etc/init.d/kavehost
MAILMNG=/usr/local/psa/admin/bin/mailmng
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() {
	${INITSCRIPT} status || ${INITSCRIPT} start
}

service_stop() {
	${INITSCRIPT} status && ${INITSCRIPT} stop || true
}

service_restart() {
	${INITSCRIPT} status && ${INITSCRIPT} restart || true
}

service_status() {
	if ${INITSCRIPT} status > /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
	${MAILMNG} --remove-handler --handler-name=kav-snd --handler-type=sender --handler-type-name=all --hook=before-remote
	${MAILMNG} --remove-handler --handler-name=kav-rcpt --handler-type=recipient --handler-type-name=all --hook=before-queue
	updates_off
}

service_on() {
	updates_off
	updates_on
	service_start
}

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

	if [ x"$mailname" == x"" ]; then usage; fi
	
	mailname_remove $mailname

	if [ x"$ht" != x"incoming" ]; then
		${MAILMNG} --add-handler --handler-name=kav-snd --handler-type=sender --handler-type-name=$mailname --priority=${HANDLER_PRIORITY} --hook=before-remote --context=$HANDLER_CONFIG --executable=${HANDLER_EXECUTABLE}
	fi

	if [ x"$ht" != x"outgoing" ]; then
		${MAILMNG} --add-handler --handler-name=kav-rcpt --handler-type=recipient --handler-type-name=$mailname --priority=${HANDLER_PRIORITY} --hook=before-queue --context=$HANDLER_CONFIG --executable=${HANDLER_EXECUTABLE}
	fi
}

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

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

remove_key() {
	rm ${KEYFILE}
}

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; break;;
	off)		service_off; break;;
	add)		mailname_add $2 $3; break;;
	remove)		mailname_remove $2; break;;
	setkey)		set_key; break;;
	removekey) 	remove_key; break;;
	start)		service_start; break;;
	restart)	service_restart; break;;
	stop)		service_stop; break;;
	status)		service_status; break;;	
	help|usage) 	usage;;
	*)		echo "Bad command $cmd"; usage;;
esac
