Commit eddd5438 authored by Clément OUDOT's avatar Clément OUDOT

merge

parents 3ad943e9 65d3e921
......@@ -412,6 +412,7 @@ prepare_test_server:
#@cp -f e2e-tests/index.* e2e-tests/conf/
@cp -f $(SRCMANAGERDIR)/site/htdocs/manager* e2e-tests/conf/manager
@cp -f $(SRCPORTALDIR)/site/htdocs/index* e2e-tests/conf/portal
@cp e2e-tests/persistent/5efe8af397fc3577e05b483aca964f1b e2e-tests/conf/persistents
@cp e2e-tests/saml-sp.xml e2e-tests/conf/site/saml-sp.xml
@cp e2e-tests/rules.json e2e-tests/conf/site/test.json
@for f in $$(find e2e-tests/conf -name '*.fcgi'); do \
......
lemonldap-ng (2.1.0) artful; urgency=medium
lemonldap-ng (2.0.1-1) unstable; urgency=medium
* New release. See changes on our website:
......
......@@ -47,7 +47,7 @@ Build-Depends-Indep: libapache-session-perl,
libxml-libxslt-perl,
libxml-simple-perl,
perl
Standards-Version: 4.2.1
Standards-Version: 4.3.0
Vcs-Browser: https://salsa.debian.org/perl-team/modules/packages/lemonldap-ng
Vcs-Git: https://salsa.debian.org/perl-team/modules/packages/lemonldap-ng.git
Homepage: https://lemonldap-ng.org/
......
......@@ -26,6 +26,8 @@ templateDir = __pwd__/lemonldap-ng-portal/site/templates
portalStatus = 1
totp2fActivation = 1
totp2fSelfRegistration = 1
captcha_mail_enabled = 0
portalDisplayResetPassword = 1
[handler]
......
......@@ -164,7 +164,7 @@
"UA" : "$ENV{HTTP_USER_AGENT}",
"_whatToTrace": "$_auth eq 'SAML' ? \"$_user\\@$_idpConfKey\" : $_auth eq 'OpenIDConnect' ? \"$_user\\@$_oidcConnectedRP\" : \"$_user\""
},
"mailUrl": "http://auth.example.com:__port__/resetpwd",
"mailPwdRstUrl": "http://auth.example.com:__port__/resetpwd",
"notification": 1,
"notificationStorage": "File",
"notificationStorageOptions": {
......
{"_session_kind":"Persistent","_loginHistory":{"successLogin":[{"ipAddr":"127.0.0.1","_utime":1548016089}]},"_2fDevices":"[{\"type\":\"U2F\",\"_keyHandle\":\"CTPeZD3aFrNOY4yVWH4o1MKSn2aLH2OwLOWTtrQSlt_6LtUyki5nzrwBEeuxj7PRSujFZQDaMTfrEb-gr22Qfg\",\"_userKey\":\"BI1MGzKj1C9mMV8PwrYMggQXlItLBNSB19rNnFgUpLMBjAkMW8w3Sqg8s_hUGbdfdWX99duquzIzRLUtRUEvJLo\",\"name\":\"MyU2FKey\",\"epoch\":1548016193},{\"epoch\":1548016213,\"name\":\"MyYubikey\",\"_yubikey\":\"cccccchehfff\",\"type\":\"UBK\"},{\"epoch\":1548018950,\"name\":\"MyU2FKeyBlue\",\"_userKey\":\"BDEa8pQfV9agdvsX63bcwceRTXR_QvDdm5hQ5ZKQUaH4HlOi8ab4fQfl9CIACALWYm0jQcpfaRAcACiSCdwGrnI\",\"_keyHandle\":\"ZD_G6EfDv4FzttWS9RCS80SaSlRTXgtJU9r-1gInsQ4Jj1555r7nnrYhIvRfE4CTyH7NyGrt9fMnMMgByAx97Q\",\"type\":\"U2F\"}]","_session_id":"5efe8af397fc3577e05b483aca964f1b","_session_uid":"dwho","_updateTime":"20190120221550","_utime":1548016089}
\ No newline at end of file
......@@ -6,17 +6,22 @@ describe('00 Lemonldap::NG', function() {
describe('Auth mechanism', function() {
it('Portal should display 11 lang flags', function() {
browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
browser.sleep(500);
browser.driver.findElements(by.className('langicon')).then(function(elems) {
expect(elems.length).toEqual(11);
});
browser.sleep(500);
browser.driver.findElement(by.xpath("//img[@title='en']")).click();
expect(browser.driver.findElement(by.css('[trmsg="9"]')).getText()).toEqual('Authentication required');
expect(browser.driver.findElement(by.css('[trspan="createAccount"]')).getText()).toEqual('Create an account');
expect(browser.driver.findElement(by.css('[trspan="resetPwd"]')).getText()).toEqual('Reset my password');
browser.driver.findElement(by.xpath("//img[@title='it']")).click();
expect(browser.driver.findElement(by.css('[trmsg="9"]')).getText()).toEqual('Autenticazione necessaria');
expect(browser.driver.findElement(by.css('[trspan="createAccount"]')).getText()).toEqual('Crea un account');
expect(browser.driver.findElement(by.css('[trspan="resetPwd"]')).getText()).toEqual('Reimpostare la password');
browser.driver.findElement(by.xpath("//img[@title='fr']")).click();
expect(browser.driver.findElement(by.css('[trspan="createAccount"]')).getText()).toEqual('Créer un compte');
expect(browser.driver.findElement(by.css('[trspan="resetPwd"]')).getText()).toEqual('Réinitialiser mon mot de passe');
});
it('should create an account', function() {
browser.driver.findElement(by.css('[trspan="createAccount"]')).click();
......@@ -29,6 +34,28 @@ describe('00 Lemonldap::NG', function() {
browser.driver.findElements(by.className('img-thumbnail')).then(function(elems) {
expect(elems.length).toEqual(1);
});
browser.driver.findElement(by.xpath("//input[@name='firstname']")).sendKeys('doctor');
browser.driver.findElement(by.xpath("//input[@name='lastname']")).sendKeys('who');
browser.driver.findElement(by.xpath("//input[@name='mail']")).sendKeys('dwho@badwolf.com');
browser.driver.findElement(by.xpath("//input[@name='captcha']")).sendKeys('1234567');
browser.driver.findElement(by.xpath("//button[@type='submit']")).click();
expect(browser.driver.findElement(by.css('[trmsg="76"]')).getText()).toEqual('Erreur dans la saisie du captcha');
browser.driver.findElement(by.css('[trspan="back2Portal"]')).click();
});
it('should reset my password', function() {
browser.driver.findElement(by.css('[trspan="resetPwd"]')).click();
expect(browser.driver.findElement(by.css('[trmsg="69"]')).getText()).toEqual('Merci de saisir votre adresse mail');
expect(browser.driver.findElement(by.css('[trspan="sendPwd"]')).getText()).toEqual('Envoyez-moi un lien');
// A one input form
browser.driver.findElements(by.className('input-group')).then(function(elems) {
expect(elems.length).toEqual(1);
});
browser.driver.findElement(by.xpath("//input[@name='mail']")).sendKeys('dwho@badwolf.com');
browser.driver.findElement(by.xpath("//button[@type='submit']")).click();
expect(browser.driver.findElement(by.css('[trmsg="72"]')).getText()).toEqual('Un mail de confirmation vous a été envoyé');
expect(browser.driver.findElement(by.css('[trspan="mailSent2"]')).getText()).toEqual('Un message a été envoyé à votre adresse mail.');
expect(browser.driver.findElement(by.css('[trspan="linkValidUntil"]')).getText()).toEqual("Ce message contient un lien pour réinitialiser votre mot de passe, ce lien est valide jusqu'au");
});
it('should authenticate with history', function() {
expect(browser.driver.findElement(by.css('[trspan="back2Portal"]')).getText()).toEqual('Retourner au portail');
......@@ -53,11 +80,11 @@ describe('00 Lemonldap::NG', function() {
expect(browser.driver.findElement(by.css('[trspan="info"]')).getText()).toEqual("Information");
});
it('should display history', function() {
// Two entries
// Three entries
browser.driver.findElements(by.xpath('//table/tbody/tr')).then(function(elems) {
expect(elems.length).toEqual(2);
expect(elems.length).toEqual(3);
});
// Expect history with one login and one failed login
// Expect history with two logins and one failed login
browser.driver.findElements(by.xpath('//form/div/div/h3')).then(function(elems) {
expect(elems.length).toEqual(3);
expect(elems[0].getText()).toEqual('Information');
......@@ -71,10 +98,11 @@ describe('00 Lemonldap::NG', function() {
expect(elems[4].getText()).toEqual('Fehlermeldung');
});
browser.driver.findElements(by.xpath('//table/tbody/tr/td')).then(function(elems) {
expect(elems.length).toEqual(5);
expect(elems.length).toEqual(7);
expect(elems[1].getText()).toEqual('127.0.0.1');
expect(elems[3].getText()).toEqual('127.0.0.1');
expect(elems[4].getText()).toEqual('Benutzername oder Passwort nicht korrekt');
expect(elems[5].getText()).toEqual('127.0.0.1');
expect(elems[6].getText()).toEqual('Benutzername oder Passwort nicht korrekt');
});
expect(browser.driver.findElement(by.css('[trspan="PE5"]')).getText()).toEqual('Benutzername oder Passwort nicht korrekt');
expect(browser.driver.findElement(by.id('timer')).getText()).toMatch(/^Du wirst in \d{2} Sekunden umgeleitet$/);
......
'use strict';
/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
describe('01 Lemonldap::NG', function() {
describe('0 Lemonldap::NG', function() {
describe('Portal should display Menu', function() {
it('Should have four buttons', function() {
browser.driver.findElement(by.xpath("//img[@title='fr']")).click();
......@@ -42,10 +42,11 @@ describe('01 Lemonldap::NG', function() {
expect(elems[4].getText()).toEqual("Message d'erreur");
});
browser.driver.findElements(by.xpath('//table/tbody/tr/td')).then(function(elems) {
expect(elems.length).toEqual(5);
expect(elems.length).toEqual(7);
expect(elems[1].getText()).toEqual('127.0.0.1');
expect(elems[3].getText()).toEqual('127.0.0.1');
expect(elems[4].getText()).toEqual('Mot de passe ou identifiant incorrect');
expect(elems[5].getText()).toEqual('127.0.0.1');
expect(elems[6].getText()).toEqual('Mot de passe ou identifiant incorrect');
});
browser.driver.findElement(by.xpath("//button[@type='button']")).click();
browser.sleep(1000);
......
......@@ -27,7 +27,36 @@ describe('10 Lemonldap::NG', function() {
browser.sleep(1000);
});
});
it('Should submit TOTP form', function() {
it('Should display 2FA Manager', function() {
expect(browser.driver.findElement(by.css('[trspan="choose2f"]')).getText()).toEqual('Choisissez votre second facteur');
browser.driver.findElements(by.xpath('//table/thead/tr/th')).then(function(elems) {
expect(elems.length).toEqual(4);
expect(elems[0].getText()).toEqual('Type');
expect(elems[1].getText()).toEqual('Nom');
expect(elems[2].getText()).toEqual('Date');
// expect(elems[3].getText()).toEqual('Action');
});
browser.driver.findElements(by.xpath('//table/tbody/tr/td')).then(function(elems) {
expect(elems.length).toEqual(12);
expect(elems[0].getText()).toEqual('U2F');
expect(elems[1].getText()).toEqual('MyU2FKey');
expect(elems[2].getText()).toEqual('20/01/2019 à 21:29:53');
expect(elems[4].getText()).toEqual('UBK');
expect(elems[5].getText()).toEqual('MyYubikey');
expect(elems[6].getText()).toEqual('20/01/2019 à 21:30:13');
expect(elems[8].getText()).toEqual('U2F');
expect(elems[9].getText()).toEqual('MyU2FKeyBlue');
expect(elems[10].getText()).toEqual('20/01/2019 à 22:15:50');
});
expect(browser.driver.findElement(by.className('card-footer')).getText()).toEqual('TOTP2F');
browser.driver.findElements(by.className('btn-danger')).then(function(elems) {
expect(elems.length).toEqual(0);
// elems[0].click();
});
// expect(browser.driver.findElement(by.css('[trspan="choose2f"]')).getText()).toEqual("Vous n'êtes pas autorisé à faire cette requête");
browser.driver.findElement(by.xpath("//img[@title='totp2F']")).click();
});
it('Should display and submit TOTP form', function() {
browser.driver.findElements(by.css('[role="button"]')).then(function(links) {
expect(links.length).toEqual(4);
expect(links[0].getText()).toEqual('Générer une nouvelle clef');
......@@ -56,7 +85,7 @@ describe('10 Lemonldap::NG', function() {
// Back to Portal
links[3].click();
browser.driver.findElement(by.xpath("//button[@type='button']")).click();
browser.sleep(1000);
browser.sleep(500);
expect(browser.driver.findElement(by.css('[trspan="yourApps"]')).getText()).toEqual('Vos applications');
});
});
......
......@@ -3,9 +3,17 @@
/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
describe('99 Lemonldap::NG auth mechanism', function() {
it('should allow logout', function() {
browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/?logout=1');
browser.driver.findElements(by.xpath('//li/a/span/img')).then(function(links) {
expect(links.length).toEqual(4);
links[3].click();
browser.sleep(1000);
expect(browser.driver.findElement(by.css('[trspan="areYouSure"]')).getText()).toEqual('Êtes-vous sûr ?');
browser.driver.findElement(by.css('[trspan="imSure"]')).click();
expect(browser.driver.findElement(by.css('[trmsg="47"]')).getText()).toEqual('Vous avez été déconnecté');
browser.sleep(500);
browser.driver.findElement(by.css('[trspan="goToPortal"]')).click();
expect(browser.driver.findElement(by.css('[trmsg="9"]')).getText()).toEqual('Veuillez vous authentifier');
});
});
});
\ No newline at end of file
......@@ -2,11 +2,12 @@ exports.config = {
allScriptsTimeout: 300000,
// Specific test
// specs: process.env.E2E_TESTS,
specs: process.env.E2E_TESTS,
// All tests
specs: ['portal/*.js', 'handler/*.js', 'manager/*.js' ],
//specs: ['portal/*.js', 'handler/*.js', 'manager/*.js' ],
capabilities: {
//'browserName': 'firefox'
'browserName': 'chrome'
},
......
......@@ -121,9 +121,9 @@ sub defaultValues {
'macros' => {},
'mailCharset' => 'utf-8',
'mailFrom' => 'noreply@example.com',
'mailPwdRstTimeout' => 0,
'mailPwdRstUrl' => 'http://auth.example.com/resetpwd',
'mailSessionKey' => 'mail',
'mailTimeout' => 0,
'managerDn' => '',
'managerPassword' => '',
'max2FDevices' => 10,
......
......@@ -16,10 +16,8 @@ BEGIN { use_ok('Lemonldap::NG::Common::Conf') }
my $h;
ok(
$h = new Lemonldap::NG::Common::Conf(
{
type => 'File',
ok( $h = new Lemonldap::NG::Common::Conf(
{ type => 'File',
dirName => "t/",
}
),
......@@ -39,25 +37,15 @@ my @test = (
{ cfgNum => 1, test => 'éà' }
);
for ( my $i = 0 ; $i < @test ; $i++ ) {
for ( my $i = 0; $i < @test; $i++ ) {
ok( $h->store( $test[$i] ) == 1, "Test $i is stored" )
or print STDERR "$Lemonldap::NG::Common::Conf::msg $!";
or print STDERR "$Lemonldap::NG::Common::Conf::msg $!";
$count++;
if ( -x '/usr/bin/file' ) {
eval {
open F, 'file t/lmConf-1.json |';
$_ = join( '', <F> );
close F;
ok( /(ascii|utf-?8)/si, "File is $1 encoded" )
or print STDERR "Result: $_\n";
$count++;
};
}
my $cfg;
ok( $cfg = $h->load(1), "Test $i can be read" )
or print STDERR $Lemonldap::NG::Common::Conf::msg;
or print STDERR $Lemonldap::NG::Common::Conf::msg;
ok( $cfg->{test} eq $test[$i]->{test}, "Test $i is restored" )
or print STDERR "Expect $cfg->{test} eq $test[$i]->{test}\n";
or print STDERR "Expect $cfg->{test} eq $test[$i]->{test}\n";
$count += 2;
}
......
......@@ -243,14 +243,6 @@ sub sfa {
$self->logger->debug(
"Removing sessions unless a $_ device is registered");
}
#else {
# (
# return $self->sendError(
# $req, "Bad or Missing " . $_ . "Check parameter", 400
# )
# );
#}
}
my $total = ( keys %$res );
......
......@@ -1585,6 +1585,10 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][
'mailPwdRstSubject' => {
'type' => 'text'
},
'mailPwdRstTimeout' => {
'default' => 0,
'type' => 'int'
},
'mailPwdRstUrl' => {
'default' => 'http://auth.example.com/resetpwd',
'type' => 'url'
......@@ -1596,10 +1600,6 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][
'default' => 'mail',
'type' => 'text'
},
'mailTimeout' => {
'default' => 0,
'type' => 'int'
},
'maintenance' => {
'default' => 0,
'type' => 'bool'
......
......@@ -1137,19 +1137,19 @@ sub attributes {
},
mailReplyTo =>
{ type => 'text', documentation => 'Reply-To address' },
mailTimeout => {
mailPwdRstTimeout => {
type => 'int',
default => 0,
documentation => 'Mail session timeout',
documentation => 'Mail password reset session timeout',
},
# Password reset
mailPwdRstBody =>
{ type => 'longtext', documentation => 'Custom mail body', },
{ type => 'longtext', documentation => 'Custom password reset mail body', },
mailPwdRstConfirmBody => {
type => 'longtext',
documentation => 'Custom confirm mail body',
documentation => 'Custom confirm password reset mail body',
},
mailPwdRstConfirmSubject => {
type => 'text',
......
......@@ -113,6 +113,7 @@ sub tree {
nodes_cond => [
{ title => 'adParams',
help => 'authad.html',
form => 'simpleInputContainer',
nodes => [ 'ADPwdMaxAge', 'ADPwdExpireWarning' ]
},
{ title => 'choiceParams',
......@@ -201,6 +202,7 @@ sub tree {
]
},
{ title => 'kerberosParams',
form => 'simpleInputContainer',
help => 'authkerberos.html',
nodes => [
'krbKeytab', 'krbByJs',
......@@ -506,11 +508,14 @@ sub tree {
'upgradeSession',
{ title => 'portalServers',
help => 'portalservers.html',
form => 'simpleInputContainer',
nodes => [
'wsdlServer', 'restSessionServer',
'restConfigServer', 'soapSessionServer',
'soapConfigServer', 'exportedAttr'
'wsdlServer',
'restSessionServer',
'restConfigServer',
'soapSessionServer',
'soapConfigServer',
'exportedAttr',
]
},
{ title => 'loginHistory',
......@@ -537,20 +542,6 @@ sub tree {
{ title => 'passwordManagement',
help => 'resetpassword.html',
nodes => [
{ title => 'SMTP',
nodes => [
'SMTPServer', 'SMTPPort',
'SMTPAuthUser', 'SMTPAuthPass',
'SMTPTLS', 'SMTPTLSOpts',
]
},
{ title => 'mailHeaders',
form => 'simpleInputContainer',
nodes => [
'mailFrom', 'mailReplyTo',
'mailCharset'
]
},
{ title => 'mailPwdRstContent',
form => 'simpleInputContainer',
nodes => [
......@@ -564,9 +555,8 @@ sub tree {
form => 'simpleInputContainer',
nodes => [
'mailPwdRstUrl',
'mailPwdRstTimeout',
'randomPasswordRegexp',
'mailTimeout',
'mailSessionKey'
]
}
]
......@@ -621,25 +611,32 @@ sub tree {
help => 'u2f.html',
form => 'simpleInputContainer',
nodes => [
'u2fActivation', 'u2fSelfRegistration',
'u2fAuthnLevel', 'u2fUserCanRemoveKey',
'u2fActivation',
'u2fSelfRegistration',
'u2fAuthnLevel',
'u2fUserCanRemoveKey',
]
},
{ title => 'external2f',
help => 'external2f.html',
form => 'simpleInputContainer',
nodes => [
'ext2fActivation', 'ext2FSendCommand',
'ext2FValidateCommand', 'ext2fAuthnLevel',
'ext2fActivation',
'ext2FSendCommand',
'ext2FValidateCommand',
'ext2fAuthnLevel',
'ext2fLogo',
]
},
{ title => 'rest2f',
help => 'rest2f.html',
nodes => [
'rest2fActivation', 'rest2fInitUrl',
'rest2fInitArgs', 'rest2fVerifyUrl',
'rest2fVerifyArgs', 'rest2fAuthnLevel',
'rest2fActivation',
'rest2fInitUrl',
'rest2fInitArgs',
'rest2fVerifyUrl',
'rest2fVerifyArgs',
'rest2fAuthnLevel',
'rest2fLogo',
]
},
......@@ -666,6 +663,26 @@ sub tree {
nodes => [
'customFunctions',
'multiValuesSeparator',
{ title => 'SMTP',
help => 'smtp.html',
nodes => [
'mailSessionKey',
'SMTPServer',
'SMTPPort',
'SMTPAuthUser',
'SMTPAuthPass',
'SMTPTLS',
'SMTPTLSOpts',
{ title => 'mailHeaders',
form => 'simpleInputContainer',
nodes => [
'mailFrom',
'mailReplyTo',
'mailCharset'
]
},
]
},
{ title => 'security',
help =>
'security.html#configure_security_settings',
......@@ -710,17 +727,20 @@ sub tree {
help => 'redirections.html#portal_redirections',
form => 'simpleInputContainer',
nodes => [
'jsRedirect', 'noAjaxHook',
'jsRedirect',
'noAjaxHook',
'skipRenewConfirmation',
]
},
'nginxCustomHandlers',
'logoutServices',
'logoutServices',
{ title => 'forms',
form => 'simpleInputContainer',
nodes => [
'infoFormMethod', 'confirmFormMethod',
'redirectFormMethod', 'activeTimer',
'infoFormMethod',
'confirmFormMethod',
'redirectFormMethod',
'activeTimer',
]
},
]
......@@ -932,7 +952,9 @@ sub tree {
{ title => 'casServiceMetadata',
nodes => [
'casAttr',
'casAccessControlPolicy', 'casStorage', 'casStorageOptions',
'casAccessControlPolicy',
'casStorage',
'casStorageOptions',
'casAttributes',
]
......
......@@ -20,11 +20,11 @@ filterFunctions =
# Little function to select good node
p = (s) ->
tmp = s.toLowerCase()
if tmp == 'ad'
tmp = 'ldap'
else if tmp == 'openidconnect'
if tmp == 'openidconnect'
tmp = 'oidc'
nToShow.push tmp + 'Params'
if tmp == 'ad'
nToShow.push 'ldapParams'
# Show all normal nodes
for n in node.nodes
......
......@@ -20,7 +20,22 @@
</ul>
</div>
</div>
<script type="text/menu">
[{
"title": "up",
"icon": "arrow-up"
},{
"title": "down",
"icon": "arrow-down"
},{
"title": "deleteEntry",
"icon": "minus-sign"
},{
"title": "newApp",
"icon": "plus-sign"
}]
</script>
<!-- Uncomment this snippet to enable sub categories
<script type="text/menu">
[{
"title": "up",
......@@ -39,3 +54,4 @@
"icon": "plus-sign"
}]
</script>
-->
\ No newline at end of file
// Generated by CoffeeScript 1.12.8
// Generated by CoffeeScript 1.12.7
(function() {
var filterFunctions;
......@@ -18,12 +18,13 @@
p = function(s) {
var tmp;
tmp = s.toLowerCase();
if (tmp === 'ad') {
tmp = 'ldap';
} else if (tmp === 'openidconnect') {
if (tmp === 'openidconnect') {
tmp = 'oidc';
}
return nToShow.push(tmp + 'Params');
nToShow.push(tmp + 'Params');
if (tmp === 'ad') {
return nToShow.push('ldapParams');
}
};
ref1 = node.nodes;
for (j = 0, len1 = ref1.length; j < len1; j++) {
......
(function(){var filterFunctions;filterFunctions={authParams:function(scope,$q,node){var i,len,n,ref,wait;wait=[];ref=node.nodes;for(i=0,len=ref.length;i<len;i++){n=ref[i];wait.push(scope.getKey(n))}return $q.all(wait).then(function(){var all,j,k,l,len1,len2,len3,len4,len5,len6,m,nToShow,nd,o,p,q,r,ref1,ref2,ref3,ref4,restart,s;all=false;nToShow=[];p=function(s){var tmp;tmp=s.toLowerCase();if(tmp==="ad"){tmp="ldap"}else if(tmp==="openidconnect"){tmp="oidc"}return nToShow.push(tmp+"Params")};ref1=node.nodes;for(j=0,len1=ref1.length;j<len1;j++){n=ref1[j];p(n.data)}ref2=node.nodes_cond;for(k=0,len2=ref2.length;k<len2;k++){n=ref2[k];restart=0;nd=n._nodes?n._nodes:n.nodes;if(node.nodes[0].data==="Choice"&&n.id==="choiceParams"){console.log("Choice is selected");if(nd[1].cnodes){restart++}else{nd=nd[1]._nodes?nd[1]._nodes:nd[1].nodes;for(l=0,len3=nd.length;l<len3;l++){m=nd[l];ref3=m.data;for(o=0,len4=ref3.length;o<len4;o++){s=ref3[o];if(typeof s==="string"){p(s)}}}}}else if(node.nodes[0].data==="Combination"&&n.id==="combinationParams"){console.log("Combination is selected");if(nd[1].cnodes){restart++}else{nd=nd[1]._nodes?nd[1]._nodes:nd[1].nodes;for(q=0,len5=nd.length;q<len5;q++){m=nd[q];p(m.data.type)}}}if(restart){scope.waiting=true;scope.download({$modelValue:nd[1]}).then(function(){return filterFunctions.authParams(scope,$q,node)});return}}ref4=node.nodes_cond;for(r=0,len6=ref4.length;r<len6;r++){n=ref4[r];if(!all&&nToShow.indexOf(n.id)===-1){n.show=false}else{n.show=true}}})}};window.filterFunctions=filterFunctions}).call(this);
(function(){var filterFunctions;filterFunctions={authParams:function(scope,$q,node){var i,len,n,ref,wait;wait=[];ref=node.nodes;for(i=0,len=ref.length;i<len;i++){n=ref[i];wait.push(scope.getKey(n))}return $q.all(wait).then(function(){var all,j,k,l,len1,len2,len3,len4,len5,len6,m,nToShow,nd,o,p,q,r,ref1,ref2,ref3,ref4,restart,s;all=false;nToShow=[];p=function(s){var tmp;tmp=s.toLowerCase();if(tmp==="openidconnect"){tmp="oidc"}nToShow.push(tmp+"Params");if(tmp==="ad"){return nToShow.push("ldapParams")}};ref1=node.nodes;for(j=0,len1=ref1.length;j<len1;j++){n=ref1[j];p(n.data)}ref2=node.nodes_cond;for(k=0,len2=ref2.length;k<len2;k++){n=ref2[k];restart=0;nd=n._nodes?n._nodes:n.nodes;if(node.nodes[0].data==="Choice"&&n.id==="choiceParams"){console.log("Choice is selected");if(nd[1].cnodes){restart++}else{nd=nd[1]._nodes?nd[1]._nodes:nd[1].nodes;for(l=0,len3=nd.length;l<len3;l++){m=nd[l];ref3=m.data;for(o=0,len4=ref3.length;o<len4;o++){s=ref3[o];if(typeof s==="string"){p(s)}}}}}else if(node.nodes[0].data==="Combination"&&n.id==="combinationParams"){console.log("Combination is selected");if(nd[1].cnodes){restart++}else{nd=nd[1]._nodes?nd[1]._nodes:nd[1].nodes;for(q=0,len5=nd.length;q<len5;q++){m=nd[q];p(m.data.type)}}}if(restart){scope.waiting=true;scope.download({$modelValue:nd[1]}).then(function(){return filterFunctions.authParams(scope,$q,node)});return}}ref4=node.nodes_cond;for(r=0,len6=ref4.length;r<len6;r++){n=ref4[r];if(!all&&nToShow.indexOf(n.id)===-1){n.show=false}else{n.show=true}}})}};window.filterFunctions=filterFunctions}).call(this);
......@@ -392,8 +392,8 @@
"mailReplyTo":"عنوان الجواب",
"mailSessionKey":"مفتاح الجلسة الذي يحتوي على عنوان البريد الإلكتروني",
"mailPwdRstSubject":"نجاح عنوان البريد",
"mailTimeout":"عدم تطابق كلمت المرور",
"mailPwdRstUrl":"Password reset page URL",
"mailPwdRstTimeout":"عدم تطابق كلمت المرور",
"mailPwdRstUrl":"Page URL",
"maintenance":"وضع الصيانة",
"malformedValue":"قيمة سيئة التصميم",
"managerDn":"حساب",
......
......@@ -38,7 +38,7 @@
"addU2FKey":"U2F - Schlüssel hinzufügen",
"addTOTPKey":"TOTP-Schlüssel hinzufügen",
"addVhost":"Virtuellen Host hinzufügen",
"adParams":"Active Directory Einstellungen",
"adParams":"Active Directory einstellungen",
"ADPwdExpireWarning":"Passwort - Ablauf Warnung",
"ADPwdMaxAge":"maximales Alter",
"advancedParams":"Weitere Einstellungen",
......@@ -392,8 +392,8 @@
"mailReplyTo":"Reply address",
"mailSessionKey":"Session key containing mail address",
"mailPwdRstSubject":"Success mail subject",
"mailTimeout":"Validity time of a password reset request",
"mailPwdRstUrl":"Password reset page URL",
"mailPwdRstTimeout":"Validity time of a password reset request",
"mailPwdRstUrl":"Page URL",
"maintenance":"Maintenance mode",
"malformedValue":"Malformed value",
"managerDn":"Account",
......
......@@ -38,7 +38,7 @@
"addU2FKey":"Add U2F key",
"addTOTPKey":"Add TOTP key",
"addVhost":"Add virtualhost",
"adParams":"Active Directory Parameters",
"adParams":"Active Directory parameters",
"ADPwdExpireWarning":"Password expire warning",
"ADPwdMaxAge":"Password max age",
"advancedParams":"Advanced parameters",
......@@ -392,8 +392,8 @@
"mailReplyTo":"Reply address",
"mailSessionKey":"Session key containing mail address",
"mailPwdRstSubject":"Success mail subject",
"mailTimeout":"Validity time of a password reset request",
"mailPwdRstUrl":"Password reset page URL",
"mailPwdRstTimeout":"Validity time of a password reset request",
"mailPwdRstUrl":"Reset page URL",
"maintenance":"Maintenance mode",
"malformedValue":"Malformed value",
"managerDn":"Account",
......@@ -635,7 +635,7 @@
"registerDB":"Register module",
"registerDoneSubject":"Subject for done mail",
"registerTimeout":"Validity time of a register request",
"registerUrl":"Page URL",
"registerUrl":"Register page URL",
"reloadParams":"Configuration reload",