LEMONLDAP::NG : * IP view in Manager/Sessions.pm
* Bug in CGI.pm : local cache was erased each time * Bug in purgeCentralCache : timeout was always 7200
This commit is contained in:
parent
a75e882741
commit
e42f1febef
@ -10,7 +10,7 @@ our @ISA = qw(CGI);
|
|||||||
|
|
||||||
use Lemonldap::NG::Handler::SharedConf qw(:all);
|
use Lemonldap::NG::Handler::SharedConf qw(:all);
|
||||||
|
|
||||||
our $VERSION = '0.1';
|
our $VERSION = '0.11';
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my $class = shift;
|
my $class = shift;
|
||||||
@ -93,6 +93,10 @@ use Lemonldap::NG::Handler::SharedConf qw(:locationRules);
|
|||||||
|
|
||||||
our @ISA = qw(Lemonldap::NG::Handler::SharedConf);
|
our @ISA = qw(Lemonldap::NG::Handler::SharedConf);
|
||||||
|
|
||||||
|
sub localInit {
|
||||||
|
1;
|
||||||
|
}
|
||||||
|
|
||||||
sub lmLog {
|
sub lmLog {
|
||||||
my ( $self, $mess, $level ) = @_;
|
my ( $self, $mess, $level ) = @_;
|
||||||
$mess =~ s/^.*HASH[^:]*:/__PACKAGE__/e;
|
$mess =~ s/^.*HASH[^:]*:/__PACKAGE__/e;
|
||||||
|
@ -105,7 +105,7 @@ sub new {
|
|||||||
my ( $class, $args ) = @_;
|
my ( $class, $args ) = @_;
|
||||||
my $self = $class->SUPER::new($args)
|
my $self = $class->SUPER::new($args)
|
||||||
or _abort( 'Unable to start ' . __PACKAGE__, 'See Apache logs for more' );
|
or _abort( 'Unable to start ' . __PACKAGE__, 'See Apache logs for more' );
|
||||||
foreach (qw(jqueryUri jquerySimpleTreeUri personnalCss imagePath)) {
|
foreach (qw(jqueryUri jquerySimpleTreeUri personnalCss imagePath protection)) {
|
||||||
$self->{$_} = $args->{$_}; # or print STDERR "Warning, $_ is not set, falling to default value\n";
|
$self->{$_} = $args->{$_}; # or print STDERR "Warning, $_ is not set, falling to default value\n";
|
||||||
}
|
}
|
||||||
eval "use $globalStorage";
|
eval "use $globalStorage";
|
||||||
@ -191,11 +191,11 @@ sub process {
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
last if ( ( keys %{ $byUid->{$uid} } ) == 1 );
|
last if ( ( keys %{ $byUid->{$uid} } ) == 1 );
|
||||||
print "<li class=\"closed\"><span>$uid</span><ul>";
|
print "<li id=\"di$uid\" class=\"closed\"><span>$uid</span><ul>";
|
||||||
foreach my $ip ( sort keys %{ $byUid->{$uid} } ) {
|
foreach my $ip ( sort keys %{ $byUid->{$uid} } ) {
|
||||||
print "<li class=\"open\" id=\"$ip\"><span>$ip</span><ul>";
|
print "<li class=\"open\" id=\"di$ip\"><span>$ip</span><ul>";
|
||||||
foreach my $session ( @{ $byUid->{$uid}->{$ip} } ) {
|
foreach my $session ( @{ $byUid->{$uid}->{$ip} } ) {
|
||||||
print "<li><span onclick=\"display('$session->{id}');\">"
|
print "<li id=\"di$session->{id}\"><span onclick=\"display('$session->{id}');\">"
|
||||||
. localtime( $session->{_utime} )
|
. localtime( $session->{_utime} )
|
||||||
. "</span></li>";
|
. "</span></li>";
|
||||||
}
|
}
|
||||||
@ -226,7 +226,7 @@ sub process {
|
|||||||
$self->start("IP : $req");
|
$self->start("IP : $req");
|
||||||
$self->window("$req");
|
$self->window("$req");
|
||||||
foreach my $ip ( sort keys %$byUid ) {
|
foreach my $ip ( sort keys %$byUid ) {
|
||||||
print "<li><span>$ip</span><ul>";
|
print "<li id=\"fi$ip\"><span>$ip</span><ul>";
|
||||||
foreach my $uid ( sort keys %{ $byUid->{$ip} } ) {
|
foreach my $uid ( sort keys %{ $byUid->{$ip} } ) {
|
||||||
$self->ajaxNode(
|
$self->ajaxNode(
|
||||||
$uid,
|
$uid,
|
||||||
@ -334,6 +334,33 @@ sub process {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Ajax request to see users by IP
|
||||||
|
elsif ( my $ip = $self->param('uidByIp') ) {
|
||||||
|
my $byUser;
|
||||||
|
print $self->header( -type => 'text/html; charset=utf8' );
|
||||||
|
$globalStorage->get_key_from_all_sessions(
|
||||||
|
$globalStorageOptions,
|
||||||
|
sub {
|
||||||
|
my $entry = shift;
|
||||||
|
my $id = shift;
|
||||||
|
if ( $entry->{ipAddr} eq $ip ) {
|
||||||
|
push @{ $byUser->{ $entry->{uid} } },
|
||||||
|
{ id => $id, _utime => $entry->{_utime} };
|
||||||
|
}
|
||||||
|
undef;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
foreach my $user (sort keys %$byUser) {
|
||||||
|
print "<li id=\"ip$user\"><span>$user</span><ul>";
|
||||||
|
foreach my $session ( @{ $byUser->{$user} } ) {
|
||||||
|
print "<li id=\"ip$session->{id}\"><span onclick=\"display('$session->{id}');\">"
|
||||||
|
. localtime( $session->{_utime} )
|
||||||
|
. "</span></li>";
|
||||||
|
}
|
||||||
|
print "</ul></li>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Ajax request to see connexions from a user
|
# Ajax request to see connexions from a user
|
||||||
elsif ( my $uid = $self->param('uid') ) {
|
elsif ( my $uid = $self->param('uid') ) {
|
||||||
my $byIp;
|
my $byIp;
|
||||||
@ -351,9 +378,9 @@ sub process {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
foreach my $ip ( sort keys %$byIp ) {
|
foreach my $ip ( sort keys %$byIp ) {
|
||||||
print "<li class=\"open\" id=\"$ip\"><span>$ip</span><ul>";
|
print "<li class=\"open\" id=\"uid$ip\"><span>$ip</span><ul>";
|
||||||
foreach my $session ( @{ $byIp->{$ip} } ) {
|
foreach my $session ( @{ $byIp->{$ip} } ) {
|
||||||
print "<li><span onclick=\"display('$session->{id}');\">"
|
print "<li id=\"uid$session->{id}\"><span onclick=\"display('$session->{id}');\">"
|
||||||
. localtime( $session->{_utime} )
|
. localtime( $session->{_utime} )
|
||||||
. "</span></li>";
|
. "</span></li>";
|
||||||
}
|
}
|
||||||
@ -387,6 +414,38 @@ sub process {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Display by IP classes
|
||||||
|
elsif ( $self->param('ipclasses') ) {
|
||||||
|
my $partial = $self->param('p') ? $self->param('p').'.' : '';
|
||||||
|
my $repartial = quotemeta($partial);
|
||||||
|
my ( $byIp, $count );
|
||||||
|
$globalStorage->get_key_from_all_sessions(
|
||||||
|
$globalStorageOptions,
|
||||||
|
sub {
|
||||||
|
my $entry = shift;
|
||||||
|
$entry->{ipAddr} =~ /^$repartial(\d+)/ or return undef;
|
||||||
|
$byIp->{$1}++;
|
||||||
|
$count++;
|
||||||
|
undef;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
# Ajax request to list ip subclasses
|
||||||
|
if ( $partial ) {
|
||||||
|
print $self->header( -type => 'text/html; charset=utf8' );
|
||||||
|
}
|
||||||
|
|
||||||
|
# Display by IP subclass
|
||||||
|
else {
|
||||||
|
$self->start("Active sessions ($count)");
|
||||||
|
$self->window("Sessions par réseaux <i><small>($count)</small></i>");
|
||||||
|
}
|
||||||
|
foreach my $ip ( sort {$a<=>$b} keys %$byIp ) {
|
||||||
|
$self->ajaxNode( "$partial$ip", "$partial$ip <i><small>($byIp->{$ip})</small></i>", ($partial!~/^\d+\.\d+\.\d+/?"ipclasses=1&p=$partial$ip":"uidByIp=$partial$ip"));
|
||||||
|
}
|
||||||
|
$self->end() unless($partial);
|
||||||
|
}
|
||||||
|
|
||||||
# Default display
|
# Default display
|
||||||
else {
|
else {
|
||||||
my ( $byUid, $count );
|
my ( $byUid, $count );
|
||||||
@ -490,6 +549,7 @@ sub window {
|
|||||||
my $root = shift;
|
my $root = shift;
|
||||||
print '<table border="0" width="100%"><tr style="text-align:center;">
|
print '<table border="0" width="100%"><tr style="text-align:center;">
|
||||||
<td><a href="' . $ENV{SCRIPT_NAME} . '">Sessions actives</a></td>
|
<td><a href="' . $ENV{SCRIPT_NAME} . '">Sessions actives</a></td>
|
||||||
|
<td><a href="' . $ENV{SCRIPT_NAME} . '?ipclasses=1">Réseaux</a></td>
|
||||||
<td><a href="'
|
<td><a href="'
|
||||||
. $ENV{SCRIPT_NAME} . '?doubleIp=1">Utilisateurs multi-IP</a></td>
|
. $ENV{SCRIPT_NAME} . '?doubleIp=1">Utilisateurs multi-IP</a></td>
|
||||||
<td><form action="'
|
<td><form action="'
|
||||||
|
@ -86,7 +86,7 @@ my $tmp = $conf->{globalStorage};
|
|||||||
eval "use $tmp";
|
eval "use $tmp";
|
||||||
die $@ if ($@);
|
die $@ if ($@);
|
||||||
|
|
||||||
$conf->{globalStorageOptions}->{timeout} ||= 7200;
|
$conf->{timeout} ||= 7200;
|
||||||
|
|
||||||
my @t = $tmp->get_all_sessions( $conf->{globalStorageOptions} );
|
my @t = $tmp->get_all_sessions( $conf->{globalStorageOptions} );
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user