PE_OK
PE_SENDRESPONSE
)
;
our
$VERSION
=
'2.20.0'
;
use
constant
endAuth
=>
'storeRememberedAuthChoice'
;
use
constant
beforeAuth
=>
'checkRememberedAuthChoice'
;
use
constant
beforeLogout
=>
'removeRememberedAuthChoice'
;
use
constant
hook
=> {
getAuthChoice
=>
"autoChoice"
, };
has
rule
=> (
is
=>
'rw'
,
default
=>
sub
{ 0 } );
has
rememberCookieName
=> (
is
=>
'ro'
,
lazy
=> 1,
default
=>
sub
{
$_
[0]->conf->{rememberCookieName} //
'llngrememberauthchoice'
;
}
);
has
rememberCookieTimeout
=> (
is
=>
'ro'
,
lazy
=> 1,
default
=>
sub
{
$_
[0]->conf->{rememberCookieTimeout} // 31536000;
}
);
sub
init {
my
(
$self
) =
@_
;
$self
->rule(
$self
->p->buildRule(
$self
->conf->{rememberAuthChoiceRule},
'rememberAuthChoiceRule'
)
);
return
0
unless
$self
->rule;
return
1;
}
sub
storeRememberedAuthChoice {
my
(
$self
,
$req
) =
@_
;
my
$lmAuth
=
$req
->sessionInfo->{_choice};
my
$rememberauthchoice
=
$req
->pdata->{rememberauthchoice}
||
$req
->data->{rememberauthchoice}
||
""
;
if
(
$lmAuth
) {
if
(
$rememberauthchoice
eq
"true"
) {
$self
->logger->
warn
(
"RememberAuthChoice: set cookie "
.
$self
->rememberCookieName
.
" with authentication choice lmAuth="
.
$lmAuth
);
$req
->addCookie(
$self
->p->cookie(
name
=>
$self
->rememberCookieName,
value
=>
$lmAuth
,
max_age
=>
$self
->rememberCookieTimeout,
secure
=>
$self
->conf->{securedCookie},
HttpOnly
=> 0,
)
);
}
else
{
$self
->logger->
warn
(
"RememberAuthChoice: Remove cookie "
.
$self
->rememberCookieName );
$req
->addCookie(
$self
->p->cookie(
name
=>
$self
->rememberCookieName,
value
=> 0,
expires
=>
'Wed, 21 Oct 2015 00:00:00 GMT'
,
secure
=>
$self
->conf->{securedCookie},
)
);
$req
->addCookie(
$self
->p->genDomainCookie(
$req
,
name
=>
$self
->rememberCookieName,
value
=> 0,
expires
=>
'Wed, 21 Oct 2015 00:00:00 GMT'
,
secure
=>
$self
->conf->{securedCookie},
)
);
}
}
return
PE_OK;
}
sub
checkRememberedAuthChoice {
my
(
$self
,
$req
) =
@_
;
my
$lmAuth
=
$req
->param(
'lmAuth'
) ||
""
;
my
$rememberauthchoice
=
$req
->param(
'rememberauthchoice'
) ||
""
;
if
(
$lmAuth
) {
$req
->data->{rememberauthchoice} =
$rememberauthchoice
;
$req
->pdata->{rememberauthchoice} =
$rememberauthchoice
;
}
return
PE_OK;
}
sub
removeRememberedAuthChoice {
my
(
$self
,
$req
) =
@_
;
if
(
$self
->conf->{rememberAuthChoiceForgetAtLogout} ) {
$self
->logger->debug(
"RememberAuthChoice: Remove cookie "
.
$self
->rememberCookieName
.
" at logout"
);
$req
->addCookie(
$self
->p->cookie(
name
=>
$self
->rememberCookieName,
value
=> 0,
expires
=>
'Wed, 21 Oct 2015 00:00:00 GMT'
,
secure
=>
$self
->conf->{securedCookie},
)
);
$req
->addCookie(
$self
->p->genDomainCookie(
$req
,
name
=>
$self
->rememberCookieName,
value
=> 0,
expires
=>
'Wed, 21 Oct 2015 00:00:00 GMT'
,
secure
=>
$self
->conf->{securedCookie},
)
);
}
return
PE_OK;
}
sub
autoChoice {
my
(
$self
,
$req
,
$context
) =
@_
;
if
(
my
$choice
=
$req
->cookies->{
$self
->rememberCookieName }
and
$self
->conf->{rememberTimer} == 0 )
{
$context
->{choice} =
$choice
;
$req
->pdata->{rememberauthchoice} =
"true"
;
}
return
PE_OK;
}
1;