#!/bin/sh

pod() {
cat <<EOF
=head1 NAME

rewritefishurl - Replace URLs in spam-mail by a redirect to visnet.uvt.nl

=head1 SYNOPSIS

Rewritefishurl is a content filter for Postfix that rewrites every URL in the
mail to point to our anti-phishing-page if SpamAssassin classified the mail
as spam.

=head1 CONFIGURATION

Zet de volgende regels in je Postfix master.cf:

    rewritefishurl    unix  -       n       n       -       10      pipe
        flags=Rq user=rewritefishurl null_sender=
        argv=/usr/bin/rewritefishurl -f \${sender} -- \${recipient}

Voeg dan een content_filter toe aan het juist transport. Dit content_filter
moet pas na SpamAssassin draaien, bv de queue waarnaar Amavis  mail aflevert:

    -o content_filter=myfirstfilter:dummy

=head1 AUTHOR

Casper Gielen 2015 cgielen@uvt.nl

=head1 ID

# $URL$
# $ID$
=cut
EOF
}

man() {
	pod | pod2man --name rewritefishurl > rewritefishurl.1
}

help() {
	pod | pod2text
}

# Simple shell-based filter. It is meant to be invoked as follows:
#       /path/to/script -f sender recipients...

# Localize these. The -G option does nothing before Postfix 2.3.
INSPECT_DIR=/var/lib/rewritefishurl/

# Sendmail command.
# NEVER NEVER NEVER use "-t" here.
SENDMAIL="/usr/sbin/sendmail -G -i"

# only activate if SpamAssassin assigned at least this score 
SPAMSCORE="20"

# URL to redirect spam-URLs to
VISNET="https://visnet.uvt.nl/"

CFG="/etc/rewritefishurl.cfg"
[ -e "$CFG" ] && . "$CFG"


# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15

case "$1" in
	--help) help; exit 0 ;;
	--man) man; exit 0 ;;
	'') help; exit 1 ;;
	--*) help; exit 1 ;;
esac

# Start processing.
cd $INSPECT_DIR || {
    echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }

cat >in.$$ || { 
    echo Cannot save mail to file; exit $EX_TEMPFAIL; }

score=$(awk '/^X-Spam-Score: /{print $2}' in.$$ | cut -d '.' -f 1)
if [ "$score" -gt "20" ]; then
	sed -i 's#\(http[s]*://[^ ">\\\x27]*\)#http://visnet.uvt.nl/?orig_uri=\1#g' in.$$
fi

$SENDMAIL "$@" <in.$$

exit $?
