Merge branch 'v2.0' into globalLogout
This commit is contained in:
commit
7324172023
5
Makefile
5
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 \
|
||||
|
|
2
debian/liblemonldap-ng-common-perl.install
vendored
2
debian/liblemonldap-ng-common-perl.install
vendored
|
@ -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
|
||||
|
|
|
@ -70,6 +70,7 @@ META.json
|
|||
META.yml
|
||||
README
|
||||
scripts/convertConfig
|
||||
scripts/convertSessions
|
||||
scripts/importMetadata
|
||||
scripts/lemonldap-ng-cli
|
||||
scripts/lmMigrateConfFiles2ini
|
||||
|
|
|
@ -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',
|
||||
},
|
||||
);
|
||||
|
|
|
@ -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 '', <F>;
|
||||
if ( ref($data) eq 'CODE' ) {
|
||||
eval { $res{$f} = &$data( $args->{unserialize}->($row), $f ); };
|
||||
if ($@) {
|
||||
$res{$f} = &$data( undef, $f );
|
||||
eval {
|
||||
my $row = join '', <F>;
|
||||
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;
|
||||
|
|
250
lemonldap-ng-common/scripts/convertSessions
Executable file
250
lemonldap-ng-common/scripts/convertSessions
Executable file
|
@ -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 <<END_MESSAGE;
|
||||
|
||||
$0 [-di] -c config_file.ini
|
||||
|
||||
-d Debug mode
|
||||
-i Ignore errors
|
||||
|
||||
This script converts sessions in between the two backends specified in the configuration file
|
||||
The configuration file must contain the following (adjust to your environment):
|
||||
|
||||
[sessions_from]
|
||||
storageModule = Apache::Session::File
|
||||
storageModuleOptions = { \\
|
||||
'Directory' => '/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<sessionKind> 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<http://lemonldap-ng.org/>
|
||||
|
||||
=head1 AUTHORS
|
||||
|
||||
=over
|
||||
|
||||
=item Maxime Besson, E<lt>maxime.besson@worteks.comE<gt>
|
||||
|
||||
=back
|
||||
|
||||
=head1 BUG REPORT
|
||||
|
||||
Use OW2 system to report bug or ask for features:
|
||||
L<https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/issues>
|
||||
|
||||
=head1 DOWNLOAD
|
||||
|
||||
Lemonldap::NG is available at
|
||||
L<http://forge.objectweb.org/project/showfiles.php?group_id=274>
|
||||
|
|
@ -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' => {
|
||||
|
|
|
@ -2879,7 +2879,7 @@ sub attributes {
|
|||
# LDAP
|
||||
managerDn => {
|
||||
type => 'text',
|
||||
test => qr/^(?:\w+=.*)?$/,
|
||||
test => qr/^.*$/,
|
||||
msgFail => '__badValue__',
|
||||
default => '',
|
||||
documentation => 'LDAP manager DN',
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,4 +1,4 @@
|
|||
// Generated by CoffeeScript 1.12.7
|
||||
// Generated by CoffeeScript 1.12.8
|
||||
|
||||
/*
|
||||
* Sessions explorer
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -21,6 +21,7 @@
|
|||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="data.length!=0" class="text-center"><p class="badge">{{total}} <span trspan="notification_s"></span></p></div>
|
||||
<div class="region region-sidebar-first">
|
||||
<section id="block-superfish-1" class="block block-superfish clearfix">
|
||||
<div ui-tree data-drag-enabled="false" id="tree-root">
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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",
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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 '', <F>;
|
||||
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 '', <F>;
|
||||
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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user