diff options
author | dakkar <dakkar@thenautilus.net> | 2016-06-16 17:29:48 +0100 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2016-06-16 18:03:06 +0100 |
commit | 437d3a4eba02ef4dcafe062510cf2f428bbaa1db (patch) | |
tree | 15806b5298a81574e0e4caed6d589aa0b99b2008 /lib | |
parent | test Subscriber (diff) | |
download | Sietima-437d3a4eba02ef4dcafe062510cf2f428bbaa1db.tar.gz Sietima-437d3a4eba02ef4dcafe062510cf2f428bbaa1db.tar.bz2 Sietima-437d3a4eba02ef4dcafe062510cf2f428bbaa1db.zip |
role: drop mail from non-subscribers
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Sietima.pm | 4 | ||||
-rw-r--r-- | lib/Sietima/Role/SubscriberOnly.pm | 23 | ||||
-rw-r--r-- | lib/Sietima/Role/SubscriberOnly/Drop.pm | 9 |
3 files changed, 36 insertions, 0 deletions
diff --git a/lib/Sietima.pm b/lib/Sietima.pm index 2049d2c..fbf0566 100644 --- a/lib/Sietima.pm +++ b/lib/Sietima.pm @@ -14,6 +14,8 @@ use Email::Sender; use Email::Address; use namespace::clean; +with 'MooX::Traits'; + has return_path => ( isa => Address, is => 'ro', @@ -79,4 +81,6 @@ sub send_message { return; } +sub _trait_namespace { 'Sietima::Role' } + 1; diff --git a/lib/Sietima/Role/SubscriberOnly.pm b/lib/Sietima/Role/SubscriberOnly.pm new file mode 100644 index 0000000..4dcb66c --- /dev/null +++ b/lib/Sietima/Role/SubscriberOnly.pm @@ -0,0 +1,23 @@ +package Sietima::Role::SubscriberOnly; +use Moo::Role; +use Email::Address; +use List::AllUtils qw(any); +use namespace::clean; + +requires 'munge_mail_from_non_subscriber'; + +around munge_mail => sub { + my ($orig,$self,$mail) = @_; + + my $from = (Email::Address->parse( + $mail->header_str('from'), + ))[0]->address; + if ( any { $_->address eq $from } @{$self->subscribers} ) { + $self->$orig($mail); + } + else { + $self->munge_mail_from_non_subscriber($mail); + } +}; + +1; diff --git a/lib/Sietima/Role/SubscriberOnly/Drop.pm b/lib/Sietima/Role/SubscriberOnly/Drop.pm new file mode 100644 index 0000000..91354e5 --- /dev/null +++ b/lib/Sietima/Role/SubscriberOnly/Drop.pm @@ -0,0 +1,9 @@ +package Sietima::Role::SubscriberOnly::Drop; +use Moo::Role; +use namespace::clean; + +with 'Sietima::Role::SubscriberOnly'; + +sub munge_mail_from_non_subscriber { } + +1; |