Start REST client (#970)
This commit is contained in:
parent
d0350660e7
commit
35924c935e
83
lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/RESTProxy.pm
Normal file
83
lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/RESTProxy.pm
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
package Lemonldap::NG::Portal::Lib::SOAPProxy;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use JSON;
|
||||||
|
use Mouse;
|
||||||
|
use LWP::UserAgent;
|
||||||
|
use Lemonldap::NG::Portal::Main::Constants qw(PE_OK PE_ERROR PE_BADCREDENTIALS);
|
||||||
|
use Lemonldap::NG::Common::FormEncode;
|
||||||
|
|
||||||
|
our $VERSION = '2.0.0';
|
||||||
|
|
||||||
|
has ua => (
|
||||||
|
is => 'rw',
|
||||||
|
default => sub {
|
||||||
|
my $ua = LWP::UserAgent->new;
|
||||||
|
$ua->default_header( Accept => 'application/json' );
|
||||||
|
return $ua;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
# INITIALIZATION
|
||||||
|
|
||||||
|
sub init {
|
||||||
|
my ($self) = @_;
|
||||||
|
$self->conf->{remoteCookieName} ||= $self->conf->{cookieName};
|
||||||
|
|
||||||
|
unless ( defined $self->conf->{proxyAuthService} ) {
|
||||||
|
$self->error("Missing proxyAuthService parameter");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*authenticate = *getUser;
|
||||||
|
|
||||||
|
sub getUser {
|
||||||
|
my ( $self, $req ) = @_;
|
||||||
|
return PE_OK if ( $req->datas->{_proxyQueryDone} );
|
||||||
|
my $resp = $self->ua->post( $self->conf->{proxyAuthService},
|
||||||
|
{ user => $req->{user}, password => $req->datas->{password} } );
|
||||||
|
unless ( $resp->is_success ) {
|
||||||
|
$self->lmLog(
|
||||||
|
'Unable to query authentication service: ' . $resp->status_line,
|
||||||
|
'error' );
|
||||||
|
return PE_ERROR;
|
||||||
|
}
|
||||||
|
my $res = eval { JSON::from_json( $resp->content ) };
|
||||||
|
if ($@) {
|
||||||
|
$self->lmLog("Bad content: $@");
|
||||||
|
return PE_ERROR;
|
||||||
|
}
|
||||||
|
$req->datas->{_proxyQueryDone}++;
|
||||||
|
return ( $res->{result} ? PE_OK : PE_BADCREDENTIALS );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub setSessionInfo {
|
||||||
|
my ( $self, $req ) = @_;
|
||||||
|
return PE_OK if ( $req->datas->{_setSessionInfoDone} );
|
||||||
|
my $soap =
|
||||||
|
SOAP::Lite->proxy( $self->conf->{proxyAuthService} )
|
||||||
|
->uri('urn:Lemonldap/NG/Common/PSGI/SOAPService');
|
||||||
|
my $r = $soap->getAttributes( $req->datas->{_remoteId} );
|
||||||
|
if ( $r->fault ) {
|
||||||
|
$self->lmLog(
|
||||||
|
"Unable to query authentication service" . $r->fault->{faultstring},
|
||||||
|
'error'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
my $res = $r->result();
|
||||||
|
if ( $res->{error} ) {
|
||||||
|
$self->userError("Unable to get attributes for $self->{user} ");
|
||||||
|
return PE_ERROR;
|
||||||
|
}
|
||||||
|
foreach ( keys %{ $res->{attributes} } ) {
|
||||||
|
$req->{sessionInfo}->{$_} ||= $res->{attributes}->{$_}
|
||||||
|
unless (/^_/);
|
||||||
|
}
|
||||||
|
$req->datas->{_setSessionInfoDone}++;
|
||||||
|
PE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
# Auth/Proxy.pm and UserDB/Proxy.pm simple inheritance of this package
|
|
||||||
package Lemonldap::NG::Portal::Lib::SOAPProxy;
|
package Lemonldap::NG::Portal::Lib::SOAPProxy;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user