Prepare CAS partners managment (#1183)
This commit is contained in:
parent
43ece77749
commit
679911d4d0
1
Makefile
1
Makefile
|
@ -183,6 +183,7 @@ MANAGERJSONSRC= scripts/jsongenerator.pl \
|
||||||
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build.pm \
|
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build.pm \
|
||||||
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/Attributes.pm \
|
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/Attributes.pm \
|
||||||
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/Tree.pm \
|
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/Tree.pm \
|
||||||
|
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/CTrees.pm \
|
||||||
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Conf/Zero.pm
|
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Conf/Zero.pm
|
||||||
MANAGERJSONDST=$(SRCMANAGERDIR)/site/htdocs/static/struct.json \
|
MANAGERJSONDST=$(SRCMANAGERDIR)/site/htdocs/static/struct.json \
|
||||||
$(SRCMANAGERDIR)/site/htdocs/static/js/conftree.js \
|
$(SRCMANAGERDIR)/site/htdocs/static/js/conftree.js \
|
||||||
|
|
|
@ -23,7 +23,7 @@ use constant HANDLERSECTION => "handler";
|
||||||
use constant MANAGERSECTION => "manager";
|
use constant MANAGERSECTION => "manager";
|
||||||
use constant SESSIONSEXPLORERSECTION => "sessionsExplorer";
|
use constant SESSIONSEXPLORERSECTION => "sessionsExplorer";
|
||||||
use constant APPLYSECTION => "apply";
|
use constant APPLYSECTION => "apply";
|
||||||
our $hashParameters = qr/^(?:(?:l(?:o(?:ca(?:lSessionStorageOption|tionRule)|goutService)|dapExportedVar|wp(?:Ssl)?Opt)|(?:(?:d(?:emo|bi)|facebook|webID)ExportedVa|exported(?:Heade|Va))r|c(?:as(?:StorageOption|Attribute)|ustomAddParam|ombModule)|g(?:r(?:antSessionRule|oup)|lobalStorageOption)|n(?:otificationStorageOption|ginxCustomHandler)|re(?:moteGlobalStorageOption|loadUrl)|CAS_proxiedService|macro)s|o(?:idc(?:RPMetaData(?:(?:Option(?:sExtraClaim)?|ExportedVar)s|Node)|OPMetaData(?:(?:ExportedVar|Option)s|J(?:SON|WKS)|Node)|S(?:erviceMetaDataAuthnContext|torageOptions))|penIdExportedVars)|s(?:aml(?:S(?:PMetaData(?:(?:ExportedAttribute|Option)s|Node|XML)|torageOptions)|IDPMetaData(?:(?:ExportedAttribute|Option)s|Node|XML))|essionDataToRemember|laveExportedVars)|p(?:ersistentStorageOptions|o(?:rtalSkinRules|st))|a(?:uthChoiceModules|pplicationList)|v(?:hostOptions|irtualHost)|S(?:MTPTLSOpts|SLVarIf))$/;
|
our $hashParameters = qr/^(?:(?:l(?:o(?:ca(?:lSessionStorageOption|tionRule)|goutService)|dapExportedVar|wp(?:Ssl)?Opt)|(?:(?:d(?:emo|bi)|facebook|webID)ExportedVa|exported(?:Heade|Va))r|g(?:r(?:antSessionRule|oup)|lobalStorageOption)|n(?:otificationStorageOption|ginxCustomHandler)|re(?:moteGlobalStorageOption|loadUrl)|CAS_proxiedService|macro)s|o(?:idc(?:RPMetaData(?:(?:Option(?:sExtraClaim)?|ExportedVar)s|Node)|OPMetaData(?:(?:ExportedVar|Option)s|J(?:SON|WKS)|Node)|S(?:erviceMetaDataAuthnContext|torageOptions))|penIdExportedVars)|s(?:aml(?:S(?:PMetaData(?:(?:ExportedAttribute|Option)s|Node|XML)|torageOptions)|IDPMetaData(?:(?:ExportedAttribute|Option)s|Node|XML))|essionDataToRemember|laveExportedVars)|c(?:as(?:S(?:rvMetaDataNode|torageOptions)|A(?:ppMetaDataNode|ttributes))|(?:ustomAddParam|ombModule)s)|p(?:ersistentStorageOptions|o(?:rtalSkinRules|st))|a(?:uthChoiceModules|pplicationList)|v(?:hostOptions|irtualHost)|S(?:MTPTLSOpts|SLVarIf))$/;
|
||||||
|
|
||||||
our @sessionTypes = ( 'remoteGlobal', 'cas', 'global', 'localSession', 'persistent', 'saml', 'oidc' );
|
our @sessionTypes = ( 'remoteGlobal', 'cas', 'global', 'localSession', 'persistent', 'saml', 'oidc' );
|
||||||
|
|
||||||
|
|
|
@ -444,6 +444,65 @@ sub oidcRPMetaDataNodes {
|
||||||
return $self->_oidcMetaDataNodes( 'RP', $req, @path );
|
return $self->_oidcMetaDataNodes( 'RP', $req, @path );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 314 - CAS
|
||||||
|
# ---
|
||||||
|
|
||||||
|
sub _casMetaDataNodes {
|
||||||
|
my ( $self, $type, $req, @path ) = @_;
|
||||||
|
my $refKey =
|
||||||
|
( $type eq 'App' ? 'casAppMetaDataOptions' : 'casSrvMetaDataOptions' );
|
||||||
|
return $self->complexNodesRoot( $req, $refKey, "oidc${type}MetaDataNode" )
|
||||||
|
unless (@path);
|
||||||
|
|
||||||
|
my $partner = shift @path;
|
||||||
|
my $query = shift @path;
|
||||||
|
unless ($query) {
|
||||||
|
return $self->sendError( $req,
|
||||||
|
"Bad request: oidc${type}MetaDataNode query must ask for a key",
|
||||||
|
400 );
|
||||||
|
}
|
||||||
|
|
||||||
|
# setDefault response for new partners
|
||||||
|
return $self->sendError( $req, 'setDefault', 200 )
|
||||||
|
if ( $partner =~ /^new__/ );
|
||||||
|
|
||||||
|
# Reject unknown partners
|
||||||
|
return $self->sendError( $req, "Unknown CAS partner ($partner)", 400 )
|
||||||
|
unless ( defined eval { $self->getConfKey( $req, $refKey )->{$partner}; }
|
||||||
|
);
|
||||||
|
|
||||||
|
my ( $id, $resp ) = ( 1, [] );
|
||||||
|
|
||||||
|
# Options
|
||||||
|
if (
|
||||||
|
$query =~ {
|
||||||
|
App => qr/^$casAppMetaDataNodeKeys$/o,
|
||||||
|
Srv => qr/^$casSrvMetaDataNodeKeys$/o
|
||||||
|
}->{$type}
|
||||||
|
)
|
||||||
|
{
|
||||||
|
my $value = eval {
|
||||||
|
$self->getConfKey( $req, "cas${type}MetaDataOptions" )->{$partner}
|
||||||
|
->{$query};
|
||||||
|
} // undef;
|
||||||
|
return $self->sendJSONresponse( $req, { value => $value } );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return $self->sendError( $req,
|
||||||
|
"Bad key for cas${type}MetaDataNode ($query)", 400 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub casSrvMetaDataNodes {
|
||||||
|
my ( $self, $req, @path ) = @_;
|
||||||
|
return $self->_oidcMetaDataNodes( 'Srv', $req, @path );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub casAppMetaDataNodes {
|
||||||
|
my ( $self, $req, @path ) = @_;
|
||||||
|
return $self->_oidcMetaDataNodes( 'App', $req, @path );
|
||||||
|
}
|
||||||
|
|
||||||
# 32 - Other special nodes
|
# 32 - Other special nodes
|
||||||
# -------------------
|
# -------------------
|
||||||
|
|
||||||
|
@ -654,7 +713,9 @@ sub metadatas {
|
||||||
my $id = -1;
|
my $id = -1;
|
||||||
my ($ind) = map { $id++; $_ == $res->{cfgNum} ? ($id) : () } @a;
|
my ($ind) = map { $id++; $_ == $res->{cfgNum} ? ($id) : () } @a;
|
||||||
if ($ind) { $res->{prev} = $a[ $ind - 1 ]; }
|
if ($ind) { $res->{prev} = $a[ $ind - 1 ]; }
|
||||||
if ( defined $ind and $ind < $#a ) { $res->{next} = $a[ $ind + 1 ]; }
|
if ( defined $ind and $ind < $#a ) {
|
||||||
|
$res->{next} = $a[ $ind + 1 ];
|
||||||
|
}
|
||||||
if ( $self->can('userId') ) {
|
if ( $self->can('userId') ) {
|
||||||
$self->userLogger->info( 'User '
|
$self->userLogger->info( 'User '
|
||||||
. $self->userId($req)
|
. $self->userId($req)
|
||||||
|
@ -664,7 +725,8 @@ sub metadatas {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$self->logger->info(
|
$self->logger->info(
|
||||||
"REST request to get configuration metadatas ($res->{cfgNum})");
|
"REST request to get configuration metadatas ($res->{cfgNum})"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return $self->sendJSONresponse( $req, $res );
|
return $self->sendJSONresponse( $req, $res );
|
||||||
}
|
}
|
||||||
|
@ -730,7 +792,8 @@ sub getKey {
|
||||||
# When scalar
|
# When scalar
|
||||||
return $self->sendError( $req, "Key $key is not a hash", 400 )
|
return $self->sendError( $req, "Key $key is not a hash", 400 )
|
||||||
if ($subkey);
|
if ($subkey);
|
||||||
return $self->sendError( $req, 'setDefault', 200 ) unless defined($value);
|
return $self->sendError( $req, 'setDefault', 200 )
|
||||||
|
unless defined($value);
|
||||||
return $self->sendJSONresponse( $req, { value => $value } );
|
return $self->sendJSONresponse( $req, { value => $value } );
|
||||||
|
|
||||||
# TODO authParam key
|
# TODO authParam key
|
||||||
|
|
Binary file not shown.
|
@ -82,6 +82,10 @@ site/htdocs/static/forms/authParamsTextContainer.html
|
||||||
site/htdocs/static/forms/blackWhiteList.html
|
site/htdocs/static/forms/blackWhiteList.html
|
||||||
site/htdocs/static/forms/bool.html
|
site/htdocs/static/forms/bool.html
|
||||||
site/htdocs/static/forms/boolOrExpr.html
|
site/htdocs/static/forms/boolOrExpr.html
|
||||||
|
site/htdocs/static/forms/casAppMetaDataNode.html
|
||||||
|
site/htdocs/static/forms/casAppMetaDataNodeContainer.html
|
||||||
|
site/htdocs/static/forms/casSrvMetaDataNode.html
|
||||||
|
site/htdocs/static/forms/casSrvMetaDataNodeContainer.html
|
||||||
site/htdocs/static/forms/catAndAppList.html
|
site/htdocs/static/forms/catAndAppList.html
|
||||||
site/htdocs/static/forms/cmbModule.html
|
site/htdocs/static/forms/cmbModule.html
|
||||||
site/htdocs/static/forms/cmbModuleContainer.html
|
site/htdocs/static/forms/cmbModuleContainer.html
|
||||||
|
|
|
@ -626,12 +626,6 @@ sub attributes {
|
||||||
'CAS_renew' => {
|
'CAS_renew' => {
|
||||||
'type' => 'bool'
|
'type' => 'bool'
|
||||||
},
|
},
|
||||||
'CAS_url' => {
|
|
||||||
'msgFail' => '__badUrl__',
|
|
||||||
'test' =>
|
|
||||||
qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))(?::(?:(?:[0-9]*)))?(?:\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*)(?:\/(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*))*))(?:[?](?:(?:(?:[;\/?:@&=+\$,a-zA-Z0-9\-_.!~*'()]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)))?))?)/,
|
|
||||||
'type' => 'text'
|
|
||||||
},
|
|
||||||
'casAccessControlPolicy' => {
|
'casAccessControlPolicy' => {
|
||||||
'default' => 'none',
|
'default' => 'none',
|
||||||
'select' => [
|
'select' => [
|
||||||
|
@ -650,12 +644,24 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.]
|
||||||
],
|
],
|
||||||
'type' => 'select'
|
'type' => 'select'
|
||||||
},
|
},
|
||||||
|
'casAppMetaDataNodes' => {
|
||||||
|
'type' => 'casAppMetaDataNodeContainer'
|
||||||
|
},
|
||||||
'casAttr' => {
|
'casAttr' => {
|
||||||
'type' => 'text'
|
'type' => 'text'
|
||||||
},
|
},
|
||||||
'casAttributes' => {
|
'casAttributes' => {
|
||||||
'type' => 'keyTextContainer'
|
'type' => 'keyTextContainer'
|
||||||
},
|
},
|
||||||
|
'casSrvMetaDataNodes' => {
|
||||||
|
'type' => 'casSrvMetaDataNodeContainer'
|
||||||
|
},
|
||||||
|
'casSrvMetaDataOptionsUrl' => {
|
||||||
|
'msgFail' => '__badUrl__',
|
||||||
|
'test' =>
|
||||||
|
qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))(?::(?:(?:[0-9]*)))?(?:\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*)(?:\/(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*))*))(?:[?](?:(?:(?:[;\/?:@&=+\$,a-zA-Z0-9\-_.!~*'()]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)))?))?)/,
|
||||||
|
'type' => 'text'
|
||||||
|
},
|
||||||
'casStorage' => {
|
'casStorage' => {
|
||||||
'type' => 'PerlModule'
|
'type' => 'PerlModule'
|
||||||
},
|
},
|
||||||
|
|
|
@ -2065,12 +2065,28 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{1,5})?|ldap(?:s|\+tls)?://\w[\w\-\.]*(?:
|
||||||
keyMsgFail => '__badCasProxyId__',
|
keyMsgFail => '__badCasProxyId__',
|
||||||
},
|
},
|
||||||
CAS_renew => { type => 'bool', },
|
CAS_renew => { type => 'bool', },
|
||||||
CAS_url => {
|
casSrvMetaDataOptionsUrl => {
|
||||||
type => 'text',
|
type => 'text',
|
||||||
test => $url,
|
test => $url,
|
||||||
msgFail => '__badUrl__',
|
msgFail => '__badUrl__',
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# Fake attribute: used by manager REST API to agglomerate all nodes
|
||||||
|
# related to a SAML IDP partner
|
||||||
|
casSrvMetaDataNodes => {
|
||||||
|
type => 'casSrvMetaDataNodeContainer',
|
||||||
|
template => 'casSrvMetaDataNode',
|
||||||
|
},
|
||||||
|
|
||||||
|
# Fake attribute: used by manager REST API to agglomerate all nodes
|
||||||
|
# related to a SAML SP partner
|
||||||
|
casAppMetaDataNodes => {
|
||||||
|
type => 'casAppMetaDataNodeContainer',
|
||||||
|
help => 'authsaml.html',
|
||||||
|
template => 'casAppMetaDataNode',
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
# PAM
|
# PAM
|
||||||
pamAuthnLevel => {
|
pamAuthnLevel => {
|
||||||
type => 'int',
|
type => 'int',
|
||||||
|
|
|
@ -214,6 +214,11 @@ sub cTrees {
|
||||||
},
|
},
|
||||||
'oidcRPMetaDataOptionsExtraClaims',
|
'oidcRPMetaDataOptionsExtraClaims',
|
||||||
],
|
],
|
||||||
|
casSrvMetaDataNode => [
|
||||||
|
'casSrvMetaDataOptionsUrl',
|
||||||
|
],
|
||||||
|
casAppMetaDataNode => [
|
||||||
|
],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -122,9 +122,9 @@ sub tree {
|
||||||
title => 'casParams',
|
title => 'casParams',
|
||||||
help => 'authcas.html',
|
help => 'authcas.html',
|
||||||
nodes => [
|
nodes => [
|
||||||
'CAS_authnLevel', 'CAS_url',
|
'CAS_authnLevel', 'CAS_CAFile',
|
||||||
'CAS_CAFile', 'CAS_renew',
|
'CAS_renew', 'CAS_gateway',
|
||||||
'CAS_gateway', 'CAS_proxiedServices'
|
'CAS_proxiedServices'
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -911,6 +911,8 @@ sub tree {
|
||||||
},
|
},
|
||||||
'oidcOPMetaDataNodes',
|
'oidcOPMetaDataNodes',
|
||||||
'oidcRPMetaDataNodes',
|
'oidcRPMetaDataNodes',
|
||||||
|
'casSrvMetaDataNodes',
|
||||||
|
'casAppMetaDataNodes',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@ sub addRoutes {
|
||||||
':cfgNum' => [
|
':cfgNum' => [
|
||||||
qw(virtualHosts samlIDPMetaDataNodes samlSPMetaDataNodes
|
qw(virtualHosts samlIDPMetaDataNodes samlSPMetaDataNodes
|
||||||
applicationList oidcOPMetaDataNodes oidcRPMetaDataNodes
|
applicationList oidcOPMetaDataNodes oidcRPMetaDataNodes
|
||||||
|
casSrvMetaDataNodes casAppMetaDataNodes
|
||||||
authChoiceModules grantSessionRules combModules
|
authChoiceModules grantSessionRules combModules
|
||||||
openIdIDPList)
|
openIdIDPList)
|
||||||
]
|
]
|
||||||
|
|
|
@ -426,6 +426,23 @@ sub _scanNodes {
|
||||||
}
|
}
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# CAS
|
||||||
|
elsif ( $base =~ /^cas(?:App|Srv)MetaDataNodes$/ ) {
|
||||||
|
my $optKey = $&;
|
||||||
|
hdebug('CAS');
|
||||||
|
if ( $target =~
|
||||||
|
/^(?:$casSrvMetaDataNodeKeys|$casAppMetaDataNodeKeys)/o )
|
||||||
|
{
|
||||||
|
$self->set( $optKey, [ $oldName, $key ],
|
||||||
|
$target, $leaf->{data} );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
push @{ $self->errors },
|
||||||
|
{ message => "Unknown OIDC metadata option $target" };
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
push @{ $self->errors },
|
push @{ $self->errors },
|
||||||
{ message => "Fatal: unknown special sub node $base" };
|
{ message => "Fatal: unknown special sub node $base" };
|
||||||
|
@ -752,7 +769,8 @@ sub _scanNodes {
|
||||||
@oldKeys = keys %{ $self->refConf->{$name}->{$host} };
|
@oldKeys = keys %{ $self->refConf->{$name}->{$host} };
|
||||||
}
|
}
|
||||||
foreach my $prm ( @{ $getHost->{h} } ) {
|
foreach my $prm ( @{ $getHost->{h} } ) {
|
||||||
$self->newConf->{$name}->{$host}->{ $prm->{k} } = $prm->{v};
|
$self->newConf->{$name}->{$host}->{ $prm->{k} } =
|
||||||
|
$prm->{v};
|
||||||
if (
|
if (
|
||||||
!$change
|
!$change
|
||||||
and (
|
and (
|
||||||
|
|
|
@ -373,6 +373,12 @@ llapp.controller 'TreeCtrl', [
|
||||||
$scope.addOidcRp = ->
|
$scope.addOidcRp = ->
|
||||||
$scope.newTemplateNode 'oidcRPMetaDataNode', 'oidcRPName', 'rp-example'
|
$scope.newTemplateNode 'oidcRPMetaDataNode', 'oidcRPName', 'rp-example'
|
||||||
|
|
||||||
|
$scope.addCasSrv = ->
|
||||||
|
$scope.newTemplateNode 'casSrvMetaDataNode', 'casPartnerName', 'srv-example'
|
||||||
|
|
||||||
|
$scope.addCasApp = ->
|
||||||
|
$scope.newTemplateNode 'casAppMetaDataNode', 'casPartnerName', 'app-example'
|
||||||
|
|
||||||
$scope.newTemplateNode = (type, title, init) ->
|
$scope.newTemplateNode = (type, title, init) ->
|
||||||
$scope.message =
|
$scope.message =
|
||||||
title: title
|
title: title
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title" trspan="casApp"></h3>
|
||||||
|
</div>
|
||||||
|
<table class="table">
|
||||||
|
<tr>
|
||||||
|
<th><span trspan="casAppName"></span></th>
|
||||||
|
<td><input id="hashkeyinput" class="form-control" ng-model="currentNode.title"/></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<script type="text/menu">
|
||||||
|
[{
|
||||||
|
"title": "addAppCasPartner",
|
||||||
|
"action": "addCasSrv",
|
||||||
|
"icon": "plus-sign"
|
||||||
|
},{
|
||||||
|
"title": "deleteEntry",
|
||||||
|
"icon": "minus-sign"
|
||||||
|
}]
|
||||||
|
</script>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title" trspan="casAppMetaDataNodes"></h3>
|
||||||
|
</div>
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr><th trspan="casAppName"></th><th></th></tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr ng-repeat="s in currentNode.nodes">
|
||||||
|
<td><input class="form-control" ng-model="s.title"/></td>
|
||||||
|
<td>
|
||||||
|
<span class="link text-danger glyphicon glyphicon-minus-sign" ng-click="del(currentNode.nodes,$index)"/>
|
||||||
|
<span ng-if="$last" class="link text-success glyphicon glyphicon-plus-sign" ng-click="menuClick({title:'addAppCasPartner',action:'addCasApp'})"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<script type="text/menu">
|
||||||
|
[{
|
||||||
|
"title": "addAppCasPartner",
|
||||||
|
"action": "addCasApp",
|
||||||
|
"icon": "plus-sign"
|
||||||
|
}]
|
||||||
|
</script>
|
|
@ -0,0 +1,21 @@
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title" trspan="casSrv"></h3>
|
||||||
|
</div>
|
||||||
|
<table class="table">
|
||||||
|
<tr>
|
||||||
|
<th><span trspan="casSrvName"></span></th>
|
||||||
|
<td><input id="hashkeyinput" class="form-control" ng-model="currentNode.title"/></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<script type="text/menu">
|
||||||
|
[{
|
||||||
|
"title": "addSrvCasPartner",
|
||||||
|
"action": "addCasSrv",
|
||||||
|
"icon": "plus-sign"
|
||||||
|
}, {
|
||||||
|
"title": "deleteEntry",
|
||||||
|
"icon": "plus-sign"
|
||||||
|
}]
|
||||||
|
</script>
|
|
@ -0,0 +1,26 @@
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title" trspan="casSrvMetaDataNodes"></h3>
|
||||||
|
</div>
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr><th trspan="casSrvName"></th><th></th></tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr ng-repeat="s in currentNode.nodes">
|
||||||
|
<td><input class="form-control" ng-model="s.title"/></td>
|
||||||
|
<td>
|
||||||
|
<span class="link text-danger glyphicon glyphicon-minus-sign" ng-click="del(currentNode.nodes,$index)"/>
|
||||||
|
<span ng-if="$last" class="link text-success glyphicon glyphicon-plus-sign" ng-click="menuClick({title:'addSrvCasPartner',action:'addCasSrv'})"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<script type="text/menu">
|
||||||
|
[{
|
||||||
|
"title": "addSrvCasPartner",
|
||||||
|
"action": "addCasSrv",
|
||||||
|
"icon": "plus-sign"
|
||||||
|
}]
|
||||||
|
</script>
|
|
@ -8,6 +8,18 @@ function templates(tpl,key) {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
switch(tpl){
|
switch(tpl){
|
||||||
|
case 'casAppMetaDataNode':
|
||||||
|
return []
|
||||||
|
;
|
||||||
|
case 'casSrvMetaDataNode':
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"get" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsUrl",
|
||||||
|
"id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsUrl",
|
||||||
|
"title" : "casSrvMetaDataOptionsUrl"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
;
|
||||||
case 'oidcOPMetaDataNode':
|
case 'oidcOPMetaDataNode':
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -446,6 +446,12 @@ This file contains:
|
||||||
$scope.addOidcRp = function() {
|
$scope.addOidcRp = function() {
|
||||||
return $scope.newTemplateNode('oidcRPMetaDataNode', 'oidcRPName', 'rp-example');
|
return $scope.newTemplateNode('oidcRPMetaDataNode', 'oidcRPName', 'rp-example');
|
||||||
};
|
};
|
||||||
|
$scope.addCasSrv = function() {
|
||||||
|
return $scope.newTemplateNode('casSrvMetaDataNode', 'casPartnerName', 'srv-example');
|
||||||
|
};
|
||||||
|
$scope.addCasApp = function() {
|
||||||
|
return $scope.newTemplateNode('casAppMetaDataNode', 'casPartnerName', 'app-example');
|
||||||
|
};
|
||||||
$scope.newTemplateNode = function(type, title, init) {
|
$scope.newTemplateNode = function(type, title, init) {
|
||||||
$scope.message = {
|
$scope.message = {
|
||||||
title: title,
|
title: title,
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -26,11 +26,13 @@
|
||||||
"_utime": "Session timestamp",
|
"_utime": "Session timestamp",
|
||||||
"actives": "Actives",
|
"actives": "Actives",
|
||||||
"activeTimer": "Auto accept time",
|
"activeTimer": "Auto accept time",
|
||||||
"addSamlAttribute": "Add attribute",
|
"addAppCasPartner": "Add CAS application",
|
||||||
"addIDPSamlPartner": "Add SAML IDP",
|
"addIDPSamlPartner": "Add SAML IDP",
|
||||||
"addSPSamlPartner": "Add SAML SP",
|
|
||||||
"addOidcOp": "Add OpenID Connect Provider",
|
"addOidcOp": "Add OpenID Connect Provider",
|
||||||
"addOidcRp": "Add OpenID Relying Party",
|
"addOidcRp": "Add OpenID Relying Party",
|
||||||
|
"addSamlAttribute": "Add attribute",
|
||||||
|
"addSPSamlPartner": "Add SAML SP",
|
||||||
|
"addSrvCasPartner": "Add CAS server",
|
||||||
"addVhost": "Add virtualhost",
|
"addVhost": "Add virtualhost",
|
||||||
"adParams": "Active Directory Parameters",
|
"adParams": "Active Directory Parameters",
|
||||||
"ADPwdExpireWarning": "Password expire warning",
|
"ADPwdExpireWarning": "Password expire warning",
|
||||||
|
@ -104,11 +106,17 @@
|
||||||
"CAS_gateway": "Gateway authentication",
|
"CAS_gateway": "Gateway authentication",
|
||||||
"CAS_renew": "Renew authentication",
|
"CAS_renew": "Renew authentication",
|
||||||
"CAS_proxiedServices": "Proxied services",
|
"CAS_proxiedServices": "Proxied services",
|
||||||
"CAS_url": "Server URL",
|
|
||||||
"casAccessControlPolicy": "Access control policy",
|
"casAccessControlPolicy": "Access control policy",
|
||||||
|
"casApp": "CAS Application",
|
||||||
|
"casAppMetaDataNodes": "CAS Applications",
|
||||||
|
"casAppName": "CAS App Name",
|
||||||
"casAttr": "CAS login",
|
"casAttr": "CAS login",
|
||||||
"casAttributes": "CAS exported attributes",
|
"casAttributes": "CAS exported attributes",
|
||||||
"casParams": "CAS parameters",
|
"casParams": "CAS parameters",
|
||||||
|
"casSrv": "CAS Server",
|
||||||
|
"casSrvMetaDataOptionsUrl": "Server URL",
|
||||||
|
"casSrvMetaDataNodes": "CAS Servers",
|
||||||
|
"casSrvName": "CAS Server Name",
|
||||||
"casStorage": "CAS sessions module name",
|
"casStorage": "CAS sessions module name",
|
||||||
"casStorageOptions": "CAS sessions module options",
|
"casStorageOptions": "CAS sessions module options",
|
||||||
"categoryName": "Category name",
|
"categoryName": "Category name",
|
||||||
|
|
|
@ -26,11 +26,13 @@
|
||||||
"_utime": "Tampon de la session",
|
"_utime": "Tampon de la session",
|
||||||
"actives": "Actives",
|
"actives": "Actives",
|
||||||
"activeTimer": "Délai d'acceptation automatique",
|
"activeTimer": "Délai d'acceptation automatique",
|
||||||
"addSamlAttribute": "Ajouter un attribut",
|
"addAppCasPartner": "Ajouter une application CAS",
|
||||||
"addIDPSamlPartner": "Ajouter un IDP SAML",
|
"addIDPSamlPartner": "Ajouter un IDP SAML",
|
||||||
"addSPSamlPartner": "Ajouter un SP SAML",
|
|
||||||
"addOidcOp": "Ajouter un fournisseur OpenID Connect",
|
"addOidcOp": "Ajouter un fournisseur OpenID Connect",
|
||||||
"addOidcRp": "Ajouter un client OpenID Connect",
|
"addOidcRp": "Ajouter un client OpenID Connect",
|
||||||
|
"addSamlAttribute": "Ajouter un attribut",
|
||||||
|
"addSPSamlPartner": "Ajouter un SP SAML",
|
||||||
|
"addSrvCasPartner": "Ajouter un serveur CAS",
|
||||||
"addVhost": "Ajouter un hôte virtuel",
|
"addVhost": "Ajouter un hôte virtuel",
|
||||||
"adParams": "Paramètres Active Directory",
|
"adParams": "Paramètres Active Directory",
|
||||||
"ADPwdExpireWarning": "Avertissement avant expiration du mot de passe",
|
"ADPwdExpireWarning": "Avertissement avant expiration du mot de passe",
|
||||||
|
@ -104,11 +106,17 @@
|
||||||
"CAS_gateway": "Authentification transparente",
|
"CAS_gateway": "Authentification transparente",
|
||||||
"CAS_renew": "Renouveller l'authentication",
|
"CAS_renew": "Renouveller l'authentication",
|
||||||
"CAS_proxiedServices": "Services mandatés",
|
"CAS_proxiedServices": "Services mandatés",
|
||||||
"CAS_url": "URL du serveur",
|
|
||||||
"casAccessControlPolicy": "Politique de contrôle d'accès",
|
"casAccessControlPolicy": "Politique de contrôle d'accès",
|
||||||
|
"casApp": "Application CAS",
|
||||||
|
"casAppMetaDataNodes": "Applications CAS",
|
||||||
|
"casAppName": "Nom de l'application CAS",
|
||||||
"casAttr": "Identifiant CAS",
|
"casAttr": "Identifiant CAS",
|
||||||
"casAttributes": "Attributs CAS",
|
"casAttributes": "Attributs CAS",
|
||||||
"casParams": "Paramètres CAS",
|
"casParams": "Paramètres CAS",
|
||||||
|
"casSrv": "Serveur CAS",
|
||||||
|
"casSrvMetaDataOptionsUrl": "URL du serveur",
|
||||||
|
"casSrvMetaDataNodes": "Serveurs CAS",
|
||||||
|
"casSrvName": "Nom du serveur CAS",
|
||||||
"casStorage": "Nom du module des session CAS",
|
"casStorage": "Nom du module des session CAS",
|
||||||
"casStorageOptions": "Options du module des sessions CAS",
|
"casStorageOptions": "Options du module des sessions CAS",
|
||||||
"categoryName": "Nom de la catégorie",
|
"categoryName": "Nom de la catégorie",
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user