Add CAS server resolution rules (#2753)
This commit is contained in:
parent
3428cb981f
commit
5e210651aa
|
@ -133,14 +133,24 @@ sub extractFormInfo {
|
||||||
|
|
||||||
else {
|
else {
|
||||||
|
|
||||||
# Server list
|
# Try to use server resolution ruls
|
||||||
my $portalPath = $self->conf->{portal};
|
foreach ( keys %{ $self->srvRules } ) {
|
||||||
$portalPath =~ s#^https?://[^/]+/?#/#;
|
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;
|
# Server list
|
||||||
return PE_IDPCHOICE;
|
$req->data->{list} = $self->srvList;
|
||||||
|
$req->data->{login} = 1;
|
||||||
|
return PE_IDPCHOICE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ has ua => (
|
||||||
|
|
||||||
has casSrvList => ( is => 'rw', default => sub { {} }, );
|
has casSrvList => ( is => 'rw', default => sub { {} }, );
|
||||||
has casAppList => ( is => 'rw', default => sub { {} }, );
|
has casAppList => ( is => 'rw', default => sub { {} }, );
|
||||||
|
has srvRules => ( is => 'rw', default => sub { {} }, );
|
||||||
has spRules => ( is => 'rw', default => sub { {} }, );
|
has spRules => ( is => 'rw', default => sub { {} }, );
|
||||||
has spMacros => ( is => 'rw', default => sub { {} }, );
|
has spMacros => ( is => 'rw', default => sub { {} }, );
|
||||||
|
|
||||||
|
@ -41,6 +42,18 @@ sub loadSrv {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
$self->casSrvList( $self->conf->{casSrvMetaDataOptions} );
|
$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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue