Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Julien Ledoux
lemonldap-ng
Commits
679911d4
Commit
679911d4
authored
Apr 12, 2017
by
Yadd
Browse files
Prepare CAS partners managment (#1183)
parent
43ece777
Changes
24
Expand all
Hide whitespace changes
Inline
Side-by-side
Makefile
View file @
679911d4
...
...
@@ -183,6 +183,7 @@ MANAGERJSONSRC= scripts/jsongenerator.pl \
$(SRCMANAGERDIR)
/lib/Lemonldap/NG/Manager/Build.pm
\
$(SRCMANAGERDIR)
/lib/Lemonldap/NG/Manager/Build/Attributes.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
MANAGERJSONDST
=
$(SRCMANAGERDIR)
/site/htdocs/static/struct.json
\
$(SRCMANAGERDIR)
/site/htdocs/static/js/conftree.js
\
...
...
lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/Constants.pm
View file @
679911d4
...
...
@@ -23,7 +23,7 @@ use constant HANDLERSECTION => "handler";
use
constant
MANAGERSECTION
=>
"
manager
";
use
constant
SESSIONSEXPLORERSECTION
=>
"
sessionsExplorer
";
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
'
);
...
...
lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/RESTServer.pm
View file @
679911d4
...
...
@@ -444,6 +444,65 @@ sub oidcRPMetaDataNodes {
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
# -------------------
...
...
@@ -654,7 +713,9 @@ sub metadatas {
my
$id
=
-
1
;
my
(
$ind
)
=
map
{
$id
++
;
$_
==
$res
->
{
cfgNum
}
?
(
$id
)
:
()
}
@a
;
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
')
)
{
$self
->
userLogger
->
info
(
'
User
'
.
$self
->
userId
(
$req
)
...
...
@@ -664,7 +725,8 @@ sub metadatas {
}
else
{
$self
->
logger
->
info
(
"
REST request to get configuration metadatas (
$res
->{cfgNum})
");
"
REST request to get configuration metadatas (
$res
->{cfgNum})
"
);
}
return
$self
->
sendJSONresponse
(
$req
,
$res
);
}
...
...
@@ -730,7 +792,8 @@ sub getKey {
# When scalar
return
$self
->
sendError
(
$req
,
"
Key
$key
is not a hash
",
400
)
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
}
);
# TODO authParam key
...
...
lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/ReConstants.pm
View file @
679911d4
No preview for this file type
lemonldap-ng-manager/MANIFEST
View file @
679911d4
...
...
@@ -82,6 +82,10 @@ site/htdocs/static/forms/authParamsTextContainer.html
site/htdocs/static/forms/blackWhiteList.html
site/htdocs/static/forms/bool.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/cmbModule.html
site/htdocs/static/forms/cmbModuleContainer.html
...
...
lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm
View file @
679911d4
...
...
@@ -626,12 +626,6 @@ sub attributes {
'
CAS_renew
'
=>
{
'
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
'
=>
{
'
default
'
=>
'
none
',
'
select
'
=>
[
...
...
@@ -650,12 +644,24 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.]
],
'
type
'
=>
'
select
'
},
'
casAppMetaDataNodes
'
=>
{
'
type
'
=>
'
casAppMetaDataNodeContainer
'
},
'
casAttr
'
=>
{
'
type
'
=>
'
text
'
},
'
casAttributes
'
=>
{
'
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
'
=>
{
'
type
'
=>
'
PerlModule
'
},
...
...
lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm
View file @
679911d4
...
...
@@ -2065,12 +2065,28 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{1,5})?|ldap(?:s|\+tls)?://\w[\w\-\.]*(?:
keyMsgFail
=>
'
__badCasProxyId__
',
},
CAS_renew
=>
{
type
=>
'
bool
',
},
CAS_u
rl
=>
{
casSrvMetaDataOptionsU
rl
=>
{
type
=>
'
text
',
test
=>
$url
,
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
pamAuthnLevel
=>
{
type
=>
'
int
',
...
...
lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/CTrees.pm
View file @
679911d4
...
...
@@ -214,6 +214,11 @@ sub cTrees {
},
'
oidcRPMetaDataOptionsExtraClaims
',
],
casSrvMetaDataNode
=>
[
'
casSrvMetaDataOptionsUrl
',
],
casAppMetaDataNode
=>
[
],
};
}
...
...
lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Tree.pm
View file @
679911d4
...
...
@@ -122,9 +122,9 @@ sub tree {
title
=>
'
casParams
',
help
=>
'
authcas.html
',
nodes
=>
[
'
CAS_authnLevel
',
'
CAS_
url
',
'
CAS_
CAFile
',
'
CAS_
renew
',
'
CAS_gateway
',
'
CAS_proxiedServices
'
'
CAS_authnLevel
',
'
CAS_
CAFile
',
'
CAS_
renew
',
'
CAS_
gateway
',
'
CAS_proxiedServices
'
]
},
{
...
...
@@ -911,6 +911,8 @@ sub tree {
},
'
oidcOPMetaDataNodes
',
'
oidcRPMetaDataNodes
',
'
casSrvMetaDataNodes
',
'
casAppMetaDataNodes
',
];
}
...
...
lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf.pm
View file @
679911d4
...
...
@@ -43,6 +43,7 @@ sub addRoutes {
'
:cfgNum
'
=>
[
qw(virtualHosts samlIDPMetaDataNodes samlSPMetaDataNodes
applicationList oidcOPMetaDataNodes oidcRPMetaDataNodes
casSrvMetaDataNodes casAppMetaDataNodes
authChoiceModules grantSessionRules combModules
openIdIDPList)
]
...
...
lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Parser.pm
View file @
679911d4
...
...
@@ -426,6 +426,23 @@ sub _scanNodes {
}
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
{
push
@
{
$self
->
errors
},
{
message
=>
"
Fatal: unknown special sub node
$base
"
};
...
...
@@ -752,7 +769,8 @@ sub _scanNodes {
@oldKeys
=
keys
%
{
$self
->
refConf
->
{
$name
}
->
{
$host
}
};
}
foreach
my
$prm
(
@
{
$getHost
->
{
h
}
}
)
{
$self
->
newConf
->
{
$name
}
->
{
$host
}
->
{
$prm
->
{
k
}
}
=
$prm
->
{
v
};
$self
->
newConf
->
{
$name
}
->
{
$host
}
->
{
$prm
->
{
k
}
}
=
$prm
->
{
v
};
if
(
!
$change
and
(
...
...
lemonldap-ng-manager/site/coffee/manager.coffee
View file @
679911d4
...
...
@@ -373,6 +373,12 @@ llapp.controller 'TreeCtrl', [
$scope
.
addOidcRp
=
->
$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
.
message
=
title
:
title
...
...
lemonldap-ng-manager/site/htdocs/static/forms/casAppMetaDataNode.html
0 → 100644
View file @
679911d4
<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>
lemonldap-ng-manager/site/htdocs/static/forms/casAppMetaDataNodeContainer.html
0 → 100644
View file @
679911d4
<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>
lemonldap-ng-manager/site/htdocs/static/forms/casSrvMetaDataNode.html
0 → 100644
View file @
679911d4
<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>
lemonldap-ng-manager/site/htdocs/static/forms/casSrvMetaDataNodeContainer.html
0 → 100644
View file @
679911d4
<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>
lemonldap-ng-manager/site/htdocs/static/js/conftree.js
View file @
679911d4
...
...
@@ -8,6 +8,18 @@ function templates(tpl,key) {
};
};
switch
(
tpl
){
case
'
casAppMetaDataNode
'
:
return
[]
;
case
'
casSrvMetaDataNode
'
:
return
[
{
"
get
"
:
tpl
+
"
s/
"
+
key
+
"
/
"
+
"
casSrvMetaDataOptionsUrl
"
,
"
id
"
:
tpl
+
"
s/
"
+
key
+
"
/
"
+
"
casSrvMetaDataOptionsUrl
"
,
"
title
"
:
"
casSrvMetaDataOptionsUrl
"
}
]
;
case
'
oidcOPMetaDataNode
'
:
return
[
{
...
...
lemonldap-ng-manager/site/htdocs/static/js/conftree.min.js
View file @
679911d4
This diff is collapsed.
Click to expand it.
lemonldap-ng-manager/site/htdocs/static/js/manager.js
View file @
679911d4
...
...
@@ -446,6 +446,12 @@ This file contains:
$scope
.
addOidcRp
=
function
()
{
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
.
message
=
{
title
:
title
,
...
...
lemonldap-ng-manager/site/htdocs/static/js/manager.min.js
View file @
679911d4
This diff is collapsed.
Click to expand it.
Prev
1
2
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment