# Global maildrop filter file

# Uncomment this line to make maildrop default to ~/Maildir for
# delivery- this is where courier-imap (amongst others) will look.
#DEFAULT="$HOME/Maildir"
import DEBUG
import TEST
SHELL="/bin/bash"
SENDMAIL="/opt/cropswap/sendmail.sh"
DEBUGMAIL="/opt/cropswap/debug.sh"
MAILBOT="/opt/cropswap/mailbot.sh"
FILTERDIR="/opt/cropswap/filters"
RESPDIR="/opt/cropswap/responses"
MAILDROPDIR="/var/mail/maildrop"
DEBUG=($DEBUG != 0)
TEST=($TEST != 0)
if ($TEST)
{
   import MAILDROPDIR
}

UNDELIVERABLE=6
UNHANDLED=5
BADREQUEST=4
UNREGISTERED=3
UNSUBSCRIBED=2
FATAL=1

TO=""
REPLYTO=""
MAILGROUP=""
MAILGROUPALIAS=""

POSTMASTER="postmaster@localhost"
# uni-directional group
# From anyone -> organizers
# From organizers -> subscribed members
ORGANIZERGROUP="cropswap@shandan.one"
# bi-directional group
# From subscribed member -> other subscribed members
MEMBERGROUP="cropswap-members@shandan.one"

cc "|$DEBUGMAIL processing"

if ($FROM eq "")
{
   EXITCODE=$UNHANDLED
   # this should only be able to happen
   # when invoking maildrop on the cmdline
   exit
}

foreach /^(To|Cc):.*/
{
   ADDR=getaddr($MATCH)
   include "$FILTERDIR/$MEMBERGROUP"
   include "$FILTERDIR/$ORGANIZERGROUP"
   include "$FILTERDIR/$POSTMASTER"
   include "$FILTERDIR/subscriptions"
}

if ($FORMEMBER && $FORORGANIZER)
{
   EXITCODE=$BADREQUEST
   cc "|$DEBUGMAIL multiple-mail-group-set"
}

if ($MAILGROUP eq "")
{
   EXITCODE=$BADREQUEST
   cc "|$DEBUGMAIL no-mail-group-set"
}

if (!$CONTINUE)
{
   EXITCODE=$UNHANDLED
   cc "|$DEBUGMAIL no-continue"
}

if ($EXITCODE != 0)
{
   if ($TOPOSTASTER)
   {
      exit
   }
   else
   {
      RESP="$RESPDIR/$EXITCODE.html"
      to "|$MAILBOT"
   }
}


LISTDIR="$MAILDROPDIR/$MAILGROUP"
MLIST="$LISTDIR/mlist"
SLIST="$LISTDIR/slist"

DISPATCH=1
if ($FORPOSTMASTER)
{
   include "$FILTERDIR/$POSTMASTER"
}
else
{
   include "$FILTERDIR/$MAILGROUP"
}

EXITCODE=$UNHANDLED
cc "|$DEBUGMAIL unhandled"
# this should only be able to happen
# when invoking maildrop on the cmdline
exit