diff --git a/Makefile b/Makefile index 52d77ab1d..691d6f73c 100644 --- a/Makefile +++ b/Makefile @@ -129,8 +129,8 @@ E2E_TESTS='portal/*.js' # LDAP backend test LLNGTESTLDAP_SLAPD_BIN=/usr/sbin/slapd -LLNGTESTLDAP_SLAPADD_BIN=/usr/sbin/slapdadd -LLNGTESTLDAP_SCHEMA_DIR=/etc/slapd/schema +LLNGTESTLDAP_SLAPADD_BIN=/usr/sbin/slapadd +LLNGTESTLDAP_SCHEMA_DIR=/etc/ldap/schema # Other SRCCOMMONDIR=lemonldap-ng-common @@ -623,6 +623,7 @@ install_bin: install_conf_dir ${SRCPORTALDIR}/site/cron/purgeCentralCache \ ${SRCPORTALDIR}/scripts/llngDeleteSession \ ${SRCCOMMONDIR}/scripts/convertConfig \ + ${SRCCOMMONDIR}/scripts/convertSessions \ ${SRCCOMMONDIR}/scripts/lmMigrateConfFiles2ini \ ${SRCCOMMONDIR}/scripts/rotateOidcKeys \ ${SRCMANAGERDIR}/scripts/lmConfigEditor \ diff --git a/debian/liblemonldap-ng-common-perl.install b/debian/liblemonldap-ng-common-perl.install index 353de61df..c7cc2aa90 100644 --- a/debian/liblemonldap-ng-common-perl.install +++ b/debian/liblemonldap-ng-common-perl.install @@ -1,12 +1,14 @@ /etc/lemonldap-ng/lemonldap-ng.ini /etc/lemonldap-ng/for_etc_hosts /usr/share/man/man1/convertConfig.1p +/usr/share/man/man1/convertSessions.1p /usr/share/man/man1/lemonldap-ng-cli.1p /usr/share/man/man3/Lemonldap::NG::Common* /usr/share/perl5/auto/Lemonldap/NG/Common /usr/share/perl5/Lemonldap/NG/Common* /usr/share/lemonldap-ng/ressources /usr/share/lemonldap-ng/bin/convertConfig +/usr/share/lemonldap-ng/bin/convertSessions /usr/share/lemonldap-ng/bin/importMetadata /usr/share/lemonldap-ng/bin/lmMigrateConfFiles2ini /usr/share/lemonldap-ng/bin/rotateOidcKeys diff --git a/lemonldap-ng-common/MANIFEST b/lemonldap-ng-common/MANIFEST index 94f97455b..d7c3d045d 100644 --- a/lemonldap-ng-common/MANIFEST +++ b/lemonldap-ng-common/MANIFEST @@ -70,6 +70,7 @@ META.json META.yml README scripts/convertConfig +scripts/convertSessions scripts/importMetadata scripts/lemonldap-ng-cli scripts/lmMigrateConfFiles2ini diff --git a/lemonldap-ng-common/Makefile.PL b/lemonldap-ng-common/Makefile.PL index 86745216a..8124b7bf5 100644 --- a/lemonldap-ng-common/Makefile.PL +++ b/lemonldap-ng-common/Makefile.PL @@ -90,6 +90,7 @@ WriteMakefile( }, MAN1PODS => { 'scripts/convertConfig' => 'blib/man1/convertConfig.1p', + 'scripts/convertSessions' => 'blib/man1/convertSessions.1p', 'scripts/lemonldap-ng-cli' => 'blib/man1/lemonldap-ng-cli.1p', }, ); diff --git a/lemonldap-ng-common/lib/Lemonldap/NG/Common/Apache/Session.pm b/lemonldap-ng-common/lib/Lemonldap/NG/Common/Apache/Session.pm index 8b4e318e1..2ac64fefc 100644 --- a/lemonldap-ng-common/lib/Lemonldap/NG/Common/Apache/Session.pm +++ b/lemonldap-ng-common/lib/Lemonldap/NG/Common/Apache/Session.pm @@ -219,18 +219,24 @@ sub _dbiGKFAS { $sth->execute; my %res; while ( my @row = $sth->fetchrow_array ) { - if ( ref($data) eq 'CODE' ) { - my $tmp = - &$data( $args->{unserialize}->( $row[1], $next ), $row[0] ); - $res{ $row[0] } = $tmp if ( defined($tmp) ); - } - elsif ($data) { - $data = [$data] unless ( ref($data) ); - my $tmp = $args->{unserialize}->( $row[1], $next ); - $res{ $row[0] }->{$_} = $tmp->{$_} foreach (@$data); - } - else { - $res{ $row[0] } = $args->{unserialize}->( $row[1], $next ); + eval { + if ( ref($data) eq 'CODE' ) { + my $tmp = + &$data( $args->{unserialize}->( $row[1], $next ), $row[0] ); + $res{ $row[0] } = $tmp if ( defined($tmp) ); + } + elsif ($data) { + $data = [$data] unless ( ref($data) ); + my $tmp = $args->{unserialize}->( $row[1], $next ); + $res{ $row[0] }->{$_} = $tmp->{$_} foreach (@$data); + } + else { + $res{ $row[0] } = $args->{unserialize}->( $row[1], $next ); + } + }; + if ($@) { + print STDERR "Error in session $row[0]\n"; + delete $res{ $row[0] }; } } return \%res; @@ -249,26 +255,32 @@ sub _FileGKFAS { my %res; for my $f (@t) { open F, '<', "$args->{Directory}/$f"; - my $row = join '', ; - if ( ref($data) eq 'CODE' ) { - eval { $res{$f} = &$data( $args->{unserialize}->($row), $f ); }; - if ($@) { - $res{$f} = &$data( undef, $f ); + eval { + my $row = join '', ; + if ( ref($data) eq 'CODE' ) { + eval { $res{$f} = &$data( $args->{unserialize}->($row), $f ); }; + if ($@) { + $res{$f} = &$data( undef, $f ); + } } - } - elsif ($data) { - $data = [$data] unless ( ref($data) ); - my $tmp; - eval { $tmp = $args->{unserialize}->($row); }; - if ($@) { - $res{$f}->{$_} = undef foreach (@$data); + elsif ($data) { + $data = [$data] unless ( ref($data) ); + my $tmp; + eval { $tmp = $args->{unserialize}->($row); }; + if ($@) { + $res{$f}->{$_} = undef foreach (@$data); + } + else { + $res{$f}->{$_} = $tmp->{$_} foreach (@$data); + } } else { - $res{$f}->{$_} = $tmp->{$_} foreach (@$data); + eval { $res{$f} = $args->{unserialize}->($row); }; } - } - else { - eval { $res{$f} = $args->{unserialize}->($row); }; + }; + if ($@) { + print STDERR "Error in session $f\n"; + delete $res{$f}; } } return \%res; @@ -318,17 +330,23 @@ sub _DBFileGKFAS { my %res; foreach my $k ( keys %{ $class->{dbm} } ) { - if ( ref($data) eq 'CODE' ) { - $res{$k} = - &$data( $args->{unserialize}->( $class->{dbm}->{$k} ), $k ); - } - elsif ($data) { - $data = [$data] unless ( ref($data) ); - my $tmp = $args->{unserialize}->( $class->{dbm}->{$k} ); - $res{$k}->{$_} = $tmp->{$_} foreach (@$data); - } - else { - $res{$k} = $args->{unserialize}->( $class->{dbm}->{$k} ); + eval { + if ( ref($data) eq 'CODE' ) { + $res{$k} = + &$data( $args->{unserialize}->( $class->{dbm}->{$k} ), $k ); + } + elsif ($data) { + $data = [$data] unless ( ref($data) ); + my $tmp = $args->{unserialize}->( $class->{dbm}->{$k} ); + $res{$k}->{$_} = $tmp->{$_} foreach (@$data); + } + else { + $res{$k} = $args->{unserialize}->( $class->{dbm}->{$k} ); + } + }; + if ($@) { + print STDERR "Error in session $k\n"; + delete $res{$k}; } } return \%res; diff --git a/lemonldap-ng-common/scripts/convertSessions b/lemonldap-ng-common/scripts/convertSessions new file mode 100755 index 000000000..cb5c8bfd1 --- /dev/null +++ b/lemonldap-ng-common/scripts/convertSessions @@ -0,0 +1,250 @@ +#!/usr/bin/perl +#============================================================================= +# LemonLDAP::NG session conversion tool +# +# This script lets an administrator migrate existing sessions from one backend +# to another. It is mostly useful when run on persistant sessions, but it can be +# useful in some other cases too, such as OIDC Offline sessions +# +# This is part of LemonLDAP::NG product, released under GPL +#============================================================================= + +use Lemonldap::NG::Common::Apache::Session; +use Lemonldap::NG::Common::Session; +use Config::IniFiles; +use strict; +use Getopt::Std; +$Getopt::Std::STANDARD_HELP_VERSION = 1; + +our $VERSION = "2.0.6"; + +# Options +# -d: debug mode +# -c: configuration file +# -i: ignore errors +my $opts = {}; +getopts( 'dic:', $opts ); + +my $debug = $opts->{d}; +my $config_file = $opts->{c}; +my $ignore_errors = $opts->{i}; +my $nb_converted = 0; +my $nb_error = 0; + +sub HELP_MESSAGE { + my $OUT = shift; + print $OUT < '/var/lib/lemonldap-ng/sessions', \\ + 'LockDirectory' => '/var/lib/lemonldap-ng/sessions/lock', \\ +} +# Only convert some session types +# sessionKind = Persistent, SSO + +[sessions_to] +storageModule = Apache::Session::Browseable::Postgres +storageModuleOptions = { \\ + 'DataSource' => 'DBI:Pg:database=lemonldapdb;host=pg.example.com', \\ + 'UserName' => 'lemonldaplogin', \\ + 'Password' => 'lemonldappw', \\ + 'Commit' => 1, \\ + 'Index' => 'ipAddr _whatToTrace user', \\ + 'TableName' => 'sessions', \\ +} + +END_MESSAGE +} + +unless ($config_file) { + HELP_MESSAGE( \*STDERR ); + die "You must provide the -c option"; +} + +my $inicfg = + Config::IniFiles->new( -file => $config_file, -allowcontinue => 1 ); +my $cfg = {}; + +die "Could not read configuration file" unless $inicfg; + +for my $section (qw/sessions_from sessions_to/) { + die "Could not find section $section in configuration file $config_file" + unless $inicfg->SectionExists($section); + + # Load section parameters + my $r; + foreach ( $inicfg->Parameters($section) ) { + $r->{$_} = $inicfg->val( $section, $_ ); + + # Remove spaces before and after value (#1488) + $r->{$_} =~ s/^\s*(.+?)\s*/$1/; + if ( $r->{$_} =~ /^[{\[].*[}\]]$/ || $r->{$_} =~ /^sub\s*{.*}$/ ) { + eval "\$r->{$_} = $r->{$_}"; + if ($@) { + print $@; + return $r; + } + } + } + $cfg->{$section} = $r; +} + +my $backendFrom; +my $backendTo; +my @sessionKindOnly; +if ( $cfg->{sessions_from}->{sessionKind} ) { + @sessionKindOnly = split /\W+/, $cfg->{sessions_from}->{sessionKind}; +} + +if ( $cfg->{sessions_from}->{storageModule} ) { + $backendFrom = $cfg->{sessions_from}->{storageModuleOptions}; + $backendFrom->{backend} = $cfg->{sessions_from}->{storageModule}; +} +else { + die + "[sessions_from] configuration section does not declare a storageModule"; +} + +if ( $cfg->{sessions_to}->{storageModule} ) { + $backendTo = $cfg->{sessions_to}->{storageModuleOptions}; + $backendTo->{backend} = $cfg->{sessions_to}->{storageModule}; +} +else { + die "[sessions_to] configuration section does not declare a storageModule"; +} + +Lemonldap::NG::Common::Apache::Session->get_key_from_all_sessions( + $backendFrom, + sub { + my $entry = shift; + my $id = shift; + + print "Processing session $id\n" if $debug; + my $s = Lemonldap::NG::Common::Session->new( { + storageModule => $backendTo->{backend}, + storageModuleOptions => $backendTo, + id => $id, + info => $entry, + force => 1, + } + ); + + # If filtering sessionKind + if (@sessionKindOnly) { + + unless ( grep { $_ eq $entry->{_session_kind} } @sessionKindOnly ) { + return undef; + } + } + + if ( $s->error ) { + die "Error encountered on session $id" unless $ignore_errors; + $nb_error += 1; + print "Error converting session $id : " . $s->error . "\n"; + } + else { + print "Session $id successfully converted\n" if $debug; + $nb_converted += 1; + } + } +); + +print "$nb_converted sessions have been converted\n"; + +print "$nb_error errors encountered during conversion\n" if $nb_error; + +my $exit = $nb_error ? 1 : 0; +exit $exit; + +__END__ + +=head1 NAME + +=encoding utf8 + +convertSessions - A tool to convert Lemonldap::NG sessions between storage backends. + +=head1 SYNOPSIS + + convertSession [-di] -c parameters.ini + + +=head1 DESCRIPTION + +convertConfig is a command line tool to migrate all sessions stored +in a source backend (sessions_from), into a new backend (sessions_to). + +It requires a special configuration file in which you must list the source +and destination backend modules and parameters. + +Sessions will not be deleted from the source backend. Existing sessions in the +destination backend will be kept, unless they have the same session ID as a +session in the source backend. In that case, the source will overwrite the +destination. + + +=head1 CONFIGURATION FILE FORMAT + +The configuration file needs two sections to describe the source and destination backends + +Here is an example + + [sessions_from] + storageModule = Apache::Session::File + storageModuleOptions = { \ + 'Directory' => '/var/lib/lemonldap-ng/sessions', \ + 'LockDirectory' => '/var/lib/lemonldap-ng/sessions/lock', \ + } + # Only migrate some session types + # sessionKind = Persistent, SSO + + [sessions_to] + storageModule = Apache::Session::Browseable::Postgres + storageModuleOptions = { \ + 'DataSource' => 'DBI:Pg:database=lemonldapdb;host=pg.example.com', \ + 'UserName' => 'lemonldaplogin', \ + 'Password' => 'lemonldappw', \ + 'Commit' => 1, \ + 'Index' => 'ipAddr _whatToTrace user', \ + 'TableName' => 'sessions', \ + } + + +The C parameter may be used to filter only some session types. + +Thanks to this, you can use this script to migrate from one database holding +all your sessions to separate tables from each session type. + + +=head1 SEE ALSO + +L + +=head1 AUTHORS + +=over + +=item Maxime Besson, Emaxime.besson@worteks.comE + +=back + +=head1 BUG REPORT + +Use OW2 system to report bug or ask for features: +L + +=head1 DOWNLOAD + +Lemonldap::NG is available at +L + diff --git a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm index 383f6c227..419f03d24 100644 --- a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm +++ b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm @@ -1764,7 +1764,7 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][ 'managerDn' => { 'default' => '', 'msgFail' => '__badValue__', - 'test' => qr/^(?:\w+=.*)?$/, + 'test' => qr/^.*$/, 'type' => 'text' }, 'managerPassword' => { diff --git a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm index 66346d1d1..d238153a2 100644 --- a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm +++ b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm @@ -2879,7 +2879,7 @@ sub attributes { # LDAP managerDn => { type => 'text', - test => qr/^(?:\w+=.*)?$/, + test => qr/^.*$/, msgFail => '__badValue__', default => '', documentation => 'LDAP manager DN', diff --git a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Notifications.pm b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Notifications.pm index c680ebcad..f07f0f0ba 100644 --- a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Notifications.pm +++ b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Notifications.pm @@ -15,10 +15,9 @@ use feature 'state'; extends 'Lemonldap::NG::Common::Conf::AccessLib'; -our $VERSION = '2.0.6'; +our $VERSION = '2.0.7'; has notifAccess => ( is => 'rw' ); - has notifFormat => ( is => 'rw' ); ############################# @@ -75,7 +74,6 @@ sub addRoutes { { done => { ':notificationId' => 'deleteDoneNotification' } }, ['DELETE'] ); - } sub setNotifAccess { @@ -158,6 +156,7 @@ sub notifications { my ( $notifs, $res ); $notifs = $self->notifAccess->$sub(); + my $total = ( keys %$notifs ); # Restrict to wanted values if ( @@ -201,6 +200,7 @@ sub notifications { result => 1, count => $count, values => $res, + total => $total } ); } @@ -221,7 +221,7 @@ sub notifications { } } return $self->sendJSONresponse( $req, - { result => 1, count => scalar(@r), values => \@r } ); + { result => 1, count => scalar(@r), values => \@r, total => $total } ); } } @@ -289,6 +289,7 @@ sub newNotification { $self->logger->debug("Notification Date = $json->{date}"); unless ( $json->{date} =~ /^\d{4}-\d{2}-\d{2}$/ ) { + $self->logger->error("Malformed date"); return $self->sendError( $req, "Malformed date", 200 ); } @@ -312,8 +313,8 @@ sub newNotification { delete $json->{xml}; }; if ($@) { - $self->logger->error("Notification malformed $@"); - return $self->sendError( $req, "Notification malformed: $@", 200 ); + $self->logger->error("Malformed notification $@"); + return $self->sendError( $req, "Malformed notification: $@", 200 ); } $newNotif = to_json($json); } diff --git a/lemonldap-ng-manager/site/coffee/notifications.coffee b/lemonldap-ng-manager/site/coffee/notifications.coffee index 150bc32ff..a0d94b672 100644 --- a/lemonldap-ng-manager/site/coffee/notifications.coffee +++ b/lemonldap-ng-manager/site/coffee/notifications.coffee @@ -125,11 +125,12 @@ llapp.controller 'NotificationsExplorerCtrl', [ '$scope', '$translator', '$locat $scope.waiting = false $scope.init() + # Open node $scope.stoggle = (scope) -> node = scope.$modelValue if node.nodes.length == 0 $scope.updateTree node.value, node.nodes, node.level, node.over, node.query, node.count - scope.toggle() + scope.toggle() $scope.notifDate = (s) -> if s? @@ -182,8 +183,8 @@ llapp.controller 'NotificationsExplorerCtrl', [ '$scope', '$translator', '$locat n.level = level + 1 n.query = query n.over = over - node.push n + $scope.total = data.total if value == '' $scope.waiting = false , (resp) -> $scope.waiting = false diff --git a/lemonldap-ng-manager/site/htdocs/static/js/notifications.js b/lemonldap-ng-manager/site/htdocs/static/js/notifications.js index 5bdc1437f..60ec428dc 100644 --- a/lemonldap-ng-manager/site/htdocs/static/js/notifications.js +++ b/lemonldap-ng-manager/site/htdocs/static/js/notifications.js @@ -20,7 +20,7 @@ ]; overScheme = function(v, level, over) { - console.log('overSchema => level', level, 'over', over); + console.log('overScheme => level', level, 'over', over); if (level === 1 && v.length > over) { return "uid=" + v + "*&groupBy=substr(uid," + (level + over + 1) + ")"; } else { @@ -143,8 +143,8 @@ 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(); } + return scope.toggle(); }; $scope.notifDate = function(s) { var d; @@ -207,6 +207,9 @@ } node.push(n); } + if (value === '') { + $scope.total = data.total; + } } return $scope.waiting = false; }, function(resp) { diff --git a/lemonldap-ng-manager/site/htdocs/static/js/notifications.min.js b/lemonldap-ng-manager/site/htdocs/static/js/notifications.min.js index 384a849ed..d3e79296d 100644 --- a/lemonldap-ng-manager/site/htdocs/static/js/notifications.min.js +++ b/lemonldap-ng-manager/site/htdocs/static/js/notifications.min.js @@ -1 +1 @@ -(function(){var u,d,m;m=[function(t){return"groupBy=substr(uid,1)"},function(t){return"uid="+t+"*&groupBy=uid"},function(t){return"uid="+t}],d=function(t,e,n){return console.log("overSchema => level",e,"over",n),1===e&&t.length>n?"uid="+t+"*&groupBy=substr(uid,"+(e+n+1)+")":null},u={actives:[{title:"markAsDone",icon:"check"}],done:[{title:"deleteNotification",icon:"trash"}],new:[{title:"save",icon:"save"}],home:[]},angular.module("llngNotificationsExplorer",["ui.tree","ui.bootstrap","llApp"]).controller("NotificationsExplorerCtrl",["$scope","$translator","$location","$q","$http","$uibModal",function(l,e,t,o,r,a){var f,n,i;return l.links=links,l.menulinks=menulinks,l.staticPrefix=staticPrefix,l.scriptname=scriptname,l.formPrefix=formPrefix,l.availableLanguages=availableLanguages,l.waiting=!0,l.showM=!1,l.showT=!0,l.showForm=!1,l.data=[],l.form={},l.formPost={},l.currentScope=null,l.currentNotification=null,l.menu=u,l.translateP=e.translateP,l.translate=e.translate,l.translateTitle=function(t){return e.translateField(t,"title")},l.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(l.currentNode,l);break;case"string":l[t.action]();break;default:console.log(typeof t.action)}return l.showM=!1},l.markAsDone=function(){return l.waiting=!0,r.put(scriptname+"notifications/"+l.type+"/"+l.currentNotification.uid+"_"+l.currentNotification.reference,{done:1}).then(function(t){return l.currentNotification=null,l.currentScope.remove(),l.message={title:"notificationDeleted"},l.showModal("alert.html"),l.waiting=!1,l.init()},function(t){return l.message={title:"notificationNotDeleted",message:t.statusText},l.showModal("alert.html"),l.waiting=!1,l.init()})},l.deleteNotification=function(){return l.waiting=!0,r.delete(scriptname+"notifications/"+l.type+"/"+l.currentNotification.uid+"_"+l.currentNotification.reference+"_"+l.currentNotification.done).then(function(t){return l.currentNotification=null,l.currentScope.remove(),l.message={title:"notificationPurged"},l.showModal("alert.html"),l.waiting=!1,l.init()},function(t){return l.message={title:"notificationNotPurged",message:t.statusText},l.showModal("alert.html"),l.waiting=!1,l.init()})},l.stoggle=function(t){var e;if(0===(e=t.$modelValue).nodes.length)return l.updateTree(e.value,e.nodes,e.level,e.over,e.query,e.count),t.toggle()},l.notifDate=function(t){return null!=t?(t.match(/(\d{4})-(\d{2})-(\d{2})/)&&(t=t.substr(0,4)+t.substr(5,2)+t.substr(8,2)),new Date(t.substr(0,4),t.substr(4,2)-1,t.substr(6,2)).toLocaleDateString()):""},l.getLanguage=function(t){return l.lang=t,l.form="white",l.init(),l.showM=!1},l.$on("$locationChangeSuccess",function(t,e,n){var i;return i=e.match(/#!?\/(\w+)/),l.type=null!=i?i[1]:"actives","new"===l.type?l.displayCreateForm():(l.showForm=!1,l.init())}),f=0,l.updateTree=function(t,a,u,c,e,n){var s,i;return l.waiting=!0,s=m[u](t,e),25 level",e,"over",n),1===e&&t.length>n?"uid="+t+"*&groupBy=substr(uid,"+(e+n+1)+")":null},u={actives:[{title:"markAsDone",icon:"check"}],done:[{title:"deleteNotification",icon:"trash"}],new:[{title:"save",icon:"save"}],home:[]},angular.module("llngNotificationsExplorer",["ui.tree","ui.bootstrap","llApp"]).controller("NotificationsExplorerCtrl",["$scope","$translator","$location","$q","$http","$uibModal",function(f,e,t,o,i,r){var d,n,a;return f.links=links,f.menulinks=menulinks,f.staticPrefix=staticPrefix,f.scriptname=scriptname,f.formPrefix=formPrefix,f.availableLanguages=availableLanguages,f.waiting=!0,f.showM=!1,f.showT=!0,f.showForm=!1,f.data=[],f.form={},f.formPost={},f.currentScope=null,f.currentNotification=null,f.menu=u,f.translateP=e.translateP,f.translate=e.translate,f.translateTitle=function(t){return e.translateField(t,"title")},f.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(f.currentNode,f);break;case"string":f[t.action]();break;default:console.log(typeof t.action)}return f.showM=!1},f.markAsDone=function(){return f.waiting=!0,i.put(scriptname+"notifications/"+f.type+"/"+f.currentNotification.uid+"_"+f.currentNotification.reference,{done:1}).then(function(t){return f.currentNotification=null,f.currentScope.remove(),f.message={title:"notificationDeleted"},f.showModal("alert.html"),f.waiting=!1,f.init()},function(t){return f.message={title:"notificationNotDeleted",message:t.statusText},f.showModal("alert.html"),f.waiting=!1,f.init()})},f.deleteNotification=function(){return f.waiting=!0,i.delete(scriptname+"notifications/"+f.type+"/"+f.currentNotification.uid+"_"+f.currentNotification.reference+"_"+f.currentNotification.done).then(function(t){return f.currentNotification=null,f.currentScope.remove(),f.message={title:"notificationPurged"},f.showModal("alert.html"),f.waiting=!1,f.init()},function(t){return f.message={title:"notificationNotPurged",message:t.statusText},f.showModal("alert.html"),f.waiting=!1,f.init()})},f.stoggle=function(t){var e;return 0===(e=t.$modelValue).nodes.length&&f.updateTree(e.value,e.nodes,e.level,e.over,e.query,e.count),t.toggle()},f.notifDate=function(t){return null!=t?(t.match(/(\d{4})-(\d{2})-(\d{2})/)&&(t=t.substr(0,4)+t.substr(5,2)+t.substr(8,2)),new Date(t.substr(0,4),t.substr(4,2)-1,t.substr(6,2)).toLocaleDateString()):""},f.getLanguage=function(t){return f.lang=t,f.form="white",f.init(),f.showM=!1},f.$on("$locationChangeSuccess",function(t,e,n){var i;return i=e.match(/#!?\/(\w+)/),f.type=null!=i?i[1]:"actives","new"===f.type?f.displayCreateForm():(f.showForm=!1,f.init())}),d=0,f.updateTree=function(a,u,c,s,t,e){var l,n;return f.waiting=!0,l=g[c](a,t),25 level",n,"over",o),1===n&&t.length>o?e+"="+t+"*&groupBy=substr("+e+","+(n+o+1)+")":null},ipAddr:function(e,t,n,o){return console.log("overScheme => level",n,"over",o),0 level",n,"over",o),3 level",n,"over",o),1===n&&t.length>o?e+"="+t+"*&groupBy=substr("+e+","+(n+o+1)+")":null}},M={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"]},s={session:[{title:"deleteSession",icon:"trash"}],home:[]},angular.module("llngSessionsExplorer",["ui.tree","ui.bootstrap","llApp"]).controller("SessionsExplorerCtrl",["$scope","$translator","$location","$q","$http",function(H,t,i,e,o){var d,n,r,g;return H.links=links,H.menulinks=menulinks,H.staticPrefix=staticPrefix,H.scriptname=scriptname,H.formPrefix=formPrefix,H.impPrefix=impPrefix,H.sessionTTL=sessionTTL,H.availableLanguages=availableLanguages,H.waiting=!0,H.showM=!1,H.showT=!0,H.data=[],H.currentScope=null,H.currentSession=null,H.menu=s,H.translateP=t.translateP,H.translate=t.translate,H.translateTitle=function(e){return t.translateField(e,"title")},g="global",H.menuClick=function(e){if(e.popup)window.open(e.popup);else switch(e.action||(e.action=e.title),typeof e.action){case"function":e.action(H.currentNode,H);break;case"string":H[e.action]();break;default:console.log(typeof e.action)}return H.showM=!1},H.deleteOIDCConsent=function(e,t){return angular.element(".data-"+t).remove(),H.waiting=!0,o.delete(scriptname+"sessions/OIDCConsent/"+g+"/"+H.currentSession.id+"?rp="+e+"&epoch="+t).then(function(e){return H.waiting=!1},function(e){return H.waiting=!1}),H.showT=!1},H.deleteSession=function(){return H.waiting=!0,o.delete(scriptname+"sessions/"+g+"/"+H.currentSession.id).then(function(e){return H.currentSession=null,H.currentScope.remove(),H.waiting=!1},function(e){return H.currentSession=null,H.currentScope.remove(),H.waiting=!1})},H.stoggle=function(e){var t;return 0===(t=e.$modelValue).nodes.length&&H.updateTree(t.value,t.nodes,t.level,t.over,t.query,t.count),e.toggle()},H.displaySession=function(e){var t,n;return n=function(s){var e,t,n,o,r,i,u,l,a,c,p,d,g,f,h,_,m,T,y,w,v,S,$,B,b,D,L,A,P,x,C,I,k,O,R,E;for(g in e=function(e,t){var n,o,r,i;for(n in r=[],o=new RegExp(e),s)i=s[n],n.match(o)&&i&&(r.push({title:n,value:i}),delete s[n]);if(0t.title?1:e.title real attribute"),D.push(u)):C.push(u);return R=C.concat(D),P.push({title:"__attributesAndMacros__",nodes:R}),{_utime:k,id:c,nodes:P}},t=(H.currentScope=e).$modelValue.session,o.get(scriptname+"sessions/"+g+"/"+t).then(function(e){return H.currentSession=n(e.data)}),H.showT=!1},H.localeDate=function(e){return new Date(1e3*e).toLocaleString()},H.isValid=function(e,t){var n,o,r;return r=i.path(),o=Date.now()/1e3,console.log("Path",r),console.log("Session epoch",e),console.log("Current date",o),console.log("Session TTL",sessionTTL),n=o-e level",n,"over",o),1===n&&t.length>o?e+"="+t+"*&groupBy=substr("+e+","+(n+o+1)+")":null},ipAddr:function(e,t,n,o){return console.log("overScheme => level",n,"over",o),0 level",n,"over",o),3 level",n,"over",o),1===n&&t.length>o?e+"="+t+"*&groupBy=substr("+e+","+(n+o+1)+")":null}},M={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"]},s={session:[{title:"deleteSession",icon:"trash"}],home:[]},angular.module("llngSessionsExplorer",["ui.tree","ui.bootstrap","llApp"]).controller("SessionsExplorerCtrl",["$scope","$translator","$location","$q","$http",function(H,t,i,e,o){var d,n,r,g;return H.links=links,H.menulinks=menulinks,H.staticPrefix=staticPrefix,H.scriptname=scriptname,H.formPrefix=formPrefix,H.impPrefix=impPrefix,H.sessionTTL=sessionTTL,H.availableLanguages=availableLanguages,H.waiting=!0,H.showM=!1,H.showT=!0,H.data=[],H.currentScope=null,H.currentSession=null,H.menu=s,H.translateP=t.translateP,H.translate=t.translate,H.translateTitle=function(e){return t.translateField(e,"title")},g="global",H.menuClick=function(e){if(e.popup)window.open(e.popup);else switch(e.action||(e.action=e.title),typeof e.action){case"function":e.action(H.currentNode,H);break;case"string":H[e.action]();break;default:console.log(typeof e.action)}return H.showM=!1},H.deleteOIDCConsent=function(e,t){return angular.element(".data-"+t).remove(),H.waiting=!0,o.delete(scriptname+"sessions/OIDCConsent/"+g+"/"+H.currentSession.id+"?rp="+e+"&epoch="+t).then(function(e){return H.waiting=!1},function(e){return H.waiting=!1}),H.showT=!1},H.deleteSession=function(){return H.waiting=!0,o.delete(scriptname+"sessions/"+g+"/"+H.currentSession.id).then(function(e){return H.currentSession=null,H.currentScope.remove(),H.waiting=!1},function(e){return H.currentSession=null,H.currentScope.remove(),H.waiting=!1})},H.stoggle=function(e){var t;return 0===(t=e.$modelValue).nodes.length&&H.updateTree(t.value,t.nodes,t.level,t.over,t.query,t.count),e.toggle()},H.displaySession=function(e){var t,n;return n=function(s){var e,t,n,o,r,i,u,l,a,c,p,d,g,f,h,_,m,T,y,w,v,S,$,B,b,D,L,A,P,x,C,I,k,O,R,E;for(g in e=function(e,t){var n,o,r,i;for(n in r=[],o=new RegExp(e),s)i=s[n],n.match(o)&&i&&(r.push({title:n,value:i}),delete s[n]);if(0t.title?1:e.title real attribute"),D.push(u)):C.push(u);return R=C.concat(D),P.push({title:"__attributesAndMacros__",nodes:R}),{_utime:k,id:c,nodes:P}},t=(H.currentScope=e).$modelValue.session,o.get(scriptname+"sessions/"+g+"/"+t).then(function(e){return H.currentSession=n(e.data)}),H.showT=!1},H.localeDate=function(e){return new Date(1e3*e).toLocaleString()},H.isValid=function(e,t){var n,o,r;return r=i.path(),o=Date.now()/1e3,console.log("Path",r),console.log("Session epoch",e),console.log("Current date",o),console.log("Session TTL",sessionTTL),n=o-e level",n,"over",o),1===n&&t.length>o?e+"="+t+"*&groupBy=substr("+e+","+(n+o+1)+")":null},ipAddr:function(e,t,n,o){return console.log("overScheme => level",n,"over",o),n>0&&n<4&&!t.match(/^\d+\.\d/)&&o<2?e+"="+t+"*&groupBy=net("+e+","+(16*n+4*(o+1))+","+(1+n+o)+")":null},_startTime:function(e,t,n,o){return console.log("overScheme => level",n,"over",o),n>3?e+"="+t+"*&groupBy=substr("+e+","+(10+n+o)+")":null},_session_uid:function(e,t,n,o){return console.log("overScheme => level",n,"over",o),1===n&&t.length>o?e+"="+t+"*&groupBy=substr("+e+","+(n+o+1)+")":null}},t="_password",e={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"]},r={session:[{title:"deleteSession",icon:"trash"}],home:[]},n=angular.module("llngSessionsExplorer",["ui.tree","ui.bootstrap","llApp"]),n.controller("SessionsExplorerCtrl",["$scope","$translator","$location","$q","$http",function(n,u,l,a,c){var p,d,g,f;return n.links=links,n.menulinks=menulinks,n.staticPrefix=staticPrefix,n.scriptname=scriptname,n.formPrefix=formPrefix,n.impPrefix=impPrefix,n.sessionTTL=sessionTTL,n.availableLanguages=availableLanguages,n.waiting=!0,n.showM=!1,n.showT=!0,n.data=[],n.currentScope=null,n.currentSession=null,n.menu=r,n.translateP=u.translateP,n.translate=u.translate,n.translateTitle=function(e){return u.translateField(e,"title")},f="global",n.menuClick=function(e){if(e.popup)window.open(e.popup);else switch(e.action||(e.action=e.title),typeof e.action){case"function":e.action(n.currentNode,n);break;case"string":n[e.action]();break;default:console.log(typeof e.action)}return n.showM=!1},n.deleteOIDCConsent=function(e,t){var o;return o=angular.element(".data-"+t),o.remove(),n.waiting=!0,c.delete(scriptname+"sessions/OIDCConsent/"+f+"/"+n.currentSession.id+"?rp="+e+"&epoch="+t).then(function(e){return n.waiting=!1},function(e){return n.waiting=!1}),n.showT=!1},n.deleteSession=function(){return n.waiting=!0,c.delete(scriptname+"sessions/"+f+"/"+n.currentSession.id).then(function(e){return n.currentSession=null,n.currentScope.remove(),n.waiting=!1},function(e){return n.currentSession=null,n.currentScope.remove(),n.waiting=!1})},n.stoggle=function(e){var t;return t=e.$modelValue,0===t.nodes.length&&n.updateTree(t.value,t.nodes,t.level,t.over,t.query,t.count),e.toggle()},n.displaySession=function(o){var r,i;return i=function(o){var r,i,s,u,l,a,c,p,d,g,f,h,_,m,T,y,w,v,S,$,B,b,D,L,A,P,x,C,I,k,O,R,E,H,M,U;r=function(e,t){var n,r,i,s;i=[],r=new RegExp(e);for(n in o)s=o[n],n.match(r)&&s&&(i.push({title:n,value:s}),delete o[n]);if(i.length>0)return I.push({title:t,nodes:i})},E=o._utime,g=o._session_id;for(_ in o)U=o[_],U?("string"==typeof o&&U.match(/; /)&&(o[_]=U.split("; ")),"object"!=typeof o[_]&&(t.match(new RegExp("\b"+_+"\b"))?o[_]="********":_.match(/^(_utime|_lastAuthnUTime|_lastSeen|notification)$/)?o[_]=n.localeDate(U):_.match(/^(_startTime|_updateTime)$/)&&(o[_]=n.strToLocaleDate(U)))):delete o[_];I=[];for(l in e){for(u=e[l],R=[],d=0,T=u.length;d0&&I.push({title:"__"+l+"__",nodes:R})}if(r("^openid","OpenID"),r("^notification_(.+)","__notificationsDone__"),o._loginHistory){if(M=[],o._loginHistory.successLogin)for(x=o._loginHistory.successLogin,B=0,v=x.length;Bt.title?1:e.title real attribute"),P.push(c)):O.push(c);return M=O.concat(P),I.push({title:"__attributesAndMacros__",nodes:M}),{_utime:E,id:g,nodes:I}},n.currentScope=o,r=o.$modelValue.session,c.get(scriptname+"sessions/"+f+"/"+r).then(function(e){return n.currentSession=i(e.data)}),n.showT=!1},n.localeDate=function(e){var t;return t=new Date(1e3*e),t.toLocaleString()},n.isValid=function(e,t){var n,o,r;return r=l.path(),o=Date.now()/1e3,console.log("Path",r),console.log("Session epoch",e),console.log("Current date",o),console.log("Session TTL",sessionTTL),n=o-eo&&i[n.type]&&(h=i[n.type](n.type,e,r,u,l))?(u++,d=h,r-=1):u=0,c.get(scriptname+"sessions/"+f+"?"+d).then(function(o){var i,s,l,a,c;if(i=o.data,i.result){for(c=i.values,s=0,l=c.length;s>>>>>> v2.0 diff --git a/lemonldap-ng-manager/site/htdocs/static/js/sessions.min.js.map b/lemonldap-ng-manager/site/htdocs/static/js/sessions.min.js.map index 9ec9d9ca9..70d77ef0f 100644 --- a/lemonldap-ng-manager/site/htdocs/static/js/sessions.min.js.map +++ b/lemonldap-ng-manager/site/htdocs/static/js/sessions.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["lemonldap-ng-manager/site/htdocs/static/js/sessions.js"],"names":["categories","menu","overScheme","schemes","_whatToTrace","t","v","ipAddr","match","q","replace","_startTime","console","log","doubleIp","_session_uid","level","over","length","dateTitle","connectionTitle","authenticationTitle","modulesTitle","saml","groups","ldap","BrowserID","OpenIDConnect","sfaTitle","oidcConsents","session","title","icon","home","angular","module","controller","$scope","$translator","$location","$q","$http","autoId","c","pathEvent","sessionType","links","menulinks","staticPrefix","scriptname","formPrefix","impPrefix","sessionTTL","availableLanguages","waiting","showM","showT","data","currentScope","currentSession","translateP","translate","translateTitle","node","translateField","menuClick","button","popup","window","open","action","currentNode","deleteOIDCConsent","rp","epoch","element","remove","id","then","response","resp","deleteSession","stoggle","scope","$modelValue","nodes","updateTree","value","query","count","toggle","displaySession","sessionId","transformSession","_insert","array","attr","attrs","category","cv","i","j","k","key","l","len","len1","len2","len3","len4","len5","m","name","o","oidcConsent","p","real","ref","ref1","res","sfDevice","spoof","subres","time","tmp","re","reg","RegExp","push","_utime","_session_id","split","localeDate","strToLocaleDate","toString","td","JSON","parse","_loginHistory","successLogin","failedLogin","error","sort","a","b","concat","get","s","Date","toLocaleString","isValid","type","now","path","color","font-style","arrayDate","getLanguage","lang","form","init","event","next","current","n","$1","$on","currentQuery","scheme","result","values","total","all","activeModule","myStyle","call","this"],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["lemonldap-ng-manager/site/htdocs/static/js/sessions.js"],"names":["categories","hiddenAttributes","llapp","max","menu","overScheme","schemes","_whatToTrace","t","v","ipAddr","match","q","replace","_startTime","console","log","doubleIp","_session_uid","level","over","length","dateTitle","connectionTitle","authenticationTitle","modulesTitle","saml","groups","ldap","BrowserID","OpenIDConnect","sfaTitle","oidcConsents","session","title","icon","home","angular","module","controller","$scope","$translator","$location","$q","$http","autoId","c","pathEvent","sessionType","links","menulinks","staticPrefix","scriptname","formPrefix","impPrefix","sessionTTL","availableLanguages","waiting","showM","showT","data","currentScope","currentSession","translateP","translate","translateTitle","node","translateField","menuClick","button","popup","window","open","action","currentNode","deleteOIDCConsent","rp","epoch","item","element","remove","id","then","response","resp","deleteSession","stoggle","scope","$modelValue","nodes","updateTree","value","query","count","toggle","displaySession","sessionId","transformSession","_insert","array","attr","attrs","category","cv","i","j","k","key","l","len","len1","len2","len3","len4","len5","m","name","o","oidcConsent","p","real","ref","ref1","res","sfDevice","spoof","subres","time","tmp","re","reg","RegExp","push","_utime","_session_id","split","localeDate","strToLocaleDate","toString","td","JSON","parse","_loginHistory","successLogin","failedLogin","error","sort","a","b","concat","get","s","d","Date","toLocaleString","isValid","type","now","path","color","font-style","arrayDate","getLanguage","lang","form","init","event","next","current","n","$1","$on","currentQuery","scheme","result","values","total","all","activeModule","myStyle","call","this"],"mappings":"CAMA,WACE,GAAIA,GAAYC,EAAkBC,EAAOC,EAAKC,EAAMC,EAAYC,CAEhEH,GAAM,GAENG,GACEC,cACE,SAASC,EAAGC,GACV,MAAO,kBAAoBD,EAAI,OAC9B,SAASA,EAAGC,GACb,MAAOD,GAAI,IAAMC,EAAI,aAAeD,GACnC,SAASA,EAAGC,GACb,MAAOD,GAAI,IAAMC,IAGrBC,QACE,SAASF,EAAGC,GACV,MAAO,eAAiBD,EAAI,UAC3B,SAASA,EAAGC,GAIb,MAHKA,GAAEE,MAAM,OACXF,GAAQ,KAEHD,EAAI,IAAMC,EAAI,iBAAmBD,EAAI,UAC3C,SAASA,EAAGC,GAIb,MAHKA,GAAEE,MAAM,OACXF,GAAQ,KAEHD,EAAI,IAAMC,EAAI,iBAAmBD,EAAI,UAC3C,SAASA,EAAGC,GAIb,MAHKA,GAAEE,MAAM,OACXF,GAAQ,KAEHD,EAAI,IAAMC,EAAI,iBAAmBD,EAAI,WAC3C,SAASA,EAAGC,GACb,MAAOD,GAAI,IAAMC,EAAI,yBACpB,SAASD,EAAGC,EAAGG,GAChB,MAAOA,GAAEC,QAAQ,eAAgB,IAAO,iBAAmBJ,IAG/DK,YACE,SAASN,EAAGC,GACV,MAAO,kBAAoBD,EAAI,OAC9B,SAASA,EAAGC,GACb,MAAOD,GAAI,IAAMC,EAAI,oBAAsBD,EAAI,QAC9C,SAASA,EAAGC,GACb,MAAOD,GAAI,IAAMC,EAAI,oBAAsBD,EAAI,QAC9C,SAASA,EAAGC,GACb,MAAOD,GAAI,IAAMC,EAAI,oBAAsBD,EAAI,QAC9C,SAASA,EAAGC,GACb,MAAOD,GAAI,IAAMC,EAAI,0BACpB,SAASD,EAAGC,EAAGG,GAIhB,MAHAG,SAAQC,IAAIR,GACZO,QAAQC,IAAIP,GACZM,QAAQC,IAAIJ,GACLA,EAAEC,QAAQ,eAAgB,IAAO,iBAAmBJ,IAG/DQ,UACE,SAAST,EAAGC,GACV,MAAOD,IACN,SAASA,EAAGC,GACb,MAAO,gBAAkBA,EAAI,mBAC5B,SAASD,EAAGC,EAAGG,GAChB,MAAOA,GAAEC,QAAQ,eAAgB,IAAO,WAAaJ,IAGzDS,cACE,SAASV,EAAGC,GACV,MAAO,kBAAoBD,EAAI,OAC9B,SAASA,EAAGC,GACb,MAAOD,GAAI,IAAMC,EAAI,aAAeD,GACnC,SAASA,EAAGC,GACb,MAAOD,GAAI,IAAMC,KAKvBJ,GACEE,aAAc,SAASC,EAAGC,EAAGU,EAAOC,GAElC,MADAL,SAAQC,IAAI,sBAAuBG,EAAO,OAAQC,GACpC,IAAVD,GAAeV,EAAEY,OAASD,EACrBZ,EAAI,IAAMC,EAAI,oBAAsBD,EAAI,KAAOW,EAAQC,EAAO,GAAK,IAEnE,MAGXV,OAAQ,SAASF,EAAGC,EAAGU,EAAOC,GAE5B,MADAL,SAAQC,IAAI,sBAAuBG,EAAO,OAAQC,GAC9CD,EAAQ,GAAKA,EAAQ,IAAMV,EAAEE,MAAM,aAAeS,EAAO,EACpDZ,EAAI,IAAMC,EAAI,iBAAmBD,EAAI,KAAO,GAAKW,EAAQ,GAAKC,EAAO,IAAM,KAAO,EAAID,EAAQC,GAAQ,IAEtG,MAGXN,WAAY,SAASN,EAAGC,EAAGU,EAAOC,GAEhC,MADAL,SAAQC,IAAI,sBAAuBG,EAAO,OAAQC,GAC9CD,EAAQ,EACHX,EAAI,IAAMC,EAAI,oBAAsBD,EAAI,KAAO,GAAKW,EAAQC,GAAQ,IAEpE,MAGXF,aAAc,SAASV,EAAGC,EAAGU,EAAOC,GAElC,MADAL,SAAQC,IAAI,sBAAuBG,EAAO,OAAQC,GACpC,IAAVD,GAAeV,EAAEY,OAASD,EACrBZ,EAAI,IAAMC,EAAI,oBAAsBD,EAAI,KAAOW,EAAQC,EAAO,GAAK,IAEnE,OAKbnB,EAAmB,YAEnBD,GACEsB,WAAY,SAAU,aAAc,cAAe,kBAAmB,aACtEC,iBAAkB,SAAU,YAAa,QACzCC,qBAAsB,cAAe,QAAS,YAAa,uBAC3DC,cAAe,QAAS,UAAW,cAAe,YAAa,cAAe,aAAc,gBAC5FC,MAAO,OAAQ,cAAe,aAAc,oBAAqB,sBACjEC,QAAS,SAAU,WACnBC,MAAO,MACPC,WAAY,mBAAoB,uBAChCC,eAAgB,iBAAkB,WAAY,sBAC9CC,UAAW,cACXC,cAAe,kBAGjB5B,GACE6B,UAEIC,MAAO,gBACPC,KAAM,UAGVC,SAQFlC,EAAQmC,QAAQC,OAAO,wBAAyB,UAAW,eAAgB,UAE3EpC,EAAMqC,WAAW,wBACf,SAAU,cAAe,YAAa,KAAM,QAAS,SAASC,EAAQC,EAAaC,EAAWC,EAAIC,GAChG,GAAIC,GAAQC,EAAGC,EAAWC,CA+a1B,OA9aAR,GAAOS,MAAQA,MACfT,EAAOU,UAAYA,UACnBV,EAAOW,aAAeA,aACtBX,EAAOY,WAAaA,WACpBZ,EAAOa,WAAaA,WACpBb,EAAOc,UAAYA,UACnBd,EAAOe,WAAaA,WACpBf,EAAOgB,mBAAqBA,mBAC5BhB,EAAOiB,SAAU,EACjBjB,EAAOkB,OAAQ,EACflB,EAAOmB,OAAQ,EACfnB,EAAOoB,QACPpB,EAAOqB,aAAe,KACtBrB,EAAOsB,eAAiB,KACxBtB,EAAOpC,KAAOA,EACdoC,EAAOuB,WAAatB,EAAYsB,WAChCvB,EAAOwB,UAAYvB,EAAYuB,UAC/BxB,EAAOyB,eAAiB,SAASC,GAC/B,MAAOzB,GAAY0B,eAAeD,EAAM,UAE1ClB,EAAc,SACdR,EAAO4B,UAAY,SAASC,GAC1B,GAAIA,EAAOC,MACTC,OAAOC,KAAKH,EAAOC,WAKnB,QAHKD,EAAOI,SACVJ,EAAOI,OAASJ,EAAOnC,aAEVmC,GAAOI,QACpB,IAAK,WACHJ,EAAOI,OAAOjC,EAAOkC,YAAalC,EAClC,MACF,KAAK,SACHA,EAAO6B,EAAOI,SACd,MACF,SACE1D,QAAQC,UAAWqD,GAAOI,QAGhC,MAAOjC,GAAOkB,OAAQ,GAExBlB,EAAOmC,kBAAoB,SAASC,EAAIC,GACtC,GAAIC,EASJ,OARAA,GAAOzC,QAAQ0C,QAAQ,SAAWF,GAClCC,EAAKE,SACLxC,EAAOiB,SAAU,EACjBb,EAAc,OAAEQ,WAAa,wBAA0BJ,EAAc,IAAMR,EAAOsB,eAAemB,GAAK,OAASL,EAAK,UAAYC,GAAOK,KAAK,SAASC,GACnJ,MAAO3C,GAAOiB,SAAU,GACvB,SAAS2B,GACV,MAAO5C,GAAOiB,SAAU,IAEnBjB,EAAOmB,OAAQ,GAExBnB,EAAO6C,cAAgB,WAErB,MADA7C,GAAOiB,SAAU,EACVb,EAAc,OAAEQ,WAAa,YAAcJ,EAAc,IAAMR,EAAOsB,eAAemB,IAAIC,KAAK,SAASC,GAG5G,MAFA3C,GAAOsB,eAAiB,KACxBtB,EAAOqB,aAAamB,SACbxC,EAAOiB,SAAU,GACvB,SAAS2B,GAGV,MAFA5C,GAAOsB,eAAiB,KACxBtB,EAAOqB,aAAamB,SACbxC,EAAOiB,SAAU,KAG5BjB,EAAO8C,QAAU,SAASC,GACxB,GAAIrB,EAKJ,OAJAA,GAAOqB,EAAMC,YACa,IAAtBtB,EAAKuB,MAAMpE,QACbmB,EAAOkD,WAAWxB,EAAKyB,MAAOzB,EAAKuB,MAAOvB,EAAK/C,MAAO+C,EAAK9C,KAAM8C,EAAK0B,MAAO1B,EAAK2B,OAE7EN,EAAMO,UAEftD,EAAOuD,eAAiB,SAASR,GAC/B,GAAIS,GAAWC,CAkOf,OAjOAA,GAAmB,SAAShE,GAC1B,GAAIiE,GAASC,EAAOC,EAAMC,EAAOC,EAAUC,EAAIxB,EAASF,EAAO2B,EAAGvB,EAAIwB,EAAGC,EAAGC,EAAKC,EAAGC,EAAKC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAGC,EAAMC,EAAGC,EAAaC,EAAGC,EAAMC,EAAKC,EAAMC,EAAKC,EAAUC,EAAOC,EAAQC,EAAM7F,EAAO8F,EAAKrC,CACpNO,GAAU,SAAS+B,EAAI/F,GACrB,GAAIyE,GAAKuB,EAAKF,EAAKrC,CACnBqC,MACAE,EAAM,GAAIC,QAAOF,EACjB,KAAKtB,IAAO1E,GACV0D,EAAQ1D,EAAQ0E,GACZA,EAAIhG,MAAMuH,IAAQvC,IACpBqC,EAAII,MACFlG,MAAOyE,EACPhB,MAAOA,UAEF1D,GAAQ0E,GAGnB,IAAIqB,EAAI3G,OAAS,EACf,MAAOsG,GAAIS,MACTlG,MAAOA,EACPuD,MAAOuC,KAIbD,EAAO9F,EAAQoG,OACfpD,EAAKhD,EAAQqG,WACb,KAAK3B,IAAO1E,GACV0D,EAAQ1D,EAAQ0E,GACXhB,GAGoB,gBAAZ1D,IAAwB0D,EAAMhF,MAAM,QAC7CsB,EAAQ0E,GAAOhB,EAAM4C,MAAM,OAED,gBAAjBtG,GAAQ0E,KACb1G,EAAiBU,MAAM,GAAIwH,QAAO,KAAOxB,EAAM,OACjD1E,EAAQ0E,GAAO,WACNA,EAAIhG,MAAM,qDACnBsB,EAAQ0E,GAAOnE,EAAOgG,WAAW7C,GACxBgB,EAAIhG,MAAM,gCACnBsB,EAAQ0E,GAAOnE,EAAOiG,gBAAgB9C,YAXnC1D,GAAQ0E,EAgBnBgB,KACA,KAAKrB,IAAYtG,GAAY,CAG3B,IAFAqG,EAAQrG,EAAWsG,GACnBwB,KACKtB,EAAI,EAAGK,EAAMR,EAAMhF,OAAQmF,EAAIK,EAAKL,IAEvC,GADAJ,EAAOC,EAAMG,GACTvE,EAAQmE,GACV,GAAInE,EAAQmE,GAAMsC,WAAW/H,MAAM,gCAAiC,CAQlE,IAPAmH,EAAOM,MACLlG,MAAO,OACPyD,MAAO,OACPd,MAAO,OACP8D,GAAI,MAENxC,EAAQyC,KAAKC,MAAM5G,EAAQmE,IACtBK,EAAI,EAAGK,EAAOX,EAAM9E,OAAQoF,EAAIK,EAAML,IAAK,CAC9CmB,EAAWzB,EAAMM,EACjB,KAAKE,IAAOiB,GACVjC,EAAQiC,EAASjB,GACL,SAARA,IACFzE,EAAQyD,GAEE,SAARgB,IACFS,EAAOzB,GAEG,UAARgB,IACF9B,EAAQc,EAGZmC,GAAOM,MACLlG,MAAOA,EACPyD,MAAOyB,EACPvC,MAAOA,EACP8D,GAAI,YAGD1G,GAAQmE,OACV,IAAInE,EAAQmE,GAAMsC,WAAW/H,MAAM,oBAAqB,CAQ7D,IAPAmH,EAAOM,MACLlG,MAAO,KACPyD,MAAO,QACPd,MAAO,OACP8D,GAAI,MAENxC,EAAQyC,KAAKC,MAAM5G,EAAQmE,IACtBM,EAAI,EAAGK,EAAOZ,EAAM9E,OAAQqF,EAAIK,EAAML,IAAK,CAC9CY,EAAcnB,EAAMO,EACpB,KAAKC,IAAOW,GACV3B,EAAQ2B,EAAYX,GACR,OAARA,IACFzE,EAAQyD,GAEE,UAARgB,IACFS,EAAOzB,GAEG,UAARgB,IACF9B,EAAQc,EAGZmC,GAAOM,MACLlG,MAAOA,EACPyD,MAAOyB,EACPvC,MAAOA,EACP8D,GAAI,YAGD1G,GAAQmE,OACNnE,GAAQmE,GAAMsC,WAAW/H,MAAM,QACxCmH,EAAOM,MACLlG,MAAOkE,EACPT,MAAO1D,EAAQmE,GACfvB,MAAO,WAEF5C,GAAQmE,UAERnE,GAAQmE,cAGVnE,GAAQmE,EAGf0B,GAAOzG,OAAS,GAClBsG,EAAIS,MACFlG,MAAO,KAAOoE,EAAW,KACzBb,MAAOqC,IAMb,GAFA5B,EAAQ,UAAW,UACnBA,EAAQ,qBAAsB,yBAC1BjE,EAAQ6G,cAAe,CAEzB,GADAd,KACI/F,EAAQ6G,cAAcC,aAExB,IADAtB,EAAMxF,EAAQ6G,cAAcC,aACvB5B,EAAI,EAAGH,EAAOS,EAAIpG,OAAQ8F,EAAIH,EAAMG,IAAK,CAC5CP,EAAIa,EAAIN,GACRZ,EAAK,EACL,KAAKI,IAAOC,GACVjB,EAAQiB,EAAED,GACLA,EAAIhG,MAAM,6BACb4F,GAAM,KAAOI,EAAM,MAAQhB,EAG/BqC,GAAII,MACF5H,EAAGoG,EAAEyB,OACLnG,MAAOM,EAAOgG,WAAW5B,EAAEyB,QAC3B1C,MAAQ,eAAiBiB,EAAElG,OAAS,IAAO6F,IAIjD,GAAItE,EAAQ6G,cAAcE,YAExB,IADAtB,EAAOzF,EAAQ6G,cAAcE,YACxB3B,EAAI,EAAGJ,EAAOS,EAAKrG,OAAQgG,EAAIJ,EAAMI,IAAK,CAC7CT,EAAIc,EAAKL,GACTd,EAAK,EACL,KAAKI,IAAOC,GACVjB,EAAQiB,EAAED,GACLA,EAAIhG,MAAM,6BACb4F,GAAM,KAAOI,EAAM,MAAQhB,EAG/BqC,GAAII,MACF5H,EAAGoG,EAAEyB,OACLnG,MAAOM,EAAOgG,WAAW5B,EAAEyB,QAC3B1C,MAAQ,SAAWiB,EAAEqC,MAAQ,QAAUrC,EAAElG,OAAS,IAAO6F,UAIxDtE,GAAQ6G,cACfd,EAAIkB,KAAK,SAASC,EAAGC,GACnB,MAAOA,GAAE5I,EAAI2I,EAAE3I,IAEjBmH,EAAIS,MACFlG,MAAO,mBACPuD,MAAOuC,IAGXA,IACA,KAAKrB,IAAO1E,GACV0D,EAAQ1D,EAAQ0E,GAChBqB,EAAII,MACFlG,MAAOyE,EACPhB,MAAOA,GAcX,KAXAqC,EAAIkB,KAAK,SAASC,EAAGC,GACnB,MAAID,GAAEjH,MAAQkH,EAAElH,MACP,EACEiH,EAAEjH,MAAQkH,EAAElH,OACb,EAED,IAGXsF,KACAK,KACKN,EAAI,EAAGL,EAAOc,EAAI3G,OAAQkG,EAAIL,EAAMK,IACvCxC,EAAUiD,EAAIT,GACVxC,EAAQ7C,MAAMvB,MAAM,GAAIwH,QAAO,IAAM3F,EAAOc,UAAY,SAC1DvC,QAAQC,IAAI+D,EAAS,qBACrByC,EAAKY,KAAKrD,IAEV8C,EAAMO,KAAKrD,EAQf,OALAiD,GAAMH,EAAMwB,OAAO7B,GACnBG,EAAIS,MACFlG,MAAO,0BACPuD,MAAOuC,KAGPK,OAAQN,EACR9C,GAAIA,EACJQ,MAAOkC,IAGXnF,EAAOqB,aAAe0B,EACtBS,EAAYT,EAAMC,YAAYvD,QAC9BW,EAAM0G,IAAIlG,WAAa,YAAcJ,EAAc,IAAMgD,GAAWd,KAAK,SAASC,GAChF,MAAO3C,GAAOsB,eAAiBmC,EAAiBd,EAASvB,QAEpDpB,EAAOmB,OAAQ,GAExBnB,EAAOgG,WAAa,SAASe,GAC3B,GAAIC,EAEJ,OADAA,GAAI,GAAIC,MAAS,IAAJF,GACNC,EAAEE,kBAEXlH,EAAOmH,QAAU,SAAS9E,EAAO+E,GAC/B,GAAID,GAASE,EAAKC,CAQlB,OAPAA,GAAOpH,EAAUoH,OACjBD,EAAMJ,KAAKI,MAAQ,IACnB9I,QAAQC,IAAI,OAAQ8I,GACpB/I,QAAQC,IAAI,gBAAiB6D,GAC7B9D,QAAQC,IAAI,eAAgB6I,GAC5B9I,QAAQC,IAAI,cAAeuC,YAC3BoG,EAAUE,EAAMhF,EAAQtB,YAAcb,EAAUoH,OAAOnJ,MAAM,iBAChD,QAATiJ,GACF7I,QAAQC,IAAI,cACR2I,EACK,OAEA,WAES,UAATC,GACT7I,QAAQC,IAAI,gBACR2I,MAIAI,MAAS,UACTC,aAAc,YAIlBjJ,QAAQC,IAAI,kBACL2I,IAGXnH,EAAOiG,gBAAkB,SAASc,GAChC,GAAIU,GAAWT,CAEf,OADAS,GAAYV,EAAE5I,MAAM,gDACfsJ,EAAU5I,QAGfmI,EAAI,GAAIC,MAAKQ,EAAU,GAAK,IAAMA,EAAU,GAAK,IAAMA,EAAU,GAAK,IAAMA,EAAU,GAAK,IAAMA,EAAU,GAAK,IAAMA,EAAU,IACzHT,EAAEE,kBAHAH,GAKX/G,EAAO0H,YAAc,SAASC,GAI5B,MAHA3H,GAAO2H,KAAOA,EACd3H,EAAO4H,KAAO,QACd5H,EAAO6H,OACA7H,EAAOkB,OAAQ,GAExBX,EAAY,SAASuH,EAAOC,EAAMC,GAChC,GAAIC,EAWJ,OAVAA,GAAIF,EAAK5J,MAAM,cACfqC,EAAc,SACJ,OAANyH,EACFjI,EAAOoH,KAAO,eACLa,EAAE,GAAG9J,MAAM,2BACpBqC,EAAcmF,OAAOuC,GACrBlI,EAAOoH,KAAO,gBAEdpH,EAAOoH,KAAOa,EAAE,GAEXjI,EAAO6H,QAEhB7H,EAAOmI,IAAI,yBAA0B5H,GACrCF,EAAS,EACTL,EAAOkD,WAAa,SAASC,EAAOzB,EAAM/C,EAAOC,EAAMwJ,EAAc/E,GACnE,GAAID,GAAOiF,EAAQ7C,CAenB,OAdAxF,GAAOiB,SAAU,EACjBoH,EAASvK,EAAQkC,EAAOoH,MAAQtJ,EAAQkC,EAAOoH,MAAwB,gBAAhBpH,EAAOoH,KAAyBtJ,EAAQQ,WAAaR,EAAQC,aACpHqF,EAAQiF,EAAO1J,GAAOqB,EAAOoH,KAAMjE,EAAOiF,GACtC/E,EAAQ1F,GAAOE,EAAWmC,EAAOoH,QAC/B5B,EAAM3H,EAAWmC,EAAOoH,MAAMpH,EAAOoH,KAAMjE,EAAOxE,EAAOC,EAAMwJ,KACjExJ,IACAwE,EAAQoC,EACR7G,GAAgB,GAKlBC,EAAO,EAEFwB,EAAM0G,IAAIlG,WAAa,YAAcJ,EAAc,IAAM4C,GAAOV,KAAK,SAASC,GACnF,GAAIvB,GAAM4C,EAAGK,EAAK4D,EAAGhD,CAErB,IADA7D,EAAOuB,EAASvB,KACZA,EAAKkH,OAAQ,CAEf,IADArD,EAAM7D,EAAKmH,OACNvE,EAAI,EAAGK,EAAMY,EAAIpG,OAAQmF,EAAIK,EAAKL,IACrCiE,EAAIhD,EAAIjB,GACR3D,IACA4H,EAAExF,GAAK,OAASpC,EACZ1B,EAAQ0J,EAAOxJ,OAAS,IAC1BoJ,EAAEhF,SACFgF,EAAEtJ,MAAQA,EAAQ,EAClBsJ,EAAE7E,MAAQA,EACV6E,EAAErJ,KAAOA,EACLoB,EAAOoH,KAAKjJ,MAAM,4BACpB8J,EAAEvI,MAAQuI,EAAE9E,MAAM9E,QAAQ,0BAA2B,SAASA,QAAQ,uBAAwB,UAAUA,QAAQ,mBAAoB,OAAOA,QAAQ,yBAA0B,cAGjLqD,EAAKkE,KAAKqC,EAEE,MAAV9E,IACFnD,EAAOwI,MAAQpH,EAAKoH,OAGxB,MAAOxI,GAAOiB,SAAU,GACvB,SAAS2B,GACV,MAAO5C,GAAOiB,SAAU,KAG5BjB,EAAO6H,KAAO,WAWZ,MAVA7H,GAAOiB,SAAU,EACjBjB,EAAOoB,QACPpB,EAAOqB,aAAe,KACtBrB,EAAOsB,eAAiB,KACxBnB,EAAGsI,KAAKxI,EAAY4H,KAAK7H,EAAO2H,MAAO3H,EAAOkD,WAAW,GAAIlD,EAAOoB,KAAM,EAAG,KAAKsB,KAAK,WACrF,MAAO1C,GAAOiB,SAAU,GACvB,SAAS2B,GACV,MAAO5C,GAAOiB,SAAU,IAE1BjB,EAAO0I,aAAe,WACf1I,EAAO2I,SACZpB,MAAO,YAGXjH,EAAIJ,EAAUoH,OAAOnJ,MAAM,YACpB6B,EAAOoH,KAAO9G,EAAIA,EAAE,GAAK,oBAInCsI,KAAKC","file":"lemonldap-ng-manager/site/htdocs/static/js/sessions.min.js"} \ No newline at end of file diff --git a/lemonldap-ng-manager/site/htdocs/static/languages/ar.json b/lemonldap-ng-manager/site/htdocs/static/languages/ar.json index 9d00ee148..bda3357fa 100644 --- a/lemonldap-ng-manager/site/htdocs/static/languages/ar.json +++ b/lemonldap-ng-manager/site/htdocs/static/languages/ar.json @@ -232,7 +232,7 @@ "dbiUserTable":"جدول المستخدم", "decryptValue":"Decrypt value", "decryptValueFunctions":"Decrypt functions", -"decryptValueRule":"Use rule", +"decryptValueRule":"استخدام القاعدة", "default":"الاعْتيادي", "defaultRule":"القاعدة الاعتيادية ", "demoModeOn":"هذا المدير يعمل في طريقة العرض", @@ -417,7 +417,7 @@ "loadFromUrl":"تحميل من أل يو أر ل", "localSessionStorage":"وحدة ذاكرة التخزين المؤقت", "localSessionStorageOptions":"خيارات وحدة التخزين المؤقت", -"locationRules":"قاعدة الدخول", +"locationRules":"Access rules", "loginHistory":"سجل تسجيل الدخول", "loginHistoryEnabled":"تفعيل", "logo":"شعار", @@ -494,6 +494,7 @@ "notAValidPerlExpression":"عبارة بيرل ليست صحيحة", "notification":"تفعيل", "notifications":"إشعار", +"notification_s":"notification(s)", "notificationDefaultCond":"Default condition", "notificationServer":"إشعارالخادم", "notificationServerDELETE":"DELETE method", @@ -595,8 +596,8 @@ "oidcServicePublicKeySig":"توقيع على المفتاح العمومي", "oidcServiceKeyIdSig":"توقيع على هوية المفتاح ", "oidcServiceAuthorizationCodeExpiration":"Authorization Code expiration", -"oidcServiceAccessTokenExpiration":"ﺎﻨﺘﻫﺍﺀ ﺹﻼﺤﻳﺓ ﺎﻠﺗﻮﻜﻧ", -"oidcServiceIDTokenExpiration":" ﺎﻨﺘﻫﺍﺀ ﺹﻼﺤﻳﺓ ﺖﻋﺮﻴﻓ ﺎﻠﺗﻮﻜﻧ", +"oidcServiceAccessTokenExpiration":"انتهاء صلاحية التوكن", +"oidcServiceIDTokenExpiration":" انتهاء صلاحية تعريف التوكن", "oidcServiceOfflineSessionExpiration":"Offline session expiration", "oidcStorage":"اسم وحدة الجلسات", "oidcStorageOptions":"خيارات وحدة الجلسات", @@ -767,7 +768,7 @@ "returnUrl":"إرجاع اليو آر إل", "rp":"Relying Party", "rule":"القاعدة", -"ruleAuthnLevel":"Required authentication level", +"ruleAuthnLevel":"مستوى إثبات الهوية واجب", "rules":"القواعد", "rulesAuthnLevel":"Required authentication levels", "Same":"نفسه", @@ -1081,4 +1082,4 @@ "samlRelayStateTimeout":"تناوب حالة مهلة الجلسة ", "samlUseQueryStringSpecific":"استخدام أسلوب query_string المعين", "samlOverrideIDPEntityID":"Override Entity ID when acting as IDP" -} +} \ No newline at end of file diff --git a/lemonldap-ng-manager/site/htdocs/static/languages/de.json b/lemonldap-ng-manager/site/htdocs/static/languages/de.json index f8d0c0145..633b584df 100644 --- a/lemonldap-ng-manager/site/htdocs/static/languages/de.json +++ b/lemonldap-ng-manager/site/htdocs/static/languages/de.json @@ -494,6 +494,7 @@ "notAValidPerlExpression":"Not a valid Perl expression", "notification":"Activation", "notifications":"Notifications", +"notification_s":"notification(s)", "notificationDefaultCond":"Default condition", "notificationServer":"Notification server", "notificationServerDELETE":"DELETE method", @@ -1081,4 +1082,4 @@ "samlRelayStateTimeout":"RelayState session timeout", "samlUseQueryStringSpecific":"Use specific query_string method", "samlOverrideIDPEntityID":"Override Entity ID when acting as IDP" -} +} \ No newline at end of file diff --git a/lemonldap-ng-manager/site/htdocs/static/languages/en.json b/lemonldap-ng-manager/site/htdocs/static/languages/en.json index a462abd5c..f90c72119 100644 --- a/lemonldap-ng-manager/site/htdocs/static/languages/en.json +++ b/lemonldap-ng-manager/site/htdocs/static/languages/en.json @@ -494,6 +494,7 @@ "notAValidPerlExpression":"Not a valid Perl expression", "notification":"Activation", "notifications":"Notifications", +"notification_s":"notification(s)", "notificationDefaultCond":"Default condition", "notificationServer":"Notification server", "notificationServerDELETE":"DELETE method", diff --git a/lemonldap-ng-manager/site/htdocs/static/languages/fr.json b/lemonldap-ng-manager/site/htdocs/static/languages/fr.json index 32afc687b..30c0a5dc3 100644 --- a/lemonldap-ng-manager/site/htdocs/static/languages/fr.json +++ b/lemonldap-ng-manager/site/htdocs/static/languages/fr.json @@ -494,6 +494,7 @@ "notAValidPerlExpression":"Pas une expression Perl valide", "notification":"Activation", "notifications":"Notifications", +"notification_s":"notification(s)", "notificationDefaultCond":"Condition par défaut", "notificationServer":"Serveur de notifications", "notificationServerDELETE":"Méthode DELETE", diff --git a/lemonldap-ng-manager/site/htdocs/static/languages/it.json b/lemonldap-ng-manager/site/htdocs/static/languages/it.json index 8a8cc3cc0..cd2134955 100644 --- a/lemonldap-ng-manager/site/htdocs/static/languages/it.json +++ b/lemonldap-ng-manager/site/htdocs/static/languages/it.json @@ -232,7 +232,7 @@ "dbiUserTable":"Tabella utente", "decryptValue":"Decrypt value", "decryptValueFunctions":"Decrypt functions", -"decryptValueRule":"Use rule", +"decryptValueRule":"Utilizza la regola", "default":"Predefinito", "defaultRule":"Regola predefinita", "demoModeOn":"Questo gestore viene eseguito in modalità demo", @@ -417,7 +417,7 @@ "loadFromUrl":"Carica a partire dall'URL", "localSessionStorage":"Modulo cache", "localSessionStorageOptions":"Opzioni modulo cache", -"locationRules":"Regola di accesso", +"locationRules":"Regole di accesso", "loginHistory":"Cronologia dei login", "loginHistoryEnabled":"Attivazione", "logo":"Logo", @@ -494,6 +494,7 @@ "notAValidPerlExpression":"Non una valida espressione Perl", "notification":"Attivazione", "notifications":"Notifiche", +"notification_s":"notification(s)", "notificationDefaultCond":"Default condition", "notificationServer":"Server di notifica", "notificationServerDELETE":"DELETE method", @@ -563,7 +564,7 @@ "oidcRPMetaDataNode":"Parti basate su OpenID Connect", "oidcRPMetaDataOptions":"Opzioni", "oidcRPMetaDataOptionsAccessTokenExpiration":"Scadenza accesso token", -"oidcRPMetaDataOptionsAuthorizationCodeExpiration":"Scadenza Authorization Code", +"oidcRPMetaDataOptionsAuthorizationCodeExpiration":"Authorization Code expiration", "oidcRPMetaDataOptionsBypassConsent":"Consenso di bypass", "oidcRPMetaDataOptionsClientID":"ID Client", "oidcRPMetaDataOptionsClientSecret":"Segreto Client", @@ -573,7 +574,7 @@ "oidcRPMetaDataOptionsIDTokenExpiration":"Scadenza ID Token", "oidcRPMetaDataOptionsIDTokenSignAlg":"Algoritmo di firma di identificazione di Token", "oidcRPMetaDataOptionsIDTokenForceClaims":"Force claims to be returned in ID Token", -"oidcRPMetaDataOptionsOfflineSessionExpiration":"Scadenza Refresh Token", +"oidcRPMetaDataOptionsOfflineSessionExpiration":"Offline session expiration", "oidcRPMetaDataOptionsRefreshToken":"Use refresh tokens", "oidcRPMetaDataOptionsUserIDAttr":"Attributo utente", "oidcRPName":"Nome di OpenID Connect RP", @@ -594,10 +595,10 @@ "oidcServicePrivateKeySig":"Firma della chiave privata", "oidcServicePublicKeySig":"Firma della chiave pubblica", "oidcServiceKeyIdSig":"ID del codice di accesso", -"oidcServiceAuthorizationCodeExpiration":"Scadenza Authorization Code", +"oidcServiceAuthorizationCodeExpiration":"Authorization Code expiration", "oidcServiceAccessTokenExpiration":"Scadenza accesso token", "oidcServiceIDTokenExpiration":"Scadenza ID Token", -"oidcServiceOfflineSessionExpiration":"Scadenza Refresh Token", +"oidcServiceOfflineSessionExpiration":"Offline session expiration", "oidcStorage":"Nome del modulo Sessioni", "oidcStorageOptions":"Opzioni del modulo Sessioni", "oidcOPMetaDataNodes":"Provider di OpenID Connect", @@ -707,12 +708,12 @@ "proxyUseSoap":"Usa SOAP invece di REST", "publicKey":"Chiave pubblica", "purgeNotification":"Elimina definitivamente la notifica", -"radius2f":"Radius second factor", +"radius2f":"Radius secondo fattore", "radius2fActivation":"Attivazione", "radius2fServer":"Nome host del server", "radius2fSecret":"Segreto condiviso", "radius2fUsernameSessionKey":"Session key containing login", -"radius2fTimeout":"Authentication timeout", +"radius2fTimeout":"Timeout di autenticazione", "radius2fAuthnLevel":"Livello di autenticazione", "radius2fLogo":"Logo", "radius2fLabel":"Label", @@ -767,7 +768,7 @@ "returnUrl":"URL di ritorno", "rp":"Parte facente affidamento", "rule":"Regola", -"ruleAuthnLevel":"Required authentication level", +"ruleAuthnLevel":"Livello di autenticazione richiesto", "rules":"Regole", "rulesAuthnLevel":"Required authentication levels", "Same":"Stesso", @@ -1081,4 +1082,4 @@ "samlRelayStateTimeout":"Timeout di sessione di RelayState", "samlUseQueryStringSpecific":"Utilizza il metodo specifico query_string", "samlOverrideIDPEntityID":"Sostituisci l'ID entità quando agisce come IDP" -} +} \ No newline at end of file diff --git a/lemonldap-ng-manager/site/htdocs/static/languages/vi.json b/lemonldap-ng-manager/site/htdocs/static/languages/vi.json index e915c3c85..df8c3888c 100644 --- a/lemonldap-ng-manager/site/htdocs/static/languages/vi.json +++ b/lemonldap-ng-manager/site/htdocs/static/languages/vi.json @@ -417,7 +417,7 @@ "loadFromUrl":"Nạp từ URL", "localSessionStorage":"Mô-đun bộ nhớ cache", "localSessionStorageOptions":"Tùy chọn mô-đun bộ nhớ cache", -"locationRules":"Quy tắc truy cập", +"locationRules":"Access rules", "loginHistory":"Lịch sử đăng nhập", "loginHistoryEnabled":"Kích hoạt", "logo":"Logo", @@ -494,6 +494,7 @@ "notAValidPerlExpression":"Không phải là một biểu thức Perl hợp lệ", "notification":"Kích hoạt", "notifications":"Thông báo", +"notification_s":"notification(s)", "notificationDefaultCond":"Default condition", "notificationServer":"Máy chủ Thông báo", "notificationServerDELETE":"DELETE method", @@ -562,8 +563,8 @@ "oidcRPMetaDataExportedVars":"Biến đã được xuất", "oidcRPMetaDataNode":"OpenID Connect Relying Parties", "oidcRPMetaDataOptions":"Tùy chọn", -"oidcRPMetaDataOptionsAccessTokenExpiration":"Hết hạn truy cập Token", -"oidcRPMetaDataOptionsAuthorizationCodeExpiration":"Authorization Code hết hạn", +"oidcRPMetaDataOptionsAccessTokenExpiration":"Access Token expiration", +"oidcRPMetaDataOptionsAuthorizationCodeExpiration":"Authorization Code expiration", "oidcRPMetaDataOptionsBypassConsent":"Bỏ qua sự đồng ý", "oidcRPMetaDataOptionsClientID":"Client ID", "oidcRPMetaDataOptionsClientSecret":"Trình khách bí mật", @@ -573,7 +574,7 @@ "oidcRPMetaDataOptionsIDTokenExpiration":"ID Token hết hạn", "oidcRPMetaDataOptionsIDTokenSignAlg":"Thuật toán chữ ký ID Token", "oidcRPMetaDataOptionsIDTokenForceClaims":"Force claims to be returned in ID Token", -"oidcRPMetaDataOptionsOfflineSessionExpiration":"Refresh Token hết hạn", +"oidcRPMetaDataOptionsOfflineSessionExpiration":"Offline session expiration", "oidcRPMetaDataOptionsRefreshToken":"Use refresh tokens", "oidcRPMetaDataOptionsUserIDAttr":"thuộc tính người dùng", "oidcRPName":"OpenID Connect RP Name", @@ -594,10 +595,10 @@ "oidcServicePrivateKeySig":"Ký khóa cá nhân", "oidcServicePublicKeySig":"Ký khóa công khai", "oidcServiceKeyIdSig":"Khóa ID chính", -"oidcServiceAuthorizationCodeExpiration":"Authorization Code hết hạn", -"oidcServiceAccessTokenExpiration":"Hết hạn truy cập Token", -"oidcServiceIDTokenExpiration":"ID Token hết hạn", -"oidcServiceOfflineSessionExpiration":"Refresh Token hết hạn", +"oidcServiceAuthorizationCodeExpiration":"Authorization Code expiration", +"oidcServiceAccessTokenExpiration":"Access Token expiration", +"oidcServiceIDTokenExpiration":"ID Token expiration", +"oidcServiceOfflineSessionExpiration":"Offline session expiration", "oidcStorage":"Tên mô-đun phiên", "oidcStorageOptions":"Tùy chọn mô-đun phiên", "oidcOPMetaDataNodes":"Nhà cung cấp Kết nối OpenID", @@ -1081,4 +1082,4 @@ "samlRelayStateTimeout":"Thời gian hết hạn phiên RelayState ", "samlUseQueryStringSpecific":"Sử dụng phương pháp query_string cụ thể", "samlOverrideIDPEntityID":"Override Entity ID when acting as IDP" -} +} \ No newline at end of file diff --git a/lemonldap-ng-manager/site/htdocs/static/languages/zh.json b/lemonldap-ng-manager/site/htdocs/static/languages/zh.json index 05c39be50..2fc9a0534 100644 --- a/lemonldap-ng-manager/site/htdocs/static/languages/zh.json +++ b/lemonldap-ng-manager/site/htdocs/static/languages/zh.json @@ -494,6 +494,7 @@ "notAValidPerlExpression":"Not a valid Perl expression", "notification":"激活", "notifications":"Notifications", +"notification_s":"notification(s)", "notificationDefaultCond":"Default condition", "notificationServer":"Notification server", "notificationServerDELETE":"DELETE method", @@ -594,7 +595,7 @@ "oidcServicePrivateKeySig":"Signing private key", "oidcServicePublicKeySig":"Signing public key", "oidcServiceKeyIdSig":"Signing key ID", -"oidcServiceAuthorizationCodeExpiration":"Authorization code expiration", +"oidcServiceAuthorizationCodeExpiration":"Authorization Code expiration", "oidcServiceAccessTokenExpiration":"Access Token expiration", "oidcServiceIDTokenExpiration":"ID Token expiration", "oidcServiceOfflineSessionExpiration":"Offline session expiration", @@ -1081,4 +1082,4 @@ "samlRelayStateTimeout":"RelayState session timeout", "samlUseQueryStringSpecific":"Use specific query_string method", "samlOverrideIDPEntityID":"Override Entity ID when acting as IDP" -} +} \ No newline at end of file diff --git a/lemonldap-ng-manager/site/templates/notifications.tpl b/lemonldap-ng-manager/site/templates/notifications.tpl index 4d8085be9..15bfe19b1 100644 --- a/lemonldap-ng-manager/site/templates/notifications.tpl +++ b/lemonldap-ng-manager/site/templates/notifications.tpl @@ -21,6 +21,7 @@ +

