PE_OK
PE_BADCREDENTIALS
PE_SESSIONNOTGRANTED
)
;
our
$VERSION
=
'2.19.0'
;
has
rules
=> (
is
=>
'rw'
,
default
=>
sub
{ {} } );
sub
init {
my
(
$self
) =
@_
;
foreach
(
keys
%{
$self
->conf->{grantSessionRules} // {} } ) {
$self
->logger->debug(
"GrantRule key -> $_"
);
$self
->logger->debug(
"GrantRule value -> "
.
$self
->conf->{grantSessionRules}->{
$_
} );
my
$rule
=
$self
->p->buildRule(
$self
->conf->{grantSessionRules}->{
$_
},
'grantSessionRules'
);
next
unless
(
$rule
);
$self
->rules->{
$_
} =
$rule
;
}
return
1;
}
sub
run {
my
(
$self
,
$req
) =
@_
;
sub
sortByComment {
my
$A
= (
$a
=~ /^.*?
my
$B
= (
$b
=~ /^.*?
return
!(
$A
or
$B
) ?
$a
cmp
$b
: !
$A
? 1 : !
$B
? -1 :
$A
cmp
$B
;
}
if
(
$req
->authResult > PE_OK ) {
$self
->logger->debug(
"Bad authentication, do not check grant session rules"
);
return
PE_BADCREDENTIALS;
}
foreach
(
sort
sortByComment
keys
%{
$self
->rules } ) {
my
$rule
=
$self
->conf->{grantSessionRules}->{
$_
};
$self
->logger->debug(
"Grant session condition -> $rule"
);
unless
(
$self
->rules->{
$_
}->(
$req
,
$req
->sessionInfo ) ) {
$req
->userData( {} );
$_
=~ /^(.*?)
if
($1) {
$self
->logger->debug(
"Message -> $1"
);
my
$hd
=
$self
->p->HANDLER;
my
$msg
=
$hd
->substitute($1);
unless
(
$msg
=
$hd
->buildSub(
$msg
) ) {
my
$error
=
$hd
->tsv->{jail}->error ||
'???'
;
$self
->error(
"Bad message -> $error"
);
return
PE_OK;
}
$msg
=
$msg
->(
$req
,
$req
->sessionInfo );
$self
->logger->debug(
"Transformed message -> $msg"
);
$req
->info(
$self
->loadTemplate(
$req
,
'simpleInfo'
,
params
=> {
trspan
=>
$msg
}
)
);
$self
->userLogger->error(
'User "'
.
$req
->{sessionInfo}->{
$self
->conf->{whatToTrace} }
.
'" was not granted to open session (rule ->'
.
"$rule)"
);
$req
->urldc(
$req
->portal );
return
$req
->authResult(PE_SESSIONNOTGRANTED);
}
else
{
$self
->userLogger->error(
'User "'
.
$req
->{sessionInfo}->{
$self
->conf->{whatToTrace} }
.
'" was not granted to open session (rule -> '
.
$self
->conf->{grantSessionRules}->{
$_
}
.
")"
);
$req
->urldc(
$req
->portal );
return
$req
->authResult(PE_SESSIONNOTGRANTED);
}
}
}
my
$user
=
$req
->{sessionInfo}->{
$self
->conf->{whatToTrace} };
my
$mod
=
$req
->{sessionInfo}->{_auth};
$self
->userLogger->notice(
"Session granted for $user by $mod ($req->{sessionInfo}->{ipAddr})"
)
if
$user
;
return
PE_OK;
}
1;