Merge branch 'v2.0' into 1783
This commit is contained in:
commit
0b567d6c15
|
@ -227,9 +227,11 @@ sub save {
|
|||
Lemonldap::NG::Handler::Main->tsv->{cipher}->encrypt(time);
|
||||
};
|
||||
print STDERR "$@\n" if ($@);
|
||||
$req->content( to_json( $self->{data} ) );
|
||||
my $content = to_json( $self->{data} );
|
||||
$req->content($content);
|
||||
delete $self->{data}->{__secret};
|
||||
$req->header( 'Content-Type' => 'application/json' );
|
||||
$req->header( 'Content-Type' => 'application/json' );
|
||||
$req->header( 'Content-Length' => length($content) );
|
||||
my $resp = $self->ua->request($req);
|
||||
|
||||
if ( $resp->is_success ) {
|
||||
|
@ -267,23 +269,47 @@ sub delete {
|
|||
return ( $resp->is_success ? 1 : 0 );
|
||||
}
|
||||
|
||||
sub searchOn {
|
||||
my ( $class, $args, $selectField, $value, @fields ) = @_;
|
||||
return $class->_getAll( "all=1&search=$selectField,$value",
|
||||
$args, ( @fields ? \@fields : () ) );
|
||||
}
|
||||
|
||||
## @method get_key_from_all_sessions()
|
||||
# Not documented.
|
||||
sub get_key_from_all_sessions() {
|
||||
my ( $class, $args, $data ) = @_;
|
||||
my $res = $class->_getAll( 'all=1', $args, $data );
|
||||
return unless $res;
|
||||
|
||||
if ( ref($data) eq 'CODE' ) {
|
||||
my $r;
|
||||
foreach my $k ( keys %$res ) {
|
||||
my $tmp = &$data( $res->{$k}, $k );
|
||||
$r->{$k} = $tmp if ( defined($tmp) );
|
||||
}
|
||||
$res = $r;
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
sub _getAll {
|
||||
my ( $class, $query, $args, $data ) = @_;
|
||||
my $self = bless {}, $class;
|
||||
foreach (qw(baseUrl user password realm lwpOpts lwpSslOpts kind)) {
|
||||
$self->{$_} = $args->{$_};
|
||||
}
|
||||
$self->{data} = { data => ( ref($data) eq 'CODE' ? undef : $data ) };
|
||||
die('baseUrl is required') unless ( $self->{baseUrl} );
|
||||
my $req = HTTP::Request->new( POST => $self->base . '?all=1' );
|
||||
$self->{data} = { data => ( ref($data) eq 'CODE' ? {} : $data ) };
|
||||
my $req = HTTP::Request->new( POST => $self->base . "?$query" );
|
||||
eval {
|
||||
$self->{data}->{__secret} =
|
||||
Lemonldap::NG::Handler::Main->tsv->{cipher}->encrypt(time);
|
||||
};
|
||||
print STDERR "$@\n" if ($@);
|
||||
$req->content( to_json( $self->{data} ) );
|
||||
my $content = to_json( $self->{data} );
|
||||
$req->content($content);
|
||||
$req->header( 'Content-Length' => length($content) );
|
||||
delete $self->{data}->{__secret};
|
||||
$req->header( 'Content-Type' => 'application/json' );
|
||||
my $resp = $self->ua->request($req);
|
||||
|
@ -294,18 +320,10 @@ sub get_key_from_all_sessions() {
|
|||
if ($@) {
|
||||
die "Bad REST response: $@";
|
||||
}
|
||||
if ( ref($data) eq 'CODE' ) {
|
||||
my $r;
|
||||
foreach my $k ( keys %$res ) {
|
||||
my $tmp = &$data( $res->{$k}, $k );
|
||||
$r->{$k} = $tmp if ( defined($tmp) );
|
||||
}
|
||||
$res = $r;
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
else {
|
||||
print STDERR "REST server returns " . $resp->status_line;
|
||||
print STDERR "REST server returns " . $resp->status_line . "\n";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ ok( @values == 2, 'Found 2 service header values' )
|
|||
count(2);
|
||||
|
||||
diag 'Waiting';
|
||||
sleep 2;
|
||||
sleep 1;
|
||||
|
||||
ok(
|
||||
$res = $client->_get(
|
||||
|
@ -82,7 +82,7 @@ ok( @values == 2, 'Found 2 service header values' )
|
|||
count(2);
|
||||
|
||||
diag 'Waiting';
|
||||
sleep 1;
|
||||
sleep 2;
|
||||
|
||||
ok(
|
||||
$res = $client->_get(
|
||||
|
|
|
@ -160,7 +160,7 @@ sub authLogout {
|
|||
sub deleteSession {
|
||||
my ( $self, $req ) = @_;
|
||||
if ( my $id = $req->id || $req->userData->{_session_id} ) {
|
||||
my $apacheSession = $self->getApacheSession( $req->id );
|
||||
my $apacheSession = $self->getApacheSession( $id );
|
||||
unless ($apacheSession) {
|
||||
$self->logger->debug("Session $id already deleted");
|
||||
return PE_OK;
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
# * GET /sessions/<type>/<session-id>/<key> : get a session key value
|
||||
# * GET /sessions/<type>/<session-id>/[k1,k2] : get some session key value
|
||||
# * POST /sessions/<type> : create a session
|
||||
# * POST /sessions/<type>?all=1 : get all sessions (needs a token)
|
||||
# * POST /sessions/<type>?all=1&search=uid,dwho: search all sessions where uid=dwho (needs a token)
|
||||
# * PUT /sessions/<type>/<session-id> : update some keys
|
||||
# * DELETE /sessions/<type>/<session-id> : delete a session
|
||||
#
|
||||
|
@ -219,9 +221,20 @@ sub newSession {
|
|||
my $data = $infos->{data};
|
||||
my $opts = $self->conf->{globalStorageOptions} || {};
|
||||
$opts->{backend} = $self->conf->{globalStorage};
|
||||
my $sessions =
|
||||
Lemonldap::NG::Common::Apache::Session->get_key_from_all_sessions(
|
||||
$opts, $data );
|
||||
my $sessions;
|
||||
if ( my $query = $req->param('search') ) {
|
||||
my ( $field, @values ) = split /,/, $query;
|
||||
$sessions = Lemonldap::NG::Common::Apache::Session->searchOn(
|
||||
$opts, $field,
|
||||
join( ',', @values ),
|
||||
( $data ? @$data : () )
|
||||
);
|
||||
}
|
||||
else {
|
||||
$sessions =
|
||||
Lemonldap::NG::Common::Apache::Session
|
||||
->get_key_from_all_sessions( $opts, $data );
|
||||
}
|
||||
return $self->p->sendJSONresponse( $req, $sessions );
|
||||
}
|
||||
my $session = $self->getApacheSession( $mod, $id, $infos, $force );
|
||||
|
|
|
@ -216,7 +216,7 @@
|
|||
"serviceProvidedBy":"Ce service est fourni par",
|
||||
"sessionsDeleted":"Les sessions suivantes ont été fermées",
|
||||
"sfaManager":"Gestionnaire 2ndFA",
|
||||
"spoofId":"Identifiant usurpé",
|
||||
"spoofId":"Identifiant simulé",
|
||||
"SSOSessionInactive":"Session SSO inactive",
|
||||
"stayConnected": "Rester connecté sur cet appareil",
|
||||
"submit":"Envoyer",
|
||||
|
|
|
@ -179,19 +179,66 @@ ok(
|
|||
'Search all sessions'
|
||||
);
|
||||
|
||||
my ( $c1, $c2 ) = ( 0, 0 );
|
||||
if ( ok( ref($res) eq 'HASH', ' Result is an hash' ) ) {
|
||||
my $tmp = 1;
|
||||
foreach ( keys %$res ) {
|
||||
unless ( $res->{$_}->{_session_id}, ' session id exists' ) {
|
||||
$c1++;
|
||||
unless ( $res->{$_}->{_session_id} ) {
|
||||
$tmp = 0;
|
||||
diag "Bad session:\n" . Dumper( $res->{$_} );
|
||||
}
|
||||
}
|
||||
ok( $c1, " Found $c1 sessions" );
|
||||
ok( $tmp, ' All sessions are valid' );
|
||||
count(1);
|
||||
count(2);
|
||||
}
|
||||
count(3);
|
||||
|
||||
ok($res=Lemonldap::NG::Common::Apache::Session::REST->get_key_from_all_sessions( {baseUrl => 'http://auth.idp.com/sessions/global/'},sub{return 'a'}),'Search all sessions with a code');
|
||||
|
||||
if ( ok( ref($res) eq 'HASH', ' Result is an hash' ) ) {
|
||||
my $tmp = 1;
|
||||
my $c = 0;
|
||||
foreach ( keys %$res ) {
|
||||
$c++;
|
||||
unless ( $res->{$_} eq 'a' ) {
|
||||
$tmp = 0;
|
||||
diag "Bad session:\n" . Dumper( $res->{$_} );
|
||||
}
|
||||
}
|
||||
ok( $c == $c1, " Found the same count") or explain($c,$c1);
|
||||
ok( $tmp, ' All sessions are valid' );
|
||||
count(2);
|
||||
}
|
||||
count(2);
|
||||
|
||||
ok(
|
||||
$res = Lemonldap::NG::Common::Apache::Session::REST->searchOn( {
|
||||
baseUrl => 'http://auth.idp.com/sessions/global/'
|
||||
},
|
||||
'uid', 'dwho'
|
||||
),
|
||||
'Search dwho sessions'
|
||||
);
|
||||
if ( ok( ref($res) eq 'HASH', ' Result is an hash' ) ) {
|
||||
my $tmp = 1;
|
||||
foreach ( keys %$res ) {
|
||||
$c2++;
|
||||
unless ( $res->{$_}->{_session_id} ) {
|
||||
$tmp = 0;
|
||||
diag "Bad session:\n" . Dumper( $res->{$_} );
|
||||
}
|
||||
}
|
||||
ok( $c2, " Found $c2 sessions" );
|
||||
ok( $tmp, ' All sessions are valid' );
|
||||
count(2);
|
||||
}
|
||||
|
||||
ok( $c2 < $c1,
|
||||
'searchOn() count is lower than get_key_from_all_sessions() count' );
|
||||
count(3);
|
||||
|
||||
# Del new session
|
||||
ok(
|
||||
$res = $issuer->app->( {
|
||||
|
|
Loading…
Reference in New Issue
Block a user