package Sietima::Role::SubscriberOnly;
use Moo::Role;
use Sietima::Policy;
use Email::Address;
use List::AllUtils qw(any);
use Types::Standard qw(Object CodeRef);
use Type::Params -sigs;
use namespace::clean;
our $VERSION = '1.1.0';
requires 'munge_mail_from_non_subscriber';
our $let_it_pass=0;
around munge_mail => sub ($orig,$self,$mail) {
my ($from) = Email::Address->parse( $mail->header_str('from') );
if ( $let_it_pass or
any { $_->match($from) } $self->subscribers->@* ) {
$self->$orig($mail);
}
else {
$self->munge_mail_from_non_subscriber($mail);
}
};
signature_for ignoring_subscriberonly => (
method => Object,
positional => [ CodeRef ],
);
sub ignoring_subscriberonly($self,$code) {
local $let_it_pass = 1;
return $code->($self);
}
1;
__END__