package Foorum::ResultSet::BannedIp;
use strict;
use warnings;
our $VERSION = '1.001000';
use base 'DBIx::Class::ResultSet';
use Net::IP::Match::Regexp qw( create_iprange_regexp match_ip );
sub get {
my ($self) = @_;
my $schema = $self->result_source->schema;
my $cache = $schema->cache();
my $cache_key = 'global|banned_ip';
my $cache_data = $cache->get($cache_key);
return wantarray ? @{$cache_data} : $cache_data
if ( $cache_data and ref($cache_data) eq 'ARRAY' );
$cache_data = [];
my $rs = $schema->resultset('BannedIp')->search();
while ( my $rec = $rs->next ) {
push @{$cache_data}, $rec->cidr_ip;
}
$cache->set( $cache_key, $cache_data );
return wantarray ? @{$cache_data} : $cache_data;
}
sub is_ip_banned {
my ( $self, $ip ) = @_;
my @cidr_ips = $self->get();
if ( scalar @cidr_ips ) {
my $regexp = create_iprange_regexp(@cidr_ips);
if ( match_ip( $ip, $regexp ) ) {
return 1;
}
}
return 0;
}
1;