diff --git a/Makefile b/Makefile index 89d0eed22..aab5ae35e 100644 --- a/Makefile +++ b/Makefile @@ -318,9 +318,19 @@ fastcgi-server/man/llng-fastcgi-server.1p: fastcgi-server/sbin/llng-fastcgi-serv # Perl libraries configuration -json: $(MANAGERJSONDST) fastcgi-server/man/llng-fastcgi-server.1p +json: $(MANAGERJSONDST) fastcgi-server/man/llng-fastcgi-server.1p debian/*cron* @if which yui-compressor >/dev/null; then $(MAKE) minify; fi +debian/liblemonldap-ng-handler-perl.cron.d: lemonldap-ng-handler/eg/scripts/purgeLocalCache.cron.d + @perl -pe 's/__APACHEUSER__/www-data/g;s@__BINDIR__@/usr/share/lemonldap-ng/bin@g' \ + lemonldap-ng-handler/eg/scripts/purgeLocalCache.cron.d \ + > debian/liblemonldap-ng-handler-perl.cron.d + +debian/liblemonldap-ng-portal-perl.cron.d: lemonldap-ng-portal/site/cron/purgeCentralCache.cron.d + @perl -pe 's/__APACHEUSER__/www-data/g;s@__BINDIR__@/usr/share/lemonldap-ng/bin@g' \ + lemonldap-ng-portal/site/cron/purgeCentralCache.cron.d \ + > debian/liblemonldap-ng-portal-perl.cron.d + $(MANAGERJSONDST): $(MANAGERJSONSRC) ./scripts/jsongenerator.pl diff --git a/debian/liblemonldap-ng-handler-perl.cron.d b/debian/liblemonldap-ng-handler-perl.cron.d index c7139b10e..e7d664bd7 100644 --- a/debian/liblemonldap-ng-handler-perl.cron.d +++ b/debian/liblemonldap-ng-handler-perl.cron.d @@ -1,4 +1,4 @@ # -# Regular cron jobs for the Lemonldap::NG portal +# Regular cron jobs for LemonLDAP::NG Handler # -1 * * * * www-data test -x /usr/share/lemonldap-ng/bin/purgeLocalCache && /usr/share/lemonldap-ng/bin/purgeLocalCache +1 * * * * www-data [ -x /usr/share/lemonldap-ng/bin/purgeLocalCache ] && /usr/share/lemonldap-ng/bin/purgeLocalCache diff --git a/debian/liblemonldap-ng-portal-perl.cron.d b/debian/liblemonldap-ng-portal-perl.cron.d index 9c42ef2a7..060634956 100644 --- a/debian/liblemonldap-ng-portal-perl.cron.d +++ b/debian/liblemonldap-ng-portal-perl.cron.d @@ -1,4 +1,4 @@ # -# Regular cron jobs for the Lemonldap::NG portal +# Regular cron jobs for LemonLDAP::NG Portal # -*/10 * * * * www-data test -x /usr/share/lemonldap-ng/bin/purgeCentralCache && /usr/share/lemonldap-ng/bin/purgeCentralCache +*/10 * * * * www-data [ -x /usr/share/lemonldap-ng/bin/purgeCentralCache ] && /usr/share/lemonldap-ng/bin/purgeCentralCache diff --git a/fastcgi-server/man/llng-fastcgi-server.1p b/fastcgi-server/man/llng-fastcgi-server.1p index ffdaffbe8..aaaa8277b 100644 --- a/fastcgi-server/man/llng-fastcgi-server.1p +++ b/fastcgi-server/man/llng-fastcgi-server.1p @@ -133,7 +133,7 @@ .\" ======================================================================== .\" .IX Title "llng-fastcgi-server 1" -.TH llng-fastcgi-server 1 "2019-04-16" "perl v5.28.1" "User Contributed Perl Documentation" +.TH llng-fastcgi-server 1 "2019-04-23" "perl v5.28.1" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff --git a/lemonldap-ng-handler/eg/scripts/purgeLocalCache.cron.d b/lemonldap-ng-handler/eg/scripts/purgeLocalCache.cron.d index 337072941..74982a62a 100644 --- a/lemonldap-ng-handler/eg/scripts/purgeLocalCache.cron.d +++ b/lemonldap-ng-handler/eg/scripts/purgeLocalCache.cron.d @@ -1,4 +1,4 @@ # -# Regular cron jobs for LemonLDAP::NG +# Regular cron jobs for LemonLDAP::NG Handler # -1 * * * * __APACHEUSER__ [ -x __BINDIR__/purgeLocalCache ] && __BINDIR__/purgeLocalCache +1 * * * * __APACHEUSER__ [ -x __BINDIR__/purgeLocalCache ] && __BINDIR__/purgeLocalCache diff --git a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Parser.pm b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Parser.pm index b26799bb0..72a607a96 100644 --- a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Parser.pm +++ b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Parser.pm @@ -130,7 +130,7 @@ sub scanTree { || '_whatToTrace' } // "anonymous"; $self->newConf->{cfgAuthorIP} = $self->req->address; $self->newConf->{cfgDate} = time; - $self->newConf->{cfgVersion} = $VERSION; + $self->newConf->{cfgVersion} = $Lemonldap::NG::Manager::VERSION; $self->newConf->{key} ||= join( '', map { chr( int( ord( Crypt::URandom::urandom(1) ) * 94 / 256 ) + 33 ) } ( 1 .. 16 ) ); diff --git a/lemonldap-ng-manager/site/coffee/sessions.coffee b/lemonldap-ng-manager/site/coffee/sessions.coffee index 3e3b8d862..907b4b33e 100644 --- a/lemonldap-ng-manager/site/coffee/sessions.coffee +++ b/lemonldap-ng-manager/site/coffee/sessions.coffee @@ -330,7 +330,7 @@ llapp.controller 'SessionsExplorerCtrl', ['$scope', '$translator', '$location', console.log element, '-> real attribute' real.push element else - console.log element, '-> spoofed attribute' + #console.log element, '-> spoofed attribute' spoof.push element tmp = spoof.concat real @@ -353,14 +353,23 @@ llapp.controller 'SessionsExplorerCtrl', ['$scope', '$translator', '$location', d = new Date(s * 1000) return d.toLocaleString() - $scope.isValid = (epoch) -> + $scope.isValid = (epoch, type) -> + path = $location.path() now = Date.now() / 1000 - valid = now - epoch < $scope.sessionTTL - console.log "session epoch", epoch - console.log "current date", now - console.log "sessions TTL", sessionTTL - console.log "Valid ?", valid - return valid + console.log "Path", path + console.log "Session epoch", epoch + console.log "Current date", now + console.log "Session TTL", sessionTTL + isValid = now - epoch < sessionTTL || $location.path().match(/^\/persistent/) + if type == 'msg' + console.log "Return msg" + if isValid then return "info" else return "warning" + else if type == 'style' + console.log "Return style" + if isValid then return {} else return {'color': '#627990', 'font-style': 'italic'} + else + console.log "Return isValid" + return isValid $scope.strToLocaleDate = (s) -> arrayDate = s.match /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/ @@ -459,6 +468,8 @@ llapp.controller 'SessionsExplorerCtrl', ['$scope', '$translator', '$location', $scope.init = -> $scope.waiting = true $scope.data = [] + $scope.currentScope = null + $scope.currentSession = null $q.all [ $translator.init $scope.lang $scope.updateTree '', $scope.data, 0, 0 diff --git a/lemonldap-ng-manager/site/htdocs/static/js/sessions.js b/lemonldap-ng-manager/site/htdocs/static/js/sessions.js index 8cb905b04..8ff3bf858 100644 --- a/lemonldap-ng-manager/site/htdocs/static/js/sessions.js +++ b/lemonldap-ng-manager/site/htdocs/static/js/sessions.js @@ -406,7 +406,6 @@ console.log(element, '-> real attribute'); real.push(element); } else { - console.log(element, '-> spoofed attribute'); spoof.push(element); } } @@ -433,15 +432,36 @@ d = new Date(s * 1000); return d.toLocaleString(); }; - $scope.isValid = function(epoch) { - var now, valid; + $scope.isValid = function(epoch, type) { + var isValid, now, path; + path = $location.path(); now = Date.now() / 1000; - valid = now - epoch < $scope.sessionTTL; - console.log("session epoch", epoch); - console.log("current date", now); - console.log("sessions TTL", sessionTTL); - console.log("Valid ?", valid); - return valid; + console.log("Path", path); + console.log("Session epoch", epoch); + console.log("Current date", now); + console.log("Session TTL", sessionTTL); + isValid = now - epoch < sessionTTL || $location.path().match(/^\/persistent/); + if (type === 'msg') { + console.log("Return msg"); + if (isValid) { + return "info"; + } else { + return "warning"; + } + } else if (type === 'style') { + console.log("Return style"); + if (isValid) { + return {}; + } else { + return { + 'color': '#627990', + 'font-style': 'italic' + }; + } + } else { + console.log("Return isValid"); + return isValid; + } }; $scope.strToLocaleDate = function(s) { var arrayDate, d; @@ -522,6 +542,8 @@ $scope.init = function() { $scope.waiting = true; $scope.data = []; + $scope.currentScope = null; + $scope.currentSession = null; $q.all([$translator.init($scope.lang), $scope.updateTree('', $scope.data, 0, 0)]).then(function() { return $scope.waiting = false; }, function(resp) { diff --git a/lemonldap-ng-manager/site/htdocs/static/js/sessions.min.js b/lemonldap-ng-manager/site/htdocs/static/js/sessions.min.js index f41e80db9..fafadd1ea 100644 --- a/lemonldap-ng-manager/site/htdocs/static/js/sessions.min.js +++ b/lemonldap-ng-manager/site/htdocs/static/js/sessions.min.js @@ -1 +1 @@ -(function(){var categories,hiddenAttributes,llapp,max,menu,overScheme,schemes;max=25;schemes={_whatToTrace:[function(t,v){return"groupBy=substr("+t+",1)"},function(t,v){return t+"="+v+"*&groupBy="+t},function(t,v){return t+"="+v}],ipAddr:[function(t,v){return"groupBy=net("+t+",16,1)"},function(t,v){if(!v.match(/:/)){v=v+"."}return t+"="+v+"*&groupBy=net("+t+",32,2)"},function(t,v){if(!v.match(/:/)){v=v+"."}return t+"="+v+"*&groupBy=net("+t+",48,3)"},function(t,v){if(!v.match(/:/)){v=v+"."}return t+"="+v+"*&groupBy=net("+t+",128,4)"},function(t,v){return t+"="+v+"&groupBy=_whatToTrace"},function(t,v,q){return q.replace(/\&groupBy.*$/,"")+("&_whatToTrace="+v)}],_startTime:[function(t,v){return"groupBy=substr("+t+",8)"},function(t,v){return t+"="+v+"*&groupBy=substr("+t+",10)"},function(t,v){return t+"="+v+"*&groupBy=substr("+t+",11)"},function(t,v){return t+"="+v+"*&groupBy=substr("+t+",12)"},function(t,v){return t+"="+v+"*&groupBy=_whatToTrace"},function(t,v,q){console.log(t);console.log(v);console.log(q);return q.replace(/\&groupBy.*$/,"")+("&_whatToTrace="+v)}],doubleIp:[function(t,v){return t},function(t,v){return"_whatToTrace="+v+"&groupBy=ipAddr"},function(t,v,q){return q.replace(/\&groupBy.*$/,"")+("&ipAddr="+v)}]};overScheme={_whatToTrace:function(t,v,level,over){if(level===1&&v.length>over){return t+"="+v+"*&groupBy=substr("+t+","+(level+over+1)+")"}else{return null}},ipAddr:function(t,v,level,over){if(level>0&&level<4){return t+"="+v+"*&groupBy=net("+t+","+(16*level+4*(over+1))+",2)"}else{return null}}};hiddenAttributes="_password";categories={dateTitle:["_utime","_startTime","_updateTime","_lastAuthnUTime","_lastSeen"],connectionTitle:["ipAddr","_timezone","_url"],authenticationTitle:["_session_id","_user","_password","authenticationLevel"],modulesTitle:["_auth","_userDB","_passwordDB","_issuerDB","_authChoice","_authMulti","_userDBMulti"],saml:["_idp","_idpConfKey","_samlToken","_lassoSessionDump","_lassoIdentityDump"],groups:["groups","hGroups"],ldap:["dn"],BrowserID:["_browserIdAnswer","_browserIdAnswerRaw"],OpenIDConnect:["_oidc_id_token","_oidc_OP","_oidc_access_token"],sfaTitle:["_2fDevices"],oidcConsents:["_oidcConsents"]};menu={session:[{title:"deleteSession",icon:"trash"}],home:[]};llapp=angular.module("llngSessionsExplorer",["ui.tree","ui.bootstrap","llApp"]);llapp.controller("SessionsExplorerCtrl",["$scope","$translator","$location","$q","$http",function($scope,$translator,$location,$q,$http){var autoId,c,pathEvent,sessionType;$scope.links=links;$scope.menulinks=menulinks;$scope.staticPrefix=staticPrefix;$scope.scriptname=scriptname;$scope.formPrefix=formPrefix;$scope.impPrefix=impPrefix;$scope.sessionTTL=sessionTTL;$scope.availableLanguages=availableLanguages;$scope.waiting=true;$scope.showM=false;$scope.showT=true;$scope.data=[];$scope.currentScope=null;$scope.currentSession=null;$scope.menu=menu;$scope.translateP=$translator.translateP;$scope.translate=$translator.translate;$scope.translateTitle=function(node){return $translator.translateField(node,"title")};sessionType="global";$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.deleteOIDCConsent=function(rp,epoch){var item;item=angular.element(".data-"+epoch);item.remove();$scope.waiting=true;$http["delete"](scriptname+"sessions/OIDCConsent/"+sessionType+"/"+$scope.currentSession.id+"?rp="+rp+"&epoch="+epoch).then(function(response){return $scope.waiting=false},function(resp){return $scope.waiting=false});return $scope.showT=false};$scope.deleteSession=function(){$scope.waiting=true;return $http["delete"](scriptname+"sessions/"+sessionType+"/"+$scope.currentSession.id).then(function(response){$scope.currentSession=null;$scope.currentScope.remove();return $scope.waiting=false},function(resp){$scope.currentSession=null;$scope.currentScope.remove();return $scope.waiting=false})};$scope.stoggle=function(scope){var node;node=scope.$modelValue;if(node.nodes.length===0){$scope.updateTree(node.value,node.nodes,node.level,node.over,node.query,node.count)}return scope.toggle()};$scope.displaySession=function(scope){var sessionId,transformSession;transformSession=function(session){var _insert,array,attr,attrs,category,cv,element,epoch,i,id,j,k,key,l,len,len1,len2,len3,len4,len5,m,name,o,oidcConsent,p,real,ref,ref1,res,sfDevice,spoof,subres,time,title,tmp,value;_insert=function(re,title){var key,reg,tmp,value;tmp=[];reg=new RegExp(re);for(key in session){value=session[key];if(key.match(reg)&&value){tmp.push({title:key,value:value});delete session[key]}}if(tmp.length>0){return res.push({title:title,nodes:tmp})}};time=session._utime;id=session._session_id;for(key in session){value=session[key];if(!value){delete session[key]}else{if(typeof session==="string"&&value.match(/; /)){session[key]=value.split("; ")}if(typeof session[key]!=="object"){if(hiddenAttributes.match(new RegExp("\b"+key+"\b"))){session[key]="********"}else if(key.match(/^(_utime|_lastAuthnUTime|_lastSeen|notification)$/)){session[key]=$scope.localeDate(value)}else if(key.match(/^(_startTime|_updateTime)$/)){session[key]=$scope.strToLocaleDate(value)}}}}res=[];for(category in categories){attrs=categories[category];subres=[];for(i=0,len=attrs.length;i0){res.push({title:"__"+category+"__",nodes:subres})}}_insert("^openid","OpenID");_insert("^notification_(.+)","__notificationsDone__");if(session._loginHistory){tmp=[];if(session._loginHistory.successLogin){ref=session._loginHistory.successLogin;for(m=0,len3=ref.length;mb.title){return 1}else if(a.title real attribute");real.push(element)}else{console.log(element,"-> spoofed attribute");spoof.push(element)}}tmp=spoof.concat(real);res.push({title:"__attributesAndMacros__",nodes:tmp});return{_utime:time,id:id,nodes:res}};$scope.currentScope=scope;sessionId=scope.$modelValue.session;$http.get(scriptname+"sessions/"+sessionType+"/"+sessionId).then(function(response){return $scope.currentSession=transformSession(response.data)});return $scope.showT=false};$scope.localeDate=function(s){var d;d=new Date(s*1e3);return d.toLocaleString()};$scope.isValid=function(epoch){var now,valid;now=Date.now()/1e3;valid=now-epoch<$scope.sessionTTL;console.log("session epoch",epoch);console.log("current date",now);console.log("sessions TTL",sessionTTL);console.log("Valid ?",valid);return valid};$scope.strToLocaleDate=function(s){var arrayDate,d;arrayDate=s.match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/);if(!arrayDate.length){return s}d=new Date(arrayDate[1]+"-"+arrayDate[2]+"-"+arrayDate[3]+"T"+arrayDate[4]+":"+arrayDate[5]+":"+arrayDate[6]);return d.toLocaleString()};$scope.getLanguage=function(lang){$scope.lang=lang;$scope.form="white";$scope.init();return $scope.showM=false};pathEvent=function(event,next,current){var n;n=next.match(/#!?\/(\w+)/);sessionType="global";if(n===null){$scope.type="_whatToTrace"}else if(n[1].match(/^(persistent)$/)){sessionType=RegExp.$1;$scope.type="_session_uid"}else{$scope.type=n[1]}return $scope.init()};$scope.$on("$locationChangeSuccess",pathEvent);autoId=0;$scope.updateTree=function(value,node,level,over,currentQuery,count){var query,scheme,tmp;$scope.waiting=true;scheme=schemes[$scope.type]?schemes[$scope.type]:$scope.type==="_updateTime"?schemes._startTime:schemes._whatToTrace;query=scheme[level]($scope.type,value,currentQuery);if(count>max&&overScheme[$scope.type]){if(tmp=overScheme[$scope.type]($scope.type,value,level,over,currentQuery)){over++;query=tmp;level=level-1}else{over=0}}else{over=0}return $http.get(scriptname+"sessions/"+sessionType+"?"+query).then(function(response){var data,i,len,n,ref;data=response.data;if(data.result){ref=data.values;for(i=0,len=ref.length;i0&&level<4){return t+"="+v+"*&groupBy=net("+t+","+(16*level+4*(over+1))+",2)"}else{return null}}};hiddenAttributes="_password";categories={dateTitle:["_utime","_startTime","_updateTime","_lastAuthnUTime","_lastSeen"],connectionTitle:["ipAddr","_timezone","_url"],authenticationTitle:["_session_id","_user","_password","authenticationLevel"],modulesTitle:["_auth","_userDB","_passwordDB","_issuerDB","_authChoice","_authMulti","_userDBMulti"],saml:["_idp","_idpConfKey","_samlToken","_lassoSessionDump","_lassoIdentityDump"],groups:["groups","hGroups"],ldap:["dn"],BrowserID:["_browserIdAnswer","_browserIdAnswerRaw"],OpenIDConnect:["_oidc_id_token","_oidc_OP","_oidc_access_token"],sfaTitle:["_2fDevices"],oidcConsents:["_oidcConsents"]};menu={session:[{title:"deleteSession",icon:"trash"}],home:[]};llapp=angular.module("llngSessionsExplorer",["ui.tree","ui.bootstrap","llApp"]);llapp.controller("SessionsExplorerCtrl",["$scope","$translator","$location","$q","$http",function($scope,$translator,$location,$q,$http){var autoId,c,pathEvent,sessionType;$scope.links=links;$scope.menulinks=menulinks;$scope.staticPrefix=staticPrefix;$scope.scriptname=scriptname;$scope.formPrefix=formPrefix;$scope.impPrefix=impPrefix;$scope.sessionTTL=sessionTTL;$scope.availableLanguages=availableLanguages;$scope.waiting=true;$scope.showM=false;$scope.showT=true;$scope.data=[];$scope.currentScope=null;$scope.currentSession=null;$scope.menu=menu;$scope.translateP=$translator.translateP;$scope.translate=$translator.translate;$scope.translateTitle=function(node){return $translator.translateField(node,"title")};sessionType="global";$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.deleteOIDCConsent=function(rp,epoch){var item;item=angular.element(".data-"+epoch);item.remove();$scope.waiting=true;$http["delete"](scriptname+"sessions/OIDCConsent/"+sessionType+"/"+$scope.currentSession.id+"?rp="+rp+"&epoch="+epoch).then(function(response){return $scope.waiting=false},function(resp){return $scope.waiting=false});return $scope.showT=false};$scope.deleteSession=function(){$scope.waiting=true;return $http["delete"](scriptname+"sessions/"+sessionType+"/"+$scope.currentSession.id).then(function(response){$scope.currentSession=null;$scope.currentScope.remove();return $scope.waiting=false},function(resp){$scope.currentSession=null;$scope.currentScope.remove();return $scope.waiting=false})};$scope.stoggle=function(scope){var node;node=scope.$modelValue;if(node.nodes.length===0){$scope.updateTree(node.value,node.nodes,node.level,node.over,node.query,node.count)}return scope.toggle()};$scope.displaySession=function(scope){var sessionId,transformSession;transformSession=function(session){var _insert,array,attr,attrs,category,cv,element,epoch,i,id,j,k,key,l,len,len1,len2,len3,len4,len5,m,name,o,oidcConsent,p,real,ref,ref1,res,sfDevice,spoof,subres,time,title,tmp,value;_insert=function(re,title){var key,reg,tmp,value;tmp=[];reg=new RegExp(re);for(key in session){value=session[key];if(key.match(reg)&&value){tmp.push({title:key,value:value});delete session[key]}}if(tmp.length>0){return res.push({title:title,nodes:tmp})}};time=session._utime;id=session._session_id;for(key in session){value=session[key];if(!value){delete session[key]}else{if(typeof session==="string"&&value.match(/; /)){session[key]=value.split("; ")}if(typeof session[key]!=="object"){if(hiddenAttributes.match(new RegExp("\b"+key+"\b"))){session[key]="********"}else if(key.match(/^(_utime|_lastAuthnUTime|_lastSeen|notification)$/)){session[key]=$scope.localeDate(value)}else if(key.match(/^(_startTime|_updateTime)$/)){session[key]=$scope.strToLocaleDate(value)}}}}res=[];for(category in categories){attrs=categories[category];subres=[];for(i=0,len=attrs.length;i0){res.push({title:"__"+category+"__",nodes:subres})}}_insert("^openid","OpenID");_insert("^notification_(.+)","__notificationsDone__");if(session._loginHistory){tmp=[];if(session._loginHistory.successLogin){ref=session._loginHistory.successLogin;for(m=0,len3=ref.length;mb.title){return 1}else if(a.title real attribute");real.push(element)}else{spoof.push(element)}}tmp=spoof.concat(real);res.push({title:"__attributesAndMacros__",nodes:tmp});return{_utime:time,id:id,nodes:res}};$scope.currentScope=scope;sessionId=scope.$modelValue.session;$http.get(scriptname+"sessions/"+sessionType+"/"+sessionId).then(function(response){return $scope.currentSession=transformSession(response.data)});return $scope.showT=false};$scope.localeDate=function(s){var d;d=new Date(s*1e3);return d.toLocaleString()};$scope.isValid=function(epoch,type){var isValid,now,path;path=$location.path();now=Date.now()/1e3;console.log("Path",path);console.log("Session epoch",epoch);console.log("Current date",now);console.log("Session TTL",sessionTTL);isValid=now-epochmax&&overScheme[$scope.type]){if(tmp=overScheme[$scope.type]($scope.type,value,level,over,currentQuery)){over++;query=tmp;level=level-1}else{over=0}}else{over=0}return $http.get(scriptname+"sessions/"+sessionType+"?"+query).then(function(response){var data,i,len,n,ref;data=response.data;if(data.result){ref=data.values;for(i=0,len=ref.length;i{{translate("sessionTitle")}} {{currentSession.id}}
-
+
{{translate("sessionStartedAt")}} {{localeDate(currentSession._utime)}} + + *** {{translate("sessionExpired")}} *** +
@@ -118,12 +121,7 @@ - - {{localeDate(node.date)}} - - - {{localeDate(node.date)}} - + {{localeDate(node.date)}}
    diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/2F/Ext2F.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/2F/Ext2F.pm index 1890682eb..0fdd372d5 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/2F/Ext2F.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/2F/Ext2F.pm @@ -72,7 +72,7 @@ sub run { ) { $self->logger->error("External send command failed (code $c)"); - return $self->p->do( $req, [ sub { PE_ERROR } ] ); + return PE_ERROR; } # Prepare form @@ -146,6 +146,7 @@ sub launch { s#\$(\w+)#$session->{$1} // ''#ge; push @args, $_; } + $self->logger->debug( "Executing command: " . join( " ", @args ) ); return system @args; } diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/GrantSession.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/GrantSession.pm index 5be1d3827..463c09d38 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/GrantSession.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/GrantSession.pm @@ -52,8 +52,8 @@ sub run { } foreach ( sort sortByComment keys %{ $self->rules } ) { - $self->logger->debug( "Grant session condition -> " - . $self->conf->{grantSessionRules}->{$_} ); + my $rule = $self->conf->{grantSessionRules}->{$_}; + $self->logger->debug("Grant session condition -> $rule"); unless ( $self->rules->{$_}->( $req, $req->sessionInfo ) ) { $req->userData( {} ); @@ -70,6 +70,7 @@ sub run { return PE_OK; } $msg = $msg->( $req, $req->sessionInfo ); + $self->logger->debug("Transformed message -> $msg"); $req->info( $self->loadTemplate( 'simpleInfo', params => { trspan => $msg } @@ -77,7 +78,7 @@ sub run { ); $self->userLogger->error( 'User ' . $req->sessionInfo->{uid} - . " was not granted to open session (rule -> $msg)" ); + . " was not granted to open session (rule -> $rule)" ); $req->urldc( $self->conf->{portal} ); return $req->authResult(PE_SESSIONNOTGRANTED); } diff --git a/lemonldap-ng-portal/site/cron/purgeCentralCache.cron.d b/lemonldap-ng-portal/site/cron/purgeCentralCache.cron.d index 4c84d7320..55900362d 100644 --- a/lemonldap-ng-portal/site/cron/purgeCentralCache.cron.d +++ b/lemonldap-ng-portal/site/cron/purgeCentralCache.cron.d @@ -1,4 +1,4 @@ # -# Regular cron jobs for LemonLDAP::NG +# Regular cron jobs for LemonLDAP::NG Portal # -10 1/12 * * * __APACHEUSER__ [ -x __BINDIR__/purgeCentralCache ] && __BINDIR__/purgeCentralCache +*/10 * * * * __APACHEUSER__ [ -x __BINDIR__/purgeCentralCache ] && __BINDIR__/purgeCentralCache