Merge branch 'v2.0'

This commit is contained in:
Christophe Maudoux 2019-08-15 22:29:06 +02:00
commit 28732d614b
121 changed files with 760 additions and 242 deletions

View File

@ -67,6 +67,10 @@ Copyright: https://www.customicondesign.com
License: CC-BY-NC-ND-3.0 License: CC-BY-NC-ND-3.0
Comment: Downloaded from https://www.iconspedia.com/ Comment: Downloaded from https://www.iconspedia.com/
Files: lemonldap-ng-portal/site/htdocs/static/common/modules/Slave.png
Copyright: Antoine Rosier <antoine.rosier@mon-refuge.fr>
License: CC-3
Files: lemonldap-ng-portal/site/htdocs/static/common/modules/Twitter.png Files: lemonldap-ng-portal/site/htdocs/static/common/modules/Twitter.png
Copyright: Paul Schulerr, https://schulerr.deviantart.com Copyright: Paul Schulerr, https://schulerr.deviantart.com
License: CC-3 License: CC-3

View File

@ -311,7 +311,7 @@ $(SRCMANAGERDIR)/site/htdocs/static/js/%.js: $(SRCMANAGERDIR)/site/coffee/%.coff
%.min.js: %.js %.min.js: %.js
@echo "Compressing $*.js" @echo "Compressing $*.js"
@uglifyjs --comments='/Copyr/i' $*.js > $*.min.js @uglifyjs $*.js --compress --mangle --comments='/Copyr/i' --source-map $*.min.js.map -o $*.min.js
fastcgi-server/man/llng-fastcgi-server.1p: fastcgi-server/sbin/llng-fastcgi-server fastcgi-server/man/llng-fastcgi-server.1p: fastcgi-server/sbin/llng-fastcgi-server
@echo Update FastCGI server man page @echo Update FastCGI server man page

View File

@ -125,9 +125,9 @@
"default" : "accept" "default" : "accept"
}, },
"manager.__DNSDOMAIN__" : { "manager.__DNSDOMAIN__" : {
"(?#Configuration)^/(manager\\.html|confs|$)" : "$uid eq \"dwho\"", "(?#Configuration)^/(.*?\\.(fcgi|psgi)/)?(manager\\.html|confs/|$)" : "$uid eq \"dwho\"",
"(?#Notifications)/notifications" : "$uid eq \"dwho\" or $uid eq \"rtyler\"", "(?#Notifications)/(.*?\\.(fcgi|psgi)/)?notifications" : "$uid eq \"dwho\" or $uid eq \"rtyler\"",
"(?#Sessions)/sessions" : "$uid eq \"dwho\" or $uid eq \"rtyler\"", "(?#Sessions)/(.*?\\.(fcgi|psgi)/)?sessions" : "$uid eq \"dwho\" or $uid eq \"rtyler\"",
"default" : "$uid eq \"dwho\" or $uid eq \"rtyler\"" "default" : "$uid eq \"dwho\" or $uid eq \"rtyler\""
}, },
"test1.__DNSDOMAIN__" : { "test1.__DNSDOMAIN__" : {

View File

@ -28,6 +28,7 @@ totp2fActivation = 1
totp2fSelfRegistration = 1 totp2fSelfRegistration = 1
captcha_mail_enabled = 0 captcha_mail_enabled = 0
portalDisplayResetPassword = 1 portalDisplayResetPassword = 1
;pdataDomain = example.com
[handler] [handler]

View File

@ -1,4 +1,4 @@
.\" Automatically generated by Pod::Man 4.10 (Pod::Simple 3.35) .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
.\" .\"
.\" Standard preamble: .\" Standard preamble:
.\" ======================================================================== .\" ========================================================================
@ -54,20 +54,16 @@
.\" Avoid warning from groff about undefined register 'F'. .\" Avoid warning from groff about undefined register 'F'.
.de IX .de IX
.. ..
.nr rF 0 .if !\nF .nr F 0
.if \n(.g .if rF .nr rF 1 .if \nF>0 \{\
.if (\n(rF:(\n(.g==0)) \{\ . de IX
. if \nF \{\ . tm Index:\\$1\t\\n%\t"\\$2"
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
.. ..
. if !\nF==2 \{\ . if !\nF==2 \{\
. nr % 0 . nr % 0
. nr F 2 . nr F 2
. \}
. \} . \}
.\} .\}
.rr rF
.\" .\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts. .\" Fear. Run. Save yourself. No user-serviceable parts.
@ -133,7 +129,7 @@
.\" ======================================================================== .\" ========================================================================
.\" .\"
.IX Title "llng-fastcgi-server 1" .IX Title "llng-fastcgi-server 1"
.TH llng-fastcgi-server 1 "2019-07-10" "perl v5.28.1" "User Contributed Perl Documentation" .TH llng-fastcgi-server 1 "2019-08-15" "perl v5.26.1" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents. .\" way too many mistakes in technical documents.
.if n .ad l .if n .ad l

View File

@ -302,6 +302,10 @@ languages = en, fr, vi, it, ar, de, fi
; Read Lemonldap::NG::Portal::Main::Plugin(3pm) man page. ; Read Lemonldap::NG::Portal::Main::Plugin(3pm) man page.
;customPlugins = My::Package1, My::Package2 ;customPlugins = My::Package1, My::Package2
; To avoid bad/expired OTT if authssl and auth are served by different Load Balancers
; you can override OTT configuration to store Upgrade OTT into global storage
;forceGlobalStorageUpgradeOTT = 1
[handler] [handler]
; Handler cache configuration ; Handler cache configuration

View File

@ -184,7 +184,6 @@ sub defaultValues {
'oidcServiceMetaDataCheckSessionURI' => 'checksession.html', 'oidcServiceMetaDataCheckSessionURI' => 'checksession.html',
'oidcServiceMetaDataEndSessionURI' => 'logout', 'oidcServiceMetaDataEndSessionURI' => 'logout',
'oidcServiceMetaDataFrontChannelURI' => 'flogout', 'oidcServiceMetaDataFrontChannelURI' => 'flogout',
'oidcServiceMetaDataIssuer' => 'http://auth.example.com',
'oidcServiceMetaDataJWKSURI' => 'jwks', 'oidcServiceMetaDataJWKSURI' => 'jwks',
'oidcServiceMetaDataRegistrationURI' => 'register', 'oidcServiceMetaDataRegistrationURI' => 'register',
'oidcServiceMetaDataTokenURI' => 'token', 'oidcServiceMetaDataTokenURI' => 'token',

View File

@ -79,6 +79,7 @@ site/htdocs/static/bwr/es5-shim/es5-shim.map
site/htdocs/static/bwr/es5-shim/es5-shim.min.js site/htdocs/static/bwr/es5-shim/es5-shim.min.js
site/htdocs/static/bwr/file-saver.js/FileSaver.js site/htdocs/static/bwr/file-saver.js/FileSaver.js
site/htdocs/static/bwr/file-saver.js/FileSaver.min.js site/htdocs/static/bwr/file-saver.js/FileSaver.min.js
site/htdocs/static/bwr/file-saver.js/FileSaver.min.js.map
site/htdocs/static/bwr/jquery-ui/jquery-ui.js site/htdocs/static/bwr/jquery-ui/jquery-ui.js
site/htdocs/static/bwr/jquery-ui/jquery-ui.min.js site/htdocs/static/bwr/jquery-ui/jquery-ui.min.js
site/htdocs/static/bwr/jquery/dist/jquery.js site/htdocs/static/bwr/jquery/dist/jquery.js
@ -138,6 +139,8 @@ site/htdocs/static/forms/samlService.html
site/htdocs/static/forms/samlSPMetaDataNode.html site/htdocs/static/forms/samlSPMetaDataNode.html
site/htdocs/static/forms/samlSPMetaDataNodeContainer.html site/htdocs/static/forms/samlSPMetaDataNodeContainer.html
site/htdocs/static/forms/select.html site/htdocs/static/forms/select.html
site/htdocs/static/forms/sfExtra.html
site/htdocs/static/forms/sfExtraContainer.html
site/htdocs/static/forms/simpleInputContainer.html site/htdocs/static/forms/simpleInputContainer.html
site/htdocs/static/forms/text.html site/htdocs/static/forms/text.html
site/htdocs/static/forms/trool.html site/htdocs/static/forms/trool.html
@ -146,24 +149,34 @@ site/htdocs/static/forms/virtualHostContainer.html
site/htdocs/static/forms/white.html site/htdocs/static/forms/white.html
site/htdocs/static/js/2ndfa.js site/htdocs/static/js/2ndfa.js
site/htdocs/static/js/2ndfa.min.js site/htdocs/static/js/2ndfa.min.js
site/htdocs/static/js/2ndfa.min.js.map
site/htdocs/static/js/conftree.js site/htdocs/static/js/conftree.js
site/htdocs/static/js/conftree.min.js site/htdocs/static/js/conftree.min.js
site/htdocs/static/js/conftree.min.js.map
site/htdocs/static/js/diff.js site/htdocs/static/js/diff.js
site/htdocs/static/js/diff.min.js site/htdocs/static/js/diff.min.js
site/htdocs/static/js/diff.min.js.map
site/htdocs/static/js/filterFunctions.js site/htdocs/static/js/filterFunctions.js
site/htdocs/static/js/filterFunctions.min.js site/htdocs/static/js/filterFunctions.min.js
site/htdocs/static/js/filterFunctions.min.js.map
site/htdocs/static/js/llApp.js site/htdocs/static/js/llApp.js
site/htdocs/static/js/llApp.min.js site/htdocs/static/js/llApp.min.js
site/htdocs/static/js/llApp.min.js.map
site/htdocs/static/js/manager.js site/htdocs/static/js/manager.js
site/htdocs/static/js/manager.min.js site/htdocs/static/js/manager.min.js
site/htdocs/static/js/manager.min.js.map
site/htdocs/static/js/notifications.js site/htdocs/static/js/notifications.js
site/htdocs/static/js/notifications.min.js site/htdocs/static/js/notifications.min.js
site/htdocs/static/js/notifications.min.js.map
site/htdocs/static/js/sessions.js site/htdocs/static/js/sessions.js
site/htdocs/static/js/sessions.min.js site/htdocs/static/js/sessions.min.js
site/htdocs/static/js/sessions.min.js.map
site/htdocs/static/js/viewDiff.js site/htdocs/static/js/viewDiff.js
site/htdocs/static/js/viewDiff.min.js site/htdocs/static/js/viewDiff.min.js
site/htdocs/static/js/viewDiff.min.js.map
site/htdocs/static/js/viewer.js site/htdocs/static/js/viewer.js
site/htdocs/static/js/viewer.min.js site/htdocs/static/js/viewer.min.js
site/htdocs/static/js/viewer.min.js.map
site/htdocs/static/languages/ar.json site/htdocs/static/languages/ar.json
site/htdocs/static/languages/de.json site/htdocs/static/languages/de.json
site/htdocs/static/languages/en.json site/htdocs/static/languages/en.json
@ -209,6 +222,7 @@ t/12-save-changed-conf.t
t/14-bad-changes-in-conf.t t/14-bad-changes-in-conf.t
t/15-combination.t t/15-combination.t
t/16-cli.t t/16-cli.t
t/17-extra2f.t
t/20-test-coverage.t t/20-test-coverage.t
t/40-sessions.t t/40-sessions.t
t/50-notifications-DBI.t t/50-notifications-DBI.t
@ -227,6 +241,7 @@ t/jsonfiles/11-modified-with-confirmation.json
t/jsonfiles/12-modified.json t/jsonfiles/12-modified.json
t/jsonfiles/14-bad.json t/jsonfiles/14-bad.json
t/jsonfiles/15-combination.json t/jsonfiles/15-combination.json
t/jsonfiles/17-extra2f.json
t/jsonfiles/70-diff.json t/jsonfiles/70-diff.json
t/lemonldap-ng-dbi.ini t/lemonldap-ng-dbi.ini
t/lemonldap-ng-noDiff.ini t/lemonldap-ng-noDiff.ini

View File

@ -137,7 +137,7 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-
eval { eval {
do { do {
qr/$_[0]/; qr/$_[0]/;
} }
}; };
return $@ ? ( 0, "__badRegexp__: $@" ) : 1; return $@ ? ( 0, "__badRegexp__: $@" ) : 1;
} }
@ -218,8 +218,7 @@ m[^(?:(?:\-+\s*BEGIN\s+(?:PUBLIC\s+KEY|CERTIFICATE)\s*\-+\r?\n)?[a-zA-Z0-9/\+\r\
}, },
'select' => { 'select' => {
'test' => sub { 'test' => sub {
my $test = my $test = grep( { $_ eq $_[0]; }
grep( { $_ eq $_[0]; }
map( { $_->{'k'}; } @{ $_[2]{'select'}; } ) ); map( { $_->{'k'}; } @{ $_[2]{'select'}; } ) );
return $test return $test
? 1 ? 1
@ -1593,7 +1592,7 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][
eval { eval {
do { do {
qr/$_[0]/; qr/$_[0]/;
} }
}; };
return $@ ? 0 : 1; return $@ ? 0 : 1;
}, },
@ -2103,8 +2102,7 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][
'type' => 'text' 'type' => 'text'
}, },
'oidcServiceMetaDataIssuer' => { 'oidcServiceMetaDataIssuer' => {
'default' => 'http://auth.example.com', 'type' => 'text'
'type' => 'text'
}, },
'oidcServiceMetaDataJWKSURI' => { 'oidcServiceMetaDataJWKSURI' => {
'default' => 'jwks', 'default' => 'jwks',
@ -3649,7 +3647,8 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-
'type' => 'text' 'type' => 'text'
}, },
'vhostAliases' => { 'vhostAliases' => {
'type' => 'text' 'default' => '',
'type' => 'text'
}, },
'vhostAuthnLevel' => { 'vhostAuthnLevel' => {
'type' => 'int' 'type' => 'int'

View File

@ -1896,7 +1896,7 @@ sub attributes {
type => 'int', type => 'int',
default => -1, default => -1,
}, },
vhostAliases => { type => 'text', }, vhostAliases => { type => 'text', default => '' },
vhostType => { vhostType => {
type => 'select', type => 'select',
select => [ select => [
@ -1913,7 +1913,7 @@ sub attributes {
default => 'Main', default => 'Main',
documentation => 'Handler type', documentation => 'Handler type',
}, },
vhostAuthnLevel => { type => 'int', }, vhostAuthnLevel => { type => 'int' },
# SecureToken parameters # SecureToken parameters
secureTokenAllowOnError => { secureTokenAllowOnError => {
@ -3400,7 +3400,7 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{1,5})?|ldap(?:s|\+tls)?://\w[\w\-\.]*(?:
{ k => 'Mail2F', v => 'E-Mail' }, { k => 'Mail2F', v => 'E-Mail' },
{ k => 'REST', v => 'REST' }, { k => 'REST', v => 'REST' },
{ k => 'Ext2F', v => 'External' }, { k => 'Ext2F', v => 'External' },
{ k => 'Radius', v => 'Radius' }, { k => 'Radius', v => 'Radius' },
], ],
}, },
@ -3446,7 +3446,6 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{1,5})?|ldap(?:s|\+tls)?://\w[\w\-\.]*(?:
# OpenID Connect service # OpenID Connect service
oidcServiceMetaDataIssuer => { oidcServiceMetaDataIssuer => {
type => 'text', type => 'text',
default => 'http://auth.example.com',
documentation => 'OpenID Connect issuer', documentation => 'OpenID Connect issuer',
}, },
oidcServiceMetaDataAuthorizeURI => { oidcServiceMetaDataAuthorizeURI => {

View File

@ -162,10 +162,11 @@ sub zeroConf {
}, },
"manager.$domain" => { "manager.$domain" => {
'default' => '$uid eq "dwho" or $uid eq "rtyler"', 'default' => '$uid eq "dwho" or $uid eq "rtyler"',
'(?#Configuration)^/(manager\.html|confs|$)' => '(?#Configuration)^/(.*?\.(fcgi|psgi)/)?(manager\.html|confs/|$)'
'$uid eq "dwho"', => '$uid eq "dwho"',
'(?#Sessions)/sessions' => '$uid eq "dwho" or $uid eq "rtyler"', '(?#Sessions)/(.*?\.(fcgi|psgi)/)?sessions' =>
'(?#Notifications)/notifications' => '$uid eq "dwho" or $uid eq "rtyler"',
'(?#Notifications)/(.*?\.(fcgi|psgi)/)?notifications' =>
'$uid eq "dwho" or $uid eq "rtyler"', '$uid eq "dwho" or $uid eq "rtyler"',
} }
}, },

View File

@ -32,6 +32,7 @@ schemes =
overScheme = overScheme =
_whatToTrace: (t,v,level,over) -> _whatToTrace: (t,v,level,over) ->
console.log 'overSchema => level', level, 'over', over
if level == 1 and v.length > over if level == 1 and v.length > over
"#{t}=#{v}*&groupBy=substr(#{t},#{(level+over+1)})" "#{t}=#{v}*&groupBy=substr(#{t},#{(level+over+1)})"
else else

View File

@ -68,19 +68,22 @@ overScheme =
_whatToTrace: (t,v,level,over) -> _whatToTrace: (t,v,level,over) ->
# "v.length > over" avoids a loop if one user opened more than "max" # "v.length > over" avoids a loop if one user opened more than "max"
# sessions # sessions
console.log 'overSchema => level', level, 'over', over
if level == 1 and v.length > over if level == 1 and v.length > over
"#{t}=#{v}*&groupBy=substr(#{t},#{(level+over+1)})" "#{t}=#{v}*&groupBy=substr(#{t},#{(level+over+1)})"
else else
null null
# Note: IPv4 only # Note: IPv4 only
ipAddr: (t,v,level,over) -> ipAddr: (t,v,level,over) ->
if level > 0 and level < 4 console.log 'overSchema => level', level, 'over', over
"#{t}=#{v}*&groupBy=net(#{t},#{16*level+4*(over+1)},2)" if level > 0 and level < 4 and !v.match(/^\d+\.\d/) and over < 2
"#{t}=#{v}*&groupBy=net(#{t},#{16*level+4*(over+1)},#{1+level+over})"
else else
null null
_startTime: (t,v,level,over) -> _startTime: (t,v,level,over) ->
console.log 'overSchema => level', level, 'over', over
if level > 3 if level > 3
"#{t}=#{v}*&groupBy=substr(#{t},#{(9+level+over+1)})" "#{t}=#{v}*&groupBy=substr(#{t},#{(10+level+over)})"
else else
null null
@ -166,8 +169,6 @@ llapp.controller 'SessionsExplorerCtrl', ['$scope', '$translator', '$location',
$scope.waiting = false $scope.waiting = false
$scope.showT = false $scope.showT = false
# Delete # Delete
$scope.deleteSession = -> $scope.deleteSession = ->
$scope.waiting = true $scope.waiting = true

View File

@ -9,7 +9,7 @@ This file contains:
- the AngularJS controller - the AngularJS controller
### ###
llapp = angular.module 'llngManager', ['ui.tree', 'ui.bootstrap', 'llApp', 'ngCookies'] llapp = angular.module 'llngViewer', ['ui.tree', 'ui.bootstrap', 'llApp', 'ngCookies']
### ###
Main AngularJS controller Main AngularJS controller
@ -321,6 +321,22 @@ llapp.controller 'TreeCtrl', [
$scope.showT = false $scope.showT = false
setHelp scope setHelp scope
$scope.keyWritable = (scope) ->
node = scope.$modelValue
# regexp-assemble of:
# authChoice
# cmbModule
# keyText
# menuApp
# menuCat
# rule
# samlAttribute
# samlIDPMetaDataNode
# samlSPMetaDataNode
# sfExtra
# virtualHost
return if node.type and node.type.match /^(?:s(?:aml(?:(?:ID|S)PMetaDataNod|Attribut)e|fExtra)|(?:(?:cmbMod|r)ul|authChoic)e|(?:virtualHos|keyTex)t|menu(?:App|Cat))$/ then true else false
# method `getKey()`: # method `getKey()`:
# - return a promise with the data: # - return a promise with the data:
# - from node when set # - from node when set
@ -351,10 +367,13 @@ llapp.controller 'TreeCtrl', [
node.data = node['default'] node.data = node['default']
else else
node.data = data.value node.data = data.value
if node.data.toString().match /_Hidden_$/ if (node.data and node.data.toString().match /_Hidden_$/)
node.type = 'text' node.type = 'text'
node.data = '######' node.data = '######'
# Cast int as int (remember that booleans are int for Perl) # Cast int as int (remember that booleans are int for Perl)
if node.type and node.type.match /^(bool|trool|boolOrExpr)$/
if typeof node.data == 'string' and node.data.match /^(?:-1|0|1)$/
node.data = parseInt(node.data, 10)
if node.type and node.type.match /^int$/ if node.type and node.type.match /^int$/
node.data = parseInt(node.data, 10) node.data = parseInt(node.data, 10)
# Split SAML types # Split SAML types
@ -450,5 +469,4 @@ llapp.controller 'TreeCtrl', [
unless c unless c
console.log "Redirecting to /view/latest" console.log "Redirecting to /view/latest"
$location.path '/view/latest' $location.path '/view/latest'
] ]

View File

@ -1 +1 @@
var saveAs=saveAs||function(view){"use strict";if(typeof navigator!=="undefined"&&/MSIE [1-9]\./.test(navigator.userAgent)){return}var doc=view.document,get_URL=function(){return view.URL||view.webkitURL||view},save_link=doc.createElementNS("http://www.w3.org/1999/xhtml","a"),can_use_save_link="download"in save_link,click=function(node){var event=doc.createEvent("MouseEvents");event.initMouseEvent("click",true,false,view,0,0,0,0,0,false,false,false,false,0,null);node.dispatchEvent(event)},webkit_req_fs=view.webkitRequestFileSystem,req_fs=view.requestFileSystem||webkit_req_fs||view.mozRequestFileSystem,throw_outside=function(ex){(view.setImmediate||view.setTimeout)(function(){throw ex},0)},force_saveable_type="application/octet-stream",fs_min_size=0,arbitrary_revoke_timeout=500,revoke=function(file){var revoker=function(){if(typeof file==="string"){get_URL().revokeObjectURL(file)}else{file.remove()}};if(view.chrome){revoker()}else{setTimeout(revoker,arbitrary_revoke_timeout)}},dispatch=function(filesaver,event_types,event){event_types=[].concat(event_types);var i=event_types.length;while(i--){var listener=filesaver["on"+event_types[i]];if(typeof listener==="function"){try{listener.call(filesaver,event||filesaver)}catch(ex){throw_outside(ex)}}}},auto_bom=function(blob){if(/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)){return new Blob(["\ufeff",blob],{type:blob.type})}return blob},FileSaver=function(blob,name){blob=auto_bom(blob);var filesaver=this,type=blob.type,blob_changed=false,object_url,target_view,dispatch_all=function(){dispatch(filesaver,"writestart progress write writeend".split(" "))},fs_error=function(){if(blob_changed||!object_url){object_url=get_URL().createObjectURL(blob)}if(target_view){target_view.location.href=object_url}else{var new_tab=view.open(object_url,"_blank");if(new_tab==undefined&&typeof safari!=="undefined"){view.location.href=object_url}}filesaver.readyState=filesaver.DONE;dispatch_all();revoke(object_url)},abortable=function(func){return function(){if(filesaver.readyState!==filesaver.DONE){return func.apply(this,arguments)}}},create_if_not_found={create:true,exclusive:false},slice;filesaver.readyState=filesaver.INIT;if(!name){name="download"}if(can_use_save_link){object_url=get_URL().createObjectURL(blob);save_link.href=object_url;save_link.download=name;click(save_link);filesaver.readyState=filesaver.DONE;dispatch_all();revoke(object_url);return}if(view.chrome&&type&&type!==force_saveable_type){slice=blob.slice||blob.webkitSlice;blob=slice.call(blob,0,blob.size,force_saveable_type);blob_changed=true}if(webkit_req_fs&&name!=="download"){name+=".download"}if(type===force_saveable_type||webkit_req_fs){target_view=view}if(!req_fs){fs_error();return}fs_min_size+=blob.size;req_fs(view.TEMPORARY,fs_min_size,abortable(function(fs){fs.root.getDirectory("saved",create_if_not_found,abortable(function(dir){var save=function(){dir.getFile(name,create_if_not_found,abortable(function(file){file.createWriter(abortable(function(writer){writer.onwriteend=function(event){target_view.location.href=file.toURL();filesaver.readyState=filesaver.DONE;dispatch(filesaver,"writeend",event);revoke(file)};writer.onerror=function(){var error=writer.error;if(error.code!==error.ABORT_ERR){fs_error()}};"writestart progress write abort".split(" ").forEach(function(event){writer["on"+event]=filesaver["on"+event]});writer.write(blob);filesaver.abort=function(){writer.abort();filesaver.readyState=filesaver.DONE};filesaver.readyState=filesaver.WRITING}),fs_error)}),fs_error)};dir.getFile(name,{create:false},abortable(function(file){file.remove();save()}),abortable(function(ex){if(ex.code===ex.NOT_FOUND_ERR){save()}else{fs_error()}}))}),fs_error)}),fs_error)},FS_proto=FileSaver.prototype,saveAs=function(blob,name){return new FileSaver(blob,name)};if(typeof navigator!=="undefined"&&navigator.msSaveOrOpenBlob){return function(blob,name){return navigator.msSaveOrOpenBlob(auto_bom(blob),name)}}FS_proto.abort=function(){var filesaver=this;filesaver.readyState=filesaver.DONE;dispatch(filesaver,"abort")};FS_proto.readyState=FS_proto.INIT=0;FS_proto.WRITING=1;FS_proto.DONE=2;FS_proto.error=FS_proto.onwritestart=FS_proto.onprogress=FS_proto.onwrite=FS_proto.onabort=FS_proto.onerror=FS_proto.onwriteend=null;return saveAs}(typeof self!=="undefined"&&self||typeof window!=="undefined"&&window||this.content);if(typeof module!=="undefined"&&module.exports){module.exports.saveAs=saveAs}else if(typeof define!=="undefined"&&define!==null&&define.amd!=null){define([],function(){return saveAs})} var saveAs=saveAs||function(l){"use strict";if("undefined"==typeof navigator||!/MSIE [1-9]\./.test(navigator.userAgent)){var p=l.document,w=function(){return l.URL||l.webkitURL||l},v=p.createElementNS("http://www.w3.org/1999/xhtml","a"),y="download"in v,m=l.webkitRequestFileSystem,h=l.requestFileSystem||m||l.mozRequestFileSystem,i=function(e){(l.setImmediate||l.setTimeout)(function(){throw e},0)},S="application/octet-stream",O=0,E=function(e){function t(){"string"==typeof e?w().revokeObjectURL(e):e.remove()}l.chrome?t():setTimeout(t,500)},R=function(e,t,n){for(var o=(t=[].concat(t)).length;o--;){var r=e["on"+t[o]];if("function"==typeof r)try{r.call(e,n||e)}catch(e){i(e)}}},b=function(e){return/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\ufeff",e],{type:e.type}):e},n=function(o,n){o=b(o);function e(){R(f,"writestart progress write writeend".split(" "))}function r(){!s&&t||(t=w().createObjectURL(o)),a?a.location.href=t:null==l.open(t,"_blank")&&"undefined"!=typeof safari&&(l.location.href=t),f.readyState=f.DONE,e(),E(t)}function i(e){return function(){if(f.readyState!==f.DONE)return e.apply(this,arguments)}}var t,a,c,f=this,u=o.type,s=!1,d={create:!0,exclusive:!1};if(f.readyState=f.INIT,n=n||"download",y)return t=w().createObjectURL(o),v.href=t,v.download=n,function(e){var t=p.createEvent("MouseEvents");t.initMouseEvent("click",!0,!1,l,0,0,0,0,0,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}(v),f.readyState=f.DONE,e(),void E(t);l.chrome&&u&&u!==S&&(c=o.slice||o.webkitSlice,o=c.call(o,0,o.size,S),s=!0),m&&"download"!==n&&(n+=".download"),u!==S&&!m||(a=l),h?(O+=o.size,h(l.TEMPORARY,O,i(function(e){e.root.getDirectory("saved",d,i(function(e){function t(){e.getFile(n,d,i(function(n){n.createWriter(i(function(t){t.onwriteend=function(e){a.location.href=n.toURL(),f.readyState=f.DONE,R(f,"writeend",e),E(n)},t.onerror=function(){var e=t.error;e.code!==e.ABORT_ERR&&r()},"writestart progress write abort".split(" ").forEach(function(e){t["on"+e]=f["on"+e]}),t.write(o),f.abort=function(){t.abort(),f.readyState=f.DONE},f.readyState=f.WRITING}),r)}),r)}e.getFile(n,{create:!1},i(function(e){e.remove(),t()}),i(function(e){e.code===e.NOT_FOUND_ERR?t():r()}))}),r)}),r)):r()},e=n.prototype;return"undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(e,t){return navigator.msSaveOrOpenBlob(b(e),t)}:(e.abort=function(){this.readyState=this.DONE,R(this,"abort")},e.readyState=e.INIT=0,e.WRITING=1,e.DONE=2,e.error=e.onwritestart=e.onprogress=e.onwrite=e.onabort=e.onerror=e.onwriteend=null,function(e,t){return new n(e,t)})}}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||this.content);"undefined"!=typeof module&&module.exports?module.exports.saveAs=saveAs:"undefined"!=typeof define&&null!==define&&null!=define.amd&&define([],function(){return saveAs});

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-manager/site/htdocs/static/bwr/file-saver.js/FileSaver.js"],"names":["saveAs","view","navigator","test","userAgent","doc","document","get_URL","URL","webkitURL","save_link","createElementNS","can_use_save_link","webkit_req_fs","webkitRequestFileSystem","req_fs","requestFileSystem","mozRequestFileSystem","throw_outside","ex","setImmediate","setTimeout","force_saveable_type","fs_min_size","revoke","file","revoker","revokeObjectURL","remove","chrome","dispatch","filesaver","event_types","event","i","concat","length","listener","call","auto_bom","blob","type","Blob","FileSaver","name","dispatch_all","split","fs_error","blob_changed","object_url","createObjectURL","target_view","location","href","undefined","open","safari","readyState","DONE","abortable","func","apply","this","arguments","slice","create_if_not_found","create","exclusive","INIT","download","node","createEvent","initMouseEvent","dispatchEvent","click","webkitSlice","size","TEMPORARY","fs","root","getDirectory","dir","save","getFile","createWriter","writer","onwriteend","toURL","onerror","error","code","ABORT_ERR","forEach","write","abort","WRITING","NOT_FOUND_ERR","FS_proto","prototype","msSaveOrOpenBlob","onwritestart","onprogress","onwrite","onabort","self","window","content","module","exports","define","amd"],"mappings":"AAcA,IAAIA,OAASA,QAAW,SAASC,GAChC,aAEA,GAAyB,oBAAdC,YAA6B,eAAeC,KAAKD,UAAUE,WAAtE,CAGA,IACGC,EAAMJ,EAAKK,SAEXC,EAAU,WACX,OAAON,EAAKO,KAAOP,EAAKQ,WAAaR,GAEpCS,EAAYL,EAAIM,gBAAgB,+BAAgC,KAChEC,EAAoB,aAAcF,EASlCG,EAAgBZ,EAAKa,wBACrBC,EAASd,EAAKe,mBAAqBH,GAAiBZ,EAAKgB,qBACzDC,EAAgB,SAASC,IACzBlB,EAAKmB,cAAgBnB,EAAKoB,YAAY,WACtC,MAAMF,GACJ,IAEFG,EAAsB,2BACtBC,EAAc,EAKdC,EAAS,SAASC,GACL,SAAVC,IACiB,iBAATD,EACVlB,IAAUoB,gBAAgBF,GAE1BA,EAAKG,SAGH3B,EAAK4B,OACRH,IAEAL,WAAWK,EAZgB,MAe3BI,EAAW,SAASC,EAAWC,EAAaC,GAG7C,IADA,IAAIC,GADJF,EAAc,GAAGG,OAAOH,IACJI,OACbF,KAAK,CACX,IAAIG,EAAWN,EAAU,KAAOC,EAAYE,IAC5C,GAAwB,mBAAbG,EACV,IACCA,EAASC,KAAKP,EAAWE,GAASF,GACjC,MAAOZ,GACRD,EAAcC,MAKhBoB,EAAW,SAASC,GAErB,MAAI,6EAA6ErC,KAAKqC,EAAKC,MACnF,IAAIC,KAAK,CAAC,SAAUF,GAAO,CAACC,KAAMD,EAAKC,OAExCD,GAENG,EAAY,SAASH,EAAMI,GAC5BJ,EAAOD,EAASC,GAQE,SAAfK,IACDf,EAASC,EAAW,qCAAqCe,MAAM,MAGnD,SAAXC,KAEGC,GAAiBC,IACpBA,EAAa1C,IAAU2C,gBAAgBV,IAEpCW,EACHA,EAAYC,SAASC,KAAOJ,EAGbK,MADDrD,EAAKsD,KAAKN,EAAY,WACU,oBAAXO,SAElCvD,EAAKmD,SAASC,KAAOJ,GAGvBlB,EAAU0B,WAAa1B,EAAU2B,KACjCb,IACArB,EAAOyB,GAEM,SAAZU,EAAqBC,GACtB,OAAO,WACN,GAAI7B,EAAU0B,aAAe1B,EAAU2B,KACtC,OAAOE,EAAKC,MAAMC,KAAMC,YA/B5B,IAIGd,EACAE,EA+BAa,EAnCAjC,EAAY+B,KACZrB,EAAOD,EAAKC,KACZO,GAAe,EAgCfiB,EAAsB,CAACC,QAAQ,EAAMC,WAAW,GAOnD,GAJApC,EAAU0B,WAAa1B,EAAUqC,KAEhCxB,EADIA,GACG,WAEJhC,EAQH,OAPAqC,EAAa1C,IAAU2C,gBAAgBV,GACvC9B,EAAU2C,KAAOJ,EACjBvC,EAAU2D,SAAWzB,EAxGb,SAAS0B,GAClB,IAAIrC,EAAQ5B,EAAIkE,YAAY,eAC5BtC,EAAMuC,eACL,SAAS,GAAM,EAAOvE,EAAM,EAAG,EAAG,EAAG,EAAG,GACtC,GAAO,GAAO,GAAO,EAAO,EAAG,MAElCqE,EAAKG,cAAcxC,GAmGlByC,CAAMhE,GACNqB,EAAU0B,WAAa1B,EAAU2B,KACjCb,SACArB,EAAOyB,GAQJhD,EAAK4B,QAAUY,GAAQA,IAASnB,IACnC0C,EAAQxB,EAAKwB,OAASxB,EAAKmC,YAC3BnC,EAAOwB,EAAM1B,KAAKE,EAAM,EAAGA,EAAKoC,KAAMtD,GACtC0B,GAAe,GAKZnC,GAA0B,aAAT+B,IACpBA,GAAQ,aAELH,IAASnB,IAAuBT,IACnCsC,EAAclD,GAEVc,GAILQ,GAAeiB,EAAKoC,KACpB7D,EAAOd,EAAK4E,UAAWtD,EAAaoC,EAAU,SAASmB,GACtDA,EAAGC,KAAKC,aAAa,QAASf,EAAqBN,EAAU,SAASsB,GAC1D,SAAPC,IACHD,EAAIE,QAAQvC,EAAMqB,EAAqBN,EAAU,SAASlC,GACzDA,EAAK2D,aAAazB,EAAU,SAAS0B,GACpCA,EAAOC,WAAa,SAASrD,GAC5BkB,EAAYC,SAASC,KAAO5B,EAAK8D,QACjCxD,EAAU0B,WAAa1B,EAAU2B,KACjC5B,EAASC,EAAW,WAAYE,GAChCT,EAAOC,IAER4D,EAAOG,QAAU,WAChB,IAAIC,EAAQJ,EAAOI,MACfA,EAAMC,OAASD,EAAME,WACxB5C,KAGF,kCAAkCD,MAAM,KAAK8C,QAAQ,SAAS3D,GAC7DoD,EAAO,KAAOpD,GAASF,EAAU,KAAOE,KAEzCoD,EAAOQ,MAAMrD,GACbT,EAAU+D,MAAQ,WACjBT,EAAOS,QACP/D,EAAU0B,WAAa1B,EAAU2B,MAElC3B,EAAU0B,WAAa1B,EAAUgE,UAC9BhD,KACDA,GAELkC,EAAIE,QAAQvC,EAAM,CAACsB,QAAQ,GAAQP,EAAU,SAASlC,GAErDA,EAAKG,SACLsD,MACGvB,EAAU,SAASxC,GAClBA,EAAGuE,OAASvE,EAAG6E,cAClBd,IAEAnC,SAGCA,KACDA,IA7CHA,KA+CAkD,EAAWtD,EAAUuD,UAMxB,MAAyB,oBAAdhG,WAA6BA,UAAUiG,iBAC1C,SAAS3D,EAAMI,GACrB,OAAO1C,UAAUiG,iBAAiB5D,EAASC,GAAOI,KAIpDqD,EAASH,MAAQ,WACAhC,KACNL,WADMK,KACiBJ,KACjC5B,EAFgBgC,KAEI,UAErBmC,EAASxC,WAAawC,EAAS7B,KAAO,EACtC6B,EAASF,QAAU,EACnBE,EAASvC,KAAO,EAEhBuC,EAASR,MACTQ,EAASG,aACTH,EAASI,WACTJ,EAASK,QACTL,EAASM,QACTN,EAAST,QACTS,EAASX,WACR,KA3BW,SAAS9C,EAAMI,GACzB,OAAO,IAAID,EAAUH,EAAMI,MAlMP,CAgOH,oBAAT4D,MAAwBA,MACb,oBAAXC,QAA0BA,QACjC3C,KAAK4C,SAMa,oBAAXC,QAA0BA,OAAOC,QAC1CD,OAAOC,QAAQ5G,OAASA,OACI,oBAAX6G,QAAqC,OAAXA,QAAmC,MAAdA,OAAOC,KACvED,OAAO,GAAI,WACT,OAAO7G"}

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
/* /*
* 2ndFA Session explorer * 2ndFA Session explorer
@ -42,6 +42,7 @@
overScheme = { overScheme = {
_whatToTrace: function(t, v, level, over) { _whatToTrace: function(t, v, level, over) {
console.log('overSchema => level', level, 'over', over);
if (level === 1 && v.length > over) { if (level === 1 && v.length > over) {
return t + "=" + v + "*&groupBy=substr(" + t + "," + (level + over + 1) + ")"; return t + "=" + v + "*&groupBy=substr(" + t + "," + (level + over + 1) + ")";
} else { } else {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1149,6 +1149,7 @@ function templates(tpl,key) {
"type" : "bool" "type" : "bool"
}, },
{ {
"default" : "",
"get" : tpl+"s/"+key+"/"+"vhostAliases", "get" : tpl+"s/"+key+"/"+"vhostAliases",
"id" : tpl+"s/"+key+"/"+"vhostAliases", "id" : tpl+"s/"+key+"/"+"vhostAliases",
"title" : "vhostAliases" "title" : "vhostAliases"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
(function(){var llapp;llapp=angular.module("llngConfDiff",["ui.tree","ui.bootstrap","llApp","ngCookies"],function($rootScopeProvider){return $rootScopeProvider.digestTtl(15)});llapp.controller("DiffCtrl",["$scope","$http","$q","$translator","$location",function($scope,$http,$q,$translator,$location){var buildTree,getCfg,init,pathEvent,readDiff,reverseTree,toNodes;$scope.links=links;$scope.menulinks=menulinks;$scope.staticPrefix=staticPrefix;$scope.scriptname=scriptname;$scope.availableLanguages=availableLanguages;$scope.waiting=true;$scope.showM=false;$scope.cfg=[];$scope.data={};$scope.currentNode=null;$scope.translateTitle=function(node){return $translator.translateField(node,"title")};$scope.translateP=$translator.translateP;$scope.translate=$translator.translate;$scope.toggle=function(scope){return scope.toggle()};$scope.stoggle=function(scope,node){$scope.currentNode=node;return scope.toggle()};$scope.menuClick=function(button){if(button.popup){window.open(button.popup)}else{if(!button.action){button.action=button.title}switch(typeof button.action){case"function":button.action($scope.currentNode,$scope);break;case"string":$scope[button.action]();break;default:console.log(typeof button.action)}}return $scope.showM=false};$scope.getLanguage=function(lang){$scope.lang=lang;$scope.init();return $scope.showM=false};getCfg=function(b,n){var d;d=$q.defer();if($scope.cfg[b]==null||$scope.cfg[b]!==n){$http.get(""+confPrefix+n).then(function(response){var date;if(response&&response.data){$scope.cfg[b]=response.data;date=new Date(response.data.cfgDate*1e3);$scope.cfg[b].date=date.toLocaleString();console.log("Metadatas of cfg "+n+" loaded");return d.resolve("OK")}else{return d.reject(response)}},function(response){console.log(response);return d.reject("NOK")})}else{d.resolve()}return d.promise};init=function(){var d;$scope.message=null;$scope.currentNode=null;d=$q.defer();return $http.get(scriptname+"diff/"+$scope.cfg[0].cfgNum+"/"+$scope.cfg[1].cfgNum).then(function(response){var data;data=[];data=readDiff(response.data[0],response.data[1]);$scope.data=buildTree(data);$scope.message="";return $scope.waiting=false},function(response){return $scope.message=$scope.translate("error")+" : "+response.statusLine})};readDiff=function(c1,c2,tr){var k,res,tmp,v;if(tr==null){tr=true}res=[];for(k in c1){v=c1[k];if(tr){tmp={title:$scope.translate(k),id:k}}else{tmp={title:k}}if(!k.match(/^cfg(?:Num|Log|Author(?:IP)?|Date)$/)){if(v!=null&&typeof v==="object"){if(v.constructor==="array"){tmp.oldvalue=v;tmp.newvalue=c2[k]}else if(typeof c2[k]==="object"){tmp.nodes=readDiff(c1[k],c2[k],false)}else{tmp.oldnodes=toNodes(v,"old")}}else{tmp.oldvalue=v;tmp.newvalue=c2[k]}res.push(tmp)}}for(k in c2){v=c2[k];if(!(k.match(/^cfg(?:Num|Log|Author(?:IP)?|Date)$/)||c1[k]!=null)){if(tr){tmp={title:$scope.translate(k),id:k}}else{tmp={title:k}}if(v!=null&&typeof v==="object"){if(v.constructor==="array"){tmp.newvalue=v}else{console.log("Iteration");tmp.newnodes=toNodes(v,"new")}}else{tmp.newvalue=v}res.push(tmp)}}return res};toNodes=function(c,s){var k,res,tmp,v;res=[];for(k in c){v=c[k];tmp={title:k};if(typeof v==="object"){if(v.constructor==="array"){tmp[s+"value"]=v}else{tmp[s+"nodes"]=toNodes(c[k],s)}}else{tmp[s+"value"]=v}res.push(tmp)}return res};reverseTree=[];buildTree=function(data){var elem,found,i,j,l,len,len1,len2,m,n,node,offset,path,res;if(reverseTree==null){return data}res=[];for(j=0,len=data.length;j<len;j++){elem=data[j];offset=res;path=reverseTree[elem.id]!=null?reverseTree[elem.id].split("/"):"";for(l=0,len1=path.length;l<len1;l++){node=path[l];if(node.length>0){if(offset.length){found=-1;for(i=m=0,len2=offset.length;m<len2;i=++m){n=offset[i];if(n.id===node){found=i}}if(found!==-1){offset=offset[found].nodes}else{offset.push({id:node,title:$scope.translate(node),nodes:[]});offset=offset[offset.length-1].nodes}}else{offset.push({id:node,title:$scope.translate(node),nodes:[]});offset=offset[0].nodes}}}offset.push(elem)}return res};$scope.newDiff=function(){return $location.path("/"+$scope.cfg[0].cfgNum+"/"+$scope.cfg[1].cfgNum)};pathEvent=function(event,next,current){var n;n=next.match(new RegExp("#!?/(latest|[0-9]+)(?:/(latest|[0-9]+))?$"));if(n===null){$location.path("/latest")}else{$scope.waiting=true;$q.all([$translator.init($scope.lang),$http.get(staticPrefix+"reverseTree.json").then(function(response){reverseTree=response.data;return console.log("Structure loaded")}),getCfg(0,n[1]),n[2]!=null?getCfg(1,n[2]):void 0]).then(function(){if(n[2]!=null){return init()}else{if($scope.cfg[0].prev){$scope.cfg[1]=$scope.cfg[0];return getCfg(0,$scope.cfg[1].prev).then(function(){return init()})}else{$scope.data=[];return $scope.waiting=false}}},function(){$scope.message=$scope.translate("error");return $scope.waiting=false})}return true};return $scope.$on("$locationChangeSuccess",pathEvent)}])}).call(this); (function(){angular.module("llngConfDiff",["ui.tree","ui.bootstrap","llApp","ngCookies"],function(t){return t.digestTtl(15)}).controller("DiffCtrl",["$scope","$http","$q","$translator","$location",function(p,o,l,r,i){var n,u,c,t,s,h,f;return p.links=links,p.menulinks=menulinks,p.staticPrefix=staticPrefix,p.scriptname=scriptname,p.availableLanguages=availableLanguages,p.waiting=!0,p.showM=!1,p.cfg=[],p.data={},p.currentNode=null,p.translateTitle=function(t){return r.translateField(t,"title")},p.translateP=r.translateP,p.translate=r.translate,p.toggle=function(t){return t.toggle()},p.stoggle=function(t,e){return p.currentNode=e,t.toggle()},p.menuClick=function(t){if(t.popup)window.open(t.popup);else switch(t.action||(t.action=t.title),typeof t.action){case"function":t.action(p.currentNode,p);break;case"string":p[t.action]();break;default:console.log(typeof t.action)}return p.showM=!1},p.getLanguage=function(t){return p.lang=t,p.init(),p.showM=!1},u=function(n,a){var r;return r=l.defer(),null==p.cfg[n]||p.cfg[n]!==a?o.get(""+confPrefix+a).then(function(t){var e;return t&&t.data?(p.cfg[n]=t.data,e=new Date(1e3*t.data.cfgDate),p.cfg[n].date=e.toLocaleString(),console.log("Metadatas of cfg "+a+" loaded"),r.resolve("OK")):r.reject(t)},function(t){return console.log(t),r.reject("NOK")}):r.resolve(),r.promise},c=function(){return p.message=null,p.currentNode=null,l.defer(),o.get(scriptname+"diff/"+p.cfg[0].cfgNum+"/"+p.cfg[1].cfgNum).then(function(t){var e;return[],e=s(t.data[0],t.data[1]),p.data=n(e),p.message="",p.waiting=!1},function(t){return p.message=p.translate("error")+" : "+t.statusLine})},s=function(t,e,n){var a,r,o,l;for(a in null==n&&(n=!0),r=[],t)l=t[a],o=n?{title:p.translate(a),id:a}:{title:a},a.match(/^cfg(?:Num|Log|Author(?:IP)?|Date)$/)||(null!=l&&"object"==typeof l?"array"===l.constructor?(o.oldvalue=l,o.newvalue=e[a]):"object"==typeof e[a]?o.nodes=s(t[a],e[a],!1):o.oldnodes=f(l,"old"):(o.oldvalue=l,o.newvalue=e[a]),r.push(o));for(a in e)l=e[a],a.match(/^cfg(?:Num|Log|Author(?:IP)?|Date)$/)||null!=t[a]||(o=n?{title:p.translate(a),id:a}:{title:a},null!=l&&"object"==typeof l?"array"===l.constructor?o.newvalue=l:(console.log("Iteration"),o.newnodes=f(l,"new")):o.newvalue=l,r.push(o));return r},f=function(t,e){var n,a,r,o;for(n in a=[],t)r={title:n},"object"==typeof(o=t[n])?"array"===o.constructor?r[e+"value"]=o:r[e+"nodes"]=f(t[n],e):r[e+"value"]=o,a.push(r);return a},h=[],n=function(t){var e,n,a,r,o,l,i,u,c,s,f,g,d;if(null==h)return t;for(d=[],r=0,l=t.length;r<l;r++){for(e=t[r],f=d,o=0,i=(g=null!=h[e.id]?h[e.id].split("/"):"").length;o<i;o++)if(0<(s=g[o]).length)if(f.length){for(n=-1,a=c=0,u=f.length;c<u;a=++c)f[a].id===s&&(n=a);f=-1!==n?f[n].nodes:(f.push({id:s,title:p.translate(s),nodes:[]}),f[f.length-1].nodes)}else f.push({id:s,title:p.translate(s),nodes:[]}),f=f[0].nodes;f.push(e)}return d},p.newDiff=function(){return i.path("/"+p.cfg[0].cfgNum+"/"+p.cfg[1].cfgNum)},t=function(t,e,n){var a;return null===(a=e.match(new RegExp("#!?/(latest|[0-9]+)(?:/(latest|[0-9]+))?$")))?i.path("/latest"):(p.waiting=!0,l.all([r.init(p.lang),o.get(staticPrefix+"reverseTree.json").then(function(t){return h=t.data,console.log("Structure loaded")}),u(0,a[1]),null!=a[2]?u(1,a[2]):void 0]).then(function(){return null!=a[2]?c():p.cfg[0].prev?(p.cfg[1]=p.cfg[0],u(0,p.cfg[1].prev).then(function(){return c()})):(p.data=[],p.waiting=!1)},function(){return p.message=p.translate("error"),p.waiting=!1})),!0},p.$on("$locationChangeSuccess",t)}])}).call(this);

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
(function(){var filterFunctions;filterFunctions={authParams:function(scope,$q,node){var i,len,n,ref,wait;wait=[];ref=node.nodes;for(i=0,len=ref.length;i<len;i++){n=ref[i];wait.push(scope.getKey(n))}return $q.all(wait).then(function(){var all,j,k,l,len1,len2,len3,len4,len5,len6,m,nToShow,nd,o,p,q,r,ref1,ref2,ref3,ref4,restart,s;all=false;nToShow=[];p=function(s){var tmp;tmp=s.toLowerCase();if(tmp==="openidconnect"){tmp="oidc"}nToShow.push(tmp+"Params");if(tmp==="ad"){return nToShow.push("ldapParams")}};ref1=node.nodes;for(j=0,len1=ref1.length;j<len1;j++){n=ref1[j];p(n.data)}ref2=node.nodes_cond;for(k=0,len2=ref2.length;k<len2;k++){n=ref2[k];restart=0;nd=n._nodes?n._nodes:n.nodes;if(node.nodes[0].data==="Choice"&&n.id==="choiceParams"){console.log("Choice is selected");if(nd[1].cnodes){restart++}else{nd=nd[1]._nodes?nd[1]._nodes:nd[1].nodes;for(l=0,len3=nd.length;l<len3;l++){m=nd[l];ref3=m.data;for(o=0,len4=ref3.length;o<len4;o++){s=ref3[o];if(typeof s==="string"){p(s)}}}}}else if(node.nodes[0].data==="Combination"&&n.id==="combinationParams"){console.log("Combination is selected");if(nd[1].cnodes){restart++}else{nd=nd[1]._nodes?nd[1]._nodes:nd[1].nodes;for(q=0,len5=nd.length;q<len5;q++){m=nd[q];p(m.data.type)}}}if(restart){scope.waiting=true;scope.download({$modelValue:nd[1]}).then(function(){return filterFunctions.authParams(scope,$q,node)});return}}ref4=node.nodes_cond;for(r=0,len6=ref4.length;r<len6;r++){n=ref4[r];if(!all&&nToShow.indexOf(n.id)===-1){n.show=false}else{n.show=true}}})}};window.filterFunctions=filterFunctions}).call(this); (function(){var F;F={authParams:function(C,b,y){var n,o,x,e,s;for(s=[],n=0,o=(e=y.nodes).length;n<o;n++)x=e[n],s.push(C.getKey(x));return b.all(s).then(function(){var n,o,e,s,t,a,d,i,r,l,c,f,h,u,g,m,_,p,w,P,v;for(!1,l=[],h=function(n){var o;if("openidconnect"===(o=n.toLowerCase())&&(o="oidc"),l.push(o+"Params"),"ad"===o)return l.push("ldapParams")},n=0,s=(m=y.nodes).length;n<s;n++)h((x=m[n]).data);for(o=0,t=(_=y.nodes_cond).length;o<t;o++){if(P=0,c=(x=_[o])._nodes?x._nodes:x.nodes,"Choice"===y.nodes[0].data&&"choiceParams"===x.id)if(console.log("Choice is selected"),c[1].cnodes)P++;else for(e=0,a=(c=c[1]._nodes?c[1]._nodes:c[1].nodes).length;e<a;e++)for(f=0,d=(p=c[e].data).length;f<d;f++)"string"==typeof(v=p[f])&&h(v);else if("Combination"===y.nodes[0].data&&"combinationParams"===x.id)if(console.log("Combination is selected"),c[1].cnodes)P++;else for(u=0,i=(c=c[1]._nodes?c[1]._nodes:c[1].nodes).length;u<i;u++)h(c[u].data.type);if(P)return C.waiting=!0,void C.download({$modelValue:c[1]}).then(function(){return F.authParams(C,b,y)})}for(g=0,r=(w=y.nodes_cond).length;g<r;g++)x=w[g],-1===l.indexOf(x.id)?x.show=!1:x.show=!0})}},window.filterFunctions=F}).call(this);

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-manager/site/htdocs/static/js/filterFunctions.js"],"names":["filterFunctions","authParams","scope","$q","node","i","len","n","ref","wait","nodes","length","push","getKey","all","then","j","k","l","len1","len2","len3","len4","len5","len6","nToShow","nd","o","p","q","r","ref1","ref2","ref3","ref4","restart","s","tmp","toLowerCase","data","nodes_cond","_nodes","id","console","log","cnodes","type","waiting","download","$modelValue","indexOf","show","window","call","this"],"mappings":"CACA,WACE,IAAIA,EAEJA,EAAkB,CAChBC,WAAY,SAASC,EAAOC,EAAIC,GAC9B,IAAIC,EAAGC,EAAKC,EAAGC,EAAKC,EAGpB,IAFAA,EAAO,GAEFJ,EAAI,EAAGC,GADZE,EAAMJ,EAAKM,OACWC,OAAQN,EAAIC,EAAKD,IACrCE,EAAIC,EAAIH,GACRI,EAAKG,KAAKV,EAAMW,OAAON,IAEzB,OAAOJ,EAAGW,IAAIL,GAAMM,KAAK,WACvB,IAASC,EAAGC,EAAGC,EAAGC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAASC,EAASC,EAAIC,EAAGC,EAAGC,EAAGC,EAAGC,EAAMC,EAAMC,EAAMC,EAAMC,EAASC,EAenH,KAdM,EACNX,EAAU,GACVG,EAAI,SAASQ,GACX,IAAIC,EAMJ,GAJY,mBADZA,EAAMD,EAAEE,iBAEND,EAAM,QAERZ,EAAQb,KAAKyB,EAAM,UACP,OAARA,EACF,OAAOZ,EAAQb,KAAK,eAInBI,EAAI,EAAGG,GADZY,EAAO3B,EAAKM,OACYC,OAAQK,EAAIG,EAAMH,IAExCY,GADArB,EAAIwB,EAAKf,IACLuB,MAGN,IAAKtB,EAAI,EAAGG,GADZY,EAAO5B,EAAKoC,YACY7B,OAAQM,EAAIG,EAAMH,IAAK,CAI7C,GAFAkB,EAAU,EACVT,GAFAnB,EAAIyB,EAAKf,IAEFwB,OAASlC,EAAEkC,OAASlC,EAAEG,MACF,WAAvBN,EAAKM,MAAM,GAAG6B,MAA8B,iBAAThC,EAAEmC,GAEvC,GADAC,QAAQC,IAAI,sBACRlB,EAAG,GAAGmB,OACRV,SAGA,IAAKjB,EAAI,EAAGG,GADZK,EAAKA,EAAG,GAAGe,OAASf,EAAG,GAAGe,OAASf,EAAG,GAAGhB,OACnBC,OAAQO,EAAIG,EAAMH,IAGtC,IAAKS,EAAI,EAAGL,GADZW,EADIP,EAAGR,GACEqB,MACe5B,OAAQgB,EAAIL,EAAMK,IAEvB,iBADjBS,EAAIH,EAAKN,KAEPC,EAAEQ,QAKL,GAA2B,gBAAvBhC,EAAKM,MAAM,GAAG6B,MAAmC,sBAAThC,EAAEmC,GAEnD,GADAC,QAAQC,IAAI,2BACRlB,EAAG,GAAGmB,OACRV,SAGA,IAAKN,EAAI,EAAGN,GADZG,EAAKA,EAAG,GAAGe,OAASf,EAAG,GAAGe,OAASf,EAAG,GAAGhB,OACnBC,OAAQkB,EAAIN,EAAMM,IAEtCD,EADIF,EAAGG,GACHU,KAAKO,MAIf,GAAIX,EAOF,OANAjC,EAAM6C,SAAU,OAChB7C,EAAM8C,SAAS,CACbC,YAAevB,EAAG,KACjBX,KAAK,WACN,OAAOf,EAAgBC,WAAWC,EAAOC,EAAIC,KAMnD,IAAK0B,EAAI,EAAGN,GADZU,EAAO9B,EAAKoC,YACY7B,OAAQmB,EAAIN,EAAMM,IACxCvB,EAAI2B,EAAKJ,IAC8B,IAA3BL,EAAQyB,QAAQ3C,EAAEmC,IAC5BnC,EAAE4C,MAAO,EAET5C,EAAE4C,MAAO,MAOnBC,OAAOpD,gBAAkBA,IAExBqD,KAAKC"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
/* /*
LemonLDAP::NG Manager client LemonLDAP::NG Manager client

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
/* /*
* Sessions explorer * Sessions explorer
@ -74,6 +74,7 @@
overScheme = { overScheme = {
_whatToTrace: function(t, v, level, over) { _whatToTrace: function(t, v, level, over) {
console.log('overSchema => level', level, 'over', over);
if (level === 1 && v.length > over) { if (level === 1 && v.length > over) {
return t + "=" + v + "*&groupBy=substr(" + t + "," + (level + over + 1) + ")"; return t + "=" + v + "*&groupBy=substr(" + t + "," + (level + over + 1) + ")";
} else { } else {
@ -81,15 +82,17 @@
} }
}, },
ipAddr: function(t, v, level, over) { ipAddr: function(t, v, level, over) {
if (level > 0 && level < 4) { console.log('overSchema => level', level, 'over', over);
return t + "=" + v + "*&groupBy=net(" + t + "," + (16 * level + 4 * (over + 1)) + ",2)"; if (level > 0 && level < 4 && !v.match(/^\d+\.\d/) && over < 2) {
return t + "=" + v + "*&groupBy=net(" + t + "," + (16 * level + 4 * (over + 1)) + "," + (1 + level + over) + ")";
} else { } else {
return null; return null;
} }
}, },
_startTime: function(t, v, level, over) { _startTime: function(t, v, level, over) {
console.log('overSchema => level', level, 'over', over);
if (level > 3) { if (level > 3) {
return t + "=" + v + "*&groupBy=substr(" + t + "," + (9 + level + over + 1) + ")"; return t + "=" + v + "*&groupBy=substr(" + t + "," + (10 + level + over) + ")";
} else { } else {
return null; return null;
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.7 // Generated by CoffeeScript 1.12.8
/* /*
diff.html script diff.html script

View File

@ -1 +1 @@
(function(){var llapp;llapp=angular.module("llngConfDiff",["ui.tree","ui.bootstrap","llApp","ngCookies"],function($rootScopeProvider){return $rootScopeProvider.digestTtl(15)});llapp.controller("DiffCtrl",["$scope","$http","$q","$translator","$location",function($scope,$http,$q,$translator,$location){var buildTree,getCfg,init,pathEvent,readDiff,reverseTree,toNodes;$scope.links=links;$scope.menulinks=menulinks;$scope.staticPrefix=staticPrefix;$scope.scriptname=scriptname;$scope.availableLanguages=availableLanguages;$scope.waiting=true;$scope.showM=false;$scope.cfg=[];$scope.data={};$scope.currentNode=null;$scope.translateTitle=function(node){return $translator.translateField(node,"title")};$scope.translateP=$translator.translateP;$scope.translate=$translator.translate;$scope.toggle=function(scope){return scope.toggle()};$scope.stoggle=function(scope,node){$scope.currentNode=node;return scope.toggle()};$scope.menuClick=function(button){if(button.popup){window.open(button.popup)}else{if(!button.action){button.action=button.title}switch(typeof button.action){case"function":button.action($scope.currentNode,$scope);break;case"string":$scope[button.action]();break;default:console.log(typeof button.action)}}return $scope.showM=false};$scope.getLanguage=function(lang){$scope.lang=lang;$scope.init();return $scope.showM=false};getCfg=function(b,n){var d;d=$q.defer();if($scope.cfg[b]==null||$scope.cfg[b]!==n){$http.get(""+confPrefix+n).then(function(response){var date;if(response&&response.data){$scope.cfg[b]=response.data;date=new Date(response.data.cfgDate*1e3);$scope.cfg[b].date=date.toLocaleString();console.log("Metadatas of cfg "+n+" loaded");return d.resolve("OK")}else{return d.reject(response)}},function(response){console.log(response);return d.reject("NOK")})}else{d.resolve()}return d.promise};init=function(){var d;$scope.message=null;$scope.currentNode=null;d=$q.defer();return $http.get(scriptname+"view/diff/"+$scope.cfg[0].cfgNum+"/"+$scope.cfg[1].cfgNum).then(function(response){var data;data=[];data=readDiff(response.data[0],response.data[1]);$scope.data=buildTree(data);$scope.message="";return $scope.waiting=false},function(response){return $scope.message=$scope.translate("error")+" : "+response.statusLine})};readDiff=function(c1,c2,tr){var k,res,tmp,v;if(tr==null){tr=true}res=[];for(k in c1){v=c1[k];if(tr){tmp={title:$scope.translate(k),id:k}}else{tmp={title:k}}if(!k.match(/^cfg(?:Num|Log|Author(?:IP)?|Date)$/)){if(v!=null&&typeof v==="object"){if(v.constructor==="array"){tmp.oldvalue=v;tmp.newvalue=c2[k]}else if(typeof c2[k]==="object"){tmp.nodes=readDiff(c1[k],c2[k],false)}else{tmp.oldnodes=toNodes(v,"old")}}else{tmp.oldvalue=v;tmp.newvalue=c2[k]}res.push(tmp)}}for(k in c2){v=c2[k];if(!(k.match(/^cfg(?:Num|Log|Author(?:IP)?|Date)$/)||c1[k]!=null)){if(tr){tmp={title:$scope.translate(k),id:k}}else{tmp={title:k}}if(v!=null&&typeof v==="object"){if(v.constructor==="array"){tmp.newvalue=v}else{console.log("Iteration");tmp.newnodes=toNodes(v,"new")}}else{tmp.newvalue=v}res.push(tmp)}}return res};toNodes=function(c,s){var k,res,tmp,v;res=[];for(k in c){v=c[k];tmp={title:k};if(typeof v==="object"){if(v.constructor==="array"){tmp[s+"value"]=v}else{tmp[s+"nodes"]=toNodes(c[k],s)}}else{tmp[s+"value"]=v}res.push(tmp)}return res};reverseTree=[];buildTree=function(data){var elem,found,i,j,l,len,len1,len2,m,n,node,offset,path,res;if(reverseTree==null){return data}res=[];for(j=0,len=data.length;j<len;j++){elem=data[j];offset=res;path=reverseTree[elem.id]!=null?reverseTree[elem.id].split("/"):"";for(l=0,len1=path.length;l<len1;l++){node=path[l];if(node.length>0){if(offset.length){found=-1;for(i=m=0,len2=offset.length;m<len2;i=++m){n=offset[i];if(n.id===node){found=i}}if(found!==-1){offset=offset[found].nodes}else{offset.push({id:node,title:$scope.translate(node),nodes:[]});offset=offset[offset.length-1].nodes}}else{offset.push({id:node,title:$scope.translate(node),nodes:[]});offset=offset[0].nodes}}}offset.push(elem)}return res};$scope.newDiff=function(){return $location.path("/"+$scope.cfg[0].cfgNum+"/"+$scope.cfg[1].cfgNum)};pathEvent=function(event,next,current){var n;n=next.match(new RegExp("#!?/(latest|[0-9]+)(?:/(latest|[0-9]+))?$"));if(n===null){$location.path("/latest")}else{$scope.waiting=true;$q.all([$translator.init($scope.lang),$http.get(staticPrefix+"reverseTree.json").then(function(response){reverseTree=response.data;return console.log("Structure loaded")}),getCfg(0,n[1]),n[2]!=null?getCfg(1,n[2]):void 0]).then(function(){if(n[2]!=null){return init()}else{if($scope.cfg[0].prev){$scope.cfg[1]=$scope.cfg[0];return getCfg(0,$scope.cfg[1].prev).then(function(){return init()})}else{$scope.data=[];return $scope.waiting=false}}},function(){$scope.message=$scope.translate("error");return $scope.waiting=false})}return true};return $scope.$on("$locationChangeSuccess",pathEvent)}])}).call(this); (function(){angular.module("llngConfDiff",["ui.tree","ui.bootstrap","llApp","ngCookies"],function(t){return t.digestTtl(15)}).controller("DiffCtrl",["$scope","$http","$q","$translator","$location",function(p,o,l,r,i){var n,u,c,t,s,h,f;return p.links=links,p.menulinks=menulinks,p.staticPrefix=staticPrefix,p.scriptname=scriptname,p.availableLanguages=availableLanguages,p.waiting=!0,p.showM=!1,p.cfg=[],p.data={},p.currentNode=null,p.translateTitle=function(t){return r.translateField(t,"title")},p.translateP=r.translateP,p.translate=r.translate,p.toggle=function(t){return t.toggle()},p.stoggle=function(t,e){return p.currentNode=e,t.toggle()},p.menuClick=function(t){if(t.popup)window.open(t.popup);else switch(t.action||(t.action=t.title),typeof t.action){case"function":t.action(p.currentNode,p);break;case"string":p[t.action]();break;default:console.log(typeof t.action)}return p.showM=!1},p.getLanguage=function(t){return p.lang=t,p.init(),p.showM=!1},u=function(n,a){var r;return r=l.defer(),null==p.cfg[n]||p.cfg[n]!==a?o.get(""+confPrefix+a).then(function(t){var e;return t&&t.data?(p.cfg[n]=t.data,e=new Date(1e3*t.data.cfgDate),p.cfg[n].date=e.toLocaleString(),console.log("Metadatas of cfg "+a+" loaded"),r.resolve("OK")):r.reject(t)},function(t){return console.log(t),r.reject("NOK")}):r.resolve(),r.promise},c=function(){return p.message=null,p.currentNode=null,l.defer(),o.get(scriptname+"view/diff/"+p.cfg[0].cfgNum+"/"+p.cfg[1].cfgNum).then(function(t){var e;return[],e=s(t.data[0],t.data[1]),p.data=n(e),p.message="",p.waiting=!1},function(t){return p.message=p.translate("error")+" : "+t.statusLine})},s=function(t,e,n){var a,r,o,l;for(a in null==n&&(n=!0),r=[],t)l=t[a],o=n?{title:p.translate(a),id:a}:{title:a},a.match(/^cfg(?:Num|Log|Author(?:IP)?|Date)$/)||(null!=l&&"object"==typeof l?"array"===l.constructor?(o.oldvalue=l,o.newvalue=e[a]):"object"==typeof e[a]?o.nodes=s(t[a],e[a],!1):o.oldnodes=f(l,"old"):(o.oldvalue=l,o.newvalue=e[a]),r.push(o));for(a in e)l=e[a],a.match(/^cfg(?:Num|Log|Author(?:IP)?|Date)$/)||null!=t[a]||(o=n?{title:p.translate(a),id:a}:{title:a},null!=l&&"object"==typeof l?"array"===l.constructor?o.newvalue=l:(console.log("Iteration"),o.newnodes=f(l,"new")):o.newvalue=l,r.push(o));return r},f=function(t,e){var n,a,r,o;for(n in a=[],t)r={title:n},"object"==typeof(o=t[n])?"array"===o.constructor?r[e+"value"]=o:r[e+"nodes"]=f(t[n],e):r[e+"value"]=o,a.push(r);return a},h=[],n=function(t){var e,n,a,r,o,l,i,u,c,s,f,g,d;if(null==h)return t;for(d=[],r=0,l=t.length;r<l;r++){for(e=t[r],f=d,o=0,i=(g=null!=h[e.id]?h[e.id].split("/"):"").length;o<i;o++)if(0<(s=g[o]).length)if(f.length){for(n=-1,a=c=0,u=f.length;c<u;a=++c)f[a].id===s&&(n=a);f=-1!==n?f[n].nodes:(f.push({id:s,title:p.translate(s),nodes:[]}),f[f.length-1].nodes)}else f.push({id:s,title:p.translate(s),nodes:[]}),f=f[0].nodes;f.push(e)}return d},p.newDiff=function(){return i.path("/"+p.cfg[0].cfgNum+"/"+p.cfg[1].cfgNum)},t=function(t,e,n){var a;return null===(a=e.match(new RegExp("#!?/(latest|[0-9]+)(?:/(latest|[0-9]+))?$")))?i.path("/latest"):(p.waiting=!0,l.all([r.init(p.lang),o.get(staticPrefix+"reverseTree.json").then(function(t){return h=t.data,console.log("Structure loaded")}),u(0,a[1]),null!=a[2]?u(1,a[2]):void 0]).then(function(){return null!=a[2]?c():p.cfg[0].prev?(p.cfg[1]=p.cfg[0],u(0,p.cfg[1].prev).then(function(){return c()})):(p.data=[],p.waiting=!1)},function(){return p.message=p.translate("error"),p.waiting=!1})),!0},p.$on("$locationChangeSuccess",t)}])}).call(this);

File diff suppressed because one or more lines are too long

View File

@ -14,7 +14,7 @@ This file contains:
(function() { (function() {
var llapp; var llapp;
llapp = angular.module('llngManager', ['ui.tree', 'ui.bootstrap', 'llApp', 'ngCookies']); llapp = angular.module('llngViewer', ['ui.tree', 'ui.bootstrap', 'llApp', 'ngCookies']);
/* /*
@ -410,6 +410,15 @@ This file contains:
$scope.showT = false; $scope.showT = false;
return setHelp(scope); return setHelp(scope);
}; };
$scope.keyWritable = function(scope) {
var node;
node = scope.$modelValue;
if (node.type && node.type.match(/^(?:s(?:aml(?:(?:ID|S)PMetaDataNod|Attribut)e|fExtra)|(?:(?:cmbMod|r)ul|authChoic)e|(?:virtualHos|keyTex)t|menu(?:App|Cat))$/)) {
return true;
} else {
return false;
}
};
$scope.getKey = function(node) { $scope.getKey = function(node) {
var d, i, l, len, n, ref, tmp; var d, i, l, len, n, ref, tmp;
d = $q.defer(); d = $q.defer();
@ -442,10 +451,15 @@ This file contains:
} else { } else {
node.data = data.value; node.data = data.value;
} }
if (node.data.toString().match(/_Hidden_$/)) { if (node.data && node.data.toString().match(/_Hidden_$/)) {
node.type = 'text'; node.type = 'text';
node.data = '######'; node.data = '######';
} }
if (node.type && node.type.match(/^(bool|trool|boolOrExpr)$/)) {
if (typeof node.data === 'string' && node.data.match(/^(?:-1|0|1)$/)) {
node.data = parseInt(node.data, 10);
}
}
if (node.type && node.type.match(/^int$/)) { if (node.type && node.type.match(/^int$/)) {
node.data = parseInt(node.data, 10); node.data = parseInt(node.data, 10);
} else if (node.type && node.type.match(/^(saml(Service|Assertion)|blackWhiteList)$/) && !(typeof node.data === 'object')) { } else if (node.type && node.type.match(/^(saml(Service|Assertion)|blackWhiteList)$/) && !(typeof node.data === 'object')) {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,7 +5,7 @@
<link rel="prefetch" href="<TMPL_VAR NAME="STATIC_PREFIX">struct.json" /> <link rel="prefetch" href="<TMPL_VAR NAME="STATIC_PREFIX">struct.json" />
</head> </head>
<body ng-app="llngManager" ng-controller="TreeCtrl" ng-csp> <body ng-app="llngViewer" ng-controller="TreeCtrl" ng-csp>
<TMPL_INCLUDE NAME="menubar.tpl"> <TMPL_INCLUDE NAME="menubar.tpl">
@ -100,89 +100,6 @@
</ol> </ol>
</script> </script>
<!-- Prompt -->
<script type="text/ng-template" id="prompt.html">
<div role="alertdialog" aria-labelledby="ptitle" aria-describedby="ptitle">
<div class="modal-header">
<h3 id="ptitle" class="modal-title" trspan="{{elem('message').title}}" />
</div>
<div class="modal-body">
<div class="input-group maxw">
<label class="input-group-addon" id="promptlabel" for="promptinput" trspan="{{elem('message').field}}"/>
<input id="promptinput" class="form-control" ng-model="result" aria-describedby="promptlabel"/>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" id="promptok" ng-click="ok()" trspan="ok" role="button"></button>
<button class="btn btn-warning" ng-click="cancel()" trspan="cancel" role="button"></button>
</div>
</div>
</script>
<!-- Message display -->
<script type="text/ng-template" id="message.html">
<div role="alertdialog" aria-labelledby="mtitle" aria-describedby="mbody">
<div class="modal-header">
<h3 id="mtitle" class="modal-title" trspan="{{elem('message').title}}" />
</div>
<div id="mbody" class="modal-body">
<div class="modal-p">{{translateP(elem('message').message)}}</div>
<ul class="main-modal-ul" ng-model="elem('message').items">
<li ng-repeat="item in elem('message').items" ng-include="'messageitem.html'"/>
</ul>
</div>
<div class="modal-footer">
<button class="btn btn-primary" id="messageok" ng-click="ok()" trspan="ok" role="button"></button>
<button class="btn btn-warning" ng-click="cancel()" ng-if="elem('message').displayCancel" trspan="cancel" role="button"></button>
</div>
</div>
</script>
<script type="text/ng-template" id="messageitem.html">
<div class="modal-p">{{translateP(item.message)}}</div>
<ul class="modal-ul" ng-model="item.items">
<li ng-repeat="item in item.items" ng-include="'messageitem.html'"/>
</ul>
</script>
<!-- Password question -->
<script type="text/ng-template" id="password.html">
<div role="alertdialog" aria-labelledby="pwtitle" aria-describedby="pwtitle">
<div class="modal-header">
<h3 id="pwtitle" class="modal-title" trspan="enterPassword" />
</div>
<div class="modal-body">
<div class="input-group maxw">
<label class="input-group-addon" id="mlabel" for="mdPwd" trspan="password"/>
<input id="mdPwd" class="form-control" ng-model="result" aria-describedby="mlabel"/>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" id="passwordok" ng-click="ok()" trspan="ok" role="button"></button>
<button class="btn btn-warning" ng-click="cancel()" trspan="cancel" role="button"></button>
</div>
</div>
</script>
<!-- Save confirm -->
<script type="text/ng-template" id="save.html">
<div role="alertdialog" aria-labelledby="stitle" aria-describedby="sbody">
<div class="modal-header">
<h3 id="stitle" class="modal-title" trspan="savingConfirmation" />
</div>
<div id="sbody" class="modal-body">
<div class="input-group maxw">
<label id="slabel" class="input-group-addon" for="longtextinput" trspan="cfgLog"/>
<textarea id="longtextinput" rows="5" class="form-control" ng-model="result" aria-describedby="slabel" />
</div>
</div>
<div class="modal-footer">
<button class="btn btn-primary" id="saveok" ng-click="ok()" trspan="ok" role="button"></button>
<button class="btn btn-warning" ng-click="cancel()" trspan="cancel" role="button"></button>
</div>
</div>
</script>
<TMPL_INCLUDE NAME="scripts.tpl"> <TMPL_INCLUDE NAME="scripts.tpl">
<!-- //if:jsminified <!-- //if:jsminified

View File

@ -9,10 +9,10 @@ lib/Lemonldap/NG/Portal.pm
lib/Lemonldap/NG/Portal/2F/Engines/Default.pm lib/Lemonldap/NG/Portal/2F/Engines/Default.pm
lib/Lemonldap/NG/Portal/2F/Ext2F.pm lib/Lemonldap/NG/Portal/2F/Ext2F.pm
lib/Lemonldap/NG/Portal/2F/Mail2F.pm lib/Lemonldap/NG/Portal/2F/Mail2F.pm
lib/Lemonldap/NG/Portal/2F/Radius.pm
lib/Lemonldap/NG/Portal/2F/Register/TOTP.pm lib/Lemonldap/NG/Portal/2F/Register/TOTP.pm
lib/Lemonldap/NG/Portal/2F/Register/U2F.pm lib/Lemonldap/NG/Portal/2F/Register/U2F.pm
lib/Lemonldap/NG/Portal/2F/Register/Yubikey.pm lib/Lemonldap/NG/Portal/2F/Register/Yubikey.pm
lib/Lemonldap/NG/Portal/2F/Radius.pm
lib/Lemonldap/NG/Portal/2F/REST.pm lib/Lemonldap/NG/Portal/2F/REST.pm
lib/Lemonldap/NG/Portal/2F/TOTP.pm lib/Lemonldap/NG/Portal/2F/TOTP.pm
lib/Lemonldap/NG/Portal/2F/U2F.pm lib/Lemonldap/NG/Portal/2F/U2F.pm
@ -175,6 +175,7 @@ site/htdocs/static/bootstrap/css/styles.css
site/htdocs/static/bootstrap/css/styles.min.css site/htdocs/static/bootstrap/css/styles.min.css
site/htdocs/static/bootstrap/js/skin.js site/htdocs/static/bootstrap/js/skin.js
site/htdocs/static/bootstrap/js/skin.min.js site/htdocs/static/bootstrap/js/skin.min.js
site/htdocs/static/bootstrap/js/skin.min.js.map
site/htdocs/static/bootstrap/totp.png site/htdocs/static/bootstrap/totp.png
site/htdocs/static/bootstrap/u2f.png site/htdocs/static/bootstrap/u2f.png
site/htdocs/static/bootstrap/utotp.png site/htdocs/static/bootstrap/utotp.png
@ -201,6 +202,7 @@ site/htdocs/static/bwr/bootstrap/dist/js/bootstrap.min.js
site/htdocs/static/bwr/bootstrap/dist/js/bootstrap.min.js.map site/htdocs/static/bwr/bootstrap/dist/js/bootstrap.min.js.map
site/htdocs/static/bwr/fingerprintjs2/fingerprint2.js site/htdocs/static/bwr/fingerprintjs2/fingerprint2.js
site/htdocs/static/bwr/fingerprintjs2/fingerprint2.min.js site/htdocs/static/bwr/fingerprintjs2/fingerprint2.min.js
site/htdocs/static/bwr/fingerprintjs2/fingerprint2.min.js.map
site/htdocs/static/bwr/font-awesome/css/font-awesome.css site/htdocs/static/bwr/font-awesome/css/font-awesome.css
site/htdocs/static/bwr/font-awesome/css/font-awesome.css.map site/htdocs/static/bwr/font-awesome/css/font-awesome.css.map
site/htdocs/static/bwr/font-awesome/css/font-awesome.min.css site/htdocs/static/bwr/font-awesome/css/font-awesome.min.css
@ -212,10 +214,13 @@ site/htdocs/static/bwr/font-awesome/fonts/fontawesome-webfont.woff2
site/htdocs/static/bwr/font-awesome/fonts/FontAwesome.otf site/htdocs/static/bwr/font-awesome/fonts/FontAwesome.otf
site/htdocs/static/bwr/jquery-ui/jquery-ui.js site/htdocs/static/bwr/jquery-ui/jquery-ui.js
site/htdocs/static/bwr/jquery-ui/jquery-ui.min.js site/htdocs/static/bwr/jquery-ui/jquery-ui.min.js
site/htdocs/static/bwr/jquery-ui/jquery-ui.min.js.map
site/htdocs/static/bwr/jquery.cookie/jquery.cookie.js site/htdocs/static/bwr/jquery.cookie/jquery.cookie.js
site/htdocs/static/bwr/jquery.cookie/jquery.cookie.min.js site/htdocs/static/bwr/jquery.cookie/jquery.cookie.min.js
site/htdocs/static/bwr/jquery.cookie/jquery.cookie.min.js.map
site/htdocs/static/bwr/jquery/dist/jquery.js site/htdocs/static/bwr/jquery/dist/jquery.js
site/htdocs/static/bwr/jquery/dist/jquery.min.js site/htdocs/static/bwr/jquery/dist/jquery.min.js
site/htdocs/static/bwr/jquery/dist/jquery.min.js.map
site/htdocs/static/bwr/jquery/dist/jquery.min.map site/htdocs/static/bwr/jquery/dist/jquery.min.map
site/htdocs/static/bwr/qrious/dist/qrious.js site/htdocs/static/bwr/qrious/dist/qrious.js
site/htdocs/static/bwr/qrious/dist/qrious.js.map site/htdocs/static/bwr/qrious/dist/qrious.js.map
@ -271,40 +276,58 @@ site/htdocs/static/common/icons/warning.png
site/htdocs/static/common/it.png site/htdocs/static/common/it.png
site/htdocs/static/common/js/2fregistration.js site/htdocs/static/common/js/2fregistration.js
site/htdocs/static/common/js/2fregistration.min.js site/htdocs/static/common/js/2fregistration.min.js
site/htdocs/static/common/js/2fregistration.min.js.map
site/htdocs/static/common/js/autoRenew.js site/htdocs/static/common/js/autoRenew.js
site/htdocs/static/common/js/autoRenew.min.js site/htdocs/static/common/js/autoRenew.min.js
site/htdocs/static/common/js/autoRenew.min.js.map
site/htdocs/static/common/js/confirm.js site/htdocs/static/common/js/confirm.js
site/htdocs/static/common/js/confirm.min.js site/htdocs/static/common/js/confirm.min.js
site/htdocs/static/common/js/confirm.min.js.map
site/htdocs/static/common/js/favapps.js site/htdocs/static/common/js/favapps.js
site/htdocs/static/common/js/favapps.min.js site/htdocs/static/common/js/favapps.min.js
site/htdocs/static/common/js/favapps.min.js.map
site/htdocs/static/common/js/idpchoice.js site/htdocs/static/common/js/idpchoice.js
site/htdocs/static/common/js/idpchoice.min.js site/htdocs/static/common/js/idpchoice.min.js
site/htdocs/static/common/js/idpchoice.min.js.map
site/htdocs/static/common/js/info.js site/htdocs/static/common/js/info.js
site/htdocs/static/common/js/info.min.js site/htdocs/static/common/js/info.min.js
site/htdocs/static/common/js/info.min.js.map
site/htdocs/static/common/js/kerberos.js site/htdocs/static/common/js/kerberos.js
site/htdocs/static/common/js/kerberos.min.js site/htdocs/static/common/js/kerberos.min.js
site/htdocs/static/common/js/kerberos.min.js.map
site/htdocs/static/common/js/kerberosChoice.js site/htdocs/static/common/js/kerberosChoice.js
site/htdocs/static/common/js/kerberosChoice.min.js site/htdocs/static/common/js/kerberosChoice.min.js
site/htdocs/static/common/js/kerberosChoice.min.js.map
site/htdocs/static/common/js/oidcchecksession.js site/htdocs/static/common/js/oidcchecksession.js
site/htdocs/static/common/js/oidcchecksession.min.js site/htdocs/static/common/js/oidcchecksession.min.js
site/htdocs/static/common/js/oidcchecksession.min.js.map
site/htdocs/static/common/js/portal.js site/htdocs/static/common/js/portal.js
site/htdocs/static/common/js/portal.min.js site/htdocs/static/common/js/portal.min.js
site/htdocs/static/common/js/portal.min.js.map
site/htdocs/static/common/js/redirect.js site/htdocs/static/common/js/redirect.js
site/htdocs/static/common/js/redirect.min.js site/htdocs/static/common/js/redirect.min.js
site/htdocs/static/common/js/redirect.min.js.map
site/htdocs/static/common/js/registerbrowser.js site/htdocs/static/common/js/registerbrowser.js
site/htdocs/static/common/js/registerbrowser.min.js site/htdocs/static/common/js/registerbrowser.min.js
site/htdocs/static/common/js/registerbrowser.min.js.map
site/htdocs/static/common/js/ssl.js site/htdocs/static/common/js/ssl.js
site/htdocs/static/common/js/ssl.min.js site/htdocs/static/common/js/ssl.min.js
site/htdocs/static/common/js/ssl.min.js.map
site/htdocs/static/common/js/sslChoice.js site/htdocs/static/common/js/sslChoice.js
site/htdocs/static/common/js/sslChoice.min.js site/htdocs/static/common/js/sslChoice.min.js
site/htdocs/static/common/js/sslChoice.min.js.map
site/htdocs/static/common/js/totpregistration.js site/htdocs/static/common/js/totpregistration.js
site/htdocs/static/common/js/totpregistration.min.js site/htdocs/static/common/js/totpregistration.min.js
site/htdocs/static/common/js/totpregistration.min.js.map
site/htdocs/static/common/js/u2f-api.js site/htdocs/static/common/js/u2f-api.js
site/htdocs/static/common/js/u2f-api.min.js site/htdocs/static/common/js/u2f-api.min.js
site/htdocs/static/common/js/u2f-api.min.js.map
site/htdocs/static/common/js/u2fcheck.js site/htdocs/static/common/js/u2fcheck.js
site/htdocs/static/common/js/u2fcheck.min.js site/htdocs/static/common/js/u2fcheck.min.js
site/htdocs/static/common/js/u2fcheck.min.js.map
site/htdocs/static/common/js/u2fregistration.js site/htdocs/static/common/js/u2fregistration.js
site/htdocs/static/common/js/u2fregistration.min.js site/htdocs/static/common/js/u2fregistration.min.js
site/htdocs/static/common/js/u2fregistration.min.js.map
site/htdocs/static/common/logos/logo_llng_400px.png site/htdocs/static/common/logos/logo_llng_400px.png
site/htdocs/static/common/logos/logo_llng_old.png site/htdocs/static/common/logos/logo_llng_old.png
site/htdocs/static/common/modules/Apache.png site/htdocs/static/common/modules/Apache.png
@ -316,6 +339,7 @@ site/htdocs/static/common/modules/Kerberos.png
site/htdocs/static/common/modules/LinkedIn.png site/htdocs/static/common/modules/LinkedIn.png
site/htdocs/static/common/modules/OpenIDConnect.png site/htdocs/static/common/modules/OpenIDConnect.png
site/htdocs/static/common/modules/SAML.png site/htdocs/static/common/modules/SAML.png
site/htdocs/static/common/modules/Slave.png
site/htdocs/static/common/modules/SSL.png site/htdocs/static/common/modules/SSL.png
site/htdocs/static/common/modules/Twitter.png site/htdocs/static/common/modules/Twitter.png
site/htdocs/static/common/modules/WebID.png site/htdocs/static/common/modules/WebID.png
@ -482,6 +506,7 @@ t/32-Auth-and-issuer-OIDC-implicit.t
t/32-Auth-and-issuer-OIDC-sorted.t t/32-Auth-and-issuer-OIDC-sorted.t
t/32-CAS-10.t t/32-CAS-10.t
t/32-OIDC-RP-rule.t t/32-OIDC-RP-rule.t
t/32-OIDC-Token-Spoof.t
t/33-Auth-and-issuer-OpenID2.t t/33-Auth-and-issuer-OpenID2.t
t/34-Auth-Proxy-and-REST-Server.t t/34-Auth-Proxy-and-REST-Server.t
t/34-Auth-Proxy-and-SOAP-Server.t t/34-Auth-Proxy-and-SOAP-Server.t
@ -496,6 +521,7 @@ t/36-Combination-Kerberos-or-Demo.t
t/36-Combination-with-Choice.t t/36-Combination-with-Choice.t
t/36-Combination-with-over.t t/36-Combination-with-over.t
t/36-Combination-with-token.t t/36-Combination-with-token.t
t/36-Combination-with-TOTP.t
t/36-Combination.t t/36-Combination.t
t/37-CAS-App-to-SAML-IdP-POST-with-WAYF.t t/37-CAS-App-to-SAML-IdP-POST-with-WAYF.t
t/37-CAS-App-to-SAML-IdP-POST.t t/37-CAS-App-to-SAML-IdP-POST.t
@ -551,6 +577,7 @@ t/66-CDA-with-REST.t
t/66-CDA-with-SOAP.t t/66-CDA-with-SOAP.t
t/66-CDA.t t/66-CDA.t
t/67-CheckUser-with-Global-token.t t/67-CheckUser-with-Global-token.t
t/67-Checkuser-with-Impersonation-and-whatToTrace.t
t/67-CheckUser-with-issuer-SAML-POST.t t/67-CheckUser-with-issuer-SAML-POST.t
t/67-CheckUser-with-token.t t/67-CheckUser-with-token.t
t/67-CheckUser.t t/67-CheckUser.t
@ -583,6 +610,7 @@ t/76-2F-Ext-with-BruteForce.t
t/76-2F-Ext-with-CodeActivation.t t/76-2F-Ext-with-CodeActivation.t
t/76-2F-Ext-with-GrantSession.t t/76-2F-Ext-with-GrantSession.t
t/76-2F-Ext-with-History.t t/76-2F-Ext-with-History.t
t/77-2F-Extra.t
t/77-2F-Mail-with-global-storage.t t/77-2F-Mail-with-global-storage.t
t/77-2F-Mail.t t/77-2F-Mail.t
t/78-2F-Upgrade.t t/78-2F-Upgrade.t

View File

@ -98,16 +98,14 @@ sub init {
# Each first method must call getStack() to get the auth scheme available for # Each first method must call getStack() to get the auth scheme available for
# the current user # the current user
## Auth steps
#############
sub extractFormInfo { sub extractFormInfo {
my ( $self, $req ) = @_; my ( $self, $req ) = @_;
return $self->try( 0, 'extractFormInfo', $req ); return $self->try( 0, 'extractFormInfo', $req );
} }
# Note that UserDB::Combination uses the same object.
sub getUser {
return $_[0]->try( 1, 'getUser', $_[1] );
}
sub authenticate { sub authenticate {
return $_[0]->try( 0, 'authenticate', $_[1] ); return $_[0]->try( 0, 'authenticate', $_[1] );
} }
@ -116,14 +114,6 @@ sub setAuthSessionInfo {
return $_[0]->try( 0, 'setAuthSessionInfo', $_[1] ); return $_[0]->try( 0, 'setAuthSessionInfo', $_[1] );
} }
sub setSessionInfo {
return $_[0]->try( 1, 'setSessionInfo', $_[1] );
}
sub setGroups {
return $_[0]->try( 1, 'setGroups', $_[1] );
}
sub getForm { sub getForm {
my ( $self, $req ) = @_; my ( $self, $req ) = @_;
return [ split /[, ]\s*/, $self->conf->{combinationForms} ] return [ split /[, ]\s*/, $self->conf->{combinationForms} ]
@ -157,6 +147,21 @@ sub authLogout {
return $res; return $res;
} }
## UserDB steps
###############
# Note that UserDB::Combination uses the same object.
sub getUser {
return $_[0]->try( 1, 'getUser', $_[1] );
}
sub setSessionInfo {
return $_[0]->try( 1, 'setSessionInfo', $_[1] );
}
sub setGroups {
return $_[0]->try( 1, 'setGroups', $_[1] );
}
sub getStack { sub getStack {
my ( $self, $req, @steps ) = @_; my ( $self, $req, @steps ) = @_;
return $req->data->{combinationStack} return $req->data->{combinationStack}
@ -224,7 +229,6 @@ sub name {
package Lemonldap::NG::Portal::Lib::Combination::UserLogger; package Lemonldap::NG::Portal::Lib::Combination::UserLogger;
# This logger rewrite "warn" to "notice" # This logger rewrite "warn" to "notice"
sub new { sub new {
my ( $class, $realLogger ) = @_; my ( $class, $realLogger ) = @_;
return bless { logger => $realLogger }, $class; return bless { logger => $realLogger }, $class;

View File

@ -39,6 +39,14 @@ has configStorage => (
); );
has ssoMatchUrl => ( is => 'rw' ); has ssoMatchUrl => ( is => 'rw' );
has iss => (
is => 'ro',
lazy => 1,
default => sub {
$_[0]->conf->{oidcServiceMetaDataIssuer} || $_[0]->conf->{portal};
}
);
# OIDC has 7 endpoints managed here as PSGI endpoints or in run() [Main/Issuer.pm # OIDC has 7 endpoints managed here as PSGI endpoints or in run() [Main/Issuer.pm
# manage transparent authentication for run()]: # manage transparent authentication for run()]:
# - authorize : in run() # - authorize : in run()
@ -698,8 +706,7 @@ sub run {
my $user_id = $req->{sessionInfo}->{$user_id_attribute}; my $user_id = $req->{sessionInfo}->{$user_id_attribute};
my $id_token_payload_hash = { my $id_token_payload_hash = {
iss => $self->conf->{oidcServiceMetaDataIssuer} iss => $self->iss, # Issuer Identifier
, # Issuer Identifier
sub => $user_id, # Subject Identifier sub => $user_id, # Subject Identifier
aud => [$client_id], # Audience aud => [$client_id], # Audience
exp => $id_token_exp, # expiration exp => $id_token_exp, # expiration
@ -838,8 +845,7 @@ sub run {
my $user_id = $req->{sessionInfo}->{$user_id_attribute}; my $user_id = $req->{sessionInfo}->{$user_id_attribute};
my $id_token_payload_hash = { my $id_token_payload_hash = {
iss => $self->conf->{oidcServiceMetaDataIssuer} iss => $self->iss, # Issuer Identifier
, # Issuer Identifier
sub => $user_id, # Subject Identifier sub => $user_id, # Subject Identifier
aud => [$client_id], # Audience aud => [$client_id], # Audience
exp => $id_token_exp, # expiration exp => $id_token_exp, # expiration
@ -1074,8 +1080,7 @@ sub token {
} }
# Check we have the same client_id value # Check we have the same client_id value
unless ( $client_id eq $codeSession->data->{client_id} ) unless ( $client_id eq $codeSession->data->{client_id} ) {
{
$self->userLogger->error( "Provided client_id does not match " $self->userLogger->error( "Provided client_id does not match "
. $codeSession->data->{client_id} ); . $codeSession->data->{client_id} );
return $self->p->sendError( $req, 'invalid_grant', 400 ); return $self->p->sendError( $req, 'invalid_grant', 400 );
@ -1146,11 +1151,11 @@ sub token {
my $id_token_acr = "loa-" . $apacheSession->data->{authenticationLevel}; my $id_token_acr = "loa-" . $apacheSession->data->{authenticationLevel};
my $id_token_payload_hash = { my $id_token_payload_hash = {
iss => $self->conf->{oidcServiceMetaDataIssuer}, # Issuer Identifier iss => $self->iss,
sub => $user_id, # Subject Identifier sub => $user_id, # Subject Identifier
aud => [$client_id], # Audience aud => [$client_id], # Audience
exp => $id_token_exp, # expiration exp => $id_token_exp, # expiration
iat => time, # Issued time iat => time, # Issued time
auth_time => $apacheSession->data->{_lastAuthnUTime} auth_time => $apacheSession->data->{_lastAuthnUTime}
, # Authentication time , # Authentication time
acr => $id_token_acr, # Authentication Context Class Reference acr => $id_token_acr, # Authentication Context Class Reference
@ -1462,10 +1467,9 @@ sub logout {
->{oidcRPMetaDataOptionsUserIDAttr} ->{oidcRPMetaDataOptionsUserIDAttr}
|| $self->conf->{whatToTrace}; || $self->conf->{whatToTrace};
my $user_id = $req->{sessionInfo}->{$user_id_attribute}; my $user_id = $req->{sessionInfo}->{$user_id_attribute};
my $iss = $self->conf->{oidcServiceMetaDataIssuer};
$url .= ( $url =~ /\?/ ? '&' : '?' ) $url .= ( $url =~ /\?/ ? '&' : '?' )
. build_urlencoded( . build_urlencoded(
iss => $iss, iss => $self->iss,
sid => $user_id sid => $user_id
); );
} }
@ -1495,7 +1499,7 @@ sub metadata {
my $checksession_uri = $self->conf->{oidcServiceMetaDataCheckSessionURI}; my $checksession_uri = $self->conf->{oidcServiceMetaDataCheckSessionURI};
my $path = $self->path . '/'; my $path = $self->path . '/';
my $issuer = $self->conf->{oidcServiceMetaDataIssuer}; my $issuer = $self->iss;
$path = "/" . $path unless ( $issuer =~ /\/$/ ); $path = "/" . $path unless ( $issuer =~ /\/$/ );
my $baseUrl = $issuer . $path; my $baseUrl = $issuer . $path;

View File

@ -34,7 +34,7 @@ has cache => (
} }
else { else {
$_[0]->{p}->logger->error( $_[0]->{p}->logger->error(
'Local storage not defined, token will be store in global storage' 'Local storage not defined, token will be stored into global storage'
); );
return undef; return undef;
} }

View File

@ -55,6 +55,19 @@ sub handler {
} }
my $res = $self->Lemonldap::NG::Common::PSGI::Router::handler($req); my $res = $self->Lemonldap::NG::Common::PSGI::Router::handler($req);
# Avoid permanent loop 'Portal <-> _url' if pdata cookie is not removed
my $url64 = encode_base64( $req->userData->{_url}, '' );
if ( $url64
and !$req->pdata->{keepPdata}
and $req->userData->{_session_id}
and ( $req->{env}->{HTTP_COOKIE} =~ /$url64/ ) )
{
$self->logger->debug("Force cleaning pdata");
$self->logger->warn("pdata cookie domain must be set")
unless ( $self->conf->{pdataDomain} );
$req->pdata( {} );
}
# Save pdata # Save pdata
if ( $sp or %{ $req->pdata } ) { if ( $sp or %{ $req->pdata } ) {
my %v = ( my %v = (

View File

@ -314,7 +314,7 @@ sub display {
$self->{conf}->{impersonationMergeSSOgroups} ? 'alert-warning' $self->{conf}->{impersonationMergeSSOgroups} ? 'alert-warning'
: 'alert-info' : 'alert-info'
), ),
LOGIN => $req->{userData}->{uid}, LOGIN => $req->{userData}->{ $self->conf->{whatToTrace} },
ATTRIBUTES => $array_attrs->[2], ATTRIBUTES => $array_attrs->[2],
MACROS => $array_attrs->[1], MACROS => $array_attrs->[1],
GROUPS => $array_attrs->[0], GROUPS => $array_attrs->[0],

View File

@ -27,6 +27,10 @@ has ott => (
sub init { sub init {
my ($self) = @_; my ($self) = @_;
if ( $self->conf->{forceGlobalStorageUpgradeOTT} ) {
$self->logger->debug("Upgrade token will be stored into global storage");
$self->ott->cache(undef);
}
$self->addAuthRoute( upgradesession => 'ask', ['GET'] ); $self->addAuthRoute( upgradesession => 'ask', ['GET'] );
$self->addAuthRoute( upgradesession => 'confirm', ['POST'] ); $self->addAuthRoute( upgradesession => 'confirm', ['POST'] );
} }

View File

@ -1 +1 @@
$(document).ready(function(){$("div.message-positive").addClass("alert-success");$("div.message-warning").addClass("alert-warning");$("div.message-negative").addClass("alert-danger");$("table.info").addClass("table");$(".notifCheck").addClass("checkbox");$('.collapse li[class!="dropdown"]').on("click",function(){if(!$(".navbar-toggler").hasClass("collapsed")){$(".navbar-toggler").trigger("click")}})}); $(document).ready(function(){$("div.message-positive").addClass("alert-success"),$("div.message-warning").addClass("alert-warning"),$("div.message-negative").addClass("alert-danger"),$("table.info").addClass("table"),$(".notifCheck").addClass("checkbox"),$('.collapse li[class!="dropdown"]').on("click",function(){$(".navbar-toggler").hasClass("collapsed")||$(".navbar-toggler").trigger("click")})});

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-portal/site/htdocs/static/bootstrap/js/skin.js"],"names":["$","document","ready","addClass","on","hasClass","trigger"],"mappings":"AAAAA,EAAEC,UAAUC,MAAM,WAGhBF,EAAE,wBAAwBG,SAAS,iBACnCH,EAAE,uBAAuBG,SAAS,iBAClCH,EAAE,wBAAwBG,SAAS,gBAEnCH,EAAE,cAAcG,SAAS,SAEzBH,EAAE,eAAeG,SAAS,YAG1BH,EAAE,mCAAmCI,GAAG,QAAS,WAC1CJ,EAAE,mBAAmBK,SAAS,cACjCL,EAAE,mBAAmBM,QAAQ"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,4 +5,4 @@
* Copyright 2013 Klaus Hartl * Copyright 2013 Klaus Hartl
* Released under the MIT license * Released under the MIT license
*/ */
(function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof exports==="object"){factory(require("jquery"))}else{factory(jQuery)}})(function($){var pluses=/\+/g;function encode(s){return config.raw?s:encodeURIComponent(s)}function decode(s){return config.raw?s:decodeURIComponent(s)}function stringifyCookieValue(value){return encode(config.json?JSON.stringify(value):String(value))}function parseCookieValue(s){if(s.indexOf('"')===0){s=s.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\")}try{s=decodeURIComponent(s.replace(pluses," "));return config.json?JSON.parse(s):s}catch(e){}}function read(s,converter){var value=config.raw?s:parseCookieValue(s);return $.isFunction(converter)?converter(value):value}var config=$.cookie=function(key,value,options){if(value!==undefined&&!$.isFunction(value)){options=$.extend({},config.defaults,options);if(typeof options.expires==="number"){var days=options.expires,t=options.expires=new Date;t.setTime(+t+days*864e5)}return document.cookie=[encode(key),"=",stringifyCookieValue(value),options.expires?"; expires="+options.expires.toUTCString():"",options.path?"; path="+options.path:"",options.domain?"; domain="+options.domain:"",options.secure?"; secure":""].join("")}var result=key?undefined:{};var cookies=document.cookie?document.cookie.split("; "):[];for(var i=0,l=cookies.length;i<l;i++){var parts=cookies[i].split("=");var name=decode(parts.shift());var cookie=parts.join("=");if(key&&key===name){result=read(cookie,value);break}if(!key&&(cookie=read(cookie))!==undefined){result[name]=cookie}}return result};config.defaults={};$.removeCookie=function(key,options){if($.cookie(key)===undefined){return false}$.cookie(key,"",$.extend({},options,{expires:-1}));return!$.cookie(key)}}); !function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?e(require("jquery")):e(jQuery)}(function(m){var i=/\+/g;function v(e){return k.raw?e:encodeURIComponent(e)}function x(e,n){var o=k.raw?e:function(e){0===e.indexOf('"')&&(e=e.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return e=decodeURIComponent(e.replace(i," ")),k.json?JSON.parse(e):e}catch(e){}}(e);return m.isFunction(n)?n(o):o}var k=m.cookie=function(e,n,o){if(void 0!==n&&!m.isFunction(n)){if("number"==typeof(o=m.extend({},k.defaults,o)).expires){var i=o.expires,r=o.expires=new Date;r.setTime(+r+864e5*i)}return document.cookie=[v(e),"=",function(e){return v(k.json?JSON.stringify(e):String(e))}(n),o.expires?"; expires="+o.expires.toUTCString():"",o.path?"; path="+o.path:"",o.domain?"; domain="+o.domain:"",o.secure?"; secure":""].join("")}for(var t,c=e?void 0:{},u=document.cookie?document.cookie.split("; "):[],a=0,d=u.length;a<d;a++){var f=u[a].split("="),p=(t=f.shift(),k.raw?t:decodeURIComponent(t)),s=f.join("=");if(e&&e===p){c=x(s,n);break}e||void 0===(s=x(s))||(c[p]=s)}return c};k.defaults={},m.removeCookie=function(e,n){return void 0!==m.cookie(e)&&(m.cookie(e,"",m.extend({},n,{expires:-1})),!m.cookie(e))}});

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-portal/site/htdocs/static/bwr/jquery.cookie/jquery.cookie.js"],"names":["factory","define","amd","exports","require","jQuery","$","pluses","encode","s","config","raw","encodeURIComponent","read","converter","value","indexOf","slice","replace","decodeURIComponent","json","JSON","parse","e","parseCookieValue","isFunction","cookie","key","options","undefined","extend","defaults","expires","days","t","Date","setTime","document","stringify","String","stringifyCookieValue","toUTCString","path","domain","secure","join","result","cookies","split","i","l","length","parts","name","shift","removeCookie"],"mappings":";;;;;;;CAOC,SAAUA,GACY,mBAAXC,QAAyBA,OAAOC,IAE1CD,OAAO,CAAC,UAAWD,GACU,iBAAZG,QAEjBH,EAAQI,QAAQ,WAGhBJ,EAAQK,QATV,CAWE,SAAUC,GAEX,IAAIC,EAAS,MAEb,SAASC,EAAOC,GACf,OAAOC,EAAOC,IAAMF,EAAIG,mBAAmBH,GA0B5C,SAASI,EAAKJ,EAAGK,GAChB,IAAIC,EAAQL,EAAOC,IAAMF,EAhB1B,SAA0BA,GACF,IAAnBA,EAAEO,QAAQ,OAEbP,EAAIA,EAAEQ,MAAM,GAAI,GAAGC,QAAQ,OAAQ,KAAKA,QAAQ,QAAS,OAG1D,IAKC,OADAT,EAAIU,mBAAmBV,EAAES,QAAQX,EAAQ,MAClCG,EAAOU,KAAOC,KAAKC,MAAMb,GAAKA,EACpC,MAAMc,KAIqBC,CAAiBf,GAC9C,OAAOH,EAAEmB,WAAWX,GAAaA,EAAUC,GAASA,EAGrD,IAAIL,EAASJ,EAAEoB,OAAS,SAAUC,EAAKZ,EAAOa,GAI7C,QAAcC,IAAVd,IAAwBT,EAAEmB,WAAWV,GAAQ,CAGhD,GAA+B,iBAF/Ba,EAAUtB,EAAEwB,OAAO,GAAIpB,EAAOqB,SAAUH,IAErBI,QAAsB,CACxC,IAAIC,EAAOL,EAAQI,QAASE,EAAIN,EAAQI,QAAU,IAAIG,KACtDD,EAAEE,SAASF,EAAW,MAAPD,GAGhB,OAAQI,SAASX,OAAS,CACzBlB,EAAOmB,GAAM,IArChB,SAA8BZ,GAC7B,OAAOP,EAAOE,EAAOU,KAAOC,KAAKiB,UAAUvB,GAASwB,OAAOxB,IAoCvCyB,CAAqBzB,GACvCa,EAAQI,QAAU,aAAeJ,EAAQI,QAAQS,cAAgB,GACjEb,EAAQc,KAAU,UAAYd,EAAQc,KAAO,GAC7Cd,EAAQe,OAAU,YAAcf,EAAQe,OAAS,GACjDf,EAAQgB,OAAU,WAAa,IAC9BC,KAAK,IAYR,IAPA,IAnDepC,EAmDXqC,EAASnB,OAAME,EAAY,GAK3BkB,EAAUV,SAASX,OAASW,SAASX,OAAOsB,MAAM,MAAQ,GAErDC,EAAI,EAAGC,EAAIH,EAAQI,OAAQF,EAAIC,EAAGD,IAAK,CAC/C,IAAIG,EAAQL,EAAQE,GAAGD,MAAM,KACzBK,GA5DU5C,EA4DI2C,EAAME,QA3DlB5C,EAAOC,IAAMF,EAAIU,mBAAmBV,IA4DtCiB,EAAS0B,EAAMP,KAAK,KAExB,GAAIlB,GAAOA,IAAQ0B,EAAM,CAExBP,EAASjC,EAAKa,EAAQX,GACtB,MAIIY,QAAmCE,KAA3BH,EAASb,EAAKa,MAC1BoB,EAAOO,GAAQ3B,GAIjB,OAAOoB,GAGRpC,EAAOqB,SAAW,GAElBzB,EAAEiD,aAAe,SAAU5B,EAAKC,GAC/B,YAAsBC,IAAlBvB,EAAEoB,OAAOC,KAKbrB,EAAEoB,OAAOC,EAAK,GAAIrB,EAAEwB,OAAO,GAAIF,EAAS,CAAEI,SAAU,MAC5C1B,EAAEoB,OAAOC"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
/* /*
LemonLDAP::NG 2F registration script LemonLDAP::NG 2F registration script

View File

@ -1 +1,2 @@
(function(){var delete2F,displayError,setMsg;setMsg=function(msg,level){$("#msg").html(window.translate(msg));$("#color").removeClass("message-positive message-warning alert-success alert-warning");$("#color").addClass("message-"+level);if(level==="positive"){level="success"}return $("#color").addClass("alert-"+level)};displayError=function(j,status,err){var res;console.log("Error",err);res=JSON.parse(j.responseText);if(res&&res.error){res=res.error.replace(/.* /,"");console.log("Returned error",res);if(res.match(/module/)){return setMsg("notAuthorized","warning")}else{return setMsg(res,"warning")}}};delete2F=function(device,epoch){if(device==="U2F"){device="u"}else if(device==="UBK"){device="yubikey"}else if(device==="TOTP"){device="totp"}else{setMsg("u2fFailed","warning")}return $.ajax({type:"POST",url:portal+"2fregisters/"+device+"/delete",data:{epoch:epoch},dataType:"json",error:displayError,success:function(resp){if(resp.error){if(resp.error.match(/notAuthorized/)){return setMsg("notAuthorized","warning")}else{return setMsg("unknownAction","warning")}}else if(resp.result){$("#delete-"+epoch).hide();return setMsg("yourKeyIsUnregistered","positive")}},error:displayError})};$(document).ready(function(){$("body").on("click",".btn-danger",function(){return delete2F($(this).attr("device"),$(this).attr("epoch"))});$("#goback").attr("href",portal);return $(".data-epoch").each(function(){var myDate;myDate=new Date($(this).text()*1e3);return $(this).text(myDate.toLocaleString())})})}).call(this); (function(){var e,r,t;t=function(e,r){return $("#msg").html(window.translate(e)),$("#color").removeClass("message-positive message-warning alert-success alert-warning"),$("#color").addClass("message-"+r),"positive"===r&&(r="success"),$("#color").addClass("alert-"+r)},r=function(e,r,n){var o;if(console.log("Error",n),(o=JSON.parse(e.responseText))&&o.error)return o=o.error.replace(/.* /,""),console.log("Returned error",o),o.match(/module/)?t("notAuthorized","warning"):t(o,"warning")},e=function(e,n){return"U2F"===e?e="u":"UBK"===e?e="yubikey":"TOTP"===e?e="totp":t("u2fFailed","warning"),$.ajax({type:"POST",url:portal+"2fregisters/"+e+"/delete",data:{epoch:n},dataType:"json",error:r,success:function(e){return e.error?e.error.match(/notAuthorized/)?t("notAuthorized","warning"):t("unknownAction","warning"):e.result?($("#delete-"+n).hide(),t("yourKeyIsUnregistered","positive")):void 0},error:r})},$(document).ready(function(){return $("body").on("click",".btn-danger",function(){return e($(this).attr("device"),$(this).attr("epoch"))}),$("#goback").attr("href",portal),$(".data-epoch").each(function(){var e;return e=new Date(1e3*$(this).text()),$(this).text(e.toLocaleString())})})}).call(this);
//# sourceMappingURL=lemonldap-ng-portal/site/htdocs/static/common/js/2fregistration.min.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-portal/site/htdocs/static/common/js/2fregistration.js"],"names":["delete2F","displayError","setMsg","msg","level","$","html","window","translate","removeClass","addClass","j","status","err","res","console","log","JSON","parse","responseText","error","replace","match","device","epoch","ajax","type","url","portal","data","dataType","success","resp","result","hide","document","ready","on","this","attr","each","myDate","Date","text","toLocaleString","call"],"mappings":"CAMA,WACE,GAAIA,GAAUC,EAAcC,CAE5BA,GAAS,SAASC,EAAKC,GAOrB,MANAC,GAAE,QAAQC,KAAKC,OAAOC,UAAUL,IAChCE,EAAE,UAAUI,YAAY,gEACxBJ,EAAE,UAAUK,SAAS,WAAaN,GACpB,aAAVA,IACFA,EAAQ,WAEHC,EAAE,UAAUK,SAAS,SAAWN,IAGzCH,EAAe,SAASU,EAAGC,EAAQC,GACjC,GAAIC,EAGJ,IAFAC,QAAQC,IAAI,QAASH,IACrBC,EAAMG,KAAKC,MAAMP,EAAEQ,gBACRL,EAAIM,MAGb,MAFAN,GAAMA,EAAIM,MAAMC,QAAQ,MAAO,IAC/BN,QAAQC,IAAI,iBAAkBF,GAC1BA,EAAIQ,MAAM,UACLpB,EAAO,gBAAiB,WAExBA,EAAOY,EAAK,YAKzBd,EAAW,SAASuB,EAAQC,GAU1B,MATe,QAAXD,EACFA,EAAS,IACW,QAAXA,EACTA,EAAS,UACW,SAAXA,EACTA,EAAS,OAETrB,EAAO,YAAa,WAEfG,EAAEoB,MACPC,KAAM,OACNC,IAAKC,OAAS,eAAiBL,EAAS,UACxCM,MACEL,MAAOA,GAETM,SAAU,OACVV,MAAOnB,EACP8B,QAAS,SAASC,GAChB,MAAIA,GAAKZ,MACHY,EAAKZ,MAAME,MAAM,iBACZpB,EAAO,gBAAiB,WAExBA,EAAO,gBAAiB,WAExB8B,EAAKC,QACd5B,EAAE,WAAamB,GAAOU,OACfhC,EAAO,wBAAyB,iBAFlC,IAKTkB,MAAOnB,KAIXI,EAAE8B,UAAUC,MAAM,WAKhB,MAJA/B,GAAE,QAAQgC,GAAG,QAAS,cAAe,WACnC,MAAOrC,GAASK,EAAEiC,MAAMC,KAAK,UAAWlC,EAAEiC,MAAMC,KAAK,YAEvDlC,EAAE,WAAWkC,KAAK,OAAQX,QACnBvB,EAAE,eAAemC,KAAK,WAC3B,GAAIC,EAEJ,OADAA,GAAS,GAAIC,MAAsB,IAAjBrC,EAAEiC,MAAMK,QACnBtC,EAAEiC,MAAMK,KAAKF,EAAOG,wBAI9BC,KAAKP","file":"lemonldap-ng-portal/site/htdocs/static/common/js/2fregistration.min.js"}

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
(function() { (function() {
$(document).ready(function() { $(document).ready(function() {
return $('#upgrd').submit(); return $('#upgrd').submit();

View File

@ -1 +1,2 @@
(function(){$(document).ready(function(){return $("#upgrd").submit()})}).call(this); (function(){$(document).ready(function(){return $("#upgrd").submit()})}).call(this);
//# sourceMappingURL=lemonldap-ng-portal/site/htdocs/static/common/js/autoRenew.min.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-portal/site/htdocs/static/common/js/autoRenew.js"],"names":["$","document","ready","submit","call","this"],"mappings":"CACA,WACEA,EAAEC,UAAUC,MAAM,WAChB,MAAOF,GAAE,UAAUG,aAGpBC,KAAKC","file":"lemonldap-ng-portal/site/htdocs/static/common/js/autoRenew.min.js"}

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
(function() { (function() {
var go, i, timer, timerIsEnabled; var go, i, timer, timerIsEnabled;

View File

@ -1 +1,2 @@
(function(){var go,i,timer,timerIsEnabled;i=5;timerIsEnabled=0;go=function(){if(timerIsEnabled){return $("#form").submit()}};timer=function(){var h;h=$("#timer").html();if(h){timerIsEnabled=1;if(i>0){i--}h=h.replace(/\d+/,i);$("#timer").html(h);return setTimeout(timer,1e3)}};$(document).ready(function(){setTimeout(go,3e4);setTimeout(timer,1e3);return $("#refuse").on("click",function(){return $("#confirm").attr("value",$(this).attr("val"))})})}).call(this); (function(){var t,e,r,i;e=5,i=0,t=function(){if(i)return $("#form").submit()},r=function(){var t;if(t=$("#timer").html())return i=1,e>0&&e--,t=t.replace(/\d+/,e),$("#timer").html(t),setTimeout(r,1e3)},$(document).ready(function(){return setTimeout(t,3e4),setTimeout(r,1e3),$("#refuse").on("click",function(){return $("#confirm").attr("value",$(this).attr("val"))})})}).call(this);
//# sourceMappingURL=lemonldap-ng-portal/site/htdocs/static/common/js/confirm.min.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-portal/site/htdocs/static/common/js/confirm.js"],"names":["go","i","timer","timerIsEnabled","$","submit","h","html","replace","setTimeout","document","ready","on","attr","this","call"],"mappings":"CACA,WACE,GAAIA,GAAIC,EAAGC,EAAOC,CAElBF,GAAI,EAEJE,EAAiB,EAEjBH,EAAK,WACH,GAAIG,EACF,MAAOC,GAAE,SAASC,UAItBH,EAAQ,WACN,GAAII,EAEJ,IADAA,EAAIF,EAAE,UAAUG,OAQd,MANAJ,GAAiB,EACbF,EAAI,GACNA,IAEFK,EAAIA,EAAEE,QAAQ,MAAOP,GACrBG,EAAE,UAAUG,KAAKD,GACVG,WAAWP,EAAO,MAI7BE,EAAEM,UAAUC,MAAM,WAGhB,MAFAF,YAAWT,EAAI,KACfS,WAAWP,EAAO,KACXE,EAAE,WAAWQ,GAAG,QAAS,WAC9B,MAAOR,GAAE,YAAYS,KAAK,QAAST,EAAEU,MAAMD,KAAK,cAInDE,KAAKD","file":"lemonldap-ng-portal/site/htdocs/static/common/js/confirm.min.js"}

View File

@ -1 +1,2 @@
(function(){var FavApps,ResetFavApps,switchStar;FavApps=function(star){return $.ajax({type:"POST",url:portal+"favapps",data:{id:star.attr("aid"),uri:star.attr("uri"),name:star.attr("name"),logo:star.attr("logo"),desc:star.attr("desc")},dataType:"json",success:function(resp){if(resp.error){console.log("Max number reached");return switchStar(star,0)}else if(resp.error===0){console.log("Not authorized");return switchStar(star,0)}else if(resp.result){console.log("App. registered");return switchStar(star,1)}else{console.log("App. unregistered");return switchStar(star,0)}},error:switchStar(star,"0")})};ResetFavApps=function(){return $.ajax({type:"DELETE",url:portal+"favapps",success:function(resp){if(resp.result){console.log("Favorite Apps. reset");return window.location.reload()}else{return console.log("Error")}}})};switchStar=function(star,status){return star.attr("src",window.staticPrefix+"common/icons/star"+status+".png")};$(document).ready(function(){$("body").on("click",".star",function(){return FavApps($(this))});return $("#reset").on("click",function(){return ResetFavApps()})})}).call(this); (function(){var r,o,t;r=function(r){return $.ajax({type:"POST",url:portal+"favapps",data:{id:r.attr("aid"),uri:r.attr("uri"),name:r.attr("name"),logo:r.attr("logo"),desc:r.attr("desc")},dataType:"json",success:function(o){return o.error?(console.log("Max number reached"),t(r,0)):0===o.error?(console.log("Not authorized"),t(r,0)):o.result?(console.log("App. registered"),t(r,1)):(console.log("App. unregistered"),t(r,0))},error:t(r,"0")})},o=function(){return $.ajax({type:"DELETE",url:portal+"favapps",success:function(r){return r.result?(console.log("Favorite Apps. reset"),window.location.reload()):console.log("Error")}})},t=function(r,o){return r.attr("src",window.staticPrefix+"common/icons/star"+o+".png")},$(document).ready(function(){return $("body").on("click",".star",function(){return r($(this))}),$("#reset").on("click",function(){return o()})})}).call(this);
//# sourceMappingURL=lemonldap-ng-portal/site/htdocs/static/common/js/favapps.min.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-portal/site/htdocs/static/common/js/favapps.js"],"names":["FavApps","ResetFavApps","switchStar","star","$","ajax","type","url","portal","data","id","attr","uri","name","logo","desc","dataType","success","resp","error","console","log","result","window","location","reload","status","staticPrefix","document","ready","on","this","call"],"mappings":"CAMA,WACE,GAAIA,GAASC,EAAcC,CAE3BF,GAAU,SAASG,GACjB,MAAOC,GAAEC,MACPC,KAAM,OACNC,IAAKC,OAAS,UACdC,MACEC,GAAIP,EAAKQ,KAAK,OACdC,IAAKT,EAAKQ,KAAK,OACfE,KAAMV,EAAKQ,KAAK,QAChBG,KAAMX,EAAKQ,KAAK,QAChBI,KAAMZ,EAAKQ,KAAK,SAElBK,SAAU,OACVC,QAAS,SAASC,GAChB,MAAIA,GAAKC,OACPC,QAAQC,IAAI,sBACLnB,EAAWC,EAAM,IACA,IAAfe,EAAKC,OACdC,QAAQC,IAAI,kBACLnB,EAAWC,EAAM,IACfe,EAAKI,QACdF,QAAQC,IAAI,mBACLnB,EAAWC,EAAM,KAExBiB,QAAQC,IAAI,qBACLnB,EAAWC,EAAM,KAG5BgB,MAAOjB,EAAWC,EAAM,QAI5BF,EAAe,WACb,MAAOG,GAAEC,MACPC,KAAM,SACNC,IAAKC,OAAS,UACdS,QAAS,SAASC,GAChB,MAAIA,GAAKI,QACPF,QAAQC,IAAI,wBACLE,OAAOC,SAASC,UAEhBL,QAAQC,IAAI,aAM3BnB,EAAa,SAASC,EAAMuB,GAC1B,MAAOvB,GAAKQ,KAAK,MAAOY,OAAOI,aAAe,oBAAsBD,EAAS,SAG/EtB,EAAEwB,UAAUC,MAAM,WAIhB,MAHAzB,GAAE,QAAQ0B,GAAG,QAAS,QAAS,WAC7B,MAAO9B,GAAQI,EAAE2B,SAEZ3B,EAAE,UAAU0B,GAAG,QAAS,WAC7B,MAAO7B,WAIV+B,KAAKD","file":"lemonldap-ng-portal/site/htdocs/static/common/js/favapps.min.js"}

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
(function() { (function() {
$(document).ready(function() { $(document).ready(function() {
return $(".idploop").on('click', function() { return $(".idploop").on('click', function() {

View File

@ -1 +1,2 @@
(function(){$(document).ready(function(){return $(".idploop").on("click",function(){return $("#idp").val($(this).attr("val"))})})}).call(this); (function(){$(document).ready(function(){return $(".idploop").on("click",function(){return $("#idp").val($(this).attr("val"))})})}).call(this);
//# sourceMappingURL=lemonldap-ng-portal/site/htdocs/static/common/js/idpchoice.min.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-portal/site/htdocs/static/common/js/idpchoice.js"],"names":["$","document","ready","on","val","this","attr","call"],"mappings":"CACA,WACEA,EAAEC,UAAUC,MAAM,WAChB,MAAOF,GAAE,YAAYG,GAAG,QAAS,WAC/B,MAAOH,GAAE,QAAQI,IAAIJ,EAAEK,MAAMC,KAAK,cAIrCC,KAAKF","file":"lemonldap-ng-portal/site/htdocs/static/common/js/idpchoice.min.js"}

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
(function() { (function() {
var _go, go, i, stop, timer; var _go, go, i, stop, timer;

View File

@ -1 +1,2 @@
(function(){var _go,go,i,stop,timer;i=30;_go=1;stop=function(){_go=0;return $("#divToHide").hide()};go=function(){if(_go){return $("#form").submit()}};timer=function(){var h;h=$("#timer").html();if(i>0){i--}h=h.replace(/\d+/,i);$("#timer").html(h);return window.setTimeout(timer,1e3)};$(document).ready(function(){if(window.datas["activeTimer"]){window.setTimeout(go,3e4);window.setTimeout(timer,1e3)}else{stop}return $("#wait").on("click",function(){return stop()})})}).call(this); (function(){var t,i,e,n,r;e=30,t=1,n=function(){return t=0,$("#divToHide").hide()},i=function(){if(t)return $("#form").submit()},r=function(){var t;return t=$("#timer").html(),e>0&&e--,t=t.replace(/\d+/,e),$("#timer").html(t),window.setTimeout(r,1e3)},$(document).ready(function(){return window.datas.activeTimer&&(window.setTimeout(i,3e4),window.setTimeout(r,1e3)),$("#wait").on("click",function(){return n()})})}).call(this);
//# sourceMappingURL=lemonldap-ng-portal/site/htdocs/static/common/js/info.min.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-portal/site/htdocs/static/common/js/info.js"],"names":["_go","go","i","stop","timer","$","hide","submit","h","html","replace","window","setTimeout","document","ready","datas","on","call","this"],"mappings":"CACA,WACE,GAAIA,GAAKC,EAAIC,EAAGC,EAAMC,CAEtBF,GAAI,GAEJF,EAAM,EAENG,EAAO,WAEL,MADAH,GAAM,EACCK,EAAE,cAAcC,QAGzBL,EAAK,WACH,GAAID,EACF,MAAOK,GAAE,SAASE,UAItBH,EAAQ,WACN,GAAII,EAOJ,OANAA,GAAIH,EAAE,UAAUI,OACZP,EAAI,GACNA,IAEFM,EAAIA,EAAEE,QAAQ,MAAOR,GACrBG,EAAE,UAAUI,KAAKD,GACVG,OAAOC,WAAWR,EAAO,MAGlCC,EAAEQ,UAAUC,MAAM,WAOhB,MANIH,QAAOI,MAAmB,cAC5BJ,OAAOC,WAAWX,EAAI,KACtBU,OAAOC,WAAWR,EAAO,MAIpBC,EAAE,SAASW,GAAG,QAAS,WAC5B,MAAOb,WAIVc,KAAKC","file":"lemonldap-ng-portal/site/htdocs/static/common/js/info.min.js"}

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
(function() { (function() {
$(document).ready(function() { $(document).ready(function() {
return $.ajax(portal + '?kerberos=1', { return $.ajax(portal + '?kerberos=1', {

View File

@ -1 +1,2 @@
(function(){$(document).ready(function(){return $.ajax(portal+"?kerberos=1",{dataType:"json",statusCode:{401:function(){return $("#lform").submit()}},success:function(data){return $("#lform").submit()},error:function(){return $("#lform").submit()}})})}).call(this); (function(){$(document).ready(function(){return $.ajax(portal+"?kerberos=1",{dataType:"json",statusCode:{401:function(){return $("#lform").submit()}},success:function(r){return $("#lform").submit()},error:function(){return $("#lform").submit()}})})}).call(this);
//# sourceMappingURL=lemonldap-ng-portal/site/htdocs/static/common/js/kerberos.min.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-portal/site/htdocs/static/common/js/kerberos.js"],"names":["$","document","ready","ajax","portal","dataType","statusCode","401","submit","success","data","error","call","this"],"mappings":"CACA,WACEA,EAAEC,UAAUC,MAAM,WAChB,MAAOF,GAAEG,KAAKC,OAAS,eACrBC,SAAU,OACVC,YACEC,IAAK,WACH,MAAOP,GAAE,UAAUQ,WAGvBC,QAAS,SAASC,GAChB,MAAOV,GAAE,UAAUQ,UAErBG,MAAO,WACL,MAAOX,GAAE,UAAUQ,gBAKxBI,KAAKC","file":"lemonldap-ng-portal/site/htdocs/static/common/js/kerberos.min.js"}

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
(function() { (function() {
var _krbJsAlreadySent; var _krbJsAlreadySent;

View File

@ -1 +1,2 @@
(function(){var _krbJsAlreadySent;if(_krbJsAlreadySent===null){_krbJsAlreadySent=false}$(document).ready(function(){if(!_krbJsAlreadySent){_krbJsAlreadySent=1;console.log("Send Kerberos Ajax request");return $.ajax(portal+"?kerberos=1",{dataType:"json",statusCode:{401:function(){return $("#lformKerberos").submit()}},success:function(data){return $("#lformKerberos").submit()},error:function(){return $("#lformKerberos").submit()}})}else{return console.log("Kerberos Ajax request already sent")}})}).call(this); (function(){var r;null===r&&(r=!1),$(document).ready(function(){return r?console.log("Kerberos Ajax request already sent"):(r=1,console.log("Send Kerberos Ajax request"),$.ajax(portal+"?kerberos=1",{dataType:"json",statusCode:{401:function(){return $("#lformKerberos").submit()}},success:function(r){return $("#lformKerberos").submit()},error:function(){return $("#lformKerberos").submit()}}))})}).call(this);
//# sourceMappingURL=lemonldap-ng-portal/site/htdocs/static/common/js/kerberosChoice.min.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-portal/site/htdocs/static/common/js/kerberosChoice.js"],"names":["_krbJsAlreadySent","$","document","ready","console","log","ajax","portal","dataType","statusCode","401","submit","success","data","error","call","this"],"mappings":"CACA,WACE,GAAIA,EAEsB,QAAtBA,IACFA,GAAoB,GAGtBC,EAAEC,UAAUC,MAAM,WAChB,MAAKH,GAkBII,QAAQC,IAAI,uCAjBnBL,EAAoB,EACpBI,QAAQC,IAAI,8BACLJ,EAAEK,KAAKC,OAAS,eACrBC,SAAU,OACVC,YACEC,IAAK,WACH,MAAOT,GAAE,kBAAkBU,WAG/BC,QAAS,SAASC,GAChB,MAAOZ,GAAE,kBAAkBU,UAE7BG,MAAO,WACL,MAAOb,GAAE,kBAAkBU,iBAQlCI,KAAKC","file":"lemonldap-ng-portal/site/htdocs/static/common/js/kerberosChoice.min.js"}

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
(function() { (function() {
var values; var values;

View File

@ -1 +1,2 @@
(function(){var values;values={};$(document).ready(function(){$("script[type='application/init']").each(function(){var e,k,results,tmp;try{tmp=JSON.parse($(this).text());results=[];for(k in tmp){results.push(values[k]=tmp[k])}return results}catch(error){e=error;return console.log("Parsing error",e)}});return window.addEventListener("message",function(e){var client_id,message,salt,session_state,ss,stat;message=e.data;console.log("message=",message);client_id=decodeURIComponent(message.split(" ")[0]);session_state=decodeURIComponent(message.split(" ")[1]);salt=decodeURIComponent(session_state.split(".")[1]);ss=btoa(client_id+" "+e.origin+" "+salt)+"."+salt;if(session_state===ss){stat="unchanged"}else{stat="changed"}return e.source.postMessage(stat,e.origin)},false)})}).call(this); (function(){var e;e={},$(document).ready(function(){return $("script[type='application/init']").each(function(){var n,t,o,r;try{r=JSON.parse($(this).text()),o=[];for(t in r)o.push(e[t]=r[t]);return o}catch(e){return n=e,console.log("Parsing error",n)}}),window.addEventListener("message",function(e){var n,t,o,r,i,a;return t=e.data,console.log("message=",t),n=decodeURIComponent(t.split(" ")[0]),r=decodeURIComponent(t.split(" ")[1]),o=decodeURIComponent(r.split(".")[1]),i=btoa(n+" "+e.origin+" "+o)+"."+o,a=r===i?"unchanged":"changed",e.source.postMessage(a,e.origin)},!1)})}).call(this);
//# sourceMappingURL=lemonldap-ng-portal/site/htdocs/static/common/js/oidcchecksession.min.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-portal/site/htdocs/static/common/js/oidcchecksession.js"],"names":["values","$","document","ready","each","e","k","results","tmp","JSON","parse","this","text","push","error","console","log","window","addEventListener","client_id","message","salt","session_state","ss","stat","data","decodeURIComponent","split","btoa","origin","source","postMessage","call"],"mappings":"CACA,WACE,GAAIA,EAEJA,MAEAC,EAAEC,UAAUC,MAAM,WAehB,MAdAF,GAAE,mCAAmCG,KAAK,WACxC,GAAIC,GAAGC,EAAGC,EAASC,CACnB,KACEA,EAAMC,KAAKC,MAAMT,EAAEU,MAAMC,QACzBL,IACA,KAAKD,IAAKE,GACRD,EAAQM,KAAKb,EAAOM,GAAKE,EAAIF,GAE/B,OAAOC,GACP,MAAOO,GAEP,MADAT,GAAIS,EACGC,QAAQC,IAAI,gBAAiBX,MAGjCY,OAAOC,iBAAiB,UAAW,SAASb,GACjD,GAAIc,GAAWC,EAASC,EAAMC,EAAeC,EAAIC,CAYjD,OAXAJ,GAAUf,EAAEoB,KACZV,QAAQC,IAAI,WAAYI,GACxBD,EAAYO,mBAAmBN,EAAQO,MAAM,KAAK,IAClDL,EAAgBI,mBAAmBN,EAAQO,MAAM,KAAK,IACtDN,EAAOK,mBAAmBJ,EAAcK,MAAM,KAAK,IACnDJ,EAAKK,KAAKT,EAAY,IAAMd,EAAEwB,OAAS,IAAMR,GAAQ,IAAMA,EAEzDG,EADEF,IAAkBC,EACb,YAEA,UAEFlB,EAAEyB,OAAOC,YAAYP,EAAMnB,EAAEwB,UACnC,OAGJG,KAAKrB","file":"lemonldap-ng-portal/site/htdocs/static/common/js/oidcchecksession.min.js"}

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
/* /*
LemonLDAP::NG Portal jQuery scripts LemonLDAP::NG Portal jQuery scripts

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
// Generated by CoffeeScript 1.12.8 // Generated by CoffeeScript 1.12.7
(function() { (function() {
document.onreadystatechange = function() { document.onreadystatechange = function() {
var redirect; var redirect;

View File

@ -1 +1,2 @@
(function(){document.onreadystatechange=function(){var redirect;if(document.readyState==="complete"){redirect=document.getElementById("redirect").textContent.replace(/\s/g,"");if(redirect){if(redirect==="form"){return document.getElementById("form").submit()}else{return document.location.href=redirect}}else{return console.log("No redirection !")}}}}).call(this); (function(){document.onreadystatechange=function(){var e;if("complete"===document.readyState)return e=document.getElementById("redirect").textContent.replace(/\s/g,""),e?"form"===e?document.getElementById("form").submit():document.location.href=e:console.log("No redirection !")}}).call(this);
//# sourceMappingURL=lemonldap-ng-portal/site/htdocs/static/common/js/redirect.min.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["lemonldap-ng-portal/site/htdocs/static/common/js/redirect.js"],"names":["document","onreadystatechange","redirect","readyState","getElementById","textContent","replace","submit","location","href","console","log","call","this"],"mappings":"CACA,WACEA,SAASC,mBAAqB,WAC5B,GAAIC,EACJ,IAA4B,aAAxBF,SAASG,WAEX,MADAD,GAAWF,SAASI,eAAe,YAAYC,YAAYC,QAAQ,MAAO,IACtEJ,EACe,SAAbA,EACKF,SAASI,eAAe,QAAQG,SAEhCP,SAASQ,SAASC,KAAOP,EAG3BQ,QAAQC,IAAI,uBAKxBC,KAAKC","file":"lemonldap-ng-portal/site/htdocs/static/common/js/redirect.min.js"}

Some files were not shown because too many files have changed in this diff Show More