aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2016-06-16 17:29:48 +0100
committerdakkar <dakkar@thenautilus.net>2016-06-16 18:03:06 +0100
commit437d3a4eba02ef4dcafe062510cf2f428bbaa1db (patch)
tree15806b5298a81574e0e4caed6d589aa0b99b2008 /lib
parenttest Subscriber (diff)
downloadSietima-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.pm4
-rw-r--r--lib/Sietima/Role/SubscriberOnly.pm23
-rw-r--r--lib/Sietima/Role/SubscriberOnly/Drop.pm9
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;