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);
|
||||
|
||||
our $VERSION = '0.1';
|
||||
our $VERSION = '0.11';
|
||||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
|
@ -93,6 +93,10 @@ use Lemonldap::NG::Handler::SharedConf qw(:locationRules);
|
|||
|
||||
our @ISA = qw(Lemonldap::NG::Handler::SharedConf);
|
||||
|
||||
sub localInit {
|
||||
1;
|
||||
}
|
||||
|
||||
sub lmLog {
|
||||
my ( $self, $mess, $level ) = @_;
|
||||
$mess =~ s/^.*HASH[^:]*:/__PACKAGE__/e;
|
||||
|
|
|
@ -105,7 +105,7 @@ sub new {
|
|||
my ( $class, $args ) = @_;
|
||||
my $self = $class->SUPER::new($args)
|
||||
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";
|
||||
}
|
||||
eval "use $globalStorage";
|
||||
|
@ -191,11 +191,11 @@ sub process {
|
|||
)
|
||||
{
|
||||
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} } ) {
|
||||
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} } ) {
|
||||
print "<li><span onclick=\"display('$session->{id}');\">"
|
||||
print "<li id=\"di$session->{id}\"><span onclick=\"display('$session->{id}');\">"
|
||||
. localtime( $session->{_utime} )
|
||||
. "</span></li>";
|
||||
}
|
||||
|
@ -226,7 +226,7 @@ sub process {
|
|||
$self->start("IP : $req");
|
||||
$self->window("$req");
|
||||
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} } ) {
|
||||
$self->ajaxNode(
|
||||
$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
|
||||
elsif ( my $uid = $self->param('uid') ) {
|
||||
my $byIp;
|
||||
|
@ -351,9 +378,9 @@ sub process {
|
|||
}
|
||||
);
|
||||
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} } ) {
|
||||
print "<li><span onclick=\"display('$session->{id}');\">"
|
||||
print "<li id=\"uid$session->{id}\"><span onclick=\"display('$session->{id}');\">"
|
||||
. localtime( $session->{_utime} )
|
||||
. "</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
|
||||
else {
|
||||
my ( $byUid, $count );
|
||||
|
@ -490,6 +549,7 @@ sub window {
|
|||
my $root = shift;
|
||||
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} . '?ipclasses=1">Réseaux</a></td>
|
||||
<td><a href="'
|
||||
. $ENV{SCRIPT_NAME} . '?doubleIp=1">Utilisateurs multi-IP</a></td>
|
||||
<td><form action="'
|
||||
|
|
|
@ -86,7 +86,7 @@ my $tmp = $conf->{globalStorage};
|
|||
eval "use $tmp";
|
||||
die $@ if ($@);
|
||||
|
||||
$conf->{globalStorageOptions}->{timeout} ||= 7200;
|
||||
$conf->{timeout} ||= 7200;
|
||||
|
||||
my @t = $tmp->get_all_sessions( $conf->{globalStorageOptions} );
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user