#!/bin/sh

. /etc/mailconfig

exit_failure(){
    mess=$1
    code_exit=$2
    echo "$mess";
    exit "$code_exit";
}

check_domain()
{
    mail=$1
    domain=`echo $mail | awk -F '@' '{ print $2 }'`
    [[ "$domain" =  `hostname` ]] || exit_failure "Bad domain " 1

}


check_alias()
{
    mail=$1
    aliases=$(grep -v  "$mail"  $ALIAS_FILE)
    echo "$aliases" |  grep -q "$mail"   &&  exit_failure "Address already exist in alias" 2 || true
}

check_app_mail()
{
    alias=$1
    grep -q "$alias" "$APP_MAIL"  &&  exit_failure "This e-mail address already exist in app mail" 2 || true
}


set_password()
{
    mail=$1
    password=$2
    cat $PASSWD_FILE | grep -w -v -e "$mail" > /tmp/passwd.tmp
    print "$mail":`encrypt "$password"` >> /tmp/passwd.tmp
    mv /tmp/passwd.tmp $PASSWD_FILE
}

add_mailbox()
{
    mail=$1
    cat $ALIAS_FILE | grep -w -v -e "$mail: vmail" > /tmp/virtuals.tmp
    print "$1: vmail" >> /tmp/virtuals.tmp
    mv /tmp/virtuals.tmp $ALIAS_FILE
}

delete_mail_account()
{
    mail=$1
    cat $PASSWD_FILE | grep -w -v -e "$mail" > /tmp/passwd.tmp
    mv /tmp/passwd.tmp $PASSWD_FILE
    cat $ALIAS_FILE | grep  -v  "$mail" >> /tmp/virtuals.tmp
    mv /tmp/virtuals.tmp $ALIAS_FILE
    # rm -fr repertoir mail.
}

usage(){
    print "This program ask 2 arguments : \n"
    print "For add or change password of mail account :\: "
    print "First is email with domain name of this host second is password \n:"
    print "\t$0 email-adresse 'password'\n"
    print "Example:\n\t $0 add example@`hostname` 'yourverysecurepassword' "

    print "For delete a mail account:\n"
    print "$0 del test@`hostname`"

    print "This script require root privilèges"
}

if [ `id -u` -ne 0 ]; then
    usage
    exit 4;
fi

if [ -z "$1" ]; then
    usage
    exit 3;
fi

if [ -z "$2" ]; then
    usage
    exit 3;
fi



case $1 in
    "del")
        check_domain "$2"
        delete_mail_account "$2"
        smtpctl update table passwd
        smtpctl update table virtuals
        ;;
    *)
        check_domain "$1"
        check_alias "$1"
        check_app_mail "$1"
        set_password "$1" "$2"
        add_mailbox "$1"
        smtpctl update table passwd
        smtpctl update table virtuals
       ;;
esac