{{total}}

diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Auth/Combination.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Auth/Combination.pm index b900d9de6..8bb0fb3dd 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Auth/Combination.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Auth/Combination.pm @@ -152,6 +152,17 @@ sub authForce { return 0; } +#sub setSecurity { +# my $self = shift; +# my ($req) = @_; +# $self->getStack( $req, 'extractFormInfo' ) or return PE_ERROR; +# $req->userData->{_combinationTry} ||= 0; +# eval { +# $req->data->{combinationStack}->[ $req->userData->{_combinationTry} ] +# ->[0]->( 'setSecurity', @_ ); +# }; +#} + ## UserDB steps ############### # Note that UserDB::Combination uses the same object. diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/LDAP.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/LDAP.pm index 511018973..da096a30f 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/LDAP.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/LDAP.pm @@ -114,7 +114,14 @@ sub init { sub getUser { my ( $self, $req, %args ) = @_; - return PE_LDAPCONNECTFAILED unless $self->ldap and $self->bind(); + $self->validateLdap; + + unless ( $self->ldap ) { + return PE_LDAPCONNECTFAILED; + } + + $self->bind(); + my $mesg = $self->ldap->search( base => $self->conf->{ldapBase}, scope => 'sub', diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/ar.json b/lemonldap-ng-portal/site/htdocs/static/languages/ar.json index f9db6fe56..54285edf8 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/ar.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/ar.json @@ -83,9 +83,9 @@ "PE91":"Access not granted on OID service", "PE92":"Access not granted on GET service", "PE93":"Access not granted on IMPERSONATION service", -"PE94":"A required attribute is not available", +"PE94":"السمة المطلوبة غير متوفرة", "PE95":"Access not granted on DECRYPT service", -"PE96":"بيانات الإعتماد خاطئة", +"PE96":"Invalid verification code", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "accept":"قبول", "accessDenied":"ليس لديك إذن بالدخول لهذا التطبيق", @@ -191,7 +191,7 @@ "notFound":"لم يتم العثور: محاولة الدخول إلى صفحة غير متوفرة", "noTOTPFound":"No TOTP found", "noU2FKeyFound":"No U2F key found", -"oidcConsent":"التطبيق ٪s هل ترغب في معرفة:", +"oidcConsent":"The application %s would like to:", "oidcConsents":"OIDC consents", "oidcConsentsFull":"OpenID Connect consents", "oneExpired2Fremoved":"An expired 2F device has been removed!", @@ -273,19 +273,19 @@ "warning":"تحذير", "welcomeOnPortal":"مرحبا بك على بوابة إثبات الهوية الآمنة.", "yesResendMail":"نعم، أعد إرسال البريد", -"yourAddress":"عنوانك", +"yourAddress":"Know your address", "yourApps":"التطبيقات الخاصة بك", -"yourEmail":"بريدك الالكتروني", -"yourIdentity":"هويتك", +"yourEmail":"Know your email", +"yourIdentity":"Know your identity", "yourIdentityIs":"هويتك هي", "yourKeyIsRegistered":"المفتاح الخاص بك تم تسجيله", "yourKeyIsAlreadyRegistered":"Your key is ALREADY registered!", "yourKeyIsUnregistered":"تمت إزالة المفتاح", "yourKeyIsVerified":"تم اختبار المفتاح الخاص بك بنجاح", "yourNewTotpKey":"Your new TOTP key, please test it and enter the code", -"yourOffline": "and access your account while you are offline", -"yourPhone":"رقم هاتفك", -"yourProfile":"ملفك الشخصي", +"yourOffline":"Access your account while you are offline", +"yourPhone":"Know your phone number", +"yourProfile":"Know your profile", "yourTotpKey":"Your TOTP key", "yubikey2f":"Yubikey" -} +} \ No newline at end of file diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/de.json b/lemonldap-ng-portal/site/htdocs/static/languages/de.json index 4a1281b2c..4724ad689 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/de.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/de.json @@ -85,7 +85,7 @@ "PE93":"Access not granted on IMPERSONATION service", "PE94":"A required attribute is not available", "PE95":"Access not granted on DECRYPT service", -"PE96":"Benutzername oder Passwort nicht korrekt", +"PE96":"Invalid verification code", "2fRegRequired":"Dieser Dienst benötigt Zwei-Faktor-Authentifizierung. Bitte legen Sie ein Gerät an und gehen dann zum Portal zurück.", "accept":"Akzeptieren", "accessDenied":"Sie haben keine Zugriffsberechtigung für diese Anwendung", @@ -191,7 +191,7 @@ "notFound":"Nicht gefunden: Du versuchst, auf eine nicht verfügbare Seite zuzugreifen", "noTOTPFound":"Kein TOTP gefunden", "noU2FKeyFound":"Kein U2F Schlüssel gefunden", -"oidcConsent":"Die Anwendung %s möchte:", +"oidcConsent":"The application %s would like to:", "oidcConsents":"OIDC consents", "oidcConsentsFull":"OpenID Connect consents", "oneExpired2Fremoved":"An expired 2F device has been removed!", @@ -273,19 +273,19 @@ "warning":"Warnung", "welcomeOnPortal":"Willkommen in Ihrem gesicherten Authentifizierungsportal.", "yesResendMail":"Ja, Mail erneut senden.", -"yourAddress":"Wissen Ihre Adresse", +"yourAddress":"Know your address", "yourApps":"Ihre Applikationen", -"yourEmail":"Wissen Ihre Mailadresse", -"yourIdentity":"Wissen Ihre Identität", +"yourEmail":"Know your email", +"yourIdentity":"Know your identity", "yourIdentityIs":"Ihre Identität ist", "yourKeyIsRegistered":"Ihr Key wurde registriert", "yourKeyIsAlreadyRegistered":"Your key is ALREADY registered!", "yourKeyIsUnregistered":"Your key has been unregistered", "yourKeyIsVerified":"Ihr Key ist bestätigt", "yourNewTotpKey":"Your new TOTP key, please test it and enter the code", -"yourOffline": "and access your account while you are offline", -"yourPhone":"Wissen Ihre Telefonnummer", -"yourProfile":"Wissen Ihr Profil", +"yourOffline":"Access your account while you are offline", +"yourPhone":"Know your phone number", +"yourProfile":"Know your profile", "yourTotpKey":"Your TOTP key", "yubikey2f":"Yubikey" -} +} \ No newline at end of file diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/es.json b/lemonldap-ng-portal/site/htdocs/static/languages/es.json index 992142cb6..1c36017ba 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/es.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/es.json @@ -85,7 +85,7 @@ "PE93":"Acceso no concedido al servicio de SUPLANTACIÓN", "PE94":"Un atributo obligatorio no está presente", "PE95":"Access not granted on DECRYPT service", -"PE96":"Contraseña o identificador incorrecto", +"PE96":"Invalid verification code", "2fRegRequired":"Este servicio necesita la autenticación de dos factores. Registre un dispositivo ahora, luego reingrese al portal.", "accept":"Aceptar", "accessDenied":"No está autorizado a acceder a esta aplicación", @@ -191,7 +191,7 @@ "notFound":"No encontrado: página no disponible", "noTOTPFound":"TOTP no encontrado", "noU2FKeyFound":"Llave U2F no encontrada", -"oidcConsent":"La aplicación %s quisiera saber:", +"oidcConsent":"The application %s would like to:", "oidcConsents":"Permisos OIDC", "oidcConsentsFull":"Permisos OpenID Connect", "oneExpired2Fremoved":"¡Un dispositivo 2F caducado ha sido suprimido!", @@ -273,19 +273,19 @@ "warning":"Precaución", "welcomeOnPortal":"Bienvenido a su portal de autenticación.", "yesResendMail":"Sí, reenviar el e-mail", -"yourAddress":"Su dirección", +"yourAddress":"Know your address", "yourApps":"Sus aplicaciones", -"yourEmail":"Su e-mail", -"yourIdentity":"Su identidad", +"yourEmail":"Know your email", +"yourIdentity":"Know your identity", "yourIdentityIs":"Su identidad es", "yourKeyIsRegistered":"Su llave está registrada", "yourKeyIsAlreadyRegistered":"¡Su llave YA FUE registrada!", "yourKeyIsUnregistered":"Su llave ha sido suprimida", "yourKeyIsVerified":"Su llave está verificada", "yourNewTotpKey":"Su nueva llave TOTP, por favor pruébela e ingrese el código", -"yourOffline": "Access your account while you are offline", -"yourPhone":"Su número telefónico", -"yourProfile":"Su perfil", +"yourOffline":"Access your account while you are offline", +"yourPhone":"Know your phone number", +"yourProfile":"Know your profile", "yourTotpKey":"Su llave TOTP", "yubikey2f":"Yubikey" -} +} \ No newline at end of file diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/fi.json b/lemonldap-ng-portal/site/htdocs/static/languages/fi.json index 33a07e759..e7586e539 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/fi.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/fi.json @@ -85,7 +85,7 @@ "PE93":"Access not granted on IMPERSONATION service", "PE94":"A required attribute is not available", "PE95":"Access not granted on DECRYPT service", -"PE96":"Virheelliset kirjautumistiedot", +"PE96":"Invalid verification code", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "accept":"Hyväksy", "accessDenied":"Sinulla ei ole käyttöoikeutta tähän sovellukseen", @@ -273,19 +273,19 @@ "warning":"Varoitus", "welcomeOnPortal":"Welcome on your secured authentication portal.", "yesResendMail":"Kyllä, uudelleen lähetä sähköposti", -"yourAddress":"Osoitteesi", +"yourAddress":"Know your address", "yourApps":"Sovelluksesi", -"yourEmail":"Sähköpostiosoitteesi", -"yourIdentity":"Your identity", +"yourEmail":"Know your email", +"yourIdentity":"Know your identity", "yourIdentityIs":"Your identity is", "yourKeyIsRegistered":"Your key is registered", "yourKeyIsAlreadyRegistered":"Your key is ALREADY registered!", "yourKeyIsUnregistered":"Your key has been unregistered", "yourKeyIsVerified":"Your key is verified", "yourNewTotpKey":"Your new TOTP key, please test it and enter the code", -"yourOffline": "and access your account while you are offline", -"yourPhone":"Puhelinnumerosi", -"yourProfile":"Profiilisi", +"yourOffline":"Access your account while you are offline", +"yourPhone":"Know your phone number", +"yourProfile":"Know your profile", "yourTotpKey":"Your TOTP key", "yubikey2f":"Yubikey" -} +} \ No newline at end of file diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/it.json b/lemonldap-ng-portal/site/htdocs/static/languages/it.json index f342237ac..fcca6e465 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/it.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/it.json @@ -83,9 +83,9 @@ "PE91":"Accesso non concesso sul servizio OID", "PE92":"Accesso non concesso sul servizio GET", "PE93":"Accesso non concesso sul servizio IMPERSONATION", -"PE94":"A required attribute is not available", -"PE95":"Access not granted on DECRYPT service", -"PE96":"Password o ID errati", +"PE94":"Attributo richiesto non disponibile", +"PE95":"Accesso non concesso sul servizio DECRYPT", +"PE96":"Invalid verification code", "2fRegRequired":"Questo servizio richiede un'autenticazione a doppio fattore. Registrare un dispositivo ora, quindi tornare al portale.", "accept":"Accetta", "accessDenied":"Non hai un'autorizzazione di accesso per questa applicazione", @@ -191,7 +191,7 @@ "notFound":"Non trovato: si tenta di accedere ad una pagina non disponibile", "noTOTPFound":"Nessun TOTP trovato", "noU2FKeyFound":"Nessuna chiave U2F trovata", -"oidcConsent":"L'applicazione %s vorrebbe:", +"oidcConsent":"The application %s would like to:", "oidcConsents":"Consensi OIDC", "oidcConsentsFull":"Consensi OpenID Connect", "oneExpired2Fremoved":"An expired 2F device has been removed!", @@ -273,19 +273,19 @@ "warning":"Avvertimento", "welcomeOnPortal":"Benvenuto sul tuo portale di autenticazione protetta.", "yesResendMail":"Sì, rinvia e-mail", -"yourAddress":"Sapere vostro indirizzo", +"yourAddress":"Know your address", "yourApps":"Le vostre applicazioni", -"yourEmail":"Sapere vostro E-mail", -"yourIdentity":"Sapere vostro Identità", +"yourEmail":"Know your email", +"yourIdentity":"Know your identity", "yourIdentityIs":"La tua identità é", "yourKeyIsRegistered":"La vostra chiave è registrata", "yourKeyIsAlreadyRegistered":"La tua chiave è GIÀ registrata !", "yourKeyIsUnregistered":"La vostra chiave è stata rimossa", "yourKeyIsVerified":"La tua chiave é stata testata con successo", "yourNewTotpKey":"La tua nuova chiave TOTP, per favore provala e inserisci il codice", -"yourOffline": "and access your account while you are offline", -"yourPhone":"Sapere vostro numero di telefono", -"yourProfile":"Sapere vostro profilo", +"yourOffline":"Access your account while you are offline", +"yourPhone":"Know your phone number", +"yourProfile":"Know your profile", "yourTotpKey":"La tua chiave TOTP", "yubikey2f":"Yubikey" -} +} \ No newline at end of file diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/nl.json b/lemonldap-ng-portal/site/htdocs/static/languages/nl.json index 930a4a33f..52d63bf41 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/nl.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/nl.json @@ -85,7 +85,7 @@ "PE93":"Access not granted on IMPERSONATION service", "PE94":"A required attribute is not available", "PE95":"Access not granted on DECRYPT service", -"PE96":"Wachtwoord of identifier is niet correct", +"PE96":"Invalid verification code", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "accept":"Accept", "accessDenied":"You have no access authorization for this application", @@ -283,9 +283,9 @@ "yourKeyIsUnregistered":"Your key has been unregistered", "yourKeyIsVerified":"Your key is verified", "yourNewTotpKey":"Your new TOTP key, please test it and enter the code", -"yourOffline": "Access your account while you are offline", +"yourOffline":"Access your account while you are offline", "yourPhone":"Know your phone number", "yourProfile":"Know your profile", "yourTotpKey":"Your TOTP key", "yubikey2f":"Yubikey" -} +} \ No newline at end of file diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/pt.json b/lemonldap-ng-portal/site/htdocs/static/languages/pt.json index b470c8f31..cd34a6134 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/pt.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/pt.json @@ -85,7 +85,7 @@ "PE93":"Access not granted on IMPERSONATION service", "PE94":"Um atributo exigido não está disponível", "PE95":"Access not granted on DECRYPT service", -"PE96":"Senha ou identificante incorretos", +"PE96":"Invalid verification code", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "accept":"Accept", "accessDenied":"You have no access authorization for this application", @@ -283,9 +283,9 @@ "yourKeyIsUnregistered":"Your key has been unregistered", "yourKeyIsVerified":"Your key is verified", "yourNewTotpKey":"Your new TOTP key, please test it and enter the code", -"yourOffline": "Access your account while you are offline", +"yourOffline":"Access your account while you are offline", "yourPhone":"Know your phone number", "yourProfile":"Know your profile", "yourTotpKey":"Your TOTP key", "yubikey2f":"Yubikey" -} +} \ No newline at end of file diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/ro.json b/lemonldap-ng-portal/site/htdocs/static/languages/ro.json index 3535675f3..8305f2c28 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/ro.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/ro.json @@ -85,7 +85,7 @@ "PE93":"Access not granted on IMPERSONATION service", "PE94":"A required attribute is not available", "PE95":"Access not granted on DECRYPT service", -"PE96":"Parolă sau identificator incorect", +"PE96":"Invalid verification code", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "accept":"Accept", "accessDenied":"You have no access authorization for this application", @@ -283,9 +283,9 @@ "yourKeyIsUnregistered":"Your key has been unregistered", "yourKeyIsVerified":"Your key is verified", "yourNewTotpKey":"Your new TOTP key, please test it and enter the code", -"yourOffline": "Access your account while you are offline", +"yourOffline":"Access your account while you are offline", "yourPhone":"Know your phone number", "yourProfile":"Know your profile", "yourTotpKey":"Your TOTP key", "yubikey2f":"Yubikey" -} +} \ No newline at end of file diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/vi.json b/lemonldap-ng-portal/site/htdocs/static/languages/vi.json index f739b4ba5..7457a894d 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/vi.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/vi.json @@ -85,7 +85,7 @@ "PE93":"Access not granted on IMPERSONATION service", "PE94":"Một thuộc tính bắt buộc không có sẵn", "PE95":"Access not granted on DECRYPT service", -"PE96":"Thông tin xác thực sai", +"PE96":"Invalid verification code", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "accept":"Chấp nhận", "accessDenied":"Bạn không có quyền truy cập vào ứng dụng này", @@ -191,7 +191,7 @@ "notFound":"Không tìm thấy: bạn cố gắng truy cập vào một trang không có sẵn", "noTOTPFound":"Đăng xuất khỏi các ứng dụng khác", "noU2FKeyFound":"No U2F key found", -"oidcConsent":"Ứng dụng %s muốn biết:", +"oidcConsent":"The application %s would like to:", "oidcConsents":"OIDC consents", "oidcConsentsFull":"OpenID Connect consents", "oneExpired2Fremoved":"An expired 2F device has been removed!", @@ -273,19 +273,19 @@ "warning":"Cảnh báo", "welcomeOnPortal":"Chào mừng bạn đến với cổng thông tin xác thực được bảo mật của bạn.", "yesResendMail":"Có, gửi lại thư", -"yourAddress":"Địa chỉ của bạn", +"yourAddress":"Know your address", "yourApps":"Ứng dụng của bạn", -"yourEmail":"Email của bạn", -"yourIdentity":"Nhận dạng của bạn", +"yourEmail":"Know your email", +"yourIdentity":"Know your identity", "yourIdentityIs":"Nhận dạng của bạn là", "yourKeyIsRegistered":"Khóa của bạn đã được đăng ký", "yourKeyIsAlreadyRegistered":"Your key is ALREADY registered!", "yourKeyIsUnregistered":"Khóa của bạn đã bị xóa", "yourKeyIsVerified":"Chìa khóa của bạn đã được kiểm tra thành công", "yourNewTotpKey":"Your new TOTP key, please test it and enter the code", -"yourOffline": "and access your account while you are offline", -"yourPhone":"Số điện thoại của bạn", -"yourProfile":"Profile của bạn", +"yourOffline":"Access your account while you are offline", +"yourPhone":"Know your phone number", +"yourProfile":"Know your profile", "yourTotpKey":"Your TOTP key", "yubikey2f":"Yubikey" -} +} \ No newline at end of file diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/zh.json b/lemonldap-ng-portal/site/htdocs/static/languages/zh.json index 00ec7264b..6621e8f98 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/zh.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/zh.json @@ -85,7 +85,7 @@ "PE93":"Access not granted on IMPERSONATION service", "PE94":"A required attribute is not available", "PE95":"Access not granted on DECRYPT service", -"PE96":"认证错误", +"PE96":"Invalid verification code", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "accept":"Accept 方法", "accessDenied":"您无权访问此应用", @@ -273,19 +273,19 @@ "warning":"警告", "welcomeOnPortal":"欢迎来到您的加密认证 portal", "yesResendMail":"好的,重新发送邮件", -"yourAddress":"您的地址", +"yourAddress":"Know your address", "yourApps":"你的应用", -"yourEmail":"您的邮箱", -"yourIdentity":"您的标识", +"yourEmail":"Know your email", +"yourIdentity":"Know your identity", "yourIdentityIs":"您的身份是", "yourKeyIsRegistered":"Your key is registered", "yourKeyIsAlreadyRegistered":"Your key is ALREADY registered!", "yourKeyIsUnregistered":"Your key has been unregistered", "yourKeyIsVerified":"Your key is verified", "yourNewTotpKey":"Your new TOTP key, please test it and enter the code", -"yourOffline": "and access your account while you are offline", -"yourPhone":"您的电话号码", -"yourProfile":"您的档案", +"yourOffline":"Access your account while you are offline", +"yourPhone":"Know your phone number", +"yourProfile":"Know your profile", "yourTotpKey":"Your TOTP key", "yubikey2f":"Yubikey" -} +} \ No newline at end of file diff --git a/lemonldap-ng-portal/site/templates/common/mail/ms.json b/lemonldap-ng-portal/site/templates/common/mail/ms.json index 2393dbb5d..a76f99514 100644 --- a/lemonldap-ng-portal/site/templates/common/mail/ms.json +++ b/lemonldap-ng-portal/site/templates/common/mail/ms.json @@ -10,7 +10,7 @@ "newPwdIs":"Kata laluan baru anda ialah", "pwdChanged":"Kata laluan anda telah ditukar", "pwdIs":"Kata laluan anda ialah", -"registerConfirmSubject":"[LemonLDAP::NG] Pengesahan pendaftaran akaun", +"registerConfirmSubject":"[LemonLDAP::NG] Pengesahan pendaftaran akaun", "registerDoneSubject":"[LemonLDAP::NG] Akaun baru anda", "requestIssuedFromIP":"Permintaan itu dari alamat IP", "yourLoginCodeIs":"Kod login anda ialah", diff --git a/lemonldap-ng-portal/t/21-Auth-and-password-LDAP.t b/lemonldap-ng-portal/t/21-Auth-and-password-LDAP.t index 23023d515..b99a0fe43 100644 --- a/lemonldap-ng-portal/t/21-Auth-and-password-LDAP.t +++ b/lemonldap-ng-portal/t/21-Auth-and-password-LDAP.t @@ -5,7 +5,7 @@ use IO::String; require 't/test-lib.pm'; my $res; -my $maintests = 3; +my $maintests = 4; SKIP: { skip 'LLNGTESTLDAP is not set', $maintests unless ( $ENV{LLNGTESTLDAP} ); @@ -32,8 +32,24 @@ SKIP: { . '&password=' . ( $ENV{LDAPPWD} || 'dwho' ); - # Try yo authenticate - # ------------------- + # Try to authenticate with + # the server temporarily offline (#2018) + # -------------------------------------- + tempStopLdapServer(); + ok( + $res = $client->_post( + '/', IO::String->new($postString), + length => length($postString) + ), + 'Auth query' + ); + + expectReject( $res, 401, 6 ); + + # Try to authenticate with the + # server back online + # ---------------------------- + tempStartLdapServer(); ok( $res = $client->_post( '/', IO::String->new($postString), diff --git a/lemonldap-ng-portal/t/test-ldap.pm b/lemonldap-ng-portal/t/test-ldap.pm index 94204356c..9a82ce9b7 100644 --- a/lemonldap-ng-portal/t/test-ldap.pm +++ b/lemonldap-ng-portal/t/test-ldap.pm @@ -1,14 +1,19 @@ # Try to launch an LDAP server +my $slapd_bin; +my $slapadd_bin; +my $slapd_schema_dir; + if ( $ENV{LLNGTESTLDAP} ) { - my $slapd_bin = $ENV{LLNGTESTLDAP_SLAPD_BIN} || '/usr/sbin/slapd'; - my $slapadd_bin = $ENV{LLNGTESTLDAP_SLAPADD_BIN} || '/usr/sbin/slapadd'; - my $slapd_schema_dir = ( - $ENV{LLNGTESTLDAP_SCHEMA_DIR} - and -d $ENV{LLNGTESTLDAP_SCHEMA_DIR} ? $ENV{LLNGTESTLDAP_SCHEMA_DIR} - : -d '/etc/slapd/schema' ? '/etc/slapd/schema' + $slapd_bin = $ENV{LLNGTESTLDAP_SLAPD_BIN} || '/usr/sbin/slapd'; + $slapadd_bin = $ENV{LLNGTESTLDAP_SLAPADD_BIN} || '/usr/sbin/slapadd'; + $slapd_schema_dir = ( + ( $ENV{LLNGTESTLDAP_SCHEMA_DIR} and -d $ENV{LLNGTESTLDAP_SCHEMA_DIR} ) + ? $ENV{LLNGTESTLDAP_SCHEMA_DIR} + : -d '/etc/openldap/schema' ? '/etc/openldap/schema' : '/etc/ldap/schema' ); + eval { mkdir 't/testslapd/slapd.d' }; eval { mkdir 't/testslapd/data' }; system('cp t/testslapd/slapd.ldif t/testslapd/slapd-test.ldif'); @@ -27,10 +32,27 @@ sub stopLdapServer { if ( $ENV{LLNGTESTLDAP} ) { open F, 't/testslapd/slapd.pid'; my $pid = join '', ; + close F; system "kill $pid"; system 'rm -rf t/testslapd/slapd.d'; system 'rm -rf t/testslapd/data'; system 'rm -rf t/testslapd/slapd-test.ldif'; } } + +sub tempStopLdapServer { + if ( $ENV{LLNGTESTLDAP} ) { + open F, 't/testslapd/slapd.pid'; + my $pid = join '', ; + close F; + system "kill $pid"; + } +} + +sub tempStartLdapServer { + if ( $ENV{LLNGTESTLDAP} ) { + system( $slapd_bin + . ' -s 256 -h "ldap://127.0.0.1:19389/" -F t/testslapd/slapd.d' ); + } +} 1; diff --git a/rpm/lemonldap-ng.spec b/rpm/lemonldap-ng.spec index 02d2e0765..ca8304217 100644 --- a/rpm/lemonldap-ng.spec +++ b/rpm/lemonldap-ng.spec @@ -561,10 +561,12 @@ fi %config(noreplace) %{apache_confdir}/z-lemonldap-ng-manager.conf %config(noreplace) %{apache_confdir}/z-lemonldap-ng-portal.conf %{_mandir}/man1/convertConfig* +%{_mandir}/man1/convertSessions* %dir %{_libexecdir}/%{name} %dir %{lm_sbindir} %dir %{lm_bindir} %{lm_bindir}/convertConfig +%{lm_bindir}/convertSessions %{lm_bindir}/importMetadata %{lm_bindir}/lmMigrateConfFiles2ini %{lm_bindir}/rotateOidcKeys