diff options
author | dakkar <dakkar@thenautilus.net> | 2016-06-19 17:13:22 +0100 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2016-06-19 17:16:28 +0100 |
commit | 274617a10bdd958d7e0da3048ce62fb87bfd36a6 (patch) | |
tree | 2d3ccfd8453900bd94328241db779afbed9423d9 /lib | |
parent | role: moderate mail from non-subscribers (diff) | |
download | Sietima-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.pm | 6 | ||||
-rw-r--r-- | lib/Sietima/Subscriber.pm | 24 |
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; |