Add CAS server resolution rules (#2753)

This commit is contained in:
Maxime Besson 2022-05-18 09:05:26 +02:00
parent 3428cb981f
commit 5e210651aa
2 changed files with 29 additions and 6 deletions

View File

@ -133,14 +133,24 @@ sub extractFormInfo {
else {
# Server list
my $portalPath = $self->conf->{portal};
$portalPath =~ s#^https?://[^/]+/?#/#;
# Try to use server resolution ruls
foreach ( keys %{ $self->srvRules } ) {
my $cond = $self->srvRules->{$_} or next;
if ( $cond->( $req, $req->sessionInfo ) ) {
$self->logger->debug(
"CAS Server $_ selected from resolution rule");
$srv = $_;
last;
}
}
$req->data->{list} = $self->srvList;
unless ($srv) {
$req->data->{login} = 1;
return PE_IDPCHOICE;
# Server list
$req->data->{list} = $self->srvList;
$req->data->{login} = 1;
return PE_IDPCHOICE;
}
}
}

View File

@ -26,6 +26,7 @@ has ua => (
has casSrvList => ( is => 'rw', default => sub { {} }, );
has casAppList => ( is => 'rw', default => sub { {} }, );
has srvRules => ( is => 'rw', default => sub { {} }, );
has spRules => ( is => 'rw', default => sub { {} }, );
has spMacros => ( is => 'rw', default => sub { {} }, );
@ -41,6 +42,18 @@ sub loadSrv {
return 0;
}
$self->casSrvList( $self->conf->{casSrvMetaDataOptions} );
# Set rule
foreach ( keys %{ $self->conf->{casSrvMetaDataOptions} } ) {
my $cond = $self->conf->{casSrvMetaDataOptions}->{$_}
->{casSrvMetaDataOptionsResolutionRule};
if ( length $cond ) {
my $rule_sub = $self->p->buildRule( $cond, "CAS server resolution" );
if ($rule_sub) {
$self->srvRules->{$_} = $rule_sub;
}
}
}
return 1;
}