* users for admin/subscriber realms are now banned if failed
to login X amount of times (UI/API).
* rework Redis connection and it's now a Catalyst plugin NGCP::Redis
accessed by $c->redis_get_connection({database => 19}), the connection
per database, per worker process is established only once and then
reused (with auto built-in reconnect support).
* remove Utils::Redis.pm as it does not have any code/logic anymore.
* ban values are taken from $config->{security}{login} as
- ban_enable: 1
- ban_expire_time: 3600 ban expire time in seconds
- max_attempts: 5
* if max_attempts set to 0, the ban functionality is disabled as it
requires to be at least 1 to work.
* upon successful login or ban, the failed attempts counter is removed
* the failed attempts counter is also removed automatically with the
expire time equals "ban_expire_time" or otherwise 3600 seconds.
* user bans are logged into panel.log
* banned user receives exactly the same return page/codes as per
invalid logic.
Change-Id: I05cc68c623ee289488fc64f1af50527004dcaae1
mr13.0
parent
d9f283cbc8
commit
60fa23cb68
@ -0,0 +1,31 @@
|
||||
package Catalyst::Plugin::NGCP::Redis;
|
||||
use strict;
|
||||
use warnings;
|
||||
use MRO::Compat;
|
||||
use Redis;
|
||||
|
||||
my $conn = {};
|
||||
|
||||
sub redis_get_connection {
|
||||
my ($c, $params) = @_;
|
||||
|
||||
my $db = $params->{database} // return;
|
||||
my $redis;
|
||||
$redis = $conn->{$db} // do {
|
||||
$redis = Redis->new(
|
||||
server => $c->config->{redis}->{central_url},
|
||||
reconnect => 10, every => 500000, # 500ms
|
||||
cnx_timeout => 3,
|
||||
);
|
||||
unless ($redis) {
|
||||
$c->log->error("Failed to connect to central redis url " . $c->config->{redis}->{central_url});
|
||||
return;
|
||||
}
|
||||
$redis->select($params->{database});
|
||||
$conn->{$db} = $redis;
|
||||
};
|
||||
|
||||
return $redis;
|
||||
}
|
||||
|
||||
1;
|
||||
@ -1,23 +0,0 @@
|
||||
package NGCP::Panel::Utils::Redis;
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use Redis;
|
||||
|
||||
sub get_redis_connection {
|
||||
my ($c, $params) = @_;
|
||||
my $redis = Redis->new(
|
||||
server => $c->config->{redis}->{central_url},
|
||||
reconnect => 10, every => 500000, # 500ms
|
||||
cnx_timeout => 3,
|
||||
);
|
||||
unless ($redis) {
|
||||
$c->log->error("Failed to connect to central redis url " . $c->config->{redis}->{central_url});
|
||||
return;
|
||||
}
|
||||
$redis->select($params->{database});
|
||||
return $redis;
|
||||
}
|
||||
|
||||
1;
|
||||
Loading…
Reference in new issue