our
$VERSION
=
'2.18.0'
;
has
availableModules
=> (
is
=>
'rw'
,
default
=>
sub
{ {} } );
sub
betweenAuthAndData {
'_betweenAuthAndData'
}
sub
afterData {
'_afterData'
}
sub
endAuth {
'_endAuth'
}
sub
forAuthUser {
'_forAuthUser'
}
sub
beforeLogout {
'_beforeLogout'
}
sub
authCancel {
'_authCancel'
}
sub
_betweenAuthAndData { _wrapEntryPoint(
@_
,
'betweenAuthAndData'
); }
sub
_afterData { _wrapEntryPoint(
@_
,
'afterData'
); }
sub
_endAuth { _wrapEntryPoint(
@_
,
'endAuth'
); }
sub
_forAuthUser { _wrapEntryPoint(
@_
,
'forAuthUser'
, 1 ); }
sub
_beforeLogout { _wrapEntryPoint(
@_
,
'beforeLogout'
, 1 ); }
sub
_authCancel { _wrapEntryPoint(
@_
,
'authCancel'
); }
sub
_wrapEntryPoint {
my
(
$self
,
$req
,
$name
,
$connected
) =
@_
;
my
@t
;
if
(
$connected
) {
if
(
my
$mod
=
$req
->userData->{
$self
->sessionKey } ) {
if
(
$self
->modules->{
$mod
} ) {
@t
= (
$self
->modules->{
$mod
} );
}
else
{
$self
->userLogger->error(
"Bad $self->{sessionKey} value in session ($name)"
);
}
}
else
{
$self
->userLogger->
warn
(
"Missing $self->{sessionKey} key in session"
);
}
}
elsif
(
my
$mod
=
$req
->sessionInfo->{
$self
->sessionKey } ) {
if
(
$self
->modules->{
$mod
} ) {
@t
= (
$self
->modules->{
$mod
} );
}
else
{
$self
->userLogger->error(
"Bad $self->{sessionKey} value in session ($name)"
);
}
}
elsif
(
ref
$req
->data->{
"enabledMods"
.
$self
->type } ) {
@t
= @{
$req
->data->{
"enabledMods"
.
$self
->type } };
}
else
{
$self
->logger->debug(
"Unable to find enabledMods$self->{type} in this context: $name"
);
}
foreach
(
@t
) {
if
(
$_
->can(
$name
) ) {
if
(
my
$sub
=
$_
->
$name
() ) {
my
$res
=
$_
->
$sub
(
$req
);
return
$res
if
(
$res
);
}
}
}
return
PE_OK;
}
sub
AUTOLOAD {
no
strict;
my
$self
=
shift
;
my
$sub
=
$AUTOLOAD
;
$sub
=~ s/.*:://;
if
(
$self
->p->can(
$sub
) ) {
return
$self
->p->
$sub
(
@_
);
}
Carp::confess
"Unknown method $sub"
;
}
1;