112 lines
3.2 KiB
112 lines
3.2 KiB
package NGCP::Panel::Controller::Security;
|
|
use NGCP::Panel::Utils::Generic qw(:all);
|
|
use Sipwise::Base;
|
|
|
|
use parent 'Catalyst::Controller';
|
|
|
|
use NGCP::Panel::Form;
|
|
|
|
use NGCP::Panel::Utils::Security;
|
|
use NGCP::Panel::Utils::Navigation;
|
|
use NGCP::Panel::Utils::DateTime;
|
|
|
|
sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) {
|
|
my ($self, $c) = @_;
|
|
$c->log->debug(__PACKAGE__ . '::auto');
|
|
NGCP::Panel::Utils::Navigation::check_redirect_chain(c => $c);
|
|
return 1;
|
|
}
|
|
|
|
sub root :PathPart('/') :CaptureArgs(0) {
|
|
my ( $self, $c ) = @_;
|
|
}
|
|
|
|
sub base :Chained('/') :PathPart('security') :CaptureArgs(0) {
|
|
my ( $self, $c ) = @_;
|
|
|
|
$c->stash->{bannedips_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
|
|
{ name => "ip", search => 1, title => $c->loc("IP") },
|
|
]);
|
|
|
|
$c->stash->{bannedusers_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
|
|
{ name => "username", search => 1, title => $c->loc("User") },
|
|
{ name => "auth_count", title => $c->loc("Fail Count") },
|
|
{ name => "last_auth", search => 1, title => $c->loc("Last Attempt") },
|
|
]);
|
|
$c->stash(
|
|
template => 'security/list.tt',
|
|
);
|
|
}
|
|
|
|
sub security :Chained('base') :PathPart('') :Args(0) {
|
|
}
|
|
|
|
sub ip_list :Chained('base') :PathPart('ip') :Args(0) {
|
|
my ($self, $c) = @_;
|
|
my $ips = NGCP::Panel::Utils::Security::list_banned_ips($c);
|
|
|
|
NGCP::Panel::Utils::Datatables::process_static_data($c, $ips, $c->stash->{bannedips_dt_columns});
|
|
$c->detach($c->view('JSON'));
|
|
return;
|
|
}
|
|
|
|
sub user_list :Chained('base') :PathPart('user') :Args(0) {
|
|
my ($self, $c) = @_;
|
|
my $users = NGCP::Panel::Utils::Security::list_banned_users($c);
|
|
|
|
NGCP::Panel::Utils::Datatables::process_static_data($c, $users, $c->stash->{bannedusers_dt_columns});
|
|
$c->detach($c->view('JSON'));
|
|
return;
|
|
}
|
|
|
|
sub ip_base :Chained('/') :PathPart('security/ip') :CaptureArgs(1) {
|
|
my ( $self, $c, $ip ) = @_;
|
|
my $decoder = URI::Encode->new;
|
|
$c->stash->{ip} = $decoder->decode($ip);
|
|
}
|
|
|
|
sub ip_unban :Chained('ip_base') :PathPart('unban') :Args(0) {
|
|
my ( $self, $c ) = @_;
|
|
|
|
if ($c->user->read_only) {
|
|
$c->detach('/denied_page');
|
|
}
|
|
|
|
my $ip = $c->stash->{ip};
|
|
NGCP::Panel::Utils::Security::ip_unban($c, $ip);
|
|
NGCP::Panel::Utils::Message::info(
|
|
c => $c,
|
|
data => { ip => $ip },
|
|
desc => $c->loc('IP successfully unbanned'),
|
|
);
|
|
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/security'));
|
|
}
|
|
|
|
sub user_base :Chained('/') :PathPart('security/user') :CaptureArgs(1) {
|
|
my ( $self, $c, $user ) = @_;
|
|
my $decoder = URI::Encode->new;
|
|
$c->stash->{user} = $decoder->decode($user);
|
|
}
|
|
|
|
sub user_unban :Chained('user_base') :PathPart('unban') :Args(0) {
|
|
my ( $self, $c ) = @_;
|
|
|
|
if ($c->user->read_only) {
|
|
$c->detach('/denied_page');
|
|
}
|
|
|
|
my $user = $c->stash->{user};
|
|
NGCP::Panel::Utils::Security::user_unban($c, $user);
|
|
NGCP::Panel::Utils::Message::info(
|
|
c => $c,
|
|
data => { user => $user },
|
|
desc => $c->loc('User successfully unbanned'),
|
|
);
|
|
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/security'));
|
|
}
|
|
|
|
|
|
1;
|
|
|
|
# vim: set tabstop=4 expandtab:
|