From 4024aae69fe08c0aa14a69a12d55ca2b7dd4a4ab Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 19 Apr 2014 23:11:00 +0000 Subject: move precheck to MDA namespace We will be combining common code between -learn and -mda --- lib/PublicInbox.pm | 56 -------------------------------------------------- lib/PublicInbox/MDA.pm | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 56 deletions(-) delete mode 100644 lib/PublicInbox.pm create mode 100644 lib/PublicInbox/MDA.pm (limited to 'lib') diff --git a/lib/PublicInbox.pm b/lib/PublicInbox.pm deleted file mode 100644 index cfa9d4bf..00000000 --- a/lib/PublicInbox.pm +++ /dev/null @@ -1,56 +0,0 @@ -# Copyright (C) 2013, Eric Wong and all contributors -# License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt) -package PublicInbox; -use strict; -use warnings; -use Email::Address; -use Date::Parse qw(strptime); -use constant MAX_SIZE => 1024 * 500; # same as spamc default - -# drop plus addressing for matching -sub __drop_plus { - my ($str_addr) = @_; - $str_addr =~ s/\+.*\@/\@/; - $str_addr; -} - -# do not allow Bcc, only Cc and To if recipient is set -sub precheck { - my ($klass, $filter, $recipient) = @_; - my $simple = $filter->simple; - my $mid = $simple->header("Message-ID"); - return 0 unless usable_str(length(''), $mid) && $mid =~ /\@/; - return 0 unless usable_str(length('u@h'), $filter->from); - return 0 unless usable_str(length(':o'), $simple->header("Subject")); - return 0 unless usable_date($simple->header("Date")); - return 0 if length($simple->as_string) > MAX_SIZE; - recipient_specified($filter, $recipient); -} - -sub usable_str { - my ($len, $str) = @_; - defined($str) && length($str) >= $len; -} - -sub usable_date { - my @t = eval { strptime(@_) }; - scalar @t; -} - -sub recipient_specified { - my ($filter, $recipient) = @_; - defined($recipient) or return 1; # for mass imports - my @recip = Email::Address->parse($recipient); - my $oaddr = __drop_plus($recip[0]->address); - $oaddr = qr/\b\Q$oaddr\E\b/i; - my @to = Email::Address->parse($filter->to); - my @cc = Email::Address->parse($filter->cc); - foreach my $addr (@to, @cc) { - if (__drop_plus($addr->address) =~ $oaddr) { - return 1; - } - } - return 0; -} - -1; diff --git a/lib/PublicInbox/MDA.pm b/lib/PublicInbox/MDA.pm new file mode 100644 index 00000000..22879236 --- /dev/null +++ b/lib/PublicInbox/MDA.pm @@ -0,0 +1,56 @@ +# Copyright (C) 2013, Eric Wong and all contributors +# License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt) +package PublicInbox::MDA; +use strict; +use warnings; +use Email::Address; +use Date::Parse qw(strptime); +use constant MAX_SIZE => 1024 * 500; # same as spamc default + +# drop plus addressing for matching +sub __drop_plus { + my ($str_addr) = @_; + $str_addr =~ s/\+.*\@/\@/; + $str_addr; +} + +# do not allow Bcc, only Cc and To if recipient is set +sub precheck { + my ($klass, $filter, $recipient) = @_; + my $simple = $filter->simple; + my $mid = $simple->header("Message-ID"); + return 0 unless usable_str(length(''), $mid) && $mid =~ /\@/; + return 0 unless usable_str(length('u@h'), $filter->from); + return 0 unless usable_str(length(':o'), $simple->header("Subject")); + return 0 unless usable_date($simple->header("Date")); + return 0 if length($simple->as_string) > MAX_SIZE; + recipient_specified($filter, $recipient); +} + +sub usable_str { + my ($len, $str) = @_; + defined($str) && length($str) >= $len; +} + +sub usable_date { + my @t = eval { strptime(@_) }; + scalar @t; +} + +sub recipient_specified { + my ($filter, $recipient) = @_; + defined($recipient) or return 1; # for mass imports + my @recip = Email::Address->parse($recipient); + my $oaddr = __drop_plus($recip[0]->address); + $oaddr = qr/\b\Q$oaddr\E\b/i; + my @to = Email::Address->parse($filter->to); + my @cc = Email::Address->parse($filter->cc); + foreach my $addr (@to, @cc) { + if (__drop_plus($addr->address) =~ $oaddr) { + return 1; + } + } + return 0; +} + +1; -- cgit v1.2.3-24-ge0c7