PE_OK
PE_ERROR
)
;
our
$VERSION
=
'2.17.0'
;
requires
qw(auth_id addUnauthRoute addAuthRoute auth_route)
;
has
InitCmd
=> (
is
=>
'ro'
,
default
=>
q@$self->p->setHiddenFormValue( $req, ajax_auth_token => 0, '', 0 )@
);
has
authott
=> (
is
=>
'rw'
,
lazy
=> 1,
default
=>
sub
{
my
$ott
=
$_
[0]->{p}->loadModule(
'Lemonldap::NG::Portal::Lib::OneTimeToken'
);
$ott
->cache(0);
return
$ott
;
}
);
around
'init'
=>
sub
{
my
$orig
=
shift
;
my
$self
=
shift
;
my
$route_name
=
'auth'
.
$self
->auth_id;
unless
(
$self
->p->unAuthRoutes->{GET}->{
$route_name
} ) {
$self
->addUnauthRoute(
$route_name
=>
'_auth_route'
,
[
'GET'
]
);
$self
->addAuthRoute(
$route_name
=>
'_auth_route'
,
[
'GET'
]
);
}
return
$self
->
$orig
();
};
sub
_auth_route {
my
(
$self
,
$req
,
@path
) =
@_
;
$req
->steps( [ @{
$self
->p->beforeAuth } ] );
my
$res
=
$self
->p->process(
$req
);
if
(
$res
&&
$res
> 0 ) {
$req
->wantErrorRender(1);
return
$self
->p->
do
(
$req
, [
sub
{
$res
} ] );
}
return
$self
->auth_route(
$req
,
@path
);
}
sub
get_auth_token {
my
(
$self
,
$req
,
$token_id
) =
@_
;
my
$token
=
$self
->authott->getToken(
$token_id
);
if
(
$token
) {
if
(
$token
->{type} eq (
'auth_token_'
.
$self
->auth_id ) ) {
utf8::downgrade(
$token
->{user});
return
$token
;
}
else
{
$self
->logger->error(
"Unexpected token type: "
.
$token
->{type} );
return
;
}
}
$self
->logger->error(
"Could not fetch user token $token_id"
);
return
;
}
sub
ajax_success {
my
(
$self
,
$req
,
$user
,
$extraInfo
) =
@_
;
my
$token
=
$self
->authott->createToken( {
user
=>
$user
,
type
=>
'auth_token_'
.
$self
->auth_id,
extraInfo
=>
$extraInfo
,
}
);
if
(
$token
) {
return
$self
->sendJSONresponse(
$req
,
{
ajax_auth_token
=>
$token
,
error
=> PE_OK,
}
);
}
else
{
$self
->logger->error(
"Could not create user token for $user"
);
$req
->wantErrorRender(1);
return
$self
->p->
do
(
$req
, [
sub
{ PE_ERROR } ] );
}
}
1;