Mail-MtPolicyd
view release on metacpan or search on metacpan
lib/Mail/MtPolicyd/AddressList.pm view on Meta::CPAN
package Mail::MtPolicyd::AddressList;
use Moose;
use namespace::autoclean;
our $VERSION = '2.05'; # VERSION
# ABSTRACT: a class for IP address lists
use NetAddr::IP;
has '_localhost_addr' => ( is => 'ro', isa => 'ArrayRef[NetAddr::IP]',
lazy => 1,
default => sub {
return [ map { NetAddr::IP->new( $_ ) }
( '127.0.0.0/8', '::ffff:127.0.0.0/104', '::1' ) ];
},
);
has 'list' => (
is => 'ro', isa => 'ArrayRef[NetAddr::IP]', lazy => 1,
default => sub { [] },
traits => [ 'Array' ],
handles => {
'add' => 'push',
'is_empty' => 'is_empty',
'count' => 'count',
},
);
sub add_localhost {
my $self = shift;
$self->add( @{$self->_localhost_addr} );
return;
}
sub add_string {
my ( $self, @strings ) = @_;
my @addr_strings = map {
split( /\s*[, ]\s*/, $_ )
} @strings;
my @addr = map {
NetAddr::IP->new( $_ );
} @addr_strings;
$self->add( @addr );
return;
}
sub match {
my ( $self, $addr ) = @_;
if( grep { $_->contains( $addr ) } @{$self->list} ) {
return 1;
}
return 0;
}
sub match_string {
my ( $self, $string ) = @_;
my $addr = NetAddr::IP->new( $string );
return( $self->match( $addr ) );
}
sub as_string {
my $self = shift;
return join(',', map { $_->cidr } @{$self->list});
}
__PACKAGE__->meta->make_immutable;
1;
__END__
( run in 0.474 second using v1.01-cache-2.11-cpan-5a3173703d6 )