aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2016-06-19 17:13:22 +0100
committerdakkar <dakkar@thenautilus.net>2016-06-19 17:16:28 +0100
commit274617a10bdd958d7e0da3048ce62fb87bfd36a6 (patch)
tree2d3ccfd8453900bd94328241db779afbed9423d9 /lib
parentrole: moderate mail from non-subscribers (diff)
downloadSietima-274617a10bdd958d7e0da3048ce62fb87bfd36a6.tar.gz
Sietima-274617a10bdd958d7e0da3048ce62fb87bfd36a6.tar.bz2
Sietima-274617a10bdd958d7e0da3048ce62fb87bfd36a6.zip
::Subscriber now supports aliases
and has a ->match method
Diffstat (limited to 'lib')
-rw-r--r--lib/Sietima/Role/SubscriberOnly.pm6
-rw-r--r--lib/Sietima/Subscriber.pm24
2 files changed, 25 insertions, 5 deletions
diff --git a/lib/Sietima/Role/SubscriberOnly.pm b/lib/Sietima/Role/SubscriberOnly.pm
index 98c02a6..644f2ef 100644
--- a/lib/Sietima/Role/SubscriberOnly.pm
+++ b/lib/Sietima/Role/SubscriberOnly.pm
@@ -11,11 +11,9 @@ our $let_it_pass=0;
around munge_mail => sub {
my ($orig,$self,$mail) = @_;
- my $from = (Email::Address->parse(
- $mail->header_str('from'),
- ))[0]->address;
+ my ($from) = Email::Address->parse( $mail->header_str('from') );
if ( $let_it_pass or
- any { $_->address eq $from } @{$self->subscribers} ) {
+ any { $_->match($from) } @{$self->subscribers} ) {
$self->$orig($mail);
}
else {
diff --git a/lib/Sietima/Subscriber.pm b/lib/Sietima/Subscriber.pm
index 9954ffb..c223343 100644
--- a/lib/Sietima/Subscriber.pm
+++ b/lib/Sietima/Subscriber.pm
@@ -1,9 +1,11 @@
package Sietima::Subscriber;
use 5.020;
use Moo;
-use Types::Standard qw(HashRef);
+use Types::Standard qw(ArrayRef HashRef Object);
+use Type::Params qw(compile);
use Sietima::Types qw(Address AddressFromStr);
use Email::Address;
+use List::AllUtils qw(any);
use namespace::clean;
has raw_address => (
@@ -14,10 +16,30 @@ has raw_address => (
handles => [qw(address name original)],
);
+my $address_array = ArrayRef[
+ Address->plus_coercions(
+ AddressFromStr
+ )
+];
+has aliases => (
+ isa => $address_array,
+ is => 'lazy',
+ coerce => $address_array->coercion,
+);
+sub _build_aliases { +[] }
+
has prefs => (
isa => HashRef,
is => 'ro',
default => sub { +{} },
);
+sub match {
+ state $check = compile(Object,Address->plus_coercions(AddressFromStr));
+ my ($self,$addr) = $check->(@_);
+
+ return any { $addr->address eq $_->address }
+ $self->raw_address, @{$self->aliases};
+}
+
1;