| Foorum documentation | Contained in the Foorum distribution. |
| Foorum documentation | Contained in the Foorum distribution. |
package Foorum::Controller::Admin::BanIP; use strict; use warnings; our $VERSION = '1.001000'; use parent 'Catalyst::Controller'; use Net::CIDR::Lite; sub auto : Private { my ( $self, $c ) = @_; # only administrator is allowed. site moderator is not allowed here unless ( $c->model('Policy')->is_admin( $c, 'site' ) ) { $c->forward( '/print_error', ['ERROR_PERMISSION_DENIED'] ); return 0; } return 1; } sub default : Private { my ( $self, $c ) = @_; $c->stash->{template} = 'admin/ban_ip/default.html'; my @cidr_ips = $c->model('DBIC')->resultset('BannedIp')->search()->all; foreach (@cidr_ips) { my $cidr = Net::CIDR::Lite->new; $cidr->add( $_->cidr_ip ); my @ip_ranges = $cidr->list_range; $_->{range} = join( ' | ', @ip_ranges ); } $c->stash->{cidr_ips} = \@cidr_ips; } sub remove : Local { my ( $self, $c ) = @_; my $ip_id = $c->req->param('ip_id'); return $c->res->redirect('/admin/banip?st=301') unless ($ip_id); my $st = $c->model('DBIC')->resultset('BannedIp') ->search( { ip_id => $ip_id, } )->delete; my $cache_key = 'global|banned_ip'; $c->cache->reomove($cache_key); $c->res->redirect('/admin/banip?st=1'); } sub add : Local { my ( $self, $c ) = @_; my $from_ip = $c->req->param('from_ip'); my $end_ip = $c->req->param('end_ip'); return $c->res->redirect('/admin/banip?st=301') unless ( $from_ip and $end_ip ); my $cidr = Net::CIDR::Lite->new; $cidr->add_range("$from_ip - $end_ip"); my @cidr_list = $cidr->list; foreach my $cidr (@cidr_list) { $c->model('DBIC')->resultset('BannedIp')->create( { cidr_ip => $cidr, time => time(), } ); } my $cache_key = 'global|banned_ip'; $c->cache->remove($cache_key); return $c->res->redirect('/admin/banip?st=1'); } 1; __END__