#!/bin/bash
#
# creates a new prospect user in zimbra
#

. /etc/clouddirectory/provisioner.cf

WELCOME_TEMPLATES=/etc/clouddirectory/welcome-mail

die() {
	echo "$*" >&2
	exit 1
}

error() {
	echo "ERROR: $*" >&2
}

debug() {
	if [ "$PROVISIONER_LOGLEVEL" == "DEBUG" ] || [ "$PROVISIONER_LOGLEVEL" == "INFO" ]; then
		echo "DEBUG: $*" 2>&2
	fi
}

info() {
	if [ "$PROVISIONER_LOGLEVEL" == "INFO" ]; then
		echo "INFO: $*" 2>&2
	fi
}

push_welcome() {
	scp -q $WELCOME_TEMPLATES/*.eml $PROVISIONER_MAILBOX_USER@$PROVISIONER_MAILBOX_IP:$PROVISIONER_MAILBOX_TMP
}

if [ ! "$PROVISIONER_LOGLEVEL" ]; then
	info "loglevel not set. assuming INFO"
	export PROVISIONER_LOGLEVEL=INFO
fi

[ "$PROVISIONER_MAILBOX_HOST" ] || die "missing config: PROVISIONER_MAILBOX_HOST"
[ "$PROVISIONER_MAILBOX_IP"   ] || die "missing config: PROVISIONER_MAILBOX_IP"
[ "$PROVISIONER_MAILBOX_USER" ] || die "missing config: PROVISIONER_MAILBOX_USER"
[ "$PROVISIONER_PR_CLASS"     ] || die "missing config: PROVISIONER_PR_CLASS"

process_output() {
	while read line ; do
		echo "PROV: $line"
	done
}

call_zmprov() {
	debug "Calling remote zmprov on $PROVISIONER_MAILBOX_IP: $*"
	BASENAME=`basename "$1"`

	if ssh $PROVISIONER_MAILBOX_USER@$PROVISIONER_MAILBOX_IP zmprov "$@" 2>&1 ; then
		debug "DONE"
		return 0
	else
		error "Remote zmprov call failed"
		return 1
	fi
}

call_zmprov_batch() {
	debug "Running zmprov batch on $1 to $PROVISIONER_MAILBOX_IP"
	BASENAME=`basename "$1"`
	if ! scp -q "$1" "zimbra@$PROVISIONER_MAILBOX_IP:/tmp/ZMPROV.$BASENAME" ; then
		error "Failed pushing zmprov batch to server"
		return 1
	fi

	if (ssh $PROVISIONER_MAILBOX_USER@$PROVISIONER_MAILBOX_IP zmprov -f /tmp/ZMPROV.$BASENAME 2>&1) | logger -t "zmprov"; then
#		ssh $PROVISIONER_MAILBOX_USER@$PROVISIONER_MAILBOX_IP rm -f /tmp/ZMPROV.$BASENAME
#		rm -f $1
		debug "DONE"
		return 0
	else
		error "Provisioning batch failed: $1"
		return 1
	fi
}

rec_username="$1"
rec_firstname="$2"
rec_lastname="$3"
rec_initpass="$4"
rec_locale="$5"

if [ ! "$rec_initpass" ]; then
	echo "$0 <username> <firstname> <lastname> <init-password>" >&2
	exit 1
fi

push_welcome

TMPFILE=`mktemp /tmp/prospect-XXXXXX.zmprov`
(
	echo "createAccount \"$rec_username\" \"$rec_initpass\" givenName \"$rec_firstname\" sn \"$rec_lastname\" displayName \"$rec_lastname, $rec_firstname (prospect)\" title \"PROSPECT\" zimbraMailHost \"$PROVISIONER_MAILBOX_HOST\" zimbraPrefLocale \"$rec_locale\""
	echo "setAccountCOS \"$rec_username\" \"$PROVISIONER_PR_CLASS\""
	echo "selectMailbox \"$rec_username\" addMessage '/INBOX' \"$PROVISIONER_MAILBOX_TMP/$PROVISIONER_PR_CLASS.eml\""
) > $TMPFILE


if call_zmprov_batch "$TMPFILE" ; then
	debug "Provisioning OKAY: $rec_username"
	exit 0
else
	exit 1
fi
