diff -pruN 2.0.1+ds-2/changelog 2.0.2+ds-1/changelog
--- 2.0.1+ds-2/changelog	2018-12-21 14:12:36.000000000 +0000
+++ 2.0.2+ds-1/changelog	2019-02-12 11:10:53.000000000 +0000
@@ -1,3 +1,47 @@
+lemonldap-ng (2.0.2) bionic; urgency=medium
+
+  * Bugs:
+    * #1574: "Manager is unprotected" message when whatToTrace value is not the default
+    * #1603: Warnings with confirmation required don't work
+    * #1604: Manager unit tests randomly failed
+    * #1607: Safe errors when saving configuration with lmConfigEditor
+    * #1610: Unable to save empty value for cookie expiration time in Manager
+    * #1613: handler https redirection does not work
+    * #1614: Accents not well displayed in Portal
+    * #1618: Version in server signature is wrong
+    * #1623: ADPwdExpireWarning and ADPwdMaxAge parameters are missing in Manager
+    * #1627: Display issue with GrantSession plugin
+    * #1628: GrantSession plugin discloses its message to unlogged users
+    * #1630: SSO cookie is sent to protected applications with Nginx-based ReverseProxy
+    * #1636: SSL and Kerberos Auth Modules don t work with choice
+    * #1639: User must change password on AD is broken
+    * #1642: Unable to select skin from URL
+    * #1643: Portal CSS is sent with empty background when portalSkinBackground is not defined
+    * #1644: error while reseting password with ppolicy enabled
+    * #1648: ldapAuthnLevel and dbiAuthnLevel are ignored
+    * #1649: Error about Handler when saving configuration in lmConfigEditor
+
+  * New features:
+    * #1569: GPG authentication module
+    * #1629: Email-based two-factor module
+    * #1631: Allow to display "env" as template variables
+
+  * Improvements:
+    * #1486: Portal starts even if init() has failed
+    * #1600: Improve e2e tests
+    * #1601: Create LDAP option to decode DN value
+    * #1608: Date and comment not updated with lemonldap-ng-cli
+    * #1609: add autocomplete="off" to 2F form fields
+    * #1611: Improve apache configuration
+    * #1622: Display delete button in 2FAManager only if action is allowed
+    * #1625: "Use rule" option in issuer modules seem not to be used anymore
+    * #1633: Better random generation
+    * #1634: Improve management of template parameters
+    * #1635: SAML attribut default value is not set
+    * #1637: Add display options for SAML IDP like OIDC and CAS providers
+
+ -- Clément <clem.oudot@gmail.com>  Tue, 12 Feb 2019 08:57:14 +0100
+
 lemonldap-ng (2.0.1) artful; urgency=medium
 
   * Bugs:
diff -pruN 2.0.1+ds-2/COPYING 2.0.2+ds-1/COPYING
--- 2.0.1+ds-2/COPYING	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/COPYING	2019-02-04 09:52:16.000000000 +0000
@@ -109,7 +109,7 @@ License: CC-BY-NC-ND-3.0 or GFDL-1.3
 Comment: downloaded from https://commons.wikimedia.org
 
 Files: lemonldap-ng-manager/site/htdocs/static/bwr/angular*
-Copyright: 2010-2017, Google, Inc. https://angularjs.org
+Copyright: 2010-2018, Google, Inc. https://angularjs.org
 License: Expat
 
 Files: lemonldap-ng-manager/site/htdocs/static/bwr/angular-bootstrap/*
@@ -121,7 +121,7 @@ Copyright: 2014, unspecified
 License: Expat
 
 Files: lemonldap-ng-*/site/htdocs/static/bwr/bootstrap/*
-Copyright: 2011-2016, Twitter Inc.
+Copyright: 2011-2018, Twitter Inc.
 License: Expat
 
 Files: lemonldap-ng-portal/site/htdocs/static/bwr/crypto-js/*
@@ -130,7 +130,7 @@ Copyright: 2009-2013 Jeff Mott
 License: Expat
 
 Files: lemonldap-ng-manager/site/htdocs/static/bwr/es5-shim/*
-Copyright: 2009-2015, Kristopher Michael Kowal and contributors
+Copyright: 2009-2015, contributors
 License: Expat
 
 Files: lemonldap-ng-manager/site/htdocs/static/bwr/file-saver.js/*
diff -pruN 2.0.1+ds-2/debian/changelog 2.0.2+ds-1/debian/changelog
--- 2.0.1+ds-2/debian/changelog	2019-01-19 11:32:57.000000000 +0000
+++ 2.0.2+ds-1/debian/changelog	2019-02-12 20:30:35.000000000 +0000
@@ -1,3 +1,12 @@
+lemonldap-ng (2.0.2+ds-1) unstable; urgency=medium
+
+  * New upstream version 2.0.2+ds
+  * Refresh patches
+  * Update copyrights using upstream files
+  * Add libcrypt-urandom-perl and libipc-run-perl in dependencies
+
+ -- Xavier Guimard <yadd@debian.org>  Tue, 12 Feb 2019 21:30:35 +0100
+
 lemonldap-ng (2.0.1+ds-2) unstable; urgency=medium
 
   * Remove useless test (Closes: #919730)
diff -pruN 2.0.1+ds-2/debian/control 2.0.2+ds-1/debian/control
--- 2.0.1+ds-2/debian/control	2019-01-19 09:13:04.000000000 +0000
+++ 2.0.2+ds-1/debian/control	2019-02-12 20:22:09.000000000 +0000
@@ -15,6 +15,7 @@ Build-Depends-Indep: libapache-session-p
                      libconvert-pem-perl,
                      libcrypt-openssl-rsa-perl,
                      libcrypt-openssl-x509-perl,
+                     libcrypt-urandom-perl,
                      libcrypt-rijndael-perl,
                      libcrypt-u2f-server-perl,
                      libdbd-sqlite3-perl,
@@ -27,6 +28,7 @@ Build-Depends-Indep: libapache-session-p
                      libhtml-template-perl,
                      libimage-magick-perl,
                      libio-string-perl,
+                     libipc-run-perl,
                      libjson-perl,
                      liblasso-perl,
                      libmime-tools-perl,
@@ -200,6 +202,7 @@ Depends: ${misc:Depends},
          libconfig-inifiles-perl,
          libcrypt-openssl-rsa-perl,
          libcrypt-openssl-x509-perl,
+         libcrypt-urandom-perl,
          libcrypt-rijndael-perl,
          libhtml-template-perl,
          libjson-perl,
@@ -282,6 +285,7 @@ Depends: ${misc:Depends},
 Recommends: libcrypt-openssl-bignum-perl,
             libconvert-base32-perl,
             libemail-sender-perl (>=1.300027) | libemail-sender-transport-smtps-perl,
+            libipc-run-perl,
             libgd-securityimage-perl,
             libmime-tools-perl,
             libnet-ldap-perl,
diff -pruN 2.0.1+ds-2/debian/copyright 2.0.2+ds-1/debian/copyright
--- 2.0.1+ds-2/debian/copyright	2018-12-06 19:30:00.000000000 +0000
+++ 2.0.2+ds-1/debian/copyright	2019-02-12 20:22:09.000000000 +0000
@@ -114,6 +114,8 @@ Copyright: Public Domain
 License: Simple-Geo
 Comment: downloaded from
  https://commons.wikimedia.org/wiki/File:LinkedIn_logo_initials.png
+ .
+ Author is unknown and license may be W3C or public-domain
 
 Files: lemonldap-ng-portal/site/htdocs/static/bootstrap/u2f.png
 Copyright: Bautsch <https://commons.wikimedia.org/wiki/User:Bautsch>
diff -pruN 2.0.1+ds-2/debian/patches/Avoid-developer-tests.patch 2.0.2+ds-1/debian/patches/Avoid-developer-tests.patch
--- 2.0.1+ds-2/debian/patches/Avoid-developer-tests.patch	2018-12-02 13:36:54.000000000 +0000
+++ 2.0.2+ds-1/debian/patches/Avoid-developer-tests.patch	2019-02-12 20:22:09.000000000 +0000
@@ -11,7 +11,7 @@ Last-Update: 2016-12-26
 +use Test::More skip_all => 'Heavy developer tests';
  use JSON;
  use MIME::Base64;
- 
+ use Data::Dumper;
 --- a/lemonldap-ng-handler/t/61-Lemonldap-NG-Handler-PSGI-Server.t
 +++ b/lemonldap-ng-handler/t/61-Lemonldap-NG-Handler-PSGI-Server.t
 @@ -1,4 +1,4 @@
diff -pruN 2.0.1+ds-2/debian/patches/javascript-path.patch 2.0.2+ds-1/debian/patches/javascript-path.patch
--- 2.0.1+ds-2/debian/patches/javascript-path.patch	2018-12-02 13:36:54.000000000 +0000
+++ 2.0.2+ds-1/debian/patches/javascript-path.patch	2019-02-12 20:22:09.000000000 +0000
@@ -5,7 +5,7 @@ Last-Update: 2018-10-30
 
 --- a/_example/etc/manager-nginx.conf
 +++ b/_example/etc/manager-nginx.conf
-@@ -50,8 +50,8 @@
+@@ -59,8 +59,8 @@
  
    # DEBIAN
    # If install was made with USEDEBIANLIBS (official releases), uncomment this
@@ -19,7 +19,7 @@ Last-Update: 2018-10-30
  }
 --- a/_example/etc/portal-nginx.conf
 +++ b/_example/etc/portal-nginx.conf
-@@ -69,7 +69,7 @@
+@@ -78,7 +78,7 @@
  
    # DEBIAN
    # If install was made with USEDEBIANLIBS (official releases), uncomment this
diff -pruN 2.0.1+ds-2/debian/patches/remove-useless-test.patch 2.0.2+ds-1/debian/patches/remove-useless-test.patch
--- 2.0.1+ds-2/debian/patches/remove-useless-test.patch	2019-01-19 09:02:18.000000000 +0000
+++ 2.0.2+ds-1/debian/patches/remove-useless-test.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,27 +0,0 @@
-Description: remove useless test
- `file` output has changed, tis test fails now
-Author: Xavier Guimard <yadd@debian.org>
-Origin: upstream, https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/commit/774137e5fd85d3c1cdeca842e28e4687f14dc670
-Bug-Debian: https://bugs.debian.org/919730
-Forwarded: not-needed
-Last-Update: 2019-01-19
-
---- a/lemonldap-ng-common/t/02-Common-Conf-File.t
-+++ b/lemonldap-ng-common/t/02-Common-Conf-File.t
-@@ -43,16 +43,6 @@
-     ok( $h->store( $test[$i] ) == 1, "Test $i is stored" )
-       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;
diff -pruN 2.0.1+ds-2/debian/patches/series 2.0.2+ds-1/debian/patches/series
--- 2.0.1+ds-2/debian/patches/series	2019-01-19 08:59:52.000000000 +0000
+++ 2.0.2+ds-1/debian/patches/series	2019-02-12 20:22:09.000000000 +0000
@@ -1,3 +1,2 @@
 javascript-path.patch
 Avoid-developer-tests.patch
-remove-useless-test.patch
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/alfresco.html 2.0.2+ds-1/doc/pages/documentation/current/applications/alfresco.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/alfresco.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/alfresco.html	2019-02-12 16:28:08.000000000 +0000
@@ -210,9 +210,9 @@ Set the default rule to what you need.
 Other rules:
 </p>
 <ul>
-<li class="level1"><div class="li"> Unprotect access to some resources: <code>^/share/res ⇒ unprotect</code></div>
+<li class="level1"><div class="li"> Unprotect access to some resources: <code>^/share/res =&gt; unprotect</code></div>
 </li>
-<li class="level1"><div class="li"> Catch logout: <code>^/share/page/dologout ⇒ logout_app_sso</code></div>
+<li class="level1"><div class="li"> Catch logout: <code>^/share/page/dologout =&gt; logout_app_sso</code></div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/aws.html 2.0.2+ds-1/doc/pages/documentation/current/applications/aws.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/aws.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/aws.html	2019-02-12 16:28:08.000000000 +0000
@@ -60,13 +60,13 @@
 </li>
 <li class="level1"><div class="li"> Go to <a href="https://your.portal.com/saml/metadata" class="urlextern" title="https://your.portal.com/saml/metadata"  rel="nofollow">https://your.portal.com/saml/metadata</a> and save the resulting file locally.</div>
 </li>
-<li class="level1"><div class="li"> In each AWS account, go to IAM → Identity providers → Create Provider.</div>
+<li class="level1"><div class="li"> In each AWS account, go to IAM -&gt; Identity providers -&gt; Create Provider.</div>
 </li>
 <li class="level1"><div class="li"> Select <code><abbr title="Security Assertion Markup Language">SAML</abbr></code> as the provider type</div>
 </li>
 <li class="level1"><div class="li"> Choose a name (best if kept consistent between accounts), and then choose the metadata file you saved above.</div>
 </li>
-<li class="level1"><div class="li"> Looking again at the links on the left side of the page, go to Roles → Create role</div>
+<li class="level1"><div class="li"> Looking again at the links on the left side of the page, go to Roles -&gt; Create role</div>
 </li>
 <li class="level1"><div class="li"> Choose <code><abbr title="Security Assertion Markup Language">SAML</abbr> / Saml 2.0 federation</code></div>
 </li>
@@ -92,15 +92,15 @@ similar, using whatever attribute makes
   <span class="re0">ou</span>:<span class="re1"> root</span></pre>
 
 </div><ul>
-<li class="level1"><div class="li"> Assuming you use the web interface to manage lemonldap, go to General Parameters → Authentication parameters → LDAP parameters → Exported variables. Here set the key to the LDAP attribute and the value to something sensible. I keep them the same to make it easy.</div>
+<li class="level1"><div class="li"> Assuming you use the web interface to manage lemonldap, go to General Parameters -&gt; Authentication parameters -&gt; LDAP parameters -&gt; Exported variables. Here set the key to the LDAP attribute and the value to something sensible. I keep them the same to make it easy.</div>
 </li>
-<li class="level1"><div class="li"> Now go to *Variables → Macros*.  Here set up variables which will be computed based on the attributes you exported above.  You will need to emit strings in this format <code>arn:aws:iam::account-number:role/role-name1,arn:aws:iam::account-number:saml-provider/provider-name</code>. The parts you need to change are <code>account-number</code>, <code>role-name1</code> and <code>provier-name</code>. The last two will be the provider name and role names you just set up in AWS.</div>
+<li class="level1"><div class="li"> Now go to *Variables -&gt; Macros*.  Here set up variables which will be computed based on the attributes you exported above.  You will need to emit strings in this format <code>arn:aws:iam::account-number:role/role-name1,arn:aws:iam::account-number:saml-provider/provider-name</code>. The parts you need to change are <code>account-number</code>, <code>role-name1</code> and <code>provier-name</code>. The last two will be the provider name and role names you just set up in AWS.</div>
 </li>
-<li class="level1"><div class="li"> Perl works in here, so something like this is valid:  <code>aws_eu_role</code> →  <code>$ou =~ sysadmin ? “arn:aws…” : “arn:…”</code></div>
+<li class="level1"><div class="li"> Perl works in here, so something like this is valid:  <code>aws_eu_role</code> -&gt;  <code>$ou =~ sysadmin ? “arn:aws...” : “arn:...”</code></div>
 </li>
-<li class="level1"><div class="li"> If it easier, split multiple roles into different macros.  Then tie all the variables you define together into one string concatenating them  with whatever is in General Parameters → Advanced Parameters → Separator. Actually click into this field and move around with the arrow keys to see if there is a space, since spaces can be part of the separator.</div>
+<li class="level1"><div class="li"> If it easier, split multiple roles into different macros.  Then tie all the variables you define together into one string concatenating them  with whatever is in General Parameters -&gt; Advanced Parameters -&gt; Separator. Actually click into this field and move around with the arrow keys to see if there is a space, since spaces can be part of the separator.</div>
 </li>
-<li class="level1"><div class="li"> Remember macros are defined alphanumerically, so you want one right at the end, like <code>z_aws_roles</code> → <code>join(“; ”, $role_name1, $role_name2, …)</code></div>
+<li class="level1"><div class="li"> Remember macros are defined alphanumerically, so you want one right at the end, like <code>z_aws_roles</code> -&gt; <code>join(“; ”, $role_name1, $role_name2, ...)</code></div>
 </li>
 <li class="level1"><div class="li"> On the left again, click <code><abbr title="Security Assertion Markup Language">SAML</abbr> service providers</code>, then <code>Add <abbr title="Security Assertion Markup Language">SAML</abbr> SP</code>.</div>
 </li>
@@ -108,15 +108,15 @@ similar, using whatever attribute makes
 </li>
 <li class="level1"><div class="li"> Click <code>Exported attributes</code> on the left, then <code>Add attribute</code> twice to add two attributes. The first field is the name of a variable set in the user&#039;s session:</div>
 <ul>
-<li class="level2"><div class="li"> <code>_whatToTrace</code> → <code><a href="https://aws.amazon.com/SAML/Attributes/RoleSessionName" class="urlextern" title="https://aws.amazon.com/SAML/Attributes/RoleSessionName"  rel="nofollow">https://aws.amazon.com/SAML/Attributes/RoleSessionName</a></code> (leave the rest)</div>
+<li class="level2"><div class="li"> <code>_whatToTrace</code> -&gt; <code><a href="https://aws.amazon.com/SAML/Attributes/RoleSessionName" class="urlextern" title="https://aws.amazon.com/SAML/Attributes/RoleSessionName"  rel="nofollow">https://aws.amazon.com/SAML/Attributes/RoleSessionName</a></code> (leave the rest)</div>
 </li>
-<li class="level2"><div class="li"> <code>z_aws_roles</code> (the macro name you defined above) → <code><a href="https://aws.amazon.com/SAML/Attributes/Role" class="urlextern" title="https://aws.amazon.com/SAML/Attributes/Role"  rel="nofollow">https://aws.amazon.com/SAML/Attributes/Role</a></code> (leave the rest)</div>
+<li class="level2"><div class="li"> <code>z_aws_roles</code> (the macro name you defined above) -&gt; <code><a href="https://aws.amazon.com/SAML/Attributes/Role" class="urlextern" title="https://aws.amazon.com/SAML/Attributes/Role"  rel="nofollow">https://aws.amazon.com/SAML/Attributes/Role</a></code> (leave the rest)</div>
 </li>
 </ul>
 </li>
-<li class="level1"><div class="li"> On the left, select Options → Security →  Enable use of IDP initiated <abbr title="Uniform Resource Locator">URL</abbr> → On</div>
+<li class="level1"><div class="li"> On the left, select Options -&gt; Security -&gt;  Enable use of IDP initiated <abbr title="Uniform Resource Locator">URL</abbr> -&gt; On</div>
 </li>
-<li class="level1"><div class="li"> Select General Parameters → Portal → Menu → Categories and applications</div>
+<li class="level1"><div class="li"> Select General Parameters -&gt; Portal -&gt; Menu -&gt; Categories and applications</div>
 </li>
 <li class="level1"><div class="li"> Select a category or create a new one if you need to.  Then click <code>New application</code>.  </div>
 </li>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/gitlab.html 2.0.2+ds-1/doc/pages/documentation/current/applications/gitlab.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/gitlab.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/gitlab.html	2019-02-12 16:28:08.000000000 +0000
@@ -154,11 +154,11 @@ You can get Gitlab <abbr title="Security
 Register them in <abbr title="LemonLDAP::NG">LL::NG</abbr> and send these <abbr title="Security Assertion Markup Language">SAML</abbr> attributes:
 </p>
 <ul>
-<li class="level1"><div class="li"> mail ⇒ email</div>
+<li class="level1"><div class="li"> mail =&gt; email</div>
 </li>
-<li class="level1"><div class="li"> uid ⇒ uid</div>
+<li class="level1"><div class="li"> uid =&gt; uid</div>
 </li>
-<li class="level1"><div class="li"> cn ⇒ name</div>
+<li class="level1"><div class="li"> cn =&gt; name</div>
 </li>
 </ul>
 <div class="noteimportant">The value from <abbr title="LemonLDAP::NG">LL::NG</abbr> mail session attribute must be the email of the user in Gitlab database, in order to associate accounts.
@@ -182,7 +182,7 @@ You can pass groups to Gitlab. For this,
 And in <abbr title="LemonLDAP::NG">LL::NG</abbr>, export the groups attribute:
 </p>
 <ul>
-<li class="level1"><div class="li"> groups ⇒ groups</div>
+<li class="level1"><div class="li"> groups =&gt; groups</div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/glpi.html 2.0.2+ds-1/doc/pages/documentation/current/applications/glpi.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/glpi.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/glpi.html	2019-02-12 16:28:08.000000000 +0000
@@ -57,7 +57,7 @@
 <div class="level2">
 
 <p>
-<a href="http://www.glpi-project.org" class="urlextern" title="http://www.glpi-project.org"  rel="nofollow">GLPI</a> is the Information Resource-Manager with an additional Administration- Interface. You can use it to build up a database with an inventory for your company (computer, software, printers…). It has enhanced functions to make the daily life for the administrators easier, like a job-tracking-system with mail-notification and methods to build a database with basic information about your network-topology.
+<a href="http://www.glpi-project.org" class="urlextern" title="http://www.glpi-project.org"  rel="nofollow">GLPI</a> is the Information Resource-Manager with an additional Administration- Interface. You can use it to build up a database with an inventory for your company (computer, software, printers...). It has enhanced functions to make the daily life for the administrators easier, like a job-tracking-system with mail-notification and methods to build a database with basic information about your network-topology.
 </p>
 
 </div>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/grr.html 2.0.2+ds-1/doc/pages/documentation/current/applications/grr.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/grr.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/grr.html	2019-02-12 16:28:08.000000000 +0000
@@ -115,9 +115,9 @@ GRR will check the username in REMOTE_US
 Access rules:
 </p>
 <ul>
-<li class="level1"><div class="li"> ^/index.php ⇒ accept</div>
+<li class="level1"><div class="li"> ^/index.php =&gt; accept</div>
 </li>
-<li class="level1"><div class="li"> default ⇒ unprotect</div>
+<li class="level1"><div class="li"> default =&gt; unprotect</div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/img/icons.png 2.0.2+ds-1/doc/pages/documentation/current/applications/img/icons.png
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/img/icons.png	2018-12-21 14:20:06.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/img/icons.png	2019-02-12 16:27:00.000000000 +0000
@@ -23,10 +23,10 @@
 <link rel="alternate" type="application/rss+xml" title="Current namespace" href="/feed.php?mode=list&amp;ns=documentation:2.0:applications:img"/>
 <link rel="alternate" type="text/html" title="Plain HTML" href="/_export/xhtml/documentation/2.0/applications/img/icons.png"/>
 <link rel="alternate" type="text/plain" title="Wiki Markup" href="/_export/raw/documentation/2.0/applications/img/icons.png"/>
-<link rel="stylesheet" type="text/css" href="/lib/exe/css.php?t=bootstrap3&amp;tseed=68165aeb4a485b8d6b99b5c80ffc4981"/>
+<link rel="stylesheet" type="text/css" href="/lib/exe/css.php?t=bootstrap3&amp;tseed=666dbe073d7d2522373106d8d2d68438"/>
 <script type="text/javascript">/*<![CDATA[*/var NS='documentation:2.0:applications:img';var JSINFO = {"id":"documentation:2.0:applications:img:icons.png","namespace":"documentation:2.0:applications:img"};
 /*!]]>*/</script>
-<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=68165aeb4a485b8d6b99b5c80ffc4981&amp;template=bootstrap3"></script>
+<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=666dbe073d7d2522373106d8d2d68438&amp;template=bootstrap3"></script>
   <script type="text/javascript" src="/lib/tpl/bootstrap3/assets/bootstrap/js/bootstrap.min.js"></script>
   <style type="text/css">
     body { padding-top: 20px; }
@@ -90,7 +90,7 @@
         <form action="/start" accept-charset="utf-8" class="search" id="dw__search" method="get" role="search"><div class="no"><input type="hidden" name="do" value="search" /><input type="text" id="qsearch__in" accesskey="f" name="id" class="edit" title="[F]" /><input type="submit" value="Search" class="button" title="Search" /><div id="qsearch__out" class="ajax_qsearch JSpopup"></div></div></form>
         
         <ul class="nav navbar-nav">
-                    <li><a href="/documentation/2.0/applications/img/icons.png?do=login&amp;sectok=a56ff368e970c958de63b823f65c2cf0"  class="action login" rel="nofollow" title="Login"><i class="glyphicon glyphicon-log-in"></i> Login</a></li>        </ul>
+                    <li><a href="/documentation/2.0/applications/img/icons.png?do=login&amp;sectok=0f10c8fca57376e7bc8695f4a434476e"  class="action login" rel="nofollow" title="Login"><i class="glyphicon glyphicon-log-in"></i> Login</a></li>        </ul>
 
       </div>
 
@@ -157,7 +157,28 @@ You&#039;ve followed a link to a topic t
 <div class="text-center">
 </p>
 
-<h3 class="sectionedit1" id="hosted_by">Hosted by</h3>
+<h3 class="sectionedit1" id="social_networks">Social networks</h3>
+<div class="level3">
+
+<p>
+
+<p><a href="https://twitter.com/lemonldapng/" class="btn btn-large btn-info"><i class="glyphicon glyphicon-retweet"></i> Twitter</a></p>
+<p><a href="https://www.facebook.com/lemonldapng/" class="btn btn-large btn-primary"><i class="glyphicon glyphicon-thumbs-up"></i> Facebook</a></p>
+
+</p>
+
+<p>
+</div>
+</p>
+<hr />
+
+<p>
+<div class="text-center">
+</p>
+
+</div>
+<!-- EDIT1 SECTION "Social networks" [41-433] -->
+<h3 class="sectionedit2" id="hosted_by">Hosted by</h3>
 <div class="level3">
 
 <p>
@@ -171,8 +192,8 @@ You&#039;ve followed a link to a topic t
 </p>
 
 </div>
-<!-- EDIT1 SECTION "Hosted by" [40-174] -->
-<h3 class="sectionedit2" id="certifications">Certifications</h3>
+<!-- EDIT2 SECTION "Hosted by" [434-568] -->
+<h3 class="sectionedit3" id="certifications">Certifications</h3>
 <div class="level3">
 
 <p>
@@ -192,8 +213,8 @@ You&#039;ve followed a link to a topic t
 </p>
 
 </div>
-<!-- EDIT2 SECTION "Certifications" [175-534] -->
-<h3 class="sectionedit3" id="awards">Awards</h3>
+<!-- EDIT3 SECTION "Certifications" [569-928] -->
+<h3 class="sectionedit4" id="awards">Awards</h3>
 <div class="level3">
 
 <p>
@@ -222,7 +243,7 @@ You&#039;ve followed a link to a topic t
 
 
 </div>
-<!-- EDIT3 SECTION "Awards" [535-] -->          </div>
+<!-- EDIT4 SECTION "Awards" [929-] -->          </div>
   </div>
 </aside>
 
@@ -241,7 +262,7 @@ You&#039;ve followed a link to a topic t
       
     </div><!-- /site -->
 
-    <div class="no"><img src="/lib/exe/indexer.php?id=documentation%3A2.0%3Aapplications%3Aimg%3Aicons.png&amp;1545402007" width="2" height="1" alt="" /></div>
+    <div class="no"><img src="/lib/exe/indexer.php?id=documentation%3A2.0%3Aapplications%3Aimg%3Aicons.png&amp;1549988821" width="2" height="1" alt="" /></div>
     <div id="screen__mode" class="no">
       <span class="visible-xs"></span>
       <span class="visible-sm"></span>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/img/loader.gif 2.0.2+ds-1/doc/pages/documentation/current/applications/img/loader.gif
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/img/loader.gif	2018-12-21 14:20:06.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/img/loader.gif	2019-02-12 16:27:00.000000000 +0000
@@ -23,10 +23,10 @@
 <link rel="alternate" type="application/rss+xml" title="Current namespace" href="/feed.php?mode=list&amp;ns=documentation:2.0:applications:img"/>
 <link rel="alternate" type="text/html" title="Plain HTML" href="/_export/xhtml/documentation/2.0/applications/img/loader.gif"/>
 <link rel="alternate" type="text/plain" title="Wiki Markup" href="/_export/raw/documentation/2.0/applications/img/loader.gif"/>
-<link rel="stylesheet" type="text/css" href="/lib/exe/css.php?t=bootstrap3&amp;tseed=68165aeb4a485b8d6b99b5c80ffc4981"/>
+<link rel="stylesheet" type="text/css" href="/lib/exe/css.php?t=bootstrap3&amp;tseed=666dbe073d7d2522373106d8d2d68438"/>
 <script type="text/javascript">/*<![CDATA[*/var NS='documentation:2.0:applications:img';var JSINFO = {"id":"documentation:2.0:applications:img:loader.gif","namespace":"documentation:2.0:applications:img"};
 /*!]]>*/</script>
-<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=68165aeb4a485b8d6b99b5c80ffc4981&amp;template=bootstrap3"></script>
+<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=666dbe073d7d2522373106d8d2d68438&amp;template=bootstrap3"></script>
   <script type="text/javascript" src="/lib/tpl/bootstrap3/assets/bootstrap/js/bootstrap.min.js"></script>
   <style type="text/css">
     body { padding-top: 20px; }
@@ -90,7 +90,7 @@
         <form action="/start" accept-charset="utf-8" class="search" id="dw__search" method="get" role="search"><div class="no"><input type="hidden" name="do" value="search" /><input type="text" id="qsearch__in" accesskey="f" name="id" class="edit" title="[F]" /><input type="submit" value="Search" class="button" title="Search" /><div id="qsearch__out" class="ajax_qsearch JSpopup"></div></div></form>
         
         <ul class="nav navbar-nav">
-                    <li><a href="/documentation/2.0/applications/img/loader.gif?do=login&amp;sectok=a56ff368e970c958de63b823f65c2cf0"  class="action login" rel="nofollow" title="Login"><i class="glyphicon glyphicon-log-in"></i> Login</a></li>        </ul>
+                    <li><a href="/documentation/2.0/applications/img/loader.gif?do=login&amp;sectok=0f10c8fca57376e7bc8695f4a434476e"  class="action login" rel="nofollow" title="Login"><i class="glyphicon glyphicon-log-in"></i> Login</a></li>        </ul>
 
       </div>
 
@@ -157,7 +157,28 @@ You&#039;ve followed a link to a topic t
 <div class="text-center">
 </p>
 
-<h3 class="sectionedit1" id="hosted_by">Hosted by</h3>
+<h3 class="sectionedit1" id="social_networks">Social networks</h3>
+<div class="level3">
+
+<p>
+
+<p><a href="https://twitter.com/lemonldapng/" class="btn btn-large btn-info"><i class="glyphicon glyphicon-retweet"></i> Twitter</a></p>
+<p><a href="https://www.facebook.com/lemonldapng/" class="btn btn-large btn-primary"><i class="glyphicon glyphicon-thumbs-up"></i> Facebook</a></p>
+
+</p>
+
+<p>
+</div>
+</p>
+<hr />
+
+<p>
+<div class="text-center">
+</p>
+
+</div>
+<!-- EDIT1 SECTION "Social networks" [41-433] -->
+<h3 class="sectionedit2" id="hosted_by">Hosted by</h3>
 <div class="level3">
 
 <p>
@@ -171,8 +192,8 @@ You&#039;ve followed a link to a topic t
 </p>
 
 </div>
-<!-- EDIT1 SECTION "Hosted by" [40-174] -->
-<h3 class="sectionedit2" id="certifications">Certifications</h3>
+<!-- EDIT2 SECTION "Hosted by" [434-568] -->
+<h3 class="sectionedit3" id="certifications">Certifications</h3>
 <div class="level3">
 
 <p>
@@ -192,8 +213,8 @@ You&#039;ve followed a link to a topic t
 </p>
 
 </div>
-<!-- EDIT2 SECTION "Certifications" [175-534] -->
-<h3 class="sectionedit3" id="awards">Awards</h3>
+<!-- EDIT3 SECTION "Certifications" [569-928] -->
+<h3 class="sectionedit4" id="awards">Awards</h3>
 <div class="level3">
 
 <p>
@@ -222,7 +243,7 @@ You&#039;ve followed a link to a topic t
 
 
 </div>
-<!-- EDIT3 SECTION "Awards" [535-] -->          </div>
+<!-- EDIT4 SECTION "Awards" [929-] -->          </div>
   </div>
 </aside>
 
@@ -241,7 +262,7 @@ You&#039;ve followed a link to a topic t
       
     </div><!-- /site -->
 
-    <div class="no"><img src="/lib/exe/indexer.php?id=documentation%3A2.0%3Aapplications%3Aimg%3Aloader.gif&amp;1545402007" width="2" height="1" alt="" /></div>
+    <div class="no"><img src="/lib/exe/indexer.php?id=documentation%3A2.0%3Aapplications%3Aimg%3Aloader.gif&amp;1549988821" width="2" height="1" alt="" /></div>
     <div id="screen__mode" class="no">
       <span class="visible-xs"></span>
       <span class="visible-sm"></span>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/mediawiki.html 2.0.2+ds-1/doc/pages/documentation/current/applications/mediawiki.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/mediawiki.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/mediawiki.html	2019-02-12 16:28:08.000000000 +0000
@@ -165,7 +165,7 @@ Add then extension configuration, for ex
 If necessary, use the code below to patch the extension:
 </p>
 <pre class="code">sed -i &quot;s/&#039;wpPassword&#039; =&gt; &#039;&#039;/&#039;wpPassword&#039; =&gt; &#039;none&#039;/&quot; extensions/Auth_remoteuser/Auth_remoteuser.body.php</pre>
-<div class="notewarning">In last version of Auth_remoteuser and Mediawiki, auto-provisioning requires REMOTE_USER to match the normalized mediawiki username (for example: john_doe → john doe), so you may need to patch the extension code if you get the error:
+<div class="notewarning">In last version of Auth_remoteuser and Mediawiki, auto-provisioning requires REMOTE_USER to match the normalized mediawiki username (for example: john_doe -&gt; john doe), so you may need to patch the extension code if you get the error:
 “Unexpected REMOTE_USER authentication failure. Login Error was:WrongPluginPass”
 </div>
 <p>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/obm.html 2.0.2+ds-1/doc/pages/documentation/current/applications/obm.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/obm.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/obm.html	2019-02-12 16:28:08.000000000 +0000
@@ -276,7 +276,7 @@ You will need to collect all attributes
 </li>
 <li class="level1"><div class="li"> Mail</div>
 </li>
-<li class="level1"><div class="li"> …</div>
+<li class="level1"><div class="li"> ...</div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/roundcube.html 2.0.2+ds-1/doc/pages/documentation/current/applications/roundcube.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/roundcube.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/roundcube.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:applications:roundcube</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="index,follow"/>
+<meta name="robots" content="noindex,nofollow"/>
 <meta name="keywords" content="documentation,2.0,applications,roundcube"/>
 <link rel="search" type="application/opensearchdescription+xml" href="../lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="roundcube.html"/>
@@ -105,7 +105,7 @@
 <ul>
 <li class="level1"><div class="li"> install http_authentication plugin</div>
 </li>
-<li class="level1"><div class="li"> Patch it to replace PHP_AUTH_* by HTTP_AUTH_*</div>
+<li class="level1"><div class="li"> Patch it to replace <code>PHP_AUTH_*</code> by <code>HTTP_AUTH_*</code></div>
 </li>
 <li class="level1"><div class="li"> enable http_authentication plugin in main.inc.php :</div>
 </li>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/salesforce.html 2.0.2+ds-1/doc/pages/documentation/current/applications/salesforce.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/salesforce.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/salesforce.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:applications:salesforce</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="index,follow"/>
+<meta name="robots" content="noindex,nofollow"/>
 <meta name="keywords" content="documentation,2.0,applications,salesforce"/>
 <link rel="search" type="application/opensearchdescription+xml" href="../lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="salesforce.html"/>
@@ -74,7 +74,7 @@
 <div class="level2">
 
 <p>
-<span class="curid"><a href="salesforce.html" class="wikilink1" title="documentation:2.0:applications:salesforce">Salesforce</a></span> Salesforce Inc. is a cloud computing company. It is best known for their CRM products and social networking applications.
+Salesforce Inc. is a cloud computing company. It is best known for their CRM products and social networking applications.
 </p>
 
 <p>
@@ -94,7 +94,7 @@ To work with <abbr title="LemonLDAP::NG"
 </ul>
 
 </div>
-<!-- EDIT2 SECTION "Presentation" [69-472] -->
+<!-- EDIT2 SECTION "Presentation" [69-456] -->
 <h2 class="sectionedit3" id="configuration">Configuration</h2>
 <div class="level2">
 
@@ -103,7 +103,7 @@ You should have configured <abbr title="
 </p>
 
 </div>
-<!-- EDIT3 SECTION "Configuration" [473-578] -->
+<!-- EDIT3 SECTION "Configuration" [457-562] -->
 <h3 class="sectionedit4" id="create_salesforce_domain">Create Salesforce domain</h3>
 <div class="level3">
 
@@ -139,7 +139,7 @@ match with the correct values. (adapt th
 <div class="noteimportant">For now, the authentication service parameter has no domain available. You must come back later to fill this parameter. Once <abbr title="Security Assertion Markup Language">SAML</abbr> cinematics are working, you can then put your domain, and delete the login form, and you&#039;ll have an automatic redirection to your Identity Provider (no need for the user to click). Note that you can always access Salesforce by the general login page: <a href="https://login.salesforce.com" class="urlextern" title="https://login.salesforce.com"  rel="nofollow">https://login.salesforce.com</a>
 </div>
 </div>
-<!-- EDIT4 SECTION "Create Salesforce domain" [579-1570] -->
+<!-- EDIT4 SECTION "Create Salesforce domain" [563-1554] -->
 <h3 class="sectionedit5" id="saml_settings">SAML settings</h3>
 <div class="level3">
 
@@ -192,7 +192,7 @@ Go to the <abbr title="Security Assertio
 </ul>
 
 </div>
-<!-- EDIT5 SECTION "SAML settings" [1571-3682] -->
+<!-- EDIT5 SECTION "SAML settings" [1555-3666] -->
 <h3 class="sectionedit6" id="configure_federation_id">Configure Federation ID</h3>
 <div class="level3">
 
@@ -213,6 +213,6 @@ See <a href="../idpsaml.html" class="wik
 </p>
 
 </div>
-<!-- EDIT6 SECTION "Configure Federation ID" [3683-] --></div>
+<!-- EDIT6 SECTION "Configure Federation ID" [3667-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/symfony.html 2.0.2+ds-1/doc/pages/documentation/current/applications/symfony.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/symfony.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/symfony.html	2019-02-12 16:28:08.000000000 +0000
@@ -74,7 +74,7 @@
 </p>
 
 <p>
-Symfony provides many methods conventions to authenticate users (basic, ldap,…) and to load external user sources (ldap, database). The method presented here relies on the “remote_user” method. (in security firewall)
+Symfony provides many methods conventions to authenticate users (basic, ldap,...) and to load external user sources (ldap, database). The method presented here relies on the “remote_user” method. (in security firewall)
 </p>
 
 </div>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/xwiki.html 2.0.2+ds-1/doc/pages/documentation/current/applications/xwiki.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/xwiki.html	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/xwiki.html	2019-02-12 16:28:08.000000000 +0000
@@ -0,0 +1,185 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+  <meta charset="utf-8" />
+  <title>documentation:2.0:applications:xwiki</title>
+<meta name="generator" content="DokuWiki"/>
+<meta name="robots" content="index,follow"/>
+<meta name="keywords" content="documentation,2.0,applications,xwiki"/>
+<link rel="search" type="application/opensearchdescription+xml" href="../lib/exe/opensearch.html" title="LemonLDAP::NG"/>
+<link rel="start" href="xwiki.html"/>
+<link rel="contents" href="xwiki.html" title="Sitemap"/>
+<link rel="stylesheet" type="text/css" href="../lib/exe/css.php.t.bootstrap3.css"/>
+<!-- //if:usedebianlibs
+  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
+//elsif:useexternallibs
+  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
+//elsif:cssminified
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
+//else -->
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
+<!-- //endif -->
+<script type="text/javascript">/*<![CDATA[*/var NS='documentation:2.0:applications';var JSINFO = {"id":"documentation:2.0:applications:xwiki","namespace":"documentation:2.0:applications"};
+/*!]]>*/</script>
+<script type="text/javascript" charset="utf-8" src="../lib/exe/js.php.t.bootstrap3.js"></script>
+<!-- //if:usedebianlibs
+<script type="text/javascript" src="/javascript/jquery/jquery.min.js"></script>
+//elsif:useexternallibs
+<script type="text/javascript" src="http://code.jquery.com/jquery-2.2.0.min.js"></script>
+//elsif:jsminified
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.min.js"></script>
+//else -->
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.js"></script>
+<!-- //endif -->
+<!-- //if:usedebianlibs
+  <script type="text/javascript" src="/javascript/jquery-ui/jquery-ui.min.js"></script>
+//elsif:useexternallibs
+  <script type="text/javascript" src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
+//elsif:jsminified
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.min.js"></script>
+//else -->
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.js"></script>
+<!-- //endif -->
+</head>
+<body>
+<div class="dokuwiki export container">
+<!-- TOC START -->
+<div id="dw__toc">
+<h3 class="toggle">Table of Contents</h3>
+<div>
+
+<ul class="toc">
+<li class="level1"><div class="li"><a href="#presentation">Presentation</a></div></li>
+<li class="level1"><div class="li"><a href="#configuration">Configuration</a></div>
+<ul class="toc">
+<li class="level2"><div class="li"><a href="#xwiki_virtual_host">Xwiki virtual host</a></div>
+<ul class="toc">
+<li class="level3"><div class="li"><a href="#apache">Apache</a></div></li>
+</ul>
+</li>
+<li class="level2"><div class="li"><a href="#xwiki_virtual_host_in_manager">Xwiki virtual host in Manager</a></div></li>
+<li class="level2"><div class="li"><a href="#xwiki_configuration">Xwiki Configuration</a></div></li>
+</ul></li>
+</ul>
+</div>
+</div>
+<!-- TOC END -->
+
+<h1 class="sectionedit1" id="x-wiki">X-Wiki</h1>
+<div class="level1">
+
+<p>
+<a href="xwiki.png_documentation_2.0_applications_xwiki.html" class="media" title="applications:xwiki.png"><img src="xwiki.png" class="mediacenter" alt="" /></a>
+</p>
+
+</div>
+<!-- EDIT1 SECTION "X-Wiki" [1-54] -->
+<h2 class="sectionedit2" id="presentation">Presentation</h2>
+<div class="level2">
+
+<p>
+XWiki is a free wiki software platform written in Java with a design emphasis on extensibility. XWiki is an enterprise wiki. It includes <abbr title="What You See Is What You Get">WYSIWYG</abbr> editing, OpenDocument based document import/export, semantic annotations and tagging, and advanced permissions management.
+</p>
+
+</div>
+<!-- EDIT2 SECTION "Presentation" [55-350] -->
+<h2 class="sectionedit3" id="configuration">Configuration</h2>
+<div class="level2">
+
+<p>
+The integration with <abbr title="LemonLDAP::NG">LL::NG</abbr> is the following:
+</p>
+<ul>
+<li class="level1"><div class="li"> LemonLDAP::NG is configured as a reverse-proxy for xwiki</div>
+</li>
+<li class="level1"><div class="li"> Xwiki is configured to accept HTTP Headers</div>
+</li>
+</ul>
+
+</div>
+<!-- EDIT3 SECTION "Configuration" [351-532] -->
+<h3 class="sectionedit4" id="xwiki_virtual_host">Xwiki virtual host</h3>
+<div class="level3">
+
+</div>
+
+<h4 id="apache">Apache</h4>
+<div class="level4">
+
+<p>
+You will configure Xwiki virtual host like other <a href="../configvhost.html" class="wikilink1" title="documentation:2.0:configvhost">protected virtual host</a>.
+</p>
+
+<p>
+This is an example, with https and speaking to xwiki via AJP.
+</p>
+<pre class="code file apache">&lt;<span class="kw3">VirtualHost</span> *:<span class="nu0">80</span>&gt;
+    <span class="kw1">ServerName</span> wiki.acme.fr
+    <span class="kw1">Redirect</span> / https://wiki.acme.fr/
+&lt;/<span class="kw3">VirtualHost</span>&gt;
+&nbsp;
+&lt;<span class="kw3">VirtualHost</span> *:<span class="nu0">443</span>&gt;
+    <span class="kw1">ServerName</span> wiki.acme.fr
+&nbsp;
+    <span class="kw1">SSLEngine</span> <span class="kw2">On</span>
+    <span class="kw1">SSLCertificateFile</span> /etc/pki/tls/certs/wildcard.acme.fr.crt
+    <span class="kw1">SSLCertificateKeyFile</span> /etc/pki/tls/certs/wildcard.acme.fr.key
+    <span class="kw1">SSLCertificateChainFile</span> /etc/pki/tls/certs/CLASS_2_ACME_CA.crt
+    <span class="kw1">SSLOptions</span> +StdEnvVars
+    <span class="kw1">SSLProtocol</span>             <span class="kw2">all</span> -SSLv3 -TLSv1 -TLSv1.1
+    <span class="kw1">SSLCipherSuite</span>          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
+    <span class="kw1">SSLHonorCipherOrder</span>     <span class="kw2">on</span>
+    SSLCompression          <span class="kw2">off</span>
+&nbsp;
+    PerlHeaderParserHandler Lemonldap::NG::Handler::ApacheMP2
+&nbsp;
+    <span class="kw1">RewriteEngine</span> <span class="kw2">on</span>
+    <span class="kw1">RewriteRule</span> ^/$ /xwiki/ [R]
+&nbsp;
+    <span class="kw1">ProxyPreserveHost</span> <span class="kw2">On</span>
+    <span class="kw1">ProxyRequests</span> <span class="kw2">On</span>
+&nbsp;
+    <span class="kw1">ProxyPass</span> / ajp://192.168.11.130:<span class="nu0">8009</span>/
+    <span class="kw1">ProxyPassReverse</span> / ajp://192.168.11.130:<span class="nu0">8009</span>/
+&nbsp;
+    <span class="kw1">ErrorLog</span> /var/log/httpd/wiki_error.log
+    <span class="kw1">CustomLog</span> /var/log/httpd/wiki_access.log combined
+&lt;/<span class="kw3">VirtualHost</span>&gt;</pre>
+
+</div>
+<!-- EDIT4 SECTION "Xwiki virtual host" [533-2331] -->
+<h3 class="sectionedit5" id="xwiki_virtual_host_in_manager">Xwiki virtual host in Manager</h3>
+<div class="level3">
+
+<p>
+Go to the Manager and <a href="../configvhost.html#lemonldapng_configuration" class="wikilink1" title="documentation:2.0:configvhost">create a new virtual host</a> for Xwiki.
+</p>
+
+<p>
+Configure the <a href="../writingrulesand_headers.html#rules" class="wikilink1" title="documentation:2.0:writingrulesand_headers">access rules</a>.
+</p>
+
+<p>
+Configure the <a href="../writingrulesand_headers.html#headers" class="wikilink1" title="documentation:2.0:writingrulesand_headers">headers</a>:
+</p>
+<ul>
+<li class="level1"><div class="li"> remote_user: $uid</div>
+</li>
+<li class="level1"><div class="li"> remote_groups: encode_base64($groups,&#039;&#039;)</div>
+</li>
+</ul>
+
+</div>
+<!-- EDIT5 SECTION "Xwiki virtual host in Manager" [2332-2670] -->
+<h3 class="sectionedit6" id="xwiki_configuration">Xwiki Configuration</h3>
+<div class="level3">
+<pre class="code">xwiki.authentication.authclass=org.xwiki.contrib.authentication.XWikiTrustedAuthenticator
+xwiki.authentication.trusted.adapterHint=headers
+xwiki.authentication.trusted.auth_field=remote_user
+xwiki.authentication.trusted.group_field=remote_groups
+xwiki.authentication.trusted.logout_url=https://auth.acme.fr/#logout</pre>
+
+</div>
+<!-- EDIT6 SECTION "Xwiki Configuration" [2671-] --></div>
+</body>
+</html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications/xwiki.png_documentation_2.0_applications_xwiki.html 2.0.2+ds-1/doc/pages/documentation/current/applications/xwiki.png_documentation_2.0_applications_xwiki.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications/xwiki.png_documentation_2.0_applications_xwiki.html	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications/xwiki.png_documentation_2.0_applications_xwiki.html	2019-02-12 16:28:08.000000000 +0000
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en" dir="ltr" class="no-js">
+<head>
+  <meta charset="UTF-8" />
+  <title>applications:xwiki.png [LemonLDAP::NG]</title>
+  <script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
+  <meta name="viewport" content="width=device-width,initial-scale=1" />
+  <link rel="shortcut icon" href="../lib/tpl/bootstrap3/images/favicon.ico" />
+<link rel="apple-touch-icon" href="../lib/tpl/bootstrap3/images/apple-touch-icon.png" />
+      <!-- //if:usedebianlibs
+  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
+//elsif:useexternallibs
+  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
+//elsif:cssminified
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
+//else -->
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
+<!-- //endif -->/>
+    <script type="text/javascript">/*<![CDATA[*/
+    var TPL_CONFIG = {"tableFullWidth":1};
+  /*!]]>*/</script>
+  <meta name="generator" content="DokuWiki"/>
+<meta name="robots" content="index,follow"/>
+<link rel="search" type="application/opensearchdescription+xml" href="../lib/exe/opensearch.html" title="LemonLDAP::NG"/>
+<link rel="start" href="xwiki.html"/>
+<link rel="contents" href="xwiki.html" title="Sitemap"/>
+<link rel="stylesheet" type="text/css" href="../lib/exe/css.php.t.bootstrap3.css"/>
+<!-- //if:usedebianlibs
+  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
+//elsif:useexternallibs
+  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
+//elsif:cssminified
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
+//else -->
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
+<!-- //endif -->
+<script type="text/javascript">/*<![CDATA[*/var NS='';var JSINFO = null;
+/*!]]>*/</script>
+<script type="text/javascript" charset="utf-8" src="../lib/exe/js.php.t.bootstrap3.js"></script>
+<!-- //if:usedebianlibs
+<script type="text/javascript" src="/javascript/jquery/jquery.min.js"></script>
+//elsif:useexternallibs
+<script type="text/javascript" src="http://code.jquery.com/jquery-2.2.0.min.js"></script>
+//elsif:jsminified
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.min.js"></script>
+//else -->
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.js"></script>
+<!-- //endif -->
+<!-- //if:usedebianlibs
+  <script type="text/javascript" src="/javascript/jquery-ui/jquery-ui.min.js"></script>
+//elsif:useexternallibs
+  <script type="text/javascript" src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
+//elsif:jsminified
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.min.js"></script>
+//else -->
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.js"></script>
+<!-- //endif -->
+  <script type="text/javascript" src="/javascript/bootstrap/js/bootstrap.min.js"></script>
+  <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
+  <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+  <!--[if lt IE 9]>
+  <![endif]-->
+</head>
+
+<body class="container">
+  <!--[if lte IE 7 ]><div id="IE7"><![endif]--><!--[if IE 8 ]><div id="IE8"><![endif]-->
+  <div id="dokuwiki__detail" class="dokuwiki mode_ tpl_bootstrap3   ">
+
+    
+    
+      <h1 class="page-header">
+        <i class="glyphicon glyphicon-picture"></i> applications:xwiki.png      </h1>
+
+      <div class="content">
+
+        <a href="xwiki.0fea6a13c52b4d4725368f24b045ca84.png" title="View original file"><img width="300" height="108" class="img_detail" alt="xwiki.png" title="xwiki.png" src="xwiki.165c9f846ccb2c775dff26d98fe36749.png"/></a>
+        <div class="img_detail">
+
+          <div class="panel panel-default">
+            <div class="panel-heading">
+              <h2 class="panel-title"><i class="glyphicon glyphicon-info-sign text-info"></i> xwiki.png</h2>
+            </div>
+            <div class="panel-body">
+              <dl><dt>Date:</dt><dd>2019/01/21 14:46</dd><dt>Filename:</dt><dd>xwiki.png</dd><dt>Format:</dt><dd>PNG</dd><dt>Size:</dt><dd>11KB</dd><dt>Width:</dt><dd>300</dd><dt>Height:</dt><dd>108</dd></dl>                          </div>
+          </div>
+
+        </div>
+      </div><!-- /.content -->
+
+      <p class="back">
+
+        <hr/>
+
+        <div class="btn-group">
+          <a href="xwiki.html"  class="action img_backto" accesskey="b" rel="nofollow" title="Back to documentation:2.0:applications:xwiki [B]">Back to documentation:2.0:applications:xwiki</a>                  </div>
+
+      </p>
+
+      </div>
+  <!--[if ( lte IE 7 | IE 8 ) ]></div><![endif]-->
+</body>
+</html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/applications.html 2.0.2+ds-1/doc/pages/documentation/current/applications.html
--- 2.0.1+ds-2/doc/pages/documentation/current/applications.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/applications.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:applications</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="index,follow"/>
+<meta name="robots" content="noindex,nofollow"/>
 <meta name="keywords" content="documentation,2.0,applications"/>
 <link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="applications.html"/>
@@ -188,13 +188,16 @@ If none of above methods is available, y
 		<td class="col0 centeralign">  <a href="applications/wordpress.html" class="media" title="documentation:2.0:applications:wordpress"><img src="icons/kmultiple.png" class="media" alt="" width="100" /></a>  </td><td class="col1 centeralign">  <a href="applications/wordpress.html" class="wikilink1" title="documentation:2.0:applications:wordpress">Wordpress</a>  </td><td class="col2"> </td><td class="col3"> </td><td class="col4 centeralign">   ✔  </td><td class="col5"> </td><td class="col6"> </td>
 	</tr>
 	<tr class="row34 roweven">
-		<td class="col0 centeralign">  <a href="applications/zimbra.html" class="media" title="documentation:2.0:applications:zimbra"><img src="icons/kmultiple.png" class="media" alt="" /></a>  </td><td class="col1 centeralign">  <a href="applications/zimbra.html" class="wikilink1" title="documentation:2.0:applications:zimbra">Zimbra</a>  </td><td class="col2"> </td><td class="col3 centeralign">  ✔  </td><td class="col4"> </td><td class="col5"> </td><td class="col6"> </td>
+		<td class="col0 centeralign">  <a href="applications/xwiki.html" class="media" title="documentation:2.0:applications:xwiki"><img src="icons/kmultiple.png" class="media" alt="" width="100" /></a>  </td><td class="col1 centeralign">  <a href="applications/xwiki.html" class="wikilink1" title="documentation:2.0:applications:xwiki">XWiki</a>  </td><td class="col2 centeralign">  ✔  </td><td class="col3"> </td><td class="col4"> </td><td class="col5"> </td><td class="col6"> </td>
 	</tr>
 	<tr class="row35 rowodd">
+		<td class="col0 centeralign">  <a href="applications/zimbra.html" class="media" title="documentation:2.0:applications:zimbra"><img src="icons/kmultiple.png" class="media" alt="" /></a>  </td><td class="col1 centeralign">  <a href="applications/zimbra.html" class="wikilink1" title="documentation:2.0:applications:zimbra">Zimbra</a>  </td><td class="col2"> </td><td class="col3 centeralign">  ✔  </td><td class="col4"> </td><td class="col5"> </td><td class="col6"> </td>
+	</tr>
+	<tr class="row36 roweven">
 		<th class="col0 leftalign">  </th><th class="col1 leftalign">  </th><th class="col2 centeralign">  HTTP headers  </th><th class="col3 centeralign">  Specific Handler  </th><th class="col4 centeralign">  <abbr title="Central Authentication Service">CAS</abbr>  </th><th class="col5 leftalign"> <abbr title="Security Assertion Markup Language">SAML</abbr>  </th><th class="col6 centeralign">  OpenID Connect  </th>
 	</tr>
 </table></div>
-<!-- EDIT4 TABLE [1223-5506] -->
+<!-- EDIT4 TABLE [1223-5617] -->
 </div>
 <!-- EDIT3 SECTION "Application list" [1192-] --></div>
 </body>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authad.html 2.0.2+ds-1/doc/pages/documentation/current/authad.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authad.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authad.html	2019-02-12 16:28:08.000000000 +0000
@@ -108,9 +108,9 @@ LemonLDAP::NG implements partially the p
 <ul>
 <li class="level1"><div class="li"> when pwdLastSet = 0 in the user entry, it means that password has been reset, and a form is presented to the user for him to change his password.</div>
 </li>
-<li class="level1"><div class="li"> when computed virtual attribute &#039;msDS-User-Account-Control-Computed&#039; as 6th flag set to 8, the password is considered expired. (support from Windows Server 2003) It is too late for the user to do anything. He must contact his administrator.</div>
+<li class="level1"><div class="li"> when computed virtual attribute &#039;msDS-User-Account-Control-Computed&#039; as 6th flag set to 8, the password is considered expired (support from Windows Server 2003). It is too late for the user to do anything. He must contact his administrator.</div>
 </li>
-<li class="level1"><div class="li"> a warning before password expiration is possible in AD, but only in GPO (Computer Configuration\Windows Settings\Local Policies\Security Options under Interactive Logon: Prompt user to change password before expiration) However it as no reality in LDAP referential. A “password warning time before password expiration” variable can be specified in LemonLDAP::NG to do so.</div>
+<li class="level1"><div class="li"> a warning before password expiration is possible in AD, but only in GPO (Computer Configuration\Windows Settings\Local Policies\Security Options under Interactive Logon: Prompt user to change password before expiration). However it as no reality in LDAP referential. A “password warning time before password expiration” variable can be specified in LemonLDAP::NG to do so.</div>
 </li>
 </ul>
 <div class="noteimportant">Note: since AD 2012, each user can have a specific password expiration policy. Then, the “maximum password age” can have different values. This is currently unsupported in LemonLDAP::NG because every policy must be computed with their precedence to know which maximum password age to apply.
@@ -119,10 +119,10 @@ LemonLDAP::NG implements partially the p
 To configure warning before password expiration, you must set two variables in Active Directory parameters in Manager:
 </p>
 <ul>
-<li class="level1"><div class="li"> <strong>Password expire warning</strong> : number of seconds between password expiration and the date from which user is warned his password will expire.</div>
-</li>
 <li class="level1"><div class="li"> <strong>Password max age</strong> : number of seconds after the last password change, before it expires. It must match AD policy</div>
 </li>
+<li class="level1"><div class="li"> <strong>Password expire warning</strong> : number of seconds between password expiration and the date from which user is warned his password will expire.</div>
+</li>
 </ul>
 
 </div>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authapache.html 2.0.2+ds-1/doc/pages/documentation/current/authapache.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authapache.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authapache.html	2019-02-12 16:28:08.000000000 +0000
@@ -125,7 +125,7 @@ The Apache configuration depends on the
 </li>
 <li class="level1"><div class="li"> <a href="http://freeradius.org/mod_auth_radius/" class="urlextern" title="http://freeradius.org/mod_auth_radius/"  rel="nofollow">Radius</a></div>
 </li>
-<li class="level1"><div class="li"> …</div>
+<li class="level1"><div class="li"> ...</div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authcas.html 2.0.2+ds-1/doc/pages/documentation/current/authcas.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authcas.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authcas.html	2019-02-12 16:28:08.000000000 +0000
@@ -120,7 +120,7 @@ Then create the list of <abbr title="Cen
 </li>
 <li class="level1"><div class="li"> <strong>Display Name</strong>: Name to display. Required if you have more than 1 <abbr title="Central Authentication Service">CAS</abbr> server declared</div>
 </li>
-<li class="level1"><div class="li"> <strong>Icon</strong>: Path to <abbr title="Central Authentication Service">CAS</abbr> Server icon, used only if you have more than 1 <abbr title="Central Authentication Service">CAS</abbr> server declared</div>
+<li class="level1"><div class="li"> <strong>Icon</strong>: Path to <abbr title="Central Authentication Service">CAS</abbr> Server icon. Used only if you have more than 1 <abbr title="Central Authentication Service">CAS</abbr> server declared</div>
 </li>
 <li class="level1"><div class="li"> <strong>Proxied services</strong>: list of services for which a proxy ticket is requested:</div>
 <ul>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authcombination.html 2.0.2+ds-1/doc/pages/documentation/current/authcombination.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authcombination.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authcombination.html	2019-02-12 16:28:08.000000000 +0000
@@ -123,7 +123,7 @@ Each module that will be used in combina
 <ul>
 <li class="level1"><div class="li"> the name used in the rule (a uniq string)</div>
 </li>
-<li class="level1"><div class="li"> the type (LDAP, <abbr title="Database Interface">DBI</abbr>,…)</div>
+<li class="level1"><div class="li"> the type (LDAP, <abbr title="Database Interface">DBI</abbr>,...)</div>
 </li>
 <li class="level1"><div class="li"> the scope:</div>
 <ul>
@@ -135,7 +135,7 @@ Each module that will be used in combina
 </li>
 </ul>
 </li>
-<li class="level1"><div class="li"> overloaded parameters: you can redefine any LLNG string parameters. For example, if you use 2 different LDAP, the first can use normal configuration and for the second, overwritten parameter can redefine ldapServer,…</div>
+<li class="level1"><div class="li"> overloaded parameters: you can redefine any LLNG string parameters. For example, if you use 2 different LDAP, the first can use normal configuration and for the second, overwritten parameter can redefine ldapServer,...</div>
 </li>
 </ul>
 <div class="noteclassic">To overload parameters, you must select a module, add a parameter and set its value.
@@ -154,7 +154,7 @@ For example:
 		<td class="col0"> DB1 </td><td class="col1"> <abbr title="Database Interface">DBI</abbr> </td><td class="col2"> Auth only </td><td class="col3"> </td>
 	</tr>
 	<tr class="row2 roweven">
-		<td class="col0"> DB2 </td><td class="col1"> <abbr title="Database Interface">DBI</abbr> </td><td class="col2"> User DB only </td><td class="col3"> dbiAuthChain ⇒ “mysql:…” </td>
+		<td class="col0"> DB2 </td><td class="col1"> <abbr title="Database Interface">DBI</abbr> </td><td class="col2"> User DB only </td><td class="col3"> dbiAuthChain =&gt; “mysql:...” </td>
 	</tr>
 </table></div>
 <!-- EDIT6 TABLE [1133-1256] -->
@@ -175,6 +175,8 @@ Combination allows:
 </li>
 <li class="level1"><div class="li"> to test different schemes (example: <code>[LDAP] or [<abbr title="Database Interface">DBI</abbr>]</code>)</div>
 </li>
+<li class="level1"><div class="li"> to mix schemes (example: <code>[Kerberos,LDAP] or [LDAP,LDAP]</code>)</div>
+</li>
 <li class="level1"><div class="li"> to choose authentication scheme depending on some request values</div>
 </li>
 </ul>
@@ -210,7 +212,7 @@ Remember that schemes in rules are the n
 		<td class="col0 leftalign"> <code>[mySSL and myLDAP, myLDAP ]</code>         </td><td class="col1"> Use mySSL and myLDAP to authentify, myLDAP to get user </td>
 	</tr>
 </table></div>
-<!-- EDIT8 TABLE [2124-2555] --><div class="noteimportant">Note that “or” can&#039;t be used inside a scheme.
+<!-- EDIT8 TABLE [2189-2620] --><div class="noteimportant">Note that “or” can&#039;t be used inside a scheme.
 If you think to “[mySSL or myLDAP, myLDAP]”, you must write <code>[mySSL, myLDAP] or [myLDAP, myLDAP]</code>
 
 </div><div class="table sectionedit9"><table class="inline table table-bordered table-striped">
@@ -226,7 +228,7 @@ If you think to “[mySSL or myLDAP, myL
 		<td class="col0"> <code>[myDBI1] and [myDBI2] or [myLDAP] and [myDBI2]</code> </td><td class="col1"> Try myDBI1 and myDBI2, if it fails, try myLDAP and myDBI2 </td>
 	</tr>
 </table></div>
-<!-- EDIT9 TABLE [2728-2972] --><div class="noteimportant">You can&#039;t use brackets in a boolean expression and “and” has precedence on “or”.
+<!-- EDIT9 TABLE [2793-3037] --><div class="noteimportant">You can&#039;t use brackets in a boolean expression and “and” has precedence on “or”.
 <p>
 If you think to “( [myLDAP] or [myDBI1] ) and [myDBI2]”, you must write <code>[myLDAP] and [myDBI2] or [myDBI1] and [myDBI2]</code>
 </p>
@@ -247,15 +249,15 @@ Test can use only the <code>$env</code>
 	</tr>
 	</thead>
 	<tr class="row1 rowodd">
-		<td class="col0"> <code>if($env→{REMOTE_ADDR} =~ /^10\./) then [myLDAP] else [mySSL, myLDAP]</code> </td><td class="col1"> If user doesn&#039;t come from 10.0.0.0/8 network, use SSL as authentication module </td>
+		<td class="col0"> <code>if($env-&gt;{REMOTE_ADDR} =~ /^10\./) then [myLDAP] else [mySSL, myLDAP]</code> </td><td class="col1"> If user doesn&#039;t come from 10.0.0.0/8 network, use SSL as authentication module </td>
 	</tr>
 	<tr class="row2 roweven">
-		<td class="col0"> <code>if($env→{REMOTE_ADDR} =~ /^10\./) then [myLDAP] else if($env→{REMOTE_ADDR} =~ /^192/) then [myDBI1] else [myDBI2]</code> </td><td class="col1"> Chain tests </td>
+		<td class="col0"> <code>if($env-&gt;{REMOTE_ADDR} =~ /^10\./) then [myLDAP] else if($env-&gt;{REMOTE_ADDR} =~ /^192/) then [myDBI1] else [myDBI2]</code> </td><td class="col1"> Chain tests </td>
 	</tr>
 </table></div>
-<!-- EDIT10 TABLE [3308-3630] --><div class="noteimportant">Note that brackets can&#039;t be used except to enclose test.
+<!-- EDIT10 TABLE [3373-3695] --><div class="noteimportant">Note that brackets can&#039;t be used except to enclose test.
 <p>
-If you wants to write <code>if(…) then if…</code>, you must write <code>if(not …) then … else if(…)…</code>
+If you wants to write <code>if(...) then if...</code>, you must write <code>if(not ...) then ... else if(...)...</code>
 </p>
 
 </div>
@@ -269,11 +271,11 @@ The following rule is valid:
 </p>
 
 <p>
-<code>if($env→{REMOTE_ADDR} =~ /^192\./) then [mySSL, myLDAP] or [myLDAP] else [myLDAP and myDBI, myLDAP]</code>
+<code>if($env-&gt;{REMOTE_ADDR} =~ /^192\./) then [mySSL, myLDAP] or [myLDAP] else [myLDAP and myDBI, myLDAP]</code>
 </p>
 
 </div>
-<!-- EDIT7 SECTION "Rule chain" [1671-3977] -->
+<!-- EDIT7 SECTION "Rule chain" [1671-4042] -->
 <h3 class="sectionedit11" id="combine_second_factor">Combine second factor</h3>
 <div class="level3">
 
@@ -298,7 +300,7 @@ Now if you want to authenticate users ei
 </ul>
 
 </div>
-<!-- EDIT11 SECTION "Combine second factor" [3978-4627] -->
+<!-- EDIT11 SECTION "Combine second factor" [4043-4692] -->
 <h3 class="sectionedit12" id="display_multiple_forms">Display multiple forms</h3>
 <div class="level3">
 
@@ -309,12 +311,12 @@ Combination module returns the form corr
 <span class="re1">combinationForms</span> <span class="sy0">=</span><span class="re2"> standardform, openidform</span></pre>
 
 </div>
-<!-- EDIT12 SECTION "Display multiple forms" [4628-4956] -->
+<!-- EDIT12 SECTION "Display multiple forms" [4693-5021] -->
 <h2 class="sectionedit13" id="known_problems">Known problems</h2>
 <div class="level2">
 
 </div>
-<!-- EDIT13 SECTION "Known problems" [4957-4984] -->
+<!-- EDIT13 SECTION "Known problems" [5022-5049] -->
 <h3 class="sectionedit14" id="federation_protocols">Federation protocols</h3>
 <div class="level3">
 
@@ -334,9 +336,9 @@ Combination module returns the form corr
 		<td class="col0"> <em><code>[<abbr title="Security Assertion Markup Language">SAML</abbr>] and [LDAP] or [LDAP]</code></em> </td><td class="col1"> <code>[<abbr title="Security Assertion Markup Language">SAML</abbr>, <abbr title="Security Assertion Markup Language">SAML</abbr> and LDAP] or [LDAP]</code> </td><td class="col2"> Authentication is done by <abbr title="Security Assertion Markup Language">SAML</abbr> or LDAP but user must match an LDAP entry </td>
 	</tr>
 </table></div>
-<!-- EDIT15 TABLE [5284-5616] -->
+<!-- EDIT15 TABLE [5349-5681] -->
 </div>
-<!-- EDIT14 SECTION "Federation protocols" [4985-5617] -->
+<!-- EDIT14 SECTION "Federation protocols" [5050-5682] -->
 <h3 class="sectionedit16" id="authapache_authentication">Auth::Apache authentication</h3>
 <div class="level3">
 
@@ -354,7 +356,7 @@ To bypass this, follow the documentation
 </p>
 
 </div>
-<!-- EDIT16 SECTION "Auth::Apache authentication" [5618-6229] -->
+<!-- EDIT16 SECTION "Auth::Apache authentication" [5683-6294] -->
 <h3 class="sectionedit17" id="ssl_authentication">SSL authentication</h3>
 <div class="level3">
 
@@ -363,6 +365,6 @@ To chain SSL, you have to set “SSLRequ
 </p>
 
 </div>
-<!-- EDIT17 SECTION "SSL authentication" [6230-] --></div>
+<!-- EDIT17 SECTION "SSL authentication" [6295-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authcustom.html 2.0.2+ds-1/doc/pages/documentation/current/authcustom.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authcustom.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authcustom.html	2019-02-12 16:28:08.000000000 +0000
@@ -86,11 +86,11 @@ You can define your own customAuth modul
 </p>
 <div class="notetip">::Auth::My::Dev.pm means Lemonldap::NG::Portal::Auth::My::Dev.pm
 
-</div><div class="noteclassic">Be careful. Don&#039; t use an already attributed name in configuration.
+</div><div class="noteimportant">Be careful. Don&#039; t use an already attributed name in configuration.
 
 </div>
 <p>
-These parameters are available in your plugins using <code>$self→conf→{<em>customName</em>}</code>.
+These parameters are available in your plugins using <code>$self-&gt;conf-&gt;{<em>customName</em>}</code>.
 </p>
 
 <p>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authdbi.html 2.0.2+ds-1/doc/pages/documentation/current/authdbi.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authdbi.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authdbi.html	2019-02-12 16:28:08.000000000 +0000
@@ -107,7 +107,7 @@
 </li>
 <li class="level1"><div class="li"> Oracle</div>
 </li>
-<li class="level1"><div class="li"> …</div>
+<li class="level1"><div class="li"> ...</div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authfacebook.html 2.0.2+ds-1/doc/pages/documentation/current/authfacebook.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authfacebook.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authfacebook.html	2019-02-12 16:28:08.000000000 +0000
@@ -105,11 +105,11 @@ If you use Facebook as user database, de
 </li>
 <li class="level1"><div class="li"> in the value field, set the field name. You can show them using <a href="https://developers.facebook.com/tools/explorer" class="urlextern" title="https://developers.facebook.com/tools/explorer"  rel="nofollow">Facebook Graph API explorer</a> and have a list of supported fields in the <a href="https://developers.facebook.com/docs/graph-api/reference/user/" class="urlextern" title="https://developers.facebook.com/docs/graph-api/reference/user/"  rel="nofollow">Graph API User reference</a>. For example:</div>
 <ul>
-<li class="level2"><div class="li"> cn ⇒ name</div>
+<li class="level2"><div class="li"> cn =&gt; name</div>
 </li>
-<li class="level2"><div class="li"> mail ⇒ email</div>
+<li class="level2"><div class="li"> mail =&gt; email</div>
 </li>
-<li class="level2"><div class="li"> sn ⇒ last_name</div>
+<li class="level2"><div class="li"> sn =&gt; last_name</div>
 </li>
 </ul>
 </li>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authgpg.html 2.0.2+ds-1/doc/pages/documentation/current/authgpg.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authgpg.html	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authgpg.html	2019-02-12 16:28:08.000000000 +0000
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+  <meta charset="utf-8" />
+  <title>documentation:2.0:authgpg</title>
+<meta name="generator" content="DokuWiki"/>
+<meta name="robots" content="index,follow"/>
+<meta name="keywords" content="documentation,2.0,authgpg"/>
+<link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
+<link rel="start" href="authgpg.html"/>
+<link rel="contents" href="authgpg.html" title="Sitemap"/>
+<link rel="stylesheet" type="text/css" href="lib/exe/css.php.t.bootstrap3.css"/>
+<!-- //if:usedebianlibs
+  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
+//elsif:useexternallibs
+  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
+//elsif:cssminified
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
+//else -->
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
+<!-- //endif -->
+<script type="text/javascript">/*<![CDATA[*/var NS='documentation:2.0';var JSINFO = {"id":"documentation:2.0:authgpg","namespace":"documentation:2.0"};
+/*!]]>*/</script>
+<script type="text/javascript" charset="utf-8" src="lib/exe/js.php.t.bootstrap3.js"></script>
+<!-- //if:usedebianlibs
+<script type="text/javascript" src="/javascript/jquery/jquery.min.js"></script>
+//elsif:useexternallibs
+<script type="text/javascript" src="http://code.jquery.com/jquery-2.2.0.min.js"></script>
+//elsif:jsminified
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.min.js"></script>
+//else -->
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.js"></script>
+<!-- //endif -->
+<!-- //if:usedebianlibs
+  <script type="text/javascript" src="/javascript/jquery-ui/jquery-ui.min.js"></script>
+//elsif:useexternallibs
+  <script type="text/javascript" src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
+//elsif:jsminified
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.min.js"></script>
+//else -->
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.js"></script>
+<!-- //endif -->
+</head>
+<body>
+<div class="dokuwiki export container">
+
+<h1 class="sectionedit1" id="databases">Databases</h1>
+<div class="level1">
+<div class="table sectionedit2"><table class="inline table table-bordered table-striped">
+	<thead>
+	<tr class="row0 roweven">
+		<th class="col0 centeralign">  Authentication  </th><th class="col1 centeralign">  Users  </th><th class="col2 centeralign">  Password  </th>
+	</tr>
+	</thead>
+	<tr class="row1 rowodd">
+		<td class="col0 centeralign">  ✔  </td><td class="col1 leftalign">    </td><td class="col2 leftalign">    </td>
+	</tr>
+</table></div>
+<!-- EDIT2 TABLE [26-89] -->
+</div>
+<!-- EDIT1 SECTION "Databases" [1-90] -->
+<h2 class="sectionedit3" id="presentation">Presentation</h2>
+<div class="level2">
+
+<p>
+LLNG can use GPG to authenticate users. It is not useful for day-to-day authentication but can be used for example if user has lost his password. The login form will ask user to sign a challenge and post result.
+</p>
+
+</div>
+<!-- EDIT3 SECTION "Presentation" [91-329] -->
+<h2 class="sectionedit4" id="configuration">Configuration</h2>
+<div class="level2">
+
+<p>
+In Manager, go in <code>General Parameters</code> &gt; <code>Authentication modules</code> and choose GPG for authentication, users and/or password modules. Then you just have to set GPG database. For example <code>/usr/share/keyrings/debian-keyring.gpg</code>
+</p>
+
+</div>
+<!-- EDIT4 SECTION "Configuration" [330-] --></div>
+</body>
+</html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authldap.html 2.0.2+ds-1/doc/pages/documentation/current/authldap.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authldap.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authldap.html	2019-02-12 16:28:08.000000000 +0000
@@ -218,6 +218,8 @@ And the mail filter is:
 </li>
 <li class="level1"><div class="li"> <strong>Searched attributes</strong>: name(s) of the attribute storing the name of the group, spaces separated (default: cn).</div>
 </li>
+<li class="level1"><div class="li"> <strong>Decode searched value</strong>: with Active Directory, member <abbr title="Distinguished Name">DN</abbr> value is sometimes bad decoded and groups are not found, activate this option to force value decoding.</div>
+</li>
 <li class="level1"><div class="li"> <strong>Recursive</strong>: activate recursive group functionality (default: 0). If enabled, if the user group is a member of another group (group of groups), all parents groups will be stored as user&#039;s groups.</div>
 </li>
 <li class="level1"><div class="li"> <strong>Group source attribute</strong>: name of the attribute in groups entries used in the link, for recursive group search (default: dn).</div>
@@ -225,7 +227,7 @@ And the mail filter is:
 </ul>
 
 </div>
-<!-- EDIT9 SECTION "Groups" [3711-4545] -->
+<!-- EDIT9 SECTION "Groups" [3711-4712] -->
 <h3 class="sectionedit10" id="password">Password</h3>
 <div class="level3">
 <ul>
@@ -259,6 +261,6 @@ And the mail filter is:
 </p>
 
 </div>
-<!-- EDIT10 SECTION "Password" [4546-] --></div>
+<!-- EDIT10 SECTION "Password" [4713-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authopenidconnect.html 2.0.2+ds-1/doc/pages/documentation/current/authopenidconnect.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authopenidconnect.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authopenidconnect.html	2019-02-12 16:28:08.000000000 +0000
@@ -374,13 +374,13 @@ Define here the mapping between the <abb
 So you can define for example:
 </p>
 <ul>
-<li class="level1"><div class="li"> cn ⇒ name</div>
+<li class="level1"><div class="li"> cn =&gt; name</div>
 </li>
-<li class="level1"><div class="li"> sn ⇒ family_name</div>
+<li class="level1"><div class="li"> sn =&gt; family_name</div>
 </li>
-<li class="level1"><div class="li"> mail ⇒ email</div>
+<li class="level1"><div class="li"> mail =&gt; email</div>
 </li>
-<li class="level1"><div class="li"> uid ⇒ sub</div>
+<li class="level1"><div class="li"> uid =&gt; sub</div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authrest.html 2.0.2+ds-1/doc/pages/documentation/current/authrest.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authrest.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authrest.html	2019-02-12 16:28:08.000000000 +0000
@@ -126,10 +126,10 @@ REST web services have just to respond w
 	</tr>
 	</thead>
 	<tr class="row1 rowodd">
-		<td class="col0 centeralign">  Authentication <abbr title="Uniform Resource Locator">URL</abbr>  </td><td class="col1"> JSON file: <code>{“user”:$user,“password”:$password}</code> </td><td class="col2"> JSON file: <code>{“result”:true/false,“info”:{…}}</code> </td>
+		<td class="col0 centeralign">  Authentication <abbr title="Uniform Resource Locator">URL</abbr>  </td><td class="col1"> JSON file: <code>{“user”:$user,“password”:$password}</code> </td><td class="col2"> JSON file: <code>{“result”:true/false,“info”:{...}}</code> </td>
 	</tr>
 	<tr class="row2 roweven">
-		<td class="col0 centeralign">  User data <abbr title="Uniform Resource Locator">URL</abbr>  </td><td class="col1"> JSON file: <code>{“user”:$user}</code> </td><td class="col2"> JSON file: <code>{“result”:true/false,“info”:{“uid”:“dwho”,…}}</code> </td>
+		<td class="col0 centeralign">  User data <abbr title="Uniform Resource Locator">URL</abbr>  </td><td class="col1"> JSON file: <code>{“user”:$user}</code> </td><td class="col2"> JSON file: <code>{“result”:true/false,“info”:{“uid”:“dwho”,...}}</code> </td>
 	</tr>
 	<tr class="row3 rowodd">
 		<td class="col0 centeralign">  Password confirmation <abbr title="Uniform Resource Locator">URL</abbr>  </td><td class="col1"> JSON file: <code>{“user”:$user,“password”:$password}</code> </td><td class="col2"> JSON file: <code>{“result”:true/false}</code> </td>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authsaml.html 2.0.2+ds-1/doc/pages/documentation/current/authsaml.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authsaml.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authsaml.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:authsaml</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="index,follow"/>
+<meta name="robots" content="noindex,nofollow"/>
 <meta name="keywords" content="documentation,2.0,authsaml"/>
 <link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="authsaml.html"/>
@@ -131,15 +131,15 @@ In Manager, go in :
 In <code>General Parameters</code> &gt; <code>Authentication modules</code>, set:
 </p>
 <ul>
-<li class="level1"><div class="li"> Authentication module: <abbr title="Security Assertion Markup Language">SAML</abbr></div>
+<li class="level1"><div class="li"> Authentication module: <abbr title="Security Assertion Markup Language">SAML</abbr> v2</div>
 </li>
-<li class="level1"><div class="li">  Users module: <abbr title="Security Assertion Markup Language">SAML</abbr></div>
+<li class="level1"><div class="li">  Users module: Same (eq <abbr title="Security Assertion Markup Language">SAML</abbr>)</div>
 </li>
 </ul>
 <div class="notetip">As passwords will not be managed by <abbr title="LemonLDAP::NG">LL::NG</abbr>, you can disable <a href="portalmenu.html#menu_modules" class="wikilink1" title="documentation:2.0:portalmenu">menu password module</a>.
 </div>
 </div>
-<!-- EDIT6 SECTION "Authentication and UserDB" [1171-1454] -->
+<!-- EDIT6 SECTION "Authentication and UserDB" [1171-1467] -->
 <h3 class="sectionedit7" id="register_lemonldapng_on_partner_identity_provider">Register LemonLDAP::NG on partner Identity Provider</h3>
 <div class="level3">
 
@@ -152,7 +152,7 @@ They are available at the EntityID <abbr
 </p>
 
 </div>
-<!-- EDIT7 SECTION "Register LemonLDAP::NG on partner Identity Provider" [1455-1701] -->
+<!-- EDIT7 SECTION "Register LemonLDAP::NG on partner Identity Provider" [1468-1714] -->
 <h3 class="sectionedit8" id="register_partner_identity_provider_on_lemonldapng">Register partner Identity Provider on LemonLDAP::NG</h3>
 <div class="level3">
 
@@ -299,6 +299,22 @@ These options override service signature
 </ul>
 
 </div>
-<!-- EDIT8 SECTION "Register partner Identity Provider on LemonLDAP::NG" [1702-] --></div>
+
+<h5 id="display">Display</h5>
+<div class="level5">
+
+<p>
+Used only if you have more than 1 <abbr title="Security Assertion Markup Language">SAML</abbr> Identity Provider declared
+</p>
+<ul>
+<li class="level1"><div class="li"> <strong>Display name</strong>: Name of the IDP</div>
+</li>
+<li class="level1"><div class="li"> <strong>Logo</strong>: Logo of the IDP</div>
+</li>
+</ul>
+<div class="notetip">The chosen logo must be in Portal icons directory (<code>portal/static/common/icons/</code>). You can set a custom icon by setting the icon file name directly in the field and copy the logo file in portal icons directory
+</div>
+</div>
+<!-- EDIT8 SECTION "Register partner Identity Provider on LemonLDAP::NG" [1715-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/authssl.html 2.0.2+ds-1/doc/pages/documentation/current/authssl.html
--- 2.0.1+ds-2/doc/pages/documentation/current/authssl.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/authssl.html	2019-02-12 16:28:08.000000000 +0000
@@ -290,7 +290,7 @@ It is possible with AJAX code and 3 Apac
 </li>
 <li class="level1"><div class="li"> /testssl/ is a SSL protected page to check the certificate</div>
 </li>
-<li class="level1"><div class="li"> /sslok/ is the new LemonLDAP::NG portal. You need to declare the new url in the manager: Portal → <abbr title="Uniform Resource Locator">URL</abbr>: <a href="https://auth.example.com/sslok/" class="urlextern" title="https://auth.example.com/sslok/"  rel="nofollow">https://auth.example.com/sslok/</a></div>
+<li class="level1"><div class="li"> /sslok/ is the new LemonLDAP::NG portal. You need to declare the new url in the manager: Portal -&gt; <abbr title="Uniform Resource Locator">URL</abbr>: <a href="https://auth.example.com/sslok/" class="urlextern" title="https://auth.example.com/sslok/"  rel="nofollow">https://auth.example.com/sslok/</a></div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/autosignin.html 2.0.2+ds-1/doc/pages/documentation/current/autosignin.html
--- 2.0.1+ds-2/doc/pages/documentation/current/autosignin.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/autosignin.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:autosignin</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="index,follow"/>
+<meta name="robots" content="noindex,nofollow"/>
 <meta name="keywords" content="documentation,2.0,autosignin"/>
 <link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="autosignin.html"/>
@@ -66,10 +66,10 @@ This add-on is automatically enabled if
 	</tr>
 	</thead>
 	<tr class="row1 rowodd">
-		<td class="col0"> dwho </td><td class="col1"> $env→{REMOTE_ADDR} == &#039;192.168.42.42&#039; </td>
+		<td class="col0"> dwho </td><td class="col1"> <code>$env-&gt;{REMOTE_ADDR} eq &#039;192.168.42.42&#039; </code> </td>
 	</tr>
 </table></div>
-<!-- EDIT3 TABLE [369-444] --><div class="noteimportant">Username must be defined in the user database.
+<!-- EDIT3 TABLE [369-449] --><div class="noteimportant">Username must be defined in the user database.
 </div>
 </div>
 <!-- EDIT2 SECTION "Configuration" [196-] --></div>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/behindproxyminihowto.html 2.0.2+ds-1/doc/pages/documentation/current/behindproxyminihowto.html
--- 2.0.1+ds-2/doc/pages/documentation/current/behindproxyminihowto.html	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/behindproxyminihowto.html	2019-02-12 16:28:08.000000000 +0000
@@ -0,0 +1,129 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+  <meta charset="utf-8" />
+  <title>documentation:2.0:behindproxyminihowto</title>
+<meta name="generator" content="DokuWiki"/>
+<meta name="robots" content="index,follow"/>
+<meta name="keywords" content="documentation,2.0,behindproxyminihowto"/>
+<link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
+<link rel="start" href="behindproxyminihowto.html"/>
+<link rel="contents" href="behindproxyminihowto.html" title="Sitemap"/>
+<link rel="stylesheet" type="text/css" href="lib/exe/css.php.t.bootstrap3.css"/>
+<!-- //if:usedebianlibs
+  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
+//elsif:useexternallibs
+  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
+//elsif:cssminified
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
+//else -->
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
+<!-- //endif -->
+<script type="text/javascript">/*<![CDATA[*/var NS='documentation:2.0';var JSINFO = {"id":"documentation:2.0:behindproxyminihowto","namespace":"documentation:2.0"};
+/*!]]>*/</script>
+<script type="text/javascript" charset="utf-8" src="lib/exe/js.php.t.bootstrap3.js"></script>
+<!-- //if:usedebianlibs
+<script type="text/javascript" src="/javascript/jquery/jquery.min.js"></script>
+//elsif:useexternallibs
+<script type="text/javascript" src="http://code.jquery.com/jquery-2.2.0.min.js"></script>
+//elsif:jsminified
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.min.js"></script>
+//else -->
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.js"></script>
+<!-- //endif -->
+<!-- //if:usedebianlibs
+  <script type="text/javascript" src="/javascript/jquery-ui/jquery-ui.min.js"></script>
+//elsif:useexternallibs
+  <script type="text/javascript" src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
+//elsif:jsminified
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.min.js"></script>
+//else -->
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.js"></script>
+<!-- //endif -->
+</head>
+<body>
+<div class="dokuwiki export container">
+
+<h1 class="sectionedit1" id="running_lemonldapng_behind_a_reverse_proxy">Running LemonLDAP::NG behind a reverse proxy</h1>
+<div class="level1">
+
+<p>
+Your network infrastructure might require that LemonLDAP::NG components (Portal, Manager, Handler) run behind a reverse proxy.
+</p>
+
+<p>
+<img src="documentation/reverseproxy.png" class="mediacenter" alt="" />
+</p>
+
+<p>
+In this case, LemonLDAP::NG components will store the ip address of the connection between the reverse proxy and the webserver in the session, and in logs. This prevents features such as session restrictions and rules based on `ipAddr` from working as expected.
+</p>
+
+<p>
+A Content Delivery Network (CDN) would also have the same issue.
+</p>
+
+<p>
+In order to make LemonLDAP::NG behave correctly behind a proxy, you need to forward the original <abbr title="Internet Protocol">IP</abbr> address all the way to LemonLDAP::NG.
+</p>
+
+<p>
+In order to do this you have several options.
+</p>
+
+</div>
+<!-- EDIT1 SECTION "Running LemonLDAP::NG behind a reverse proxy" [1-751] -->
+<h2 class="sectionedit2" id="http_header">HTTP Header</h2>
+<div class="level2">
+
+<p>
+This generic method is the most likely to work in your particular environment.
+</p>
+
+<p>
+First, configure your reverse proxy (or CDN) to send the origin <abbr title="Internet Protocol">IP</abbr> address in a HTTP header. Most reverse proxies do this by default, generally in a header named <code>X-Forwarded-For</code> or <code>X-Real-<abbr title="Internet Protocol">IP</abbr></code>.
+</p>
+
+<p>
+Once the header is transmitted to LemonLDAP::NG&#039;s web server, you may uncomment the relevant parts of the configuration file.
+</p>
+<ul>
+<li class="level1"><div class="li"> For Nginx:</div>
+</li>
+</ul>
+<pre class="code file nginx">    set_real_ip_from  127.0.0.1;
+    real_ip_header    X-Forwarded-For;</pre>
+<div class="notetip">Make sure Nginx was compiled with the <a href="http://nginx.org/en/docs/http/ngx_http_realip_module.html" class="urlextern" title="http://nginx.org/en/docs/http/ngx_http_realip_module.html"  rel="nofollow">http_real_ip module</a>
+</div><ul>
+<li class="level1"><div class="li"> For Apache:</div>
+</li>
+</ul>
+<pre class="code file apache">     RemoteIPHeader X-Forwarded-For
+     RemoteIPInternalProxy 127.0.0.1</pre>
+<div class="notetip">Make sure the <a href="https://httpd.apache.org/docs/2.4/mod/mod_remoteip.html" class="urlextern" title="https://httpd.apache.org/docs/2.4/mod/mod_remoteip.html"  rel="nofollow">mod_remoteip module</a> is enabled in your Apache installation
+</div><div class="notewarning">Both modules need you to specify the address of your reverse proxy. Using the <code>http_real_ip</code> or <code>mod_remoteip</code> module might let an attacker impersonate any <abbr title="Internet Protocol">IP</abbr> address they want by setting the <code>X-Forwarded-For</code> header themselves. Please read the relevant module documentation carefully.
+</div>
+</div>
+<!-- EDIT2 SECTION "HTTP Header" [752-2007] -->
+<h2 class="sectionedit3" id="proxy_protocol">PROXY Protocol</h2>
+<div class="level2">
+
+<p>
+Alternatively, if your proxy supports the PROXY protocol (Nginx, HAProxy, Amazon ELB), you may use it to carry over the information almost transparently.
+</p>
+
+<p>
+Refer to your reverse proxy&#039;s documentation to find out how to enable the PROXY protocol on the reverse proxy side.
+</p>
+
+<p>
+Then, on the LemonLDAP::NG side, in the NGINX configuration of your Portal/Manager/Handler:
+</p>
+<pre class="code file nginx"> listen 80   proxy_protocol;
+# or
+# listen 443 ssl proxy_protocol;</pre>
+
+</div>
+<!-- EDIT3 SECTION "PROXY Protocol" [2008-] --></div>
+</body>
+</html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/browseablesessionbackend.html 2.0.2+ds-1/doc/pages/documentation/current/browseablesessionbackend.html
--- 2.0.1+ds-2/doc/pages/documentation/current/browseablesessionbackend.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/browseablesessionbackend.html	2019-02-12 16:28:08.000000000 +0000
@@ -155,21 +155,25 @@ You then just have to add the <code>Inde
 <p>
 Database must be prepared exactly like in <a href="sqlsessionbackend.html#prepare_the_database" class="wikilink1" title="documentation:2.0:sqlsessionbackend">SQL session backend</a> except that a field must be added for each data to index.
 </p>
-<pre class="code file sql"> Apache::<span class="kw1">SESSION</span>::Browseable::Postgres example:
-<span class="sy0">&lt;</span>code sql<span class="sy0">&gt;</span>
-<span class="kw1">CREATE</span> UNLOGGED <span class="kw1">TABLE</span> sessions <span class="br0">&#40;</span>
-    id <span class="kw1">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">64</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span><span class="sy0">,</span>
-    a_session text<span class="sy0">,</span>
-    _whatToTrace text<span class="sy0">,</span>
-    _session_kind text<span class="sy0">,</span>
-    _utime <span class="kw1">BIGINT</span><span class="sy0">,</span>
-    <span class="kw1">USER</span> text<span class="sy0">,</span>
+<div class="noteimportant">Data written to UNLOGGED tables is not written to the WAL, which makes them considerably faster than ordinary tables. However, they are not crash-safe: an unlogged table is automatically truncated after a crash or unclean shutdown. The contents of an unlogged table are also not replicated to standby servers. Any indexes created on an unlogged table are automatically unlogged as well.
+
+</div>
+<p>
+ Apache::Session::Browseable::Postgres example:
+</p>
+<pre class="code">CREATE UNLOGGED TABLE sessions (
+    id varchar(64) not null primary key,
+    a_session text,
+    _whatToTrace text,
+    _session_kind text,
+    _utime bigint,
+    user text,
     ipAddr text
-<span class="br0">&#41;</span>;
-<span class="kw1">CREATE</span> <span class="kw1">INDEX</span> uid1 <span class="kw1">ON</span> sessions <span class="kw1">USING</span> BTREE <span class="br0">&#40;</span>_whatToTrace<span class="br0">&#41;</span>;
-<span class="kw1">CREATE</span> <span class="kw1">INDEX</span> s1   <span class="kw1">ON</span> sessions <span class="br0">&#40;</span>_session_kind<span class="br0">&#41;</span>;
-<span class="kw1">CREATE</span> <span class="kw1">INDEX</span> u1   <span class="kw1">ON</span> sessions <span class="br0">&#40;</span>_utime<span class="br0">&#41;</span>;
-<span class="kw1">CREATE</span> <span class="kw1">INDEX</span> ip1  <span class="kw1">ON</span> sessions <span class="kw1">USING</span> BTREE <span class="br0">&#40;</span>ipAddr<span class="br0">&#41;</span>;</pre>
+);
+CREATE INDEX uid1 ON sessions USING BTREE (_whatToTrace);
+CREATE INDEX s1   ON sessions (_session_kind);
+CREATE INDEX u1   ON sessions (_utime);
+CREATE INDEX ip1  ON sessions USING BTREE (ipAddr);</pre>
 <div class="noteimportant">For Session Explorer and one-off sessions, it is recommended to use BTREE or any index method that indexes partial content.
 </div>
 <p>
@@ -178,7 +182,7 @@ Database must be prepared exactly like i
 <div class="notetip">With new Apache::Session::Browseable::<strong>PgHstore</strong> and <strong>PgJSON</strong>, you don&#039;t need to declare indexes in <code>CREATE TABLE</code> since “json” and “hstore” type are browseable. You should anyway add some indexes <em>(see manpage)</em>.
 </div>
 </div>
-<!-- EDIT7 SECTION "Prepare database" [2264-3488] -->
+<!-- EDIT7 SECTION "Prepare database" [2264-3898] -->
 <h3 class="sectionedit8" id="manager">Manager</h3>
 <div class="level3">
 
@@ -207,14 +211,14 @@ Go in the Manager and set the session mo
 		<td class="col0 centeralign">  <strong>Index</strong>  </td><td class="col1"> Index </td><td class="col2"> _whatToTrace ipAddr _session_kind _utime </td>
 	</tr>
 </table></div>
-<!-- EDIT9 TABLE [3811-4156] --><div class="notetip">Apache::Session::Browseable::MySQL doesn&#039;t use locks so performances are keeped.
+<!-- EDIT9 TABLE [4221-4566] --><div class="notetip">Apache::Session::Browseable::MySQL doesn&#039;t use locks so performances are keeped.
 <p>
 For databases like PostgreSQL, don&#039;t forget to add “Commit” with a value of 1
 </p>
 
 </div>
 </div>
-<!-- EDIT8 SECTION "Manager" [3489-4335] -->
+<!-- EDIT8 SECTION "Manager" [3899-4745] -->
 <h2 class="sectionedit10" id="browseable_ldap">Browseable LDAP</h2>
 <div class="level2">
 
@@ -268,9 +272,9 @@ You need to add the <code>Index</code> f
 		<td class="col0 centeralign">  <strong>ldapAttributeIndex</strong>  </td><td class="col1"> Attribute storing index </td><td class="col2"> ou </td>
 	</tr>
 </table></div>
-<!-- EDIT11 TABLE [4687-5421] -->
+<!-- EDIT11 TABLE [5097-5831] -->
 </div>
-<!-- EDIT10 SECTION "Browseable LDAP" [4336-5422] -->
+<!-- EDIT10 SECTION "Browseable LDAP" [4746-5832] -->
 <h2 class="sectionedit12" id="security">Security</h2>
 <div class="level2">
 
@@ -283,7 +287,7 @@ You can also use different user/password
 </p>
 
 </div>
-<!-- EDIT12 SECTION "Security" [5423-5642] -->
+<!-- EDIT12 SECTION "Security" [5833-6052] -->
 <h2 class="sectionedit13" id="performances">Performances</h2>
 <div class="level2">
 
@@ -294,37 +298,37 @@ Here are some recommended configurations
 <p>
 <strong>Browseable::Postgres</strong>:
 </p>
-<pre class="code sql"><span class="kw1">CREATE</span> UNLOGGED <span class="kw1">TABLE</span> sessions <span class="br0">&#40;</span>
-    id <span class="kw1">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">64</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span><span class="sy0">,</span>
-    a_session text<span class="sy0">,</span>
-    _whatToTrace text<span class="sy0">,</span>
-    _session_kind text<span class="sy0">,</span>
-    _utime <span class="kw1">BIGINT</span><span class="sy0">,</span>
-    <span class="kw1">USER</span> text<span class="sy0">,</span>
-    ipAddr <span class="kw1">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">64</span><span class="br0">&#41;</span>
-<span class="br0">&#41;</span>;
-<span class="kw1">CREATE</span> <span class="kw1">INDEX</span> uid1 <span class="kw1">ON</span> sessions <span class="kw1">USING</span> BTREE <span class="br0">&#40;</span>_whatToTrace text_pattern_ops<span class="br0">&#41;</span>;
-<span class="kw1">CREATE</span> <span class="kw1">INDEX</span> _s1 <span class="kw1">ON</span> sessions <span class="br0">&#40;</span>_session_kind<span class="br0">&#41;</span>;
-<span class="kw1">CREATE</span> <span class="kw1">INDEX</span> _u1 <span class="kw1">ON</span> sessions <span class="br0">&#40;</span>_utime<span class="br0">&#41;</span>;
-<span class="kw1">CREATE</span> <span class="kw1">INDEX</span> ip1 <span class="kw1">ON</span> sessions <span class="kw1">USING</span> BTREE <span class="br0">&#40;</span>ipAddr<span class="br0">&#41;</span></pre>
+<pre class="code">CREATE UNLOGGED TABLE sessions (
+    id varchar(64) not null primary key,
+    a_session text,
+    _whatToTrace text,
+    _session_kind text,
+    _utime bigint,
+    user text,
+    ipAddr varchar(64)
+);
+CREATE INDEX uid1 ON sessions USING BTREE (_whatToTrace text_pattern_ops);
+CREATE INDEX _s1 ON sessions (_session_kind);
+CREATE INDEX _u1 ON sessions (_utime);
+CREATE INDEX ip1 ON sessions USING BTREE (ipAddr)</pre>
 
 <p>
 <strong>Browseable::MySQL</strong>:
 </p>
-<pre class="code sql"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> sessions <span class="br0">&#40;</span>
-    id <span class="kw1">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">64</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span><span class="sy0">,</span>
-    a_session text<span class="sy0">,</span>
-    _whatToTrace <span class="kw1">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">64</span><span class="br0">&#41;</span><span class="sy0">,</span>
-    _session_kind <span class="kw1">VARCHAR</span><span class="br0">&#40;</span><span class="nu0">15</span><span class="br0">&#41;</span><span class="sy0">,</span>
-    <span class="kw1">USER</span> text<span class="sy0">,</span>
-    _utime <span class="kw1">BIGINT</span>
-<span class="br0">&#41;</span>;
-<span class="kw1">CREATE</span> <span class="kw1">INDEX</span> uid1 <span class="kw1">ON</span> sessions <span class="br0">&#40;</span>_whatToTrace<span class="br0">&#41;</span> <span class="kw1">USING</span> BTREE;
-<span class="kw1">CREATE</span> <span class="kw1">INDEX</span> _s1 <span class="kw1">ON</span> sessions <span class="br0">&#40;</span>_session_kind<span class="br0">&#41;</span>;
-<span class="kw1">CREATE</span> <span class="kw1">INDEX</span> _u1 <span class="kw1">ON</span> sessions <span class="br0">&#40;</span>_utime<span class="br0">&#41;</span>;
-<span class="kw1">CREATE</span> <span class="kw1">INDEX</span> ip1 <span class="kw1">ON</span> sessions <span class="br0">&#40;</span>ipAddr<span class="br0">&#41;</span> <span class="kw1">USING</span> BTREE;</pre>
+<pre class="code">CREATE TABLE sessions (
+    id varchar(64) not null primary key,
+    a_session text,
+    _whatToTrace varchar(64),
+    _session_kind varchar(15),
+    user text,
+    _utime bigint
+);
+CREATE INDEX uid1 ON sessions (_whatToTrace) USING BTREE;
+CREATE INDEX _s1 ON sessions (_session_kind);
+CREATE INDEX _u1 ON sessions (_utime);
+CREATE INDEX ip1 ON sessions (ipAddr) USING BTREE;</pre>
 
 </div>
-<!-- EDIT13 SECTION "Performances" [5643-] --></div>
+<!-- EDIT13 SECTION "Performances" [6053-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/cda.html 2.0.2+ds-1/doc/pages/documentation/current/cda.html
--- 2.0.1+ds-2/doc/pages/documentation/current/cda.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/cda.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:cda</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="index,follow"/>
+<meta name="robots" content="noindex,nofollow"/>
 <meta name="keywords" content="documentation,2.0,cda"/>
 <link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="cda.html"/>
@@ -111,7 +111,7 @@ To use this feature only locally, edit <
 <div class="level3">
 
 <p>
-Choose “<abbr title="Cross Domain Authentication">CDA</abbr>” has type for each virtualHost concerned by <abbr title="Cross Domain Authentication">CDA</abbr> <em>(ie not in main domain)</em>.
+Choose “<abbr title="Cross Domain Authentication">CDA</abbr>” as type for each virtualHost concerned by <abbr title="Cross Domain Authentication">CDA</abbr> <em>(ie not in main domain)</em>.
 </p>
 
 </div>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/changeconfbackend.html 2.0.2+ds-1/doc/pages/documentation/current/changeconfbackend.html
--- 2.0.1+ds-2/doc/pages/documentation/current/changeconfbackend.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/changeconfbackend.html	2019-02-12 16:28:08.000000000 +0000
@@ -86,7 +86,7 @@ The <code>convertConfig</code> utility r
 <ul>
 <li class="level1"><div class="li"> Prepare your new lemonldap-ng.ini file</div>
 </li>
-<li class="level1"><div class="li"> Configure your new backend (create SQL database,…)</div>
+<li class="level1"><div class="li"> Configure your new backend (create SQL database,...)</div>
 </li>
 <li class="level1"><div class="li"> Launch that:</div>
 </li>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/cli_examples.html 2.0.2+ds-1/doc/pages/documentation/current/cli_examples.html
--- 2.0.1+ds-2/doc/pages/documentation/current/cli_examples.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/cli_examples.html	2019-02-12 16:28:08.000000000 +0000
@@ -76,7 +76,7 @@ This page shows some examples of <abbr t
 <div class="level2">
 
 <p>
-When setting HTTPS, you first need to modify Apache/Nginx configuration, then you must configure <abbr title="LemonLDAP::NG">LL::NG</abbr> to change portal <abbr title="Uniform Resource Locator">URL</abbr>, Handler redirections, cookie settings, …
+When setting HTTPS, you first need to modify Apache/Nginx configuration, then you must configure <abbr title="LemonLDAP::NG">LL::NG</abbr> to change portal <abbr title="Uniform Resource Locator">URL</abbr>, Handler redirections, cookie settings, ...
 </p>
 <pre class="code">/usr/share/lemonldap-ng/bin/lemonldap-ng-cli -yes 1 set portal https://auth.example.com https 1 securedCookie 1</pre>
 
@@ -154,9 +154,9 @@ In this example we have:
 </li>
 <li class="level1"><div class="li"> Access rules:</div>
 <ul>
-<li class="level2"><div class="li"> default ⇒ accept</div>
+<li class="level2"><div class="li"> default =&gt; accept</div>
 </li>
-<li class="level2"><div class="li"> Logout: ^/logout\.php ⇒ logout_sso</div>
+<li class="level2"><div class="li"> Logout: ^/logout\.php =&gt; logout_sso</div>
 </li>
 </ul>
 </li>
@@ -190,17 +190,17 @@ In this example we use:
 </li>
 <li class="level1"><div class="li"> LDAP attributes:</div>
 <ul>
-<li class="level2"><div class="li"> uid ⇒ uid</div>
+<li class="level2"><div class="li"> uid =&gt; uid</div>
 </li>
-<li class="level2"><div class="li"> cn ⇒ cn</div>
+<li class="level2"><div class="li"> cn =&gt; cn</div>
 </li>
-<li class="level2"><div class="li"> mail ⇒ mail</div>
+<li class="level2"><div class="li"> mail =&gt; mail</div>
 </li>
-<li class="level2"><div class="li"> sn ⇒ sn</div>
+<li class="level2"><div class="li"> sn =&gt; sn</div>
 </li>
-<li class="level2"><div class="li"> givenName ⇒ givenName</div>
+<li class="level2"><div class="li"> givenName =&gt; givenName</div>
 </li>
-<li class="level2"><div class="li"> mobile ⇒ mobile</div>
+<li class="level2"><div class="li"> mobile =&gt; mobile</div>
 </li>
 </ul>
 </li>
@@ -309,11 +309,11 @@ In this example we have:
 </li>
 <li class="level1"><div class="li"> Exported attributes:</div>
 <ul>
-<li class="level2"><div class="li"> email ⇒ mail</div>
+<li class="level2"><div class="li"> email =&gt; mail</div>
 </li>
-<li class="level2"><div class="li"> familiy_name ⇒ sn</div>
+<li class="level2"><div class="li"> familiy_name =&gt; sn</div>
 </li>
-<li class="level2"><div class="li"> name ⇒ cn</div>
+<li class="level2"><div class="li"> name =&gt; cn</div>
 </li>
 </ul>
 </li>
@@ -346,17 +346,21 @@ In this example we have:
 
 <p>
 Create the category “applications”:
-```
-/usr/share/lemonldap-ng/bin/lemonldap-ng-cli addKey applicationList/applications type category  applicationList/applications catname Applications
-```
 </p>
+<pre class="code">/usr/share/lemonldap-ng/bin/lemonldap-ng-cli addKey \
+applicationList/applications type category \
+applicationList/applications catname Applications</pre>
 
 <p>
 Create the application “sample” inside category “applications”:
-```
-/usr/share/lemonldap-ng/bin/lemonldap-ng-cli addKey applicationList/icons/kmultiple.png” applicationList/applications/sample/options name “Sample application” applicationList/applications/sample/options uri “<a href="https://sample.example.com/" class="urlextern" title="https://sample.example.com/"  rel="nofollow">https://sample.example.com/</a>”
-```
 </p>
+<pre class="code">/usr/share/lemonldap-ng/bin/lemonldap-ng-cli addKey \
+applicationList/applications/sample type application \
+applicationList/applications/sample/options description &quot;A sample application&quot; \
+applicationList/applications/sample/options display &quot;auto&quot; \
+applicationList/icons/kmultiple.png&quot; \
+applicationList/applications/sample/options name &quot;Sample application&quot; \
+applicationList/applications/sample/options uri &quot;https://sample.example.com/&quot;</pre>
 
 </div>
 <!-- EDIT10 SECTION "Categories and applications in menu" [9178-] --></div>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/configlocation.html 2.0.2+ds-1/doc/pages/documentation/current/configlocation.html
--- 2.0.1+ds-2/doc/pages/documentation/current/configlocation.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/configlocation.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:configlocation</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="noindex,nofollow"/>
+<meta name="robots" content="index,follow"/>
 <meta name="keywords" content="documentation,2.0,configlocation"/>
 <link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="configlocation.html"/>
@@ -721,7 +721,7 @@ These parameters can be overwritten in L
 <div class="notetip">You only need a reload <abbr title="Uniform Resource Locator">URL</abbr> per physical servers, as Handlers share the same configuration cache on each physical server.
 </div>
 <p>
-The <code>reload</code> target is managed in Apache or Nginx configuration, inside a virtual host protected by LemonLDAP::NG Handler (see below examples in Apache→handler or Nginx→Handler).
+The <code>reload</code> target is managed in Apache or Nginx configuration, inside a virtual host protected by LemonLDAP::NG Handler (see below examples in Apache-&gt;handler or Nginx-&gt;Handler).
 </p>
 <div class="noteimportant">You must allow access to declared URLs to your Manager <abbr title="Internet Protocol">IP</abbr>.
 </div><div class="noteimportant">If you want to use reload mechanism on a portal only host, you must install a handler in Portal host to be able to refresh local cache. Include <code>handler-nginx.conf</code> or <code>handler-apache2.conf</code> for example
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/configvhost.html 2.0.2+ds-1/doc/pages/documentation/current/configvhost.html
--- 2.0.1+ds-2/doc/pages/documentation/current/configvhost.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/configvhost.html	2019-02-12 16:28:08.000000000 +0000
@@ -167,7 +167,7 @@ To learn more about using Apache as reve
 <p>
 A little floating menu can be added to application with this simple Apache configuration:
 </p>
-<pre class="code file apache">PerlModule Lemonldap::NG::Handler::Menu
+<pre class="code file apache">PerlModule Lemonldap::NG::Handler::Apache2::Menu
 PerlOutputFilterHandler Lemonldap::NG::Handler::ApacheMP2::Menu-&gt;run</pre>
 
 <p>
@@ -179,7 +179,7 @@ PerlOutputFilterHandler Lemonldap::NG::H
 <div class="noteimportant">You need to disable mod_deflate to use the floating menu
 </div>
 </div>
-<!-- EDIT5 SECTION "Add a floating menu" [2576-3114] -->
+<!-- EDIT5 SECTION "Add a floating menu" [2576-3123] -->
 <h2 class="sectionedit6" id="nginx_configuration">Nginx configuration</h2>
 <div class="level2">
 
@@ -253,7 +253,7 @@ Then you can take any virtual host and m
   }</pre>
 
 </div>
-<!-- EDIT6 SECTION "Nginx configuration" [3115-5001] -->
+<!-- EDIT6 SECTION "Nginx configuration" [3124-5010] -->
 <h3 class="sectionedit7" id="hosted_application1">Hosted application</h3>
 <div class="level3">
 
@@ -312,7 +312,7 @@ server {
 }</pre>
 
 </div>
-<!-- EDIT7 SECTION "Hosted application" [5002-6630] -->
+<!-- EDIT7 SECTION "Hosted application" [5011-6639] -->
 <h3 class="sectionedit8" id="reverse_proxy1">Reverse proxy</h3>
 <div class="level3">
 
@@ -363,7 +363,7 @@ server {
 }</pre>
 
 </div>
-<!-- EDIT8 SECTION "Reverse proxy" [6631-7924] -->
+<!-- EDIT8 SECTION "Reverse proxy" [6640-7933] -->
 <h2 class="sectionedit9" id="lemonldapng_configuration">LemonLDAP::NG configuration</h2>
 <div class="level2">
 
@@ -390,7 +390,7 @@ A virtual host contains:
 </ul>
 
 </div>
-<!-- EDIT9 SECTION "LemonLDAP::NG configuration" [7925-8524] -->
+<!-- EDIT9 SECTION "LemonLDAP::NG configuration" [7934-8533] -->
 <h3 class="sectionedit10" id="access_rules_and_http_headers">Access rules and HTTP headers</h3>
 <div class="level3">
 
@@ -399,7 +399,7 @@ See <strong><a href="writingrulesand_hea
 </p>
 
 </div>
-<!-- EDIT10 SECTION "Access rules and HTTP headers" [8525-8717] -->
+<!-- EDIT10 SECTION "Access rules and HTTP headers" [8534-8726] -->
 <h3 class="sectionedit11" id="post_data">POST data</h3>
 <div class="level3">
 
@@ -408,7 +408,7 @@ See <strong><a href="formreplay.html" cl
 </p>
 
 </div>
-<!-- EDIT11 SECTION "POST data" [8718-8852] -->
+<!-- EDIT11 SECTION "POST data" [8727-8861] -->
 <h3 class="sectionedit12" id="options">Options</h3>
 <div class="level3">
 
@@ -422,9 +422,9 @@ Some options are available:
 </li>
 <li class="level1"><div class="li"> Maintenance mode: reject all requests with a maintenance message</div>
 </li>
-<li class="level1"><div class="li"> Aliases: list of aliases for this virtual host <em>(avoid to rewrite rules,…)</em></div>
+<li class="level1"><div class="li"> Aliases: list of aliases for this virtual host <em>(avoid to rewrite rules,...)</em></div>
 </li>
-<li class="level1"><div class="li"> Type: handler type <em>(normal, <a href="devopshandler.html" class="wikilink1" title="documentation:2.0:devopshandler">DevOps Handler</a>,…)</em></div>
+<li class="level1"><div class="li"> Type: handler type <em>(normal, <a href="devopshandler.html" class="wikilink1" title="documentation:2.0:devopshandler">DevOps Handler</a>,...)</em></div>
 </li>
 <li class="level1"><div class="li"> Authentication level required: this options avoid to reject user with a rule based on <code>$_authenticationLevel</code>. When user hasn&#039;t the required level, he is redirected to an upgrade page in the portal</div>
 </li>
@@ -435,6 +435,6 @@ Some options are available:
 </p>
 
 </div>
-<!-- EDIT12 SECTION "Options" [8853-] --></div>
+<!-- EDIT12 SECTION "Options" [8862-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/customhandlers.html 2.0.2+ds-1/doc/pages/documentation/current/customhandlers.html
--- 2.0.1+ds-2/doc/pages/documentation/current/customhandlers.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/customhandlers.html	2019-02-12 16:28:08.000000000 +0000
@@ -138,7 +138,7 @@ If you want to add another, you must wri
 </li>
 <li class="level1"><div class="li"> write the main platform file (<code>Lemonldap::NG::Handler::MyPlatform::Main</code>) that provides required method <em>(see <code>lemonldap-ng-handler/lib/Lemonldap/NG/Handler/*/Main</code> for examples)</em> and inherits from <code>Lemonldap::NG::Handler::Main</code></div>
 </li>
-<li class="level1"><div class="li"> write the “type” wrapper files (AuthBasic,…).</div>
+<li class="level1"><div class="li"> write the “type” wrapper files (AuthBasic,...).</div>
 </li>
 </ul>
 
@@ -161,9 +161,9 @@ Wrapper usually look at this:
 Three actions are needed:
 </p>
 <ul>
-<li class="level1"><div class="li"> declare your own module in the manager “General Parameters » Advanced Parameters » Custom handlers (Nginx)”. Key is the name that will be used below and value is the name of the custom package,</div>
+<li class="level1"><div class="li"> declare your own module in the manager “General Parameters &gt;&gt; Advanced Parameters &gt;&gt; Custom handlers (Nginx)”. Key is the name that will be used below and value is the name of the custom package,</div>
 </li>
-<li class="level1"><div class="li"> in your Nginx configuration file, add <code>LLTYPE=&lt;name&gt;;</code> in the <code>location = /lmauth {…}</code> paragraph</div>
+<li class="level1"><div class="li"> in your Nginx configuration file, add <code>LLTYPE=&lt;name&gt;;</code> in the <code>location = /lmauth {...}</code> paragraph</div>
 </li>
 <li class="level1"><div class="li"> restart FastCGI server(s) <em>(reload is not enough here)</em></div>
 </li>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/devopshandler.html 2.0.2+ds-1/doc/pages/documentation/current/devopshandler.html
--- 2.0.1+ds-2/doc/pages/documentation/current/devopshandler.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/devopshandler.html	2019-02-12 16:28:08.000000000 +0000
@@ -64,7 +64,7 @@ This handler is designed to read vhost c
 </dd></dl>
 
 <p>
-If this file is not found, the default rule “accept” is applied and just “Auth-User” header is sent (Auth-User ⇒ $uid).
+If this file is not found, the default rule “accept” is applied and just “Auth-User” header is sent (Auth-User =&gt; $uid).
 </p>
 
 <p>
Binary files 2.0.1+ds-2/doc/pages/documentation/current/documentation/llng_deps.0fea6a13c52b4d4725368f24b045ca84.png and 2.0.2+ds-1/doc/pages/documentation/current/documentation/llng_deps.0fea6a13c52b4d4725368f24b045ca84.png differ
Binary files 2.0.1+ds-2/doc/pages/documentation/current/documentation/llng_deps.16695f791d0c8e3890829b1504fb463d.png and 2.0.2+ds-1/doc/pages/documentation/current/documentation/llng_deps.16695f791d0c8e3890829b1504fb463d.png differ
Binary files 2.0.1+ds-2/doc/pages/documentation/current/documentation/llng_deps.5777cea9f5c8fa98053294e9fcbf9e90.png and 2.0.2+ds-1/doc/pages/documentation/current/documentation/llng_deps.5777cea9f5c8fa98053294e9fcbf9e90.png differ
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/documentation/llng_deps.png_documentation_2.0_prereq.html 2.0.2+ds-1/doc/pages/documentation/current/documentation/llng_deps.png_documentation_2.0_prereq.html
--- 2.0.1+ds-2/doc/pages/documentation/current/documentation/llng_deps.png_documentation_2.0_prereq.html	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/documentation/llng_deps.png_documentation_2.0_prereq.html	2019-02-12 16:28:08.000000000 +0000
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en" dir="ltr" class="no-js">
+<head>
+  <meta charset="UTF-8" />
+  <title>documentation:llng_deps.png [LemonLDAP::NG]</title>
+  <script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
+  <meta name="viewport" content="width=device-width,initial-scale=1" />
+  <link rel="shortcut icon" href="../lib/tpl/bootstrap3/images/favicon.ico" />
+<link rel="apple-touch-icon" href="../lib/tpl/bootstrap3/images/apple-touch-icon.png" />
+      <!-- //if:usedebianlibs
+  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
+//elsif:useexternallibs
+  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
+//elsif:cssminified
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
+//else -->
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
+<!-- //endif -->/>
+    <script type="text/javascript">/*<![CDATA[*/
+    var TPL_CONFIG = {"tableFullWidth":1};
+  /*!]]>*/</script>
+  <meta name="generator" content="DokuWiki"/>
+<meta name="robots" content="index,follow"/>
+<link rel="search" type="application/opensearchdescription+xml" href="../lib/exe/opensearch.html" title="LemonLDAP::NG"/>
+<link rel="start" href="../prereq.html"/>
+<link rel="contents" href="../prereq.html" title="Sitemap"/>
+<link rel="stylesheet" type="text/css" href="../lib/exe/css.php.t.bootstrap3.css"/>
+<!-- //if:usedebianlibs
+  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
+//elsif:useexternallibs
+  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
+//elsif:cssminified
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
+//else -->
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
+<!-- //endif -->
+<script type="text/javascript">/*<![CDATA[*/var NS='';var JSINFO = null;
+/*!]]>*/</script>
+<script type="text/javascript" charset="utf-8" src="../lib/exe/js.php.t.bootstrap3.js"></script>
+<!-- //if:usedebianlibs
+<script type="text/javascript" src="/javascript/jquery/jquery.min.js"></script>
+//elsif:useexternallibs
+<script type="text/javascript" src="http://code.jquery.com/jquery-2.2.0.min.js"></script>
+//elsif:jsminified
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.min.js"></script>
+//else -->
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.js"></script>
+<!-- //endif -->
+<!-- //if:usedebianlibs
+  <script type="text/javascript" src="/javascript/jquery-ui/jquery-ui.min.js"></script>
+//elsif:useexternallibs
+  <script type="text/javascript" src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
+//elsif:jsminified
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.min.js"></script>
+//else -->
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.js"></script>
+<!-- //endif -->
+  <script type="text/javascript" src="/javascript/bootstrap/js/bootstrap.min.js"></script>
+  <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
+  <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+  <!--[if lt IE 9]>
+  <![endif]-->
+</head>
+
+<body class="container">
+  <!--[if lte IE 7 ]><div id="IE7"><![endif]--><!--[if IE 8 ]><div id="IE8"><![endif]-->
+  <div id="dokuwiki__detail" class="dokuwiki mode_ tpl_bootstrap3   ">
+
+    
+    
+      <h1 class="page-header">
+        <i class="glyphicon glyphicon-picture"></i> documentation:llng_deps.png      </h1>
+
+      <div class="content">
+
+        <a href="llng_deps.0fea6a13c52b4d4725368f24b045ca84.png" title="View original file"><img width="900" height="636" class="img_detail" alt="llng_deps.png" title="llng_deps.png" src="llng_deps.16695f791d0c8e3890829b1504fb463d.png"/></a>
+        <div class="img_detail">
+
+          <div class="panel panel-default">
+            <div class="panel-heading">
+              <h2 class="panel-title"><i class="glyphicon glyphicon-info-sign text-info"></i> llng_deps.png</h2>
+            </div>
+            <div class="panel-body">
+              <dl><dt>Date:</dt><dd>2019/01/15 15:52</dd><dt>Filename:</dt><dd>llng_deps.png</dd><dt>Format:</dt><dd>PNG</dd><dt>Size:</dt><dd>141KB</dd><dt>Width:</dt><dd>1123</dd><dt>Height:</dt><dd>794</dd></dl>                          </div>
+          </div>
+
+        </div>
+      </div><!-- /.content -->
+
+      <p class="back">
+
+        <hr/>
+
+        <div class="btn-group">
+          <a href="../prereq.html"  class="action img_backto" accesskey="b" rel="nofollow" title="Back to documentation:2.0:prereq [B]">Back to documentation:2.0:prereq</a>                  </div>
+
+      </p>
+
+      </div>
+  <!--[if ( lte IE 7 | IE 8 ) ]></div><![endif]-->
+</body>
+</html>
Binary files 2.0.1+ds-2/doc/pages/documentation/current/documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png and 2.0.2+ds-1/doc/pages/documentation/current/documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png differ
Binary files 2.0.1+ds-2/doc/pages/documentation/current/documentation/new.png and 2.0.2+ds-1/doc/pages/documentation/current/documentation/new.png differ
Binary files 2.0.1+ds-2/doc/pages/documentation/current/documentation/reverseproxy.png and 2.0.2+ds-1/doc/pages/documentation/current/documentation/reverseproxy.png differ
Binary files 2.0.1+ds-2/doc/pages/documentation/current/documentation/server_to_server.0fea6a13c52b4d4725368f24b045ca84.png and 2.0.2+ds-1/doc/pages/documentation/current/documentation/server_to_server.0fea6a13c52b4d4725368f24b045ca84.png differ
Binary files 2.0.1+ds-2/doc/pages/documentation/current/documentation/server_to_server.c604eacf6852b707ad1e7a22be98d983.png and 2.0.2+ds-1/doc/pages/documentation/current/documentation/server_to_server.c604eacf6852b707ad1e7a22be98d983.png differ
Binary files 2.0.1+ds-2/doc/pages/documentation/current/documentation/server_to_server.png and 2.0.2+ds-1/doc/pages/documentation/current/documentation/server_to_server.png differ
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/documentation/server_to_server.png_documentation_2.0_servertoserver.html 2.0.2+ds-1/doc/pages/documentation/current/documentation/server_to_server.png_documentation_2.0_servertoserver.html
--- 2.0.1+ds-2/doc/pages/documentation/current/documentation/server_to_server.png_documentation_2.0_servertoserver.html	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/documentation/server_to_server.png_documentation_2.0_servertoserver.html	2019-02-12 16:28:08.000000000 +0000
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en" dir="ltr" class="no-js">
+<head>
+  <meta charset="UTF-8" />
+  <title>documentation:server_to_server.png [LemonLDAP::NG]</title>
+  <script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
+  <meta name="viewport" content="width=device-width,initial-scale=1" />
+  <link rel="shortcut icon" href="../lib/tpl/bootstrap3/images/favicon.ico" />
+<link rel="apple-touch-icon" href="../lib/tpl/bootstrap3/images/apple-touch-icon.png" />
+      <!-- //if:usedebianlibs
+  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
+//elsif:useexternallibs
+  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
+//elsif:cssminified
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
+//else -->
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
+<!-- //endif -->/>
+    <script type="text/javascript">/*<![CDATA[*/
+    var TPL_CONFIG = {"tableFullWidth":1};
+  /*!]]>*/</script>
+  <meta name="generator" content="DokuWiki"/>
+<meta name="robots" content="index,follow"/>
+<link rel="search" type="application/opensearchdescription+xml" href="../lib/exe/opensearch.html" title="LemonLDAP::NG"/>
+<link rel="start" href="../servertoserver.html"/>
+<link rel="contents" href="../servertoserver.html" title="Sitemap"/>
+<link rel="stylesheet" type="text/css" href="../lib/exe/css.php.t.bootstrap3.css"/>
+<!-- //if:usedebianlibs
+  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
+//elsif:useexternallibs
+  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
+//elsif:cssminified
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
+//else -->
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
+<!-- //endif -->
+<script type="text/javascript">/*<![CDATA[*/var NS='';var JSINFO = null;
+/*!]]>*/</script>
+<script type="text/javascript" charset="utf-8" src="../lib/exe/js.php.t.bootstrap3.js"></script>
+<!-- //if:usedebianlibs
+<script type="text/javascript" src="/javascript/jquery/jquery.min.js"></script>
+//elsif:useexternallibs
+<script type="text/javascript" src="http://code.jquery.com/jquery-2.2.0.min.js"></script>
+//elsif:jsminified
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.min.js"></script>
+//else -->
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.js"></script>
+<!-- //endif -->
+<!-- //if:usedebianlibs
+  <script type="text/javascript" src="/javascript/jquery-ui/jquery-ui.min.js"></script>
+//elsif:useexternallibs
+  <script type="text/javascript" src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
+//elsif:jsminified
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.min.js"></script>
+//else -->
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.js"></script>
+<!-- //endif -->
+  <script type="text/javascript" src="/javascript/bootstrap/js/bootstrap.min.js"></script>
+  <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
+  <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+  <!--[if lt IE 9]>
+  <![endif]-->
+</head>
+
+<body class="container">
+  <!--[if lte IE 7 ]><div id="IE7"><![endif]--><!--[if IE 8 ]><div id="IE8"><![endif]-->
+  <div id="dokuwiki__detail" class="dokuwiki mode_ tpl_bootstrap3   ">
+
+    
+    
+      <h1 class="page-header">
+        <i class="glyphicon glyphicon-picture"></i> documentation:server_to_server.png      </h1>
+
+      <div class="content">
+
+        <a href="server_to_server.0fea6a13c52b4d4725368f24b045ca84.png" title="View original file"><img width="867" height="542" class="img_detail" alt="server_to_server.png" title="server_to_server.png" src="server_to_server.c604eacf6852b707ad1e7a22be98d983.png"/></a>
+        <div class="img_detail">
+
+          <div class="panel panel-default">
+            <div class="panel-heading">
+              <h2 class="panel-title"><i class="glyphicon glyphicon-info-sign text-info"></i> server_to_server.png</h2>
+            </div>
+            <div class="panel-body">
+              <dl><dt>Date:</dt><dd>2019/01/15 15:52</dd><dt>Filename:</dt><dd>server_to_server.png</dd><dt>Format:</dt><dd>PNG</dd><dt>Size:</dt><dd>52KB</dd><dt>Width:</dt><dd>867</dd><dt>Height:</dt><dd>542</dd></dl>                          </div>
+          </div>
+
+        </div>
+      </div><!-- /.content -->
+
+      <p class="back">
+
+        <hr/>
+
+        <div class="btn-group">
+          <a href="../servertoserver.html"  class="action img_backto" accesskey="b" rel="nofollow" title="Back to documentation:2.0:servertoserver [B]">Back to documentation:2.0:servertoserver</a>                  </div>
+
+      </p>
+
+      </div>
+  <!--[if ( lte IE 7 | IE 8 ) ]></div><![endif]-->
+</body>
+</html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/dos 2.0.2+ds-1/doc/pages/documentation/current/dos
--- 2.0.1+ds-2/doc/pages/documentation/current/dos	2018-12-21 14:21:00.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/dos	2019-02-12 16:27:58.000000000 +0000
@@ -23,10 +23,10 @@
 <link rel="alternate" type="application/rss+xml" title="Current namespace" href="/feed.php?mode=list&amp;ns=documentation:2.0"/>
 <link rel="alternate" type="text/html" title="Plain HTML" href="/_export/xhtml/documentation/2.0/dos"/>
 <link rel="alternate" type="text/plain" title="Wiki Markup" href="/_export/raw/documentation/2.0/dos"/>
-<link rel="stylesheet" type="text/css" href="/lib/exe/css.php?t=bootstrap3&amp;tseed=68165aeb4a485b8d6b99b5c80ffc4981"/>
+<link rel="stylesheet" type="text/css" href="/lib/exe/css.php?t=bootstrap3&amp;tseed=666dbe073d7d2522373106d8d2d68438"/>
 <script type="text/javascript">/*<![CDATA[*/var NS='documentation:2.0';var JSINFO = {"id":"documentation:2.0:dos","namespace":"documentation:2.0"};
 /*!]]>*/</script>
-<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=68165aeb4a485b8d6b99b5c80ffc4981&amp;template=bootstrap3"></script>
+<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=666dbe073d7d2522373106d8d2d68438&amp;template=bootstrap3"></script>
   <script type="text/javascript" src="/lib/tpl/bootstrap3/assets/bootstrap/js/bootstrap.min.js"></script>
   <style type="text/css">
     body { padding-top: 20px; }
@@ -90,7 +90,7 @@
         <form action="/start" accept-charset="utf-8" class="search" id="dw__search" method="get" role="search"><div class="no"><input type="hidden" name="do" value="search" /><input type="text" id="qsearch__in" accesskey="f" name="id" class="edit" title="[F]" /><input type="submit" value="Search" class="button" title="Search" /><div id="qsearch__out" class="ajax_qsearch JSpopup"></div></div></form>
         
         <ul class="nav navbar-nav">
-                    <li><a href="/documentation/2.0/dos?do=login&amp;sectok=a56ff368e970c958de63b823f65c2cf0"  class="action login" rel="nofollow" title="Login"><i class="glyphicon glyphicon-log-in"></i> Login</a></li>        </ul>
+                    <li><a href="/documentation/2.0/dos?do=login&amp;sectok=0f10c8fca57376e7bc8695f4a434476e"  class="action login" rel="nofollow" title="Login"><i class="glyphicon glyphicon-log-in"></i> Login</a></li>        </ul>
 
       </div>
 
@@ -157,7 +157,28 @@ You&#039;ve followed a link to a topic t
 <div class="text-center">
 </p>
 
-<h3 class="sectionedit1" id="hosted_by">Hosted by</h3>
+<h3 class="sectionedit1" id="social_networks">Social networks</h3>
+<div class="level3">
+
+<p>
+
+<p><a href="https://twitter.com/lemonldapng/" class="btn btn-large btn-info"><i class="glyphicon glyphicon-retweet"></i> Twitter</a></p>
+<p><a href="https://www.facebook.com/lemonldapng/" class="btn btn-large btn-primary"><i class="glyphicon glyphicon-thumbs-up"></i> Facebook</a></p>
+
+</p>
+
+<p>
+</div>
+</p>
+<hr />
+
+<p>
+<div class="text-center">
+</p>
+
+</div>
+<!-- EDIT1 SECTION "Social networks" [41-433] -->
+<h3 class="sectionedit2" id="hosted_by">Hosted by</h3>
 <div class="level3">
 
 <p>
@@ -171,8 +192,8 @@ You&#039;ve followed a link to a topic t
 </p>
 
 </div>
-<!-- EDIT1 SECTION "Hosted by" [40-174] -->
-<h3 class="sectionedit2" id="certifications">Certifications</h3>
+<!-- EDIT2 SECTION "Hosted by" [434-568] -->
+<h3 class="sectionedit3" id="certifications">Certifications</h3>
 <div class="level3">
 
 <p>
@@ -192,8 +213,8 @@ You&#039;ve followed a link to a topic t
 </p>
 
 </div>
-<!-- EDIT2 SECTION "Certifications" [175-534] -->
-<h3 class="sectionedit3" id="awards">Awards</h3>
+<!-- EDIT3 SECTION "Certifications" [569-928] -->
+<h3 class="sectionedit4" id="awards">Awards</h3>
 <div class="level3">
 
 <p>
@@ -222,7 +243,7 @@ You&#039;ve followed a link to a topic t
 
 
 </div>
-<!-- EDIT3 SECTION "Awards" [535-] -->          </div>
+<!-- EDIT4 SECTION "Awards" [929-] -->          </div>
   </div>
 </aside>
 
@@ -241,7 +262,7 @@ You&#039;ve followed a link to a topic t
       
     </div><!-- /site -->
 
-    <div class="no"><img src="/lib/exe/indexer.php?id=documentation%3A2.0%3Ados&amp;1545402061" width="2" height="1" alt="" /></div>
+    <div class="no"><img src="/lib/exe/indexer.php?id=documentation%3A2.0%3Ados&amp;1549988879" width="2" height="1" alt="" /></div>
     <div id="screen__mode" class="no">
       <span class="visible-xs"></span>
       <span class="visible-sm"></span>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/exploit 2.0.2+ds-1/doc/pages/documentation/current/exploit
--- 2.0.1+ds-2/doc/pages/documentation/current/exploit	2018-12-21 14:21:02.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/exploit	2019-02-12 16:27:58.000000000 +0000
@@ -23,10 +23,10 @@
 <link rel="alternate" type="application/rss+xml" title="Current namespace" href="/feed.php?mode=list&amp;ns=documentation:2.0"/>
 <link rel="alternate" type="text/html" title="Plain HTML" href="/_export/xhtml/documentation/2.0/exploit"/>
 <link rel="alternate" type="text/plain" title="Wiki Markup" href="/_export/raw/documentation/2.0/exploit"/>
-<link rel="stylesheet" type="text/css" href="/lib/exe/css.php?t=bootstrap3&amp;tseed=68165aeb4a485b8d6b99b5c80ffc4981"/>
+<link rel="stylesheet" type="text/css" href="/lib/exe/css.php?t=bootstrap3&amp;tseed=666dbe073d7d2522373106d8d2d68438"/>
 <script type="text/javascript">/*<![CDATA[*/var NS='documentation:2.0';var JSINFO = {"id":"documentation:2.0:exploit","namespace":"documentation:2.0"};
 /*!]]>*/</script>
-<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=68165aeb4a485b8d6b99b5c80ffc4981&amp;template=bootstrap3"></script>
+<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=666dbe073d7d2522373106d8d2d68438&amp;template=bootstrap3"></script>
   <script type="text/javascript" src="/lib/tpl/bootstrap3/assets/bootstrap/js/bootstrap.min.js"></script>
   <style type="text/css">
     body { padding-top: 20px; }
@@ -90,7 +90,7 @@
         <form action="/start" accept-charset="utf-8" class="search" id="dw__search" method="get" role="search"><div class="no"><input type="hidden" name="do" value="search" /><input type="text" id="qsearch__in" accesskey="f" name="id" class="edit" title="[F]" /><input type="submit" value="Search" class="button" title="Search" /><div id="qsearch__out" class="ajax_qsearch JSpopup"></div></div></form>
         
         <ul class="nav navbar-nav">
-                    <li><a href="/documentation/2.0/exploit?do=login&amp;sectok=a56ff368e970c958de63b823f65c2cf0"  class="action login" rel="nofollow" title="Login"><i class="glyphicon glyphicon-log-in"></i> Login</a></li>        </ul>
+                    <li><a href="/documentation/2.0/exploit?do=login&amp;sectok=0f10c8fca57376e7bc8695f4a434476e"  class="action login" rel="nofollow" title="Login"><i class="glyphicon glyphicon-log-in"></i> Login</a></li>        </ul>
 
       </div>
 
@@ -157,7 +157,28 @@ You&#039;ve followed a link to a topic t
 <div class="text-center">
 </p>
 
-<h3 class="sectionedit1" id="hosted_by">Hosted by</h3>
+<h3 class="sectionedit1" id="social_networks">Social networks</h3>
+<div class="level3">
+
+<p>
+
+<p><a href="https://twitter.com/lemonldapng/" class="btn btn-large btn-info"><i class="glyphicon glyphicon-retweet"></i> Twitter</a></p>
+<p><a href="https://www.facebook.com/lemonldapng/" class="btn btn-large btn-primary"><i class="glyphicon glyphicon-thumbs-up"></i> Facebook</a></p>
+
+</p>
+
+<p>
+</div>
+</p>
+<hr />
+
+<p>
+<div class="text-center">
+</p>
+
+</div>
+<!-- EDIT1 SECTION "Social networks" [41-433] -->
+<h3 class="sectionedit2" id="hosted_by">Hosted by</h3>
 <div class="level3">
 
 <p>
@@ -171,8 +192,8 @@ You&#039;ve followed a link to a topic t
 </p>
 
 </div>
-<!-- EDIT1 SECTION "Hosted by" [40-174] -->
-<h3 class="sectionedit2" id="certifications">Certifications</h3>
+<!-- EDIT2 SECTION "Hosted by" [434-568] -->
+<h3 class="sectionedit3" id="certifications">Certifications</h3>
 <div class="level3">
 
 <p>
@@ -192,8 +213,8 @@ You&#039;ve followed a link to a topic t
 </p>
 
 </div>
-<!-- EDIT2 SECTION "Certifications" [175-534] -->
-<h3 class="sectionedit3" id="awards">Awards</h3>
+<!-- EDIT3 SECTION "Certifications" [569-928] -->
+<h3 class="sectionedit4" id="awards">Awards</h3>
 <div class="level3">
 
 <p>
@@ -222,7 +243,7 @@ You&#039;ve followed a link to a topic t
 
 
 </div>
-<!-- EDIT3 SECTION "Awards" [535-] -->          </div>
+<!-- EDIT4 SECTION "Awards" [929-] -->          </div>
   </div>
 </aside>
 
@@ -241,7 +262,7 @@ You&#039;ve followed a link to a topic t
       
     </div><!-- /site -->
 
-    <div class="no"><img src="/lib/exe/indexer.php?id=documentation%3A2.0%3Aexploit&amp;1545402062" width="2" height="1" alt="" /></div>
+    <div class="no"><img src="/lib/exe/indexer.php?id=documentation%3A2.0%3Aexploit&amp;1549988879" width="2" height="1" alt="" /></div>
     <div id="screen__mode" class="no">
       <span class="visible-xs"></span>
       <span class="visible-sm"></span>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/external2f.html 2.0.2+ds-1/doc/pages/documentation/current/external2f.html
--- 2.0.1+ds-2/doc/pages/documentation/current/external2f.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/external2f.html	2019-02-12 16:28:08.000000000 +0000
@@ -48,7 +48,7 @@
 <div class="level1">
 
 <p>
-This basic plugin can be used to add a second factor authentication device (SMS, OTP,…). It uses external commands to send and validate a second factor. Any language is allowed to call your 2nd factor system.
+This basic plugin can be used to add a second factor authentication device (SMS, OTP,...). It uses external commands to send and validate a second factor. Any language is allowed to call your 2nd factor system.
 </p>
 
 </div>
@@ -71,9 +71,9 @@ All parameters are configured in “Gene
 <ul>
 <li class="level1"><div class="li"> <strong>Activation</strong></div>
 </li>
-<li class="level1"><div class="li"> <strong>Send command</strong>: define your command using <em>$attribute</em> like in rules. Example: <code>/usr/local/bin/sendOtp –uid $uid</code></div>
+<li class="level1"><div class="li"> <strong>Send command</strong>: define your command using <em>$attribute</em> like in rules. Example: <code>/usr/local/bin/sendOtp --uid $uid</code></div>
 </li>
-<li class="level1"><div class="li"> <strong>Validation command</strong>: you must also use <em>$code</em> which is the value entered by user; Example: <code>/usr/local/bin/verify –uid $uid –code $code</code></div>
+<li class="level1"><div class="li"> <strong>Validation command</strong>: you must also use <em>$code</em> which is the value entered by user; Example: <code>/usr/local/bin/verify --uid $uid --code $code</code></div>
 </li>
 <li class="level1"><div class="li"> <strong>Authentication Level</strong>: if you want to overwrite the value sent by your authentication module, you can define here the new authentication level. Example: 5</div>
 </li>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/federationproxy.html 2.0.2+ds-1/doc/pages/documentation/current/federationproxy.html
--- 2.0.1+ds-2/doc/pages/documentation/current/federationproxy.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/federationproxy.html	2019-02-12 16:28:08.000000000 +0000
@@ -67,17 +67,17 @@ Schemes tested:
 <ul>
 <li class="level1"><div class="li"> <abbr title="Security Assertion Markup Language">SAML</abbr> / OpenID-Connect:</div>
 <ul>
-<li class="level2"><div class="li"> <abbr title="Security Assertion Markup Language">SAML</abbr>-SP <strong>⇔</strong> LLNG as <a href="idpsaml.html" class="wikilink1" title="documentation:2.0:idpsaml">SAML</a>/<a href="authopenidconnect.html" class="wikilink1" title="documentation:2.0:authopenidconnect">OpenID-Connect</a> proxy <strong>⇔</strong> OIDC Provider</div>
+<li class="level2"><div class="li"> <abbr title="Security Assertion Markup Language">SAML</abbr>-SP <strong>&lt;=&gt;</strong> LLNG as <a href="idpsaml.html" class="wikilink1" title="documentation:2.0:idpsaml">SAML</a>/<a href="authopenidconnect.html" class="wikilink1" title="documentation:2.0:authopenidconnect">OpenID-Connect</a> proxy <strong>&lt;=&gt;</strong> OIDC Provider</div>
 </li>
-<li class="level2"><div class="li"> OIDC-RP <strong>⇔</strong> LLNG as <a href="idpopenidconnect.html" class="wikilink1" title="documentation:2.0:idpopenidconnect">OpenID-Connect</a>/<a href="authsaml.html" class="wikilink1" title="documentation:2.0:authsaml">SAML</a> proxy <strong>⇔</strong> <abbr title="Security Assertion Markup Language">SAML</abbr> Identity Provider</div>
+<li class="level2"><div class="li"> OIDC-RP <strong>&lt;=&gt;</strong> LLNG as <a href="idpopenidconnect.html" class="wikilink1" title="documentation:2.0:idpopenidconnect">OpenID-Connect</a>/<a href="authsaml.html" class="wikilink1" title="documentation:2.0:authsaml">SAML</a> proxy <strong>&lt;=&gt;</strong> <abbr title="Security Assertion Markup Language">SAML</abbr> Identity Provider</div>
 </li>
 </ul>
 </li>
 <li class="level1"><div class="li"> <abbr title="Security Assertion Markup Language">SAML</abbr> / <abbr title="Central Authentication Service">CAS</abbr></div>
 <ul>
-<li class="level2"><div class="li"> <abbr title="Security Assertion Markup Language">SAML</abbr>-SP <strong>⇔</strong> LLNG as <a href="idpsaml.html" class="wikilink1" title="documentation:2.0:idpsaml">SAML</a>/<a href="authcas.html" class="wikilink1" title="documentation:2.0:authcas">CAS</a> proxy <strong>⇔</strong> <abbr title="Central Authentication Service">CAS</abbr> Server</div>
+<li class="level2"><div class="li"> <abbr title="Security Assertion Markup Language">SAML</abbr>-SP <strong>&lt;=&gt;</strong> LLNG as <a href="idpsaml.html" class="wikilink1" title="documentation:2.0:idpsaml">SAML</a>/<a href="authcas.html" class="wikilink1" title="documentation:2.0:authcas">CAS</a> proxy <strong>&lt;=&gt;</strong> <abbr title="Central Authentication Service">CAS</abbr> Server</div>
 </li>
-<li class="level2"><div class="li"> <abbr title="Central Authentication Service">CAS</abbr> Application <strong>⇔</strong> LLNG as <a href="idpcas.html" class="wikilink1" title="documentation:2.0:idpcas">CAS</a>/<a href="authsaml.html" class="wikilink1" title="documentation:2.0:authsaml">SAML</a> proxy <strong>⇔</strong> <abbr title="Security Assertion Markup Language">SAML</abbr> Identity Provider</div>
+<li class="level2"><div class="li"> <abbr title="Central Authentication Service">CAS</abbr> Application <strong>&lt;=&gt;</strong> LLNG as <a href="idpcas.html" class="wikilink1" title="documentation:2.0:idpcas">CAS</a>/<a href="authsaml.html" class="wikilink1" title="documentation:2.0:authsaml">SAML</a> proxy <strong>&lt;=&gt;</strong> <abbr title="Security Assertion Markup Language">SAML</abbr> Identity Provider</div>
 </li>
 </ul>
 </li>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/fileconfbackend.html 2.0.2+ds-1/doc/pages/documentation/current/fileconfbackend.html
--- 2.0.1+ds-2/doc/pages/documentation/current/fileconfbackend.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/fileconfbackend.html	2019-02-12 16:28:08.000000000 +0000
@@ -53,7 +53,7 @@ This is the default configuration backen
 <div class="notetip">This configuration storage can be shared between different hosts using:<ul>
 <li class="level1"><div class="li"> <a href="soapconfbackend.html" class="wikilink1" title="documentation:2.0:soapconfbackend">SOAP configuration backend proxy</a></div>
 </li>
-<li class="level1"><div class="li"> any files sharing system (NFS, NAS, SAN,…)</div>
+<li class="level1"><div class="li"> any files sharing system (NFS, NAS, SAN,...)</div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/filesessionbackend.html 2.0.2+ds-1/doc/pages/documentation/current/filesessionbackend.html
--- 2.0.1+ds-2/doc/pages/documentation/current/filesessionbackend.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/filesessionbackend.html	2019-02-12 16:28:08.000000000 +0000
@@ -48,7 +48,7 @@
 <div class="level1">
 
 <p>
-File session backend is the more simple session database. Sessions are stored as files in a single directory. Lock files are stored in another directory. It can not be used to share sessions between different servers except if you share directories (with NFS,…) or if you use <a href="soapsessionbackend.html" class="wikilink1" title="documentation:2.0:soapsessionbackend">SOAP proxy</a>.
+File session backend is the more simple session database. Sessions are stored as files in a single directory. Lock files are stored in another directory. It can not be used to share sessions between different servers except if you share directories (with NFS,...) or if you use <a href="soapsessionbackend.html" class="wikilink1" title="documentation:2.0:soapsessionbackend">SOAP proxy</a>.
 </p>
 
 </div>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/handlerarch.html 2.0.2+ds-1/doc/pages/documentation/current/handlerarch.html
--- 2.0.1+ds-2/doc/pages/documentation/current/handlerarch.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/handlerarch.html	2019-02-12 16:28:08.000000000 +0000
@@ -51,7 +51,7 @@
 Handlers are build on rows of modules:
 </p>
 <ul>
-<li class="level1"><div class="li"> Applications or launchers that get the request and choose the right type <em>(Main, AuthBasic, ZimbraPreAuth,…)</em> and launch it <em>(may not inherits from other Handler::* modules)</em></div>
+<li class="level1"><div class="li"> Applications or launchers that get the request and choose the right type <em>(Main, AuthBasic, ZimbraPreAuth,...)</em> and launch it <em>(may not inherits from other Handler::* modules)</em></div>
 </li>
 <li class="level1"><div class="li"> Wrappers that call “type” library and platform “Main” <em>(may all inherits from Platform::Main)</em></div>
 </li>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/idpcas.html 2.0.2+ds-1/doc/pages/documentation/current/idpcas.html
--- 2.0.1+ds-2/doc/pages/documentation/current/idpcas.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/idpcas.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:idpcas</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="index,follow"/>
+<meta name="robots" content="noindex,nofollow"/>
 <meta name="keywords" content="documentation,2.0,idpcas"/>
 <link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="idpcas.html"/>
@@ -43,13 +43,36 @@
 </head>
 <body>
 <div class="dokuwiki export container">
+<!-- TOC START -->
+<div id="dw__toc">
+<h3 class="toggle">Table of Contents</h3>
+<div>
+
+<ul class="toc">
+<li class="level1"><div class="li"><a href="#presentation">Presentation</a></div></li>
+<li class="level1"><div class="li"><a href="#configuration">Configuration</a></div>
+<ul class="toc">
+<li class="level2"><div class="li"><a href="#enabling_cas">Enabling CAS</a></div></li>
+<li class="level2"><div class="li"><a href="#configuring_the_cas_service">Configuring the CAS Service</a></div></li>
+<li class="level2"><div class="li"><a href="#configuring_cas_applications">Configuring CAS Applications</a></div>
+<ul class="toc">
+<li class="level3"><div class="li"><a href="#options">Options</a></div></li>
+<li class="level3"><div class="li"><a href="#exported_attributes">Exported Attributes</a></div></li>
+</ul></li>
+</ul></li>
+</ul>
+</div>
+</div>
+<!-- TOC END -->
 
-<h1 class="sectionedit1" id="cas_server">CAS server</h1>
+<p>
+AS server
+</p>
 <div class="level1">
 
 </div>
-<!-- EDIT1 SECTION "CAS server" [1-26] -->
-<h2 class="sectionedit2" id="presentation">Presentation</h2>
+
+<h2 class="sectionedit1" id="presentation">Presentation</h2>
 <div class="level2">
 
 <p>
@@ -67,36 +90,46 @@
 </p>
 
 </div>
-<!-- EDIT2 SECTION "Presentation" [27-397] -->
-<h2 class="sectionedit3" id="configuration">Configuration</h2>
+<!-- EDIT1 SECTION "Presentation" [19-389] -->
+<h2 class="sectionedit2" id="configuration">Configuration</h2>
 <div class="level2">
 
+</div>
+<!-- EDIT2 SECTION "Configuration" [390-416] -->
+<h3 class="sectionedit3" id="enabling_cas">Enabling CAS</h3>
+<div class="level3">
+
 <p>
 In the Manager, go in <code>General Parameters</code> » <code>Issuer modules</code> » <code><abbr title="Central Authentication Service">CAS</abbr></code> and configure:
 </p>
 <ul>
 <li class="level1"><div class="li"> <strong>Activation</strong>: set to <code>On</code>.</div>
 </li>
-<li class="level1"><div class="li"> <strong>Path</strong>: keep <code>^/cas/</code> unless you have change <a href="configlocation.html#portal" class="wikilink1" title="documentation:2.0:configlocation">Apache portal configuration</a> file.</div>
+<li class="level1"><div class="li"> <strong>Path</strong>: it is recommended to keep the default value (<code>^/cas/</code>)</div>
 </li>
-<li class="level1"><div class="li"> <strong>Use rule</strong>: a rule to allow user to use this module, set to 1 to always allow.</div>
+<li class="level1"><div class="li"> <strong>Use rule</strong>: a rule to allow user to use this module, set to <code>1</code> to always allow.</div>
 </li>
 </ul>
 <div class="notetip">For example, to allow only users with a strong authentication level:
 <pre class="code">$authenticationLevel &gt; 2</pre>
 
 </div>
+</div>
+<!-- EDIT3 SECTION "Enabling CAS" [417-858] -->
+<h3 class="sectionedit4" id="configuring_the_cas_service">Configuring the CAS Service</h3>
+<div class="level3">
+
 <p>
-Then go in <code>Options</code> to define:
+Then go in <code><abbr title="Central Authentication Service">CAS</abbr> Service</code> to define:
 </p>
 <ul>
-<li class="level1"><div class="li"> <strong><abbr title="Central Authentication Service">CAS</abbr> login</strong>: the session key used to fill user login (value will be transmitted to <abbr title="Central Authentication Service">CAS</abbr> clients).</div>
+<li class="level1"><div class="li"> <strong><abbr title="Central Authentication Service">CAS</abbr> login</strong>: the session key transmitted to <abbr title="Central Authentication Service">CAS</abbr> client as the main identifier (<abbr title="Central Authentication Service">CAS</abbr> Principal)</div>
 </li>
-<li class="level1"><div class="li"> <strong><abbr title="Central Authentication Service">CAS</abbr> attributes</strong>: list of attributes that will be transmitted in validate response. Keys are the name of attribute in the <abbr title="Central Authentication Service">CAS</abbr> response, values are the name of session key.</div>
+<li class="level1"><div class="li"> <strong><abbr title="Central Authentication Service">CAS</abbr> attributes</strong>: list of attributes that will be transmitted by default in the validate response. Keys are the name of attribute in the <abbr title="Central Authentication Service">CAS</abbr> response, values are the name of session key. </div>
 </li>
 <li class="level1"><div class="li"> <strong>Access control policy</strong>: define if access control should be done on <abbr title="Central Authentication Service">CAS</abbr> service. Three options:</div>
 <ul>
-<li class="level2"><div class="li"> <strong>none</strong>: no access control, the server will answer without checking if the user is authorized for the service (this is the default)</div>
+<li class="level2"><div class="li"> <strong>none</strong>: no access control. The <abbr title="Central Authentication Service">CAS</abbr> service will accept non-declared <abbr title="Central Authentication Service">CAS</abbr> applications and ignore access control rules. This is the default.</div>
 </li>
 <li class="level2"><div class="li"> <strong>error</strong>: if user has no access, an error is shown on the portal, the user is not redirected to <abbr title="Central Authentication Service">CAS</abbr> service</div>
 </li>
@@ -110,6 +143,48 @@ Then go in <code>Options</code> to defin
 <div class="notetip">If <code><abbr title="Central Authentication Service">CAS</abbr> login</code> is not set, it uses <code>General Parameters</code> » <code>Logs</code> » <code>REMOTE_USER</code> data, which is set to <code>uid</code> by default
 </div>
 </div>
-<!-- EDIT3 SECTION "Configuration" [398-] --></div>
+<!-- EDIT4 SECTION "Configuring the CAS Service" [859-2141] -->
+<h3 class="sectionedit5" id="configuring_cas_applications">Configuring CAS Applications</h3>
+<div class="level3">
+
+<p>
+If an access control policy other than <code>none</code> is specified, applications that want to authenticate users through the <abbr title="Central Authentication Service">CAS</abbr> protocol have to be declared before LemonLDAP::NG accepts to issue service tickets for them. 
+</p>
+
+<p>
+Go to <code><abbr title="Central Authentication Service">CAS</abbr> Applications</code> and then <code>Add <abbr title="Central Authentication Service">CAS</abbr> Application</code>. Give a technical name (no spaces, no special characters), like “app-example”.
+</p>
+
+<p>
+You can then access the configuration of this application. 
+</p>
+
+</div>
+
+<h4 id="options">Options</h4>
+<div class="level4">
+<ul>
+<li class="level1"><div class="li"> <strong>Service <abbr title="Uniform Resource Locator">URL</abbr></strong> : the service (user-facing) <abbr title="Uniform Resource Locator">URL</abbr> of the <abbr title="Central Authentication Service">CAS</abbr>-enabled application.</div>
+</li>
+<li class="level1"><div class="li"> <strong>Rule</strong> : The access control rule to enforce on this application. If left blank, access will be allowed for everyone.</div>
+</li>
+</ul>
+<div class="noteimportant">If the access control policy is set to <code>none</code>, this rule will be ignored
+</div>
+</div>
+
+<h4 id="exported_attributes">Exported Attributes</h4>
+<div class="level4">
+
+<p>
+You may add a list of attributes that will be transmitted in the validate response. Keys are the name of attribute in the <abbr title="Central Authentication Service">CAS</abbr> response, values are the name of session key.
+</p>
+
+<p>
+The attributes defined here will completely replace any attributes you may have declared in the global <code><abbr title="Central Authentication Service">CAS</abbr> Service</code> configuration. In order to re-use the global configuration, simply set this section to an empty list.
+</p>
+
+</div>
+<!-- EDIT5 SECTION "Configuring CAS Applications" [2142-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/idpopenidconnect.html 2.0.2+ds-1/doc/pages/documentation/current/idpopenidconnect.html
--- 2.0.1+ds-2/doc/pages/documentation/current/idpopenidconnect.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/idpopenidconnect.html	2019-02-12 16:28:08.000000000 +0000
@@ -135,7 +135,7 @@ Go in <code>General Parameters</code> »
 <ul>
 <li class="level1"><div class="li"> <strong>Activation</strong>: set to <code>On</code>.</div>
 </li>
-<li class="level1"><div class="li"> <strong>Path</strong>: keep <code>^/oauth2/</code> unless you need to use another path (in this case, you need to adapt Apache configuration)</div>
+<li class="level1"><div class="li"> <strong>Path</strong>: keep <code>^/oauth2/</code> unless you need to use another path</div>
 </li>
 <li class="level1"><div class="li"> <strong>Use rule</strong>: a rule to allow user to use this module, set to <code>1</code> to always allow.</div>
 </li>
@@ -145,7 +145,7 @@ Go in <code>General Parameters</code> »
 
 </div>
 </div>
-<!-- EDIT5 SECTION "IssuerDB" [1060-1545] -->
+<!-- EDIT5 SECTION "IssuerDB" [1060-1490] -->
 <h3 class="sectionedit6" id="configuration_of_llng_in_relying_party">Configuration of LL::NG in Relying Party</h3>
 <div class="level3">
 
@@ -227,7 +227,7 @@ An example of its content:
 <span class="br0">&#125;</span></pre>
 
 </div>
-<!-- EDIT6 SECTION "Configuration of LL::NG in Relying Party" [1546-3524] -->
+<!-- EDIT6 SECTION "Configuration of LL::NG in Relying Party" [1491-3469] -->
 <h3 class="sectionedit7" id="configuration_of_relying_party_in_llng">Configuration of Relying Party in LL::NG</h3>
 <div class="level3">
 
@@ -342,11 +342,11 @@ You can map here the attribute names fro
 So you can define for example:
 </p>
 <ul>
-<li class="level1"><div class="li"> name ⇒ cn</div>
+<li class="level1"><div class="li"> name =&gt; cn</div>
 </li>
-<li class="level1"><div class="li"> family_name ⇒ sn</div>
+<li class="level1"><div class="li"> family_name =&gt; sn</div>
 </li>
-<li class="level1"><div class="li"> email ⇒ mail</div>
+<li class="level1"><div class="li"> email =&gt; mail</div>
 </li>
 </ul>
 <div class="noteimportant">The specific <code>sub</code> attribute is not defined here, but in User attribute parameter (see below).
@@ -355,9 +355,9 @@ So you can define for example:
 You can also define extra claims and link them to attributes (see below). Then you just have to define the mapping of this new attributes, for example:
 </p>
 <ul>
-<li class="level1"><div class="li"> birthplace ⇒ l</div>
+<li class="level1"><div class="li"> birthplace =&gt; l</div>
 </li>
-<li class="level1"><div class="li"> birthcountry ⇒ co</div>
+<li class="level1"><div class="li"> birthcountry =&gt; co</div>
 </li>
 </ul>
 
@@ -402,10 +402,10 @@ You can also define extra claims and lin
 <div class="level4">
 
 <p>
-Associate attributes to extra claims if the RP request them, for example <code>birth</code> ⇒ <code>birthplace birthcountry</code>
+Associate attributes to extra claims if the RP request them, for example <code>birth</code> =&gt; <code>birthplace birthcountry</code>
 </p>
 
 </div>
-<!-- EDIT7 SECTION "Configuration of Relying Party in LL::NG" [3525-] --></div>
+<!-- EDIT7 SECTION "Configuration of Relying Party in LL::NG" [3470-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/installdeb.html 2.0.2+ds-1/doc/pages/documentation/current/installdeb.html
--- 2.0.1+ds-2/doc/pages/documentation/current/installdeb.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/installdeb.html	2019-02-12 16:28:08.000000000 +0000
@@ -57,7 +57,6 @@
 <li class="level2"><div class="li"><a href="#manual_download">Manual download</a></div></li>
 </ul>
 </li>
-<li class="level1"><div class="li"><a href="#package_gpg_signature">Package GPG signature</a></div></li>
 <li class="level1"><div class="li"><a href="#install_packages">Install packages</a></div>
 <ul class="toc">
 <li class="level2"><div class="li"><a href="#with_apt">With apt</a></div></li>
@@ -130,7 +129,21 @@ If you run Debian testing or unstable, t
 <div class="level3">
 
 <p>
-You can add this repository to have recent packages:
+You can add this repository to have recent packages.
+</p>
+
+<p>
+First, make sure your system can install packages from HTTPS repositories:
+</p>
+<pre class="code">apt install apt-transport-https</pre>
+
+<p>
+You will need to trust the following GPG key : <a href="rpm-gpg-key-ow2" class="media mediafile mf_" title="rpm-gpg-key-ow2 (1.7 KB)">rpm-gpg-key-ow2</a>
+</p>
+<pre class="code">wget -O - https://lemonldap-ng.org/_media/rpm-gpg-key-ow2 | apt-key add -</pre>
+
+<p>
+Then, add the official <abbr title="LemonLDAP::NG">LL::NG</abbr> repository
 </p>
 <pre class="code">vi /etc/apt/sources.list.d/lemonldap-ng.list</pre>
 <pre class="file"># LemonLDAP::NG repository
@@ -147,12 +160,12 @@ deb-src https://lemonldap-ng.org/deb sta
 
 </div>
 <p>
-You may need to install this package to access HTTPS repositories:
+Finally update your APT cache:
 </p>
-<pre class="code">apt install apt-transport-https</pre>
+<pre class="code">apt update</pre>
 
 </div>
-<!-- EDIT5 SECTION "LL::NG repository" [984-1628] -->
+<!-- EDIT5 SECTION "LL::NG repository" [984-1895] -->
 <h3 class="sectionedit6" id="manual_download">Manual download</h3>
 <div class="level3">
 
@@ -161,38 +174,19 @@ Packages are available on the <a href="d
 </p>
 
 </div>
-<!-- EDIT6 SECTION "Manual download" [1629-1715] -->
-<h2 class="sectionedit7" id="package_gpg_signature">Package GPG signature</h2>
-<div class="level2">
-
-<p>
-The GPG key can be downloaded here: <a href="rpm-gpg-key-ow2" class="media mediafile mf_" title="rpm-gpg-key-ow2 (1.7 KB)">rpm-gpg-key-ow2</a>
-</p>
-
-<p>
-Install it to trust packages:
-</p>
-<pre class="code">wget -O - https://lemonldap-ng.org/_media/rpm-gpg-key-ow2 | apt-key add -</pre>
-
-<p>
-Update cache:
-</p>
-<pre class="code">apt update</pre>
-
-</div>
-<!-- EDIT7 SECTION "Package GPG signature" [1716-1970] -->
-<h2 class="sectionedit8" id="install_packages">Install packages</h2>
+<!-- EDIT6 SECTION "Manual download" [1896-1982] -->
+<h2 class="sectionedit7" id="install_packages">Install packages</h2>
 <div class="level2">
 
 </div>
-<!-- EDIT8 SECTION "Install packages" [1971-2000] -->
-<h3 class="sectionedit9" id="with_apt">With apt</h3>
+<!-- EDIT7 SECTION "Install packages" [1983-2012] -->
+<h3 class="sectionedit8" id="with_apt">With apt</h3>
 <div class="level3">
 <pre class="code">apt install lemonldap-ng</pre>
 
 </div>
-<!-- EDIT9 SECTION "With apt" [2001-2061] -->
-<h3 class="sectionedit10" id="with_dpkg">With dpkg</h3>
+<!-- EDIT8 SECTION "With apt" [2013-2073] -->
+<h3 class="sectionedit9" id="with_dpkg">With dpkg</h3>
 <div class="level3">
 
 <p>
@@ -205,23 +199,23 @@ Then:
 <pre class="code">dpkg -i liblemonldap-ng-* lemonldap-ng*</pre>
 
 </div>
-<!-- EDIT10 SECTION "With dpkg" [2062-2210] -->
-<h2 class="sectionedit11" id="first_configuration_steps">First configuration steps</h2>
+<!-- EDIT9 SECTION "With dpkg" [2074-2222] -->
+<h2 class="sectionedit10" id="first_configuration_steps">First configuration steps</h2>
 <div class="level2">
 
 </div>
-<!-- EDIT11 SECTION "First configuration steps" [2211-2249] -->
-<h3 class="sectionedit12" id="change_default_dns_domain">Change default DNS domain</h3>
+<!-- EDIT10 SECTION "First configuration steps" [2223-2261] -->
+<h3 class="sectionedit11" id="change_default_dns_domain">Change default DNS domain</h3>
 <div class="level3">
 
 <p>
 By default, <abbr title="Domain Name System">DNS</abbr> domain is <code>example.com</code>. You can change it quick with a sed command. For example, we change it to <code>ow2.org</code>:
 </p>
-<pre class="code shell">sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1.json /var/lib/lemonldap-ng/test/index.pl</pre>
+<pre class="code shell">sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1.json</pre>
 
 </div>
-<!-- EDIT12 SECTION "Change default DNS domain" [2250-2569] -->
-<h3 class="sectionedit13" id="upgrade">Upgrade</h3>
+<!-- EDIT11 SECTION "Change default DNS domain" [2262-2545] -->
+<h3 class="sectionedit12" id="upgrade">Upgrade</h3>
 <div class="level3">
 
 <p>
@@ -229,8 +223,8 @@ If you upgraded <abbr title="LemonLDAP::
 </p>
 
 </div>
-<!-- EDIT13 SECTION "Upgrade" [2570-2650] -->
-<h3 class="sectionedit14" id="dns">DNS</h3>
+<!-- EDIT12 SECTION "Upgrade" [2546-2626] -->
+<h3 class="sectionedit13" id="dns">DNS</h3>
 <div class="level3">
 
 <p>
@@ -250,8 +244,8 @@ Follow the <a href="start.html#configura
 </p>
 
 </div>
-<!-- EDIT14 SECTION "DNS" [2651-2955] -->
-<h2 class="sectionedit15" id="file_location">File location</h2>
+<!-- EDIT13 SECTION "DNS" [2627-2931] -->
+<h2 class="sectionedit14" id="file_location">File location</h2>
 <div class="level2">
 <ul>
 <li class="level1"><div class="li"> Configuration is in /etc/lemonldap-ng</div>
@@ -266,13 +260,13 @@ Follow the <a href="start.html#configura
 </li>
 <li class="level1"><div class="li"> All static content (examples, <abbr title="Cascading Style Sheets">CSS</abbr>, images, etc.) is in /usr/share/lemonldap-ng/</div>
 </li>
-<li class="level1"><div class="li"> Apache configuration files are in /etc/lemonldap-ng and linked in /etc/apache2/sites-available</div>
+<li class="level1"><div class="li"> Apache configuration files are in /etc/lemonldap-ng and linked in /etc/apache2/sites-available and /etc/nginx/sites-available</div>
 </li>
 </ul>
 
 </div>
-<!-- EDIT15 SECTION "File location" [2956-3492] -->
-<h2 class="sectionedit16" id="build_your_packages">Build your packages</h2>
+<!-- EDIT14 SECTION "File location" [2932-3499] -->
+<h2 class="sectionedit15" id="build_your_packages">Build your packages</h2>
 <div class="level2">
 
 <p>
@@ -283,6 +277,6 @@ cd lemonldap-ng-*
 make debian-packages</pre>
 
 </div>
-<!-- EDIT16 SECTION "Build your packages" [3493-] --></div>
+<!-- EDIT15 SECTION "Build your packages" [3500-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/installrpm.html 2.0.2+ds-1/doc/pages/documentation/current/installrpm.html
--- 2.0.1+ds-2/doc/pages/documentation/current/installrpm.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/installrpm.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:installrpm</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="noindex,nofollow"/>
+<meta name="robots" content="index,follow"/>
 <meta name="keywords" content="documentation,2.0,installrpm"/>
 <link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="installrpm.html"/>
@@ -183,15 +183,15 @@ The GPG key can be downloaded here: <a h
 <p>
 Install it to trust RPMs:
 </p>
-<pre class="code">rpm --import rpm-gpg-key-ow2</pre>
+<pre class="code">curl https://lemonldap-ng.org/_media/rpm-gpg-key-ow2 &gt; /etc/pki/rpm-gpg/RPM-GPG-KEY-OW2</pre>
 
 </div>
-<!-- EDIT6 SECTION "Package GPG signature" [2395-2560] -->
+<!-- EDIT6 SECTION "Package GPG signature" [2395-2618] -->
 <h2 class="sectionedit7" id="install_packages">Install packages</h2>
 <div class="level2">
 
 </div>
-<!-- EDIT7 SECTION "Install packages" [2561-2590] -->
+<!-- EDIT7 SECTION "Install packages" [2619-2648] -->
 <h3 class="sectionedit8" id="with_yum">With YUM</h3>
 <div class="level3">
 
@@ -206,7 +206,7 @@ You can also use yum on local RPMs file:
 <pre class="code">yum localinstall lemonldap-ng-* perl-Lemonldap-NG-*</pre>
 
 </div>
-<!-- EDIT8 SECTION "With YUM" [2591-2814] -->
+<!-- EDIT8 SECTION "With YUM" [2649-2872] -->
 <h3 class="sectionedit9" id="with_rpm">With RPM</h3>
 <div class="level3">
 
@@ -225,22 +225,22 @@ Install the package <code>lemonldap-ng-c
 
 </div>
 </div>
-<!-- EDIT9 SECTION "With RPM" [2815-3282] -->
+<!-- EDIT9 SECTION "With RPM" [2873-3340] -->
 <h2 class="sectionedit10" id="first_configuration_steps">First configuration steps</h2>
 <div class="level2">
 
 </div>
-<!-- EDIT10 SECTION "First configuration steps" [3283-3321] -->
+<!-- EDIT10 SECTION "First configuration steps" [3341-3379] -->
 <h3 class="sectionedit11" id="change_default_dns_domain">Change default DNS domain</h3>
 <div class="level3">
 
 <p>
 By default, <abbr title="Domain Name System">DNS</abbr> domain is <code>example.com</code>. You can change it quick with a sed command. For example, we change it to <code>ow2.org</code>:
 </p>
-<pre class="code shell">sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1.json /var/lib/lemonldap-ng/test/index.pl /etc/nginx/conf.d/* /etc/httpd/conf.d/*</pre>
+<pre class="code shell">sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1.json /etc/nginx/conf.d/* /etc/httpd/conf.d/*</pre>
 
 </div>
-<!-- EDIT11 SECTION "Change default DNS domain" [3322-3683] -->
+<!-- EDIT11 SECTION "Change default DNS domain" [3380-3705] -->
 <h3 class="sectionedit12" id="upgrade">Upgrade</h3>
 <div class="level3">
 
@@ -249,7 +249,7 @@ If you upgraded <abbr title="LemonLDAP::
 </p>
 
 </div>
-<!-- EDIT12 SECTION "Upgrade" [3684-3764] -->
+<!-- EDIT12 SECTION "Upgrade" [3706-3786] -->
 <h3 class="sectionedit13" id="dns">DNS</h3>
 <div class="level3">
 
@@ -270,7 +270,7 @@ Follow the <a href="start.html#configura
 </p>
 
 </div>
-<!-- EDIT13 SECTION "DNS" [3765-4069] -->
+<!-- EDIT13 SECTION "DNS" [3787-4091] -->
 <h2 class="sectionedit14" id="file_location">File location</h2>
 <div class="level2">
 <ul>
@@ -287,7 +287,7 @@ Follow the <a href="start.html#configura
 </ul>
 
 </div>
-<!-- EDIT14 SECTION "File location" [4070-4426] -->
+<!-- EDIT14 SECTION "File location" [4092-4448] -->
 <h2 class="sectionedit15" id="build_your_packages">Build your packages</h2>
 <div class="level2">
 
@@ -316,6 +316,6 @@ If you need it, you can rebuild RPMs:
 <pre class="code">rpmbuild -ta SOURCES/lemonldap-ng-VERSION.tar.gz</pre>
 
 </div>
-<!-- EDIT15 SECTION "Build your packages" [4427-] --></div>
+<!-- EDIT15 SECTION "Build your packages" [4449-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/installsles.html 2.0.2+ds-1/doc/pages/documentation/current/installsles.html
--- 2.0.1+ds-2/doc/pages/documentation/current/installsles.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/installsles.html	2019-02-12 16:28:08.000000000 +0000
@@ -140,7 +140,7 @@ Different repositories are necessary for
 </li>
 <li class="level1"><div class="li"> Additional packages available on repository.linagora.org or lemonldap-ng.org</div>
 </li>
-<li class="level1"><div class="li"> Suse SDK repository is advised for building packages (yast2 → Software → Software Repositories → Add –&gt; Extensions and modules from Registration Server)</div>
+<li class="level1"><div class="li"> Suse SDK repository is advised for building packages (yast2 -&gt; Software -&gt; Software Repositories -&gt; Add --&gt; Extensions and modules from Registration Server)</div>
 </li>
 </ul>
 
@@ -274,7 +274,7 @@ If you decide to use SSL, you should als
 <p>
 By default, <abbr title="Domain Name System">DNS</abbr> domain is <code>example.com</code>. You can change it quick with a sed command. For example, we change it to <code>ow2.org</code>:
 </p>
-<pre class="code shell">sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/{*.conf,*.ini,for_etc_hosts} /var/lib/lemonldap-ng/conf/lmConf-1 /var/lib/lemonldap-ng/test/index.pl</pre>
+<pre class="code shell">sed -i 's/example\.com/ow2.org/g' /etc/lemonldap-ng/{*.conf,*.ini,for_etc_hosts} /var/lib/lemonldap-ng/conf/lmConf-1</pre>
 
 <p>
 Check Apache configuration and restart:
@@ -283,7 +283,7 @@ Check Apache configuration and restart:
 apachectl restart</pre>
 
 </div>
-<!-- EDIT12 SECTION "Change default DNS domain" [5072-5514] -->
+<!-- EDIT12 SECTION "Change default DNS domain" [5072-5478] -->
 <h3 class="sectionedit13" id="dns">DNS</h3>
 <div class="level3">
 
@@ -304,7 +304,7 @@ Follow the <a href="start.html#configura
 </p>
 
 </div>
-<!-- EDIT13 SECTION "DNS" [5515-5819] -->
+<!-- EDIT13 SECTION "DNS" [5479-5783] -->
 <h2 class="sectionedit14" id="file_location">File location</h2>
 <div class="level2">
 <ul>
@@ -321,7 +321,7 @@ Follow the <a href="start.html#configura
 </ul>
 
 </div>
-<!-- EDIT14 SECTION "File location" [5820-6175] -->
+<!-- EDIT14 SECTION "File location" [5784-6139] -->
 <h2 class="sectionedit15" id="build_your_packages">Build your packages</h2>
 <div class="level2">
 
@@ -350,6 +350,6 @@ Alternatively, you can use the automatic
 </p>
 
 </div>
-<!-- EDIT15 SECTION "Build your packages" [6176-] --></div>
+<!-- EDIT15 SECTION "Build your packages" [6140-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/issuerdbget.html 2.0.2+ds-1/doc/pages/documentation/current/issuerdbget.html
--- 2.0.1+ds-2/doc/pages/documentation/current/issuerdbget.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/issuerdbget.html	2019-02-12 16:28:08.000000000 +0000
@@ -53,7 +53,7 @@
 <div class="level2">
 
 <p>
-For application not managing other provider protocols (<abbr title="Central Authentication Service">CAS</abbr>, OpenID Connect, <abbr title="Security Assertion Markup Language">SAML</abbr>,…) it is possible to configure <abbr title="LemonLDAP::NG">LL::NG</abbr> as a provider of GET parameters:
+For application not managing other provider protocols (<abbr title="Central Authentication Service">CAS</abbr>, OpenID Connect, <abbr title="Security Assertion Markup Language">SAML</abbr>,...) it is possible to configure <abbr title="LemonLDAP::NG">LL::NG</abbr> as a provider of GET parameters:
 </p>
 <ul>
 <li class="level1"><div class="li"> An application can call <abbr title="LemonLDAP::NG">LL::NG</abbr> portal with a redirection url, such as <code><a href="http://auth.example.com/get/login?url=base64" class="urlextern" title="http://auth.example.com/get/login?url=base64"  rel="nofollow">http://auth.example.com/get/login?url=base64</a>(application_url)</code></div>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/jsonfileconfbackend.html 2.0.2+ds-1/doc/pages/documentation/current/jsonfileconfbackend.html
--- 2.0.1+ds-2/doc/pages/documentation/current/jsonfileconfbackend.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/jsonfileconfbackend.html	2019-02-12 16:28:08.000000000 +0000
@@ -53,7 +53,7 @@ This works like <a href="fileconfbackend
 <div class="notetip">This configuration storage can be shared between different hosts using:<ul>
 <li class="level1"><div class="li"> <a href="soapconfbackend.html" class="wikilink1" title="documentation:2.0:soapconfbackend">SOAP configuration backend proxy</a></div>
 </li>
-<li class="level1"><div class="li"> any files sharing system (NFS, NAS, SAN,…)</div>
+<li class="level1"><div class="li"> any files sharing system (NFS, NAS, SAN,...)</div>
 </li>
 </ul>
 
Binary files 2.0.1+ds-2/doc/pages/documentation/current/llng_deps.0fea6a13c52b4d4725368f24b045ca84.png and 2.0.2+ds-1/doc/pages/documentation/current/llng_deps.0fea6a13c52b4d4725368f24b045ca84.png differ
Binary files 2.0.1+ds-2/doc/pages/documentation/current/llng_deps.251640923cc03d951011198efae34ff4.png and 2.0.2+ds-1/doc/pages/documentation/current/llng_deps.251640923cc03d951011198efae34ff4.png differ
Binary files 2.0.1+ds-2/doc/pages/documentation/current/llng_deps.480eb0864712527af24b7886eca761d1.png and 2.0.2+ds-1/doc/pages/documentation/current/llng_deps.480eb0864712527af24b7886eca761d1.png differ
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/llng_deps.png_documentation_2.0_prereq.html 2.0.2+ds-1/doc/pages/documentation/current/llng_deps.png_documentation_2.0_prereq.html
--- 2.0.1+ds-2/doc/pages/documentation/current/llng_deps.png_documentation_2.0_prereq.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/llng_deps.png_documentation_2.0_prereq.html	1970-01-01 00:00:00.000000000 +0000
@@ -1,103 +0,0 @@
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
- lang="en" dir="ltr" class="no-js">
-<head>
-  <meta charset="UTF-8" />
-  <title>documentation:2.0:llng_deps.png [LemonLDAP::NG]</title>
-  <script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
-  <meta name="viewport" content="width=device-width,initial-scale=1" />
-  <link rel="shortcut icon" href="lib/tpl/bootstrap3/images/favicon.ico" />
-<link rel="apple-touch-icon" href="lib/tpl/bootstrap3/images/apple-touch-icon.png" />
-      <!-- //if:usedebianlibs
-  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
-//elsif:useexternallibs
-  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
-//elsif:cssminified
-  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
-//else -->
-  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
-<!-- //endif -->/>
-    <script type="text/javascript">/*<![CDATA[*/
-    var TPL_CONFIG = {"tableFullWidth":1};
-  /*!]]>*/</script>
-  <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="index,follow"/>
-<link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
-<link rel="start" href="prereq.html"/>
-<link rel="contents" href="prereq.html" title="Sitemap"/>
-<link rel="stylesheet" type="text/css" href="lib/exe/css.php.t.bootstrap3.css"/>
-<!-- //if:usedebianlibs
-  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
-//elsif:useexternallibs
-  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
-//elsif:cssminified
-  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
-//else -->
-  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
-<!-- //endif -->
-<script type="text/javascript">/*<![CDATA[*/var NS='';var JSINFO = null;
-/*!]]>*/</script>
-<script type="text/javascript" charset="utf-8" src="lib/exe/js.php.t.bootstrap3.js"></script>
-<!-- //if:usedebianlibs
-<script type="text/javascript" src="/javascript/jquery/jquery.min.js"></script>
-//elsif:useexternallibs
-<script type="text/javascript" src="http://code.jquery.com/jquery-2.2.0.min.js"></script>
-//elsif:jsminified
-<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.min.js"></script>
-//else -->
-<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.js"></script>
-<!-- //endif -->
-<!-- //if:usedebianlibs
-  <script type="text/javascript" src="/javascript/jquery-ui/jquery-ui.min.js"></script>
-//elsif:useexternallibs
-  <script type="text/javascript" src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
-//elsif:jsminified
-  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.min.js"></script>
-//else -->
-  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.js"></script>
-<!-- //endif -->
-  <script type="text/javascript" src="/javascript/bootstrap/js/bootstrap.min.js"></script>
-  <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
-  <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
-  <!--[if lt IE 9]>
-  <![endif]-->
-</head>
-
-<body class="container">
-  <!--[if lte IE 7 ]><div id="IE7"><![endif]--><!--[if IE 8 ]><div id="IE8"><![endif]-->
-  <div id="dokuwiki__detail" class="dokuwiki mode_ tpl_bootstrap3   ">
-
-    
-    
-      <h1 class="page-header">
-        <i class="glyphicon glyphicon-picture"></i> documentation:2.0:llng_deps.png      </h1>
-
-      <div class="content">
-
-        <a href="llng_deps.0fea6a13c52b4d4725368f24b045ca84.png" title="View original file"><img width="900" height="636" class="img_detail" alt="llng_deps.png" title="llng_deps.png" src="llng_deps.251640923cc03d951011198efae34ff4.png"/></a>
-        <div class="img_detail">
-
-          <div class="panel panel-default">
-            <div class="panel-heading">
-              <h2 class="panel-title"><i class="glyphicon glyphicon-info-sign text-info"></i> llng_deps.png</h2>
-            </div>
-            <div class="panel-body">
-              <dl><dt>Date:</dt><dd>2018/03/25 10:53</dd><dt>Filename:</dt><dd>llng_deps.png</dd><dt>Format:</dt><dd>PNG</dd><dt>Size:</dt><dd>141KB</dd><dt>Width:</dt><dd>1123</dd><dt>Height:</dt><dd>794</dd></dl>                          </div>
-          </div>
-
-        </div>
-      </div><!-- /.content -->
-
-      <p class="back">
-
-        <hr/>
-
-        <div class="btn-group">
-          <a href="prereq.html"  class="action img_backto" accesskey="b" rel="nofollow" title="Back to documentation:2.0:prereq [B]">Back to documentation:2.0:prereq</a>                  </div>
-
-      </p>
-
-      </div>
-  <!--[if ( lte IE 7 | IE 8 ) ]></div><![endif]-->
-</body>
-</html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/mail2f.html 2.0.2+ds-1/doc/pages/documentation/current/mail2f.html
--- 2.0.1+ds-2/doc/pages/documentation/current/mail2f.html	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/mail2f.html	2019-02-12 16:28:08.000000000 +0000
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+  <meta charset="utf-8" />
+  <title>documentation:2.0:mail2f</title>
+<meta name="generator" content="DokuWiki"/>
+<meta name="robots" content="index,follow"/>
+<meta name="keywords" content="documentation,2.0,mail2f"/>
+<link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
+<link rel="start" href="mail2f.html"/>
+<link rel="contents" href="mail2f.html" title="Sitemap"/>
+<link rel="stylesheet" type="text/css" href="lib/exe/css.php.t.bootstrap3.css"/>
+<!-- //if:usedebianlibs
+  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
+//elsif:useexternallibs
+  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
+//elsif:cssminified
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
+//else -->
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
+<!-- //endif -->
+<script type="text/javascript">/*<![CDATA[*/var NS='documentation:2.0';var JSINFO = {"id":"documentation:2.0:mail2f","namespace":"documentation:2.0"};
+/*!]]>*/</script>
+<script type="text/javascript" charset="utf-8" src="lib/exe/js.php.t.bootstrap3.js"></script>
+<!-- //if:usedebianlibs
+<script type="text/javascript" src="/javascript/jquery/jquery.min.js"></script>
+//elsif:useexternallibs
+<script type="text/javascript" src="http://code.jquery.com/jquery-2.2.0.min.js"></script>
+//elsif:jsminified
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.min.js"></script>
+//else -->
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.js"></script>
+<!-- //endif -->
+<!-- //if:usedebianlibs
+  <script type="text/javascript" src="/javascript/jquery-ui/jquery-ui.min.js"></script>
+//elsif:useexternallibs
+  <script type="text/javascript" src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
+//elsif:jsminified
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.min.js"></script>
+//else -->
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.js"></script>
+<!-- //endif -->
+</head>
+<body>
+<div class="dokuwiki export container">
+
+<h1 class="sectionedit1" id="e-mail_as_second_factor">E-Mail as Second Factor</h1>
+<div class="level1">
+
+<p>
+This plugin adds the user&#039;s e-mail account as a second authentication factor.
+</p>
+
+<p>
+After logging in through another authentication module, a one-time code will be generated by the portal and sent to the user&#039;s e-mail address. The user will be prompted for this code in order to finish the login process.
+</p>
+<div class="noteimportant">This plugin will only improve security in situations where the user&#039;s email is not protected by the same password used to login on LemonLDAP::NG.
+And of course, if the user&#039;s email account is also protected by LemonLDAP::NG, they will not be able to open their mailbox to find out their one-time code.
+
+</div>
+</div>
+<!-- EDIT1 SECTION "E-Mail as Second Factor" [1-668] -->
+<h3 class="sectionedit2" id="configuration">Configuration</h3>
+<div class="level3">
+
+<p>
+Before configuring this module, make sure the user&#039;s email address is correctly fetched from your UserDB plugin and appears in the session browser. If you want to store the user e-mail in a different session field than <code>mail</code>, go to “General Parameters » Advanced parameters » SMTP” and set the “Session key containing mail address” parameter.
+</p>
+
+<p>
+All parameters are configured in “General Parameters » Second factors » Mail second factor”.
+</p>
+<ul>
+<li class="level1"><div class="li"> <strong>Activation</strong>: Set to <code>On</code> to activate this module. If a user does not have an email address, they will encounter an error on login. If you want to use this plugin only for users who have an email address, use <code>$mail</code> (or whatever your e-mail session key is) as the activation rule.</div>
+</li>
+<li class="level1"><div class="li"> <strong>Code regex</strong>: The regular expression used to generate one-time codes. The default is a 6-digit code.</div>
+</li>
+<li class="level1"><div class="li"> <strong>Code timeout</strong>: It might take a while for users to open their e-mail account and find the code. Raise this timeout if the default (2 minutes) isn&#039;t enough.</div>
+</li>
+<li class="level1"><div class="li"> <strong>Mail subject</strong>: The subject of the email the user will receive. If you leave it blank, it will be looked up in translation files.</div>
+</li>
+<li class="level1"><div class="li"> <strong>Mail body</strong>: The plain text content of the email the user will receive. If you leave it blank, the <code>mail_2fcode</code> <abbr title="HyperText Markup Language">HTML</abbr> template will be used. The one-time code is stored in the <code>$code</code> variable</div>
+</li>
+<li class="level1"><div class="li"> <strong>Authentication level</strong>: if you want to overwrite the value sent by your authentication module, you can define here the new authentication level. Example: 5</div>
+</li>
+<li class="level1"><div class="li"> <strong>Logo</strong> (Optional): logo file <em>(in static/&lt;skin&gt; directory)</em></div>
+</li>
+</ul>
+
+</div>
+<!-- EDIT2 SECTION "Configuration" [669-] --></div>
+</body>
+</html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/managertests.html 2.0.2+ds-1/doc/pages/documentation/current/managertests.html
--- 2.0.1+ds-2/doc/pages/documentation/current/managertests.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/managertests.html	2019-02-12 16:28:08.000000000 +0000
@@ -58,7 +58,7 @@ Each time you save a configuration, Mana
 </ul>
 
 <p>
-In some case <em>(conf overridden in INI file,…)</em>, you may have to ignore some of them. You just have to list them <em>(space separated)</em> in a special key in <code>lemonldap-ng.ini</code>, section <code>[Manager]</code>:
+In some case <em>(conf overridden in INI file,...)</em>, you may have to ignore some of them. You just have to list them <em>(space separated)</em> in a special key in <code>lemonldap-ng.ini</code>, section <code>[Manager]</code>:
 </p>
 <ul>
 <li class="level1"><div class="li"> <code>skippedUnitTests</code> for unit tests</div>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/mitm 2.0.2+ds-1/doc/pages/documentation/current/mitm
--- 2.0.1+ds-2/doc/pages/documentation/current/mitm	2018-12-21 14:21:00.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/mitm	2019-02-12 16:27:58.000000000 +0000
@@ -23,10 +23,10 @@
 <link rel="alternate" type="application/rss+xml" title="Current namespace" href="/feed.php?mode=list&amp;ns=documentation:2.0"/>
 <link rel="alternate" type="text/html" title="Plain HTML" href="/_export/xhtml/documentation/2.0/mitm"/>
 <link rel="alternate" type="text/plain" title="Wiki Markup" href="/_export/raw/documentation/2.0/mitm"/>
-<link rel="stylesheet" type="text/css" href="/lib/exe/css.php?t=bootstrap3&amp;tseed=68165aeb4a485b8d6b99b5c80ffc4981"/>
+<link rel="stylesheet" type="text/css" href="/lib/exe/css.php?t=bootstrap3&amp;tseed=666dbe073d7d2522373106d8d2d68438"/>
 <script type="text/javascript">/*<![CDATA[*/var NS='documentation:2.0';var JSINFO = {"id":"documentation:2.0:mitm","namespace":"documentation:2.0"};
 /*!]]>*/</script>
-<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=68165aeb4a485b8d6b99b5c80ffc4981&amp;template=bootstrap3"></script>
+<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=666dbe073d7d2522373106d8d2d68438&amp;template=bootstrap3"></script>
   <script type="text/javascript" src="/lib/tpl/bootstrap3/assets/bootstrap/js/bootstrap.min.js"></script>
   <style type="text/css">
     body { padding-top: 20px; }
@@ -90,7 +90,7 @@
         <form action="/start" accept-charset="utf-8" class="search" id="dw__search" method="get" role="search"><div class="no"><input type="hidden" name="do" value="search" /><input type="text" id="qsearch__in" accesskey="f" name="id" class="edit" title="[F]" /><input type="submit" value="Search" class="button" title="Search" /><div id="qsearch__out" class="ajax_qsearch JSpopup"></div></div></form>
         
         <ul class="nav navbar-nav">
-                    <li><a href="/documentation/2.0/mitm?do=login&amp;sectok=a56ff368e970c958de63b823f65c2cf0"  class="action login" rel="nofollow" title="Login"><i class="glyphicon glyphicon-log-in"></i> Login</a></li>        </ul>
+                    <li><a href="/documentation/2.0/mitm?do=login&amp;sectok=0f10c8fca57376e7bc8695f4a434476e"  class="action login" rel="nofollow" title="Login"><i class="glyphicon glyphicon-log-in"></i> Login</a></li>        </ul>
 
       </div>
 
@@ -157,7 +157,28 @@ You&#039;ve followed a link to a topic t
 <div class="text-center">
 </p>
 
-<h3 class="sectionedit1" id="hosted_by">Hosted by</h3>
+<h3 class="sectionedit1" id="social_networks">Social networks</h3>
+<div class="level3">
+
+<p>
+
+<p><a href="https://twitter.com/lemonldapng/" class="btn btn-large btn-info"><i class="glyphicon glyphicon-retweet"></i> Twitter</a></p>
+<p><a href="https://www.facebook.com/lemonldapng/" class="btn btn-large btn-primary"><i class="glyphicon glyphicon-thumbs-up"></i> Facebook</a></p>
+
+</p>
+
+<p>
+</div>
+</p>
+<hr />
+
+<p>
+<div class="text-center">
+</p>
+
+</div>
+<!-- EDIT1 SECTION "Social networks" [41-433] -->
+<h3 class="sectionedit2" id="hosted_by">Hosted by</h3>
 <div class="level3">
 
 <p>
@@ -171,8 +192,8 @@ You&#039;ve followed a link to a topic t
 </p>
 
 </div>
-<!-- EDIT1 SECTION "Hosted by" [40-174] -->
-<h3 class="sectionedit2" id="certifications">Certifications</h3>
+<!-- EDIT2 SECTION "Hosted by" [434-568] -->
+<h3 class="sectionedit3" id="certifications">Certifications</h3>
 <div class="level3">
 
 <p>
@@ -192,8 +213,8 @@ You&#039;ve followed a link to a topic t
 </p>
 
 </div>
-<!-- EDIT2 SECTION "Certifications" [175-534] -->
-<h3 class="sectionedit3" id="awards">Awards</h3>
+<!-- EDIT3 SECTION "Certifications" [569-928] -->
+<h3 class="sectionedit4" id="awards">Awards</h3>
 <div class="level3">
 
 <p>
@@ -222,7 +243,7 @@ You&#039;ve followed a link to a topic t
 
 
 </div>
-<!-- EDIT3 SECTION "Awards" [535-] -->          </div>
+<!-- EDIT4 SECTION "Awards" [929-] -->          </div>
   </div>
 </aside>
 
@@ -241,7 +262,7 @@ You&#039;ve followed a link to a topic t
       
     </div><!-- /site -->
 
-    <div class="no"><img src="/lib/exe/indexer.php?id=documentation%3A2.0%3Amitm&amp;1545402061" width="2" height="1" alt="" /></div>
+    <div class="no"><img src="/lib/exe/indexer.php?id=documentation%3A2.0%3Amitm&amp;1549988879" width="2" height="1" alt="" /></div>
     <div id="screen__mode" class="no">
       <span class="visible-xs"></span>
       <span class="visible-sm"></span>
Binary files 2.0.1+ds-2/doc/pages/documentation/current/new.edf565b3f89a0ad56df9a5e7a31a6de8.png and 2.0.2+ds-1/doc/pages/documentation/current/new.edf565b3f89a0ad56df9a5e7a31a6de8.png differ
Binary files 2.0.1+ds-2/doc/pages/documentation/current/new.png and 2.0.2+ds-1/doc/pages/documentation/current/new.png differ
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/nosqlsessionbackend.html 2.0.2+ds-1/doc/pages/documentation/current/nosqlsessionbackend.html
--- 2.0.1+ds-2/doc/pages/documentation/current/nosqlsessionbackend.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/nosqlsessionbackend.html	2019-02-12 16:28:08.000000000 +0000
@@ -62,7 +62,7 @@ Install and launch a <a href="http://cod
 </p>
 
 <p>
-In the manager: set <a href="https://metacpan.org/pod/Apache::Session::browseable::Redis" class="urlextern" title="https://metacpan.org/pod/Apache::Session::browseable::Redis"  rel="nofollow">Apache::Session::Browseable::Redis</a> in <code>General parameters</code> » <code>Sessions</code> » <code>Session storage</code> » <code>Apache::Session module</code> and add the following parameters (case sensitive):
+In the manager: set <a href="https://metacpan.org/pod/Apache::Session::Browseable::Redis" class="urlextern" title="https://metacpan.org/pod/Apache::Session::Browseable::Redis"  rel="nofollow">Apache::Session::Browseable::Redis</a> in <code>General parameters</code> » <code>Sessions</code> » <code>Session storage</code> » <code>Apache::Session module</code> and add the following parameters (case sensitive):
 </p>
 <div class="table sectionedit3"><table class="inline table table-bordered table-striped">
 	<thead>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/notifications.html 2.0.2+ds-1/doc/pages/documentation/current/notifications.html
--- 2.0.1+ds-2/doc/pages/documentation/current/notifications.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/notifications.html	2019-02-12 16:28:08.000000000 +0000
@@ -186,7 +186,7 @@ To summary available options:
 </li>
 <li class="level1"><div class="li"> <strong>dbiPassword</strong>: <abbr title="Database Interface">DBI</abbr> password.</div>
 </li>
-<li class="level1"><div class="li"> <strong>table</strong>: Notifications table name.</div>
+<li class="level1"><div class="li"> <strong>dbiTable</strong>: Notifications table name.</div>
 </li>
 </ul>
 
@@ -215,7 +215,7 @@ To summary available options:
 </ul>
 
 </div>
-<!-- EDIT4 SECTION "Storage" [832-3326] -->
+<!-- EDIT4 SECTION "Storage" [832-3329] -->
 <h3 class="sectionedit5" id="wildcard">Wildcard</h3>
 <div class="level3">
 
@@ -232,13 +232,13 @@ Then creating a notification for <code>a
 </p>
 
 </div>
-<!-- EDIT5 SECTION "Wildcard" [3327-3797] -->
+<!-- EDIT5 SECTION "Wildcard" [3330-3800] -->
 <h2 class="sectionedit6" id="using_notification_system">Using notification system</h2>
 <div class="level2">
 <div class="noteimportant">Since version 2.0, notifications are now stored in JSON format. If you want to keep old format, select “use old format” in the manager. Note that the server for inserting notifications is paired with the chosen format: REST for JSON and SOAP for XML.
 </div>
 </div>
-<!-- EDIT6 SECTION "Using notification system" [3798-4111] -->
+<!-- EDIT6 SECTION "Using notification system" [3801-4114] -->
 <h3 class="sectionedit7" id="notification_format">Notification format</h3>
 <div class="level3">
 
@@ -266,13 +266,13 @@ Notifications are JSON (default) or XML
 </li>
 <li class="level2"><div class="li"> Sub elements:</div>
 <ul>
-<li class="level3"><div class="li"> &lt;title&gt;: title to display: will be inserted in <abbr title="HyperText Markup Language">HTML</abbr> page enclosed in &lt;h2 class=“notifText”&gt;…&lt;/h2&gt;</div>
+<li class="level3"><div class="li"> &lt;title&gt;: title to display: will be inserted in <abbr title="HyperText Markup Language">HTML</abbr> page enclosed in &lt;h2 class=“notifText”&gt;...&lt;/h2&gt;</div>
 </li>
-<li class="level3"><div class="li"> &lt;subtitle&gt;: subtitle to display: will be inserted in <abbr title="HyperText Markup Language">HTML</abbr> page enclosed in &lt;h2 class=“notifText”&gt;…&lt;/h2&gt;</div>
+<li class="level3"><div class="li"> &lt;subtitle&gt;: subtitle to display: will be inserted in <abbr title="HyperText Markup Language">HTML</abbr> page enclosed in &lt;h2 class=“notifText”&gt;...&lt;/h2&gt;</div>
 </li>
-<li class="level3"><div class="li"> &lt;text&gt;: paragraph to display: will be inserted in <abbr title="HyperText Markup Language">HTML</abbr> page enclosed in &lt;p class=“notifText”&gt;…&lt;/p&gt;</div>
+<li class="level3"><div class="li"> &lt;text&gt;: paragraph to display: will be inserted in <abbr title="HyperText Markup Language">HTML</abbr> page enclosed in &lt;p class=“notifText”&gt;...&lt;/p&gt;</div>
 </li>
-<li class="level3"><div class="li"> &lt;check&gt;: paragraph to display with a checkbox: will be inserted in <abbr title="HyperText Markup Language">HTML</abbr> page enclosed in &lt;p class=“notifCheck”&gt;&lt;input type=“checkbox” /&gt;…&lt;/p&gt;</div>
+<li class="level3"><div class="li"> &lt;check&gt;: paragraph to display with a checkbox: will be inserted in <abbr title="HyperText Markup Language">HTML</abbr> page enclosed in &lt;p class=“notifCheck”&gt;&lt;input type=“checkbox” /&gt;...&lt;/p&gt;</div>
 </li>
 </ul>
 </li>
@@ -327,7 +327,7 @@ Notifications are JSON (default) or XML
 <span class="sc3"><span class="re1">&lt;/root<span class="re2">&gt;</span></span></span></pre>
 
 </div>
-<!-- EDIT7 SECTION "Notification format" [4112-6510] -->
+<!-- EDIT7 SECTION "Notification format" [4115-6513] -->
 <h3 class="sectionedit8" id="create_new_notifications_with_notifications_explorer">Create new notifications with notifications explorer</h3>
 <div class="level3">
 
@@ -348,7 +348,7 @@ When all is ok, click on <code>Save</cod
 </p>
 
 </div>
-<!-- EDIT8 SECTION "Create new notifications with notifications explorer" [6511-6829] -->
+<!-- EDIT8 SECTION "Create new notifications with notifications explorer" [6514-6832] -->
 <h3 class="sectionedit9" id="notification_server">Notification server</h3>
 <div class="level3">
 
@@ -448,7 +448,7 @@ You can also delete some notifications w
 <span class="br0">&#125;</span></pre>
 
 </div>
-<!-- EDIT9 SECTION "Notification server" [6830-8965] -->
+<!-- EDIT9 SECTION "Notification server" [6833-8968] -->
 <h3 class="sectionedit10" id="test_notification">Test notification</h3>
 <div class="level3">
 
@@ -465,6 +465,6 @@ Try also to create a global notification
 </p>
 
 </div>
-<!-- EDIT10 SECTION "Test notification" [8966-] --></div>
+<!-- EDIT10 SECTION "Test notification" [8969-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/parameterlist.html 2.0.2+ds-1/doc/pages/documentation/current/parameterlist.html
--- 2.0.1+ds-2/doc/pages/documentation/current/parameterlist.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/parameterlist.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:parameterlist</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="index,follow"/>
+<meta name="robots" content="noindex,nofollow"/>
 <meta name="keywords" content="documentation,2.0,parameterlist"/>
 <link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="parameterlist.html"/>
@@ -130,1306 +130,1333 @@ The attribute key name can be used direc
 		<td class="col0"> bruteForceProtection </td><td class="col1"> Enable brute force attack protection </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row24 roweven">
-		<td class="col0"> bruteForceProtectionMaxAge </td><td class="col1"> Brute force attack protection → Max age third failed login </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> bruteForceProtectionMaxAge </td><td class="col1"> Brute force attack protection -&gt; Max age between last and first allowed failed login </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row25 rowodd">
-		<td class="col0"> bruteForceProtectionTempo </td><td class="col1"> Brute force attack protection → Tempo before try again </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> bruteForceProtectionMaxFailed </td><td class="col1"> Brute force attack protection -&gt; Max allowed failed login </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row26 roweven">
-		<td class="col0"> captcha_login_enabled </td><td class="col1"> Captcha on login page </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> bruteForceProtectionTempo </td><td class="col1"> Brute force attack protection -&gt; Tempo before try again </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row27 rowodd">
-		<td class="col0"> captcha_mail_enabled </td><td class="col1"> Captcha on password reset page </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> captcha_login_enabled </td><td class="col1"> Captcha on login page </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row28 roweven">
-		<td class="col0"> captcha_register_enabled </td><td class="col1"> Captcha on account creation page </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> captcha_mail_enabled </td><td class="col1"> Captcha on password reset page </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row29 rowodd">
-		<td class="col0"> captcha_size </td><td class="col1"> Captcha size </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> captcha_register_enabled </td><td class="col1"> Captcha on account creation page </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row30 roweven">
-		<td class="col0"> casAccessControlPolicy </td><td class="col1"> <abbr title="Central Authentication Service">CAS</abbr> access control policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> captcha_size </td><td class="col1"> Captcha size </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row31 rowodd">
-		<td class="col0"> casAppMetaDataOptions </td><td class="col1"> Root of <abbr title="Central Authentication Service">CAS</abbr> app options </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> [1] </td>
+		<td class="col0"> casAccessControlPolicy </td><td class="col1"> <abbr title="Central Authentication Service">CAS</abbr> access control policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row32 roweven">
-		<td class="col0"> casAttr </td><td class="col1"> Pivot attribute for <abbr title="Central Authentication Service">CAS</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> casAppMetaDataOptions </td><td class="col1"> Root of <abbr title="Central Authentication Service">CAS</abbr> app options </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> [1] </td>
 	</tr>
 	<tr class="row33 rowodd">
-		<td class="col0"> casAttributes </td><td class="col1"> <abbr title="Central Authentication Service">CAS</abbr> exported attributes </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> casAttr </td><td class="col1"> Pivot attribute for <abbr title="Central Authentication Service">CAS</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row34 roweven">
-		<td class="col0"> casAuthnLevel </td><td class="col1"> <abbr title="Central Authentication Service">CAS</abbr> authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> casAttributes </td><td class="col1"> <abbr title="Central Authentication Service">CAS</abbr> exported attributes </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row35 rowodd">
-		<td class="col0"> casSrvMetaDataOptions </td><td class="col1"> Root of <abbr title="Central Authentication Service">CAS</abbr> server options </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> [1] </td>
+		<td class="col0"> casAuthnLevel </td><td class="col1"> <abbr title="Central Authentication Service">CAS</abbr> authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row36 roweven">
-		<td class="col0"> casStorage </td><td class="col1"> Apache::Session module to store <abbr title="Central Authentication Service">CAS</abbr> user data </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> casSrvMetaDataOptions </td><td class="col1"> Root of <abbr title="Central Authentication Service">CAS</abbr> server options </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> [1] </td>
 	</tr>
 	<tr class="row37 rowodd">
-		<td class="col0"> casStorageOptions </td><td class="col1"> Apache::Session module parameters </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> casStorage </td><td class="col1"> Apache::Session module to store <abbr title="Central Authentication Service">CAS</abbr> user data </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row38 roweven">
-		<td class="col0"> cda </td><td class="col1"> Enable Cross Domain Authentication </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> casStorageOptions </td><td class="col1"> Apache::Session module parameters </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row39 rowodd">
-		<td class="col0"> cfgAuthor </td><td class="col1"> Name of the author of the current configuration </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> cda </td><td class="col1"> Enable Cross Domain Authentication </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row40 roweven">
-		<td class="col0"> cfgAuthorIP </td><td class="col1"> Uploader <abbr title="Internet Protocol">IP</abbr> address of the current configuration </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> cfgAuthor </td><td class="col1"> Name of the author of the current configuration </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row41 rowodd">
-		<td class="col0"> cfgDate </td><td class="col1"> Timestamp of the current configuration </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> cfgAuthorIP </td><td class="col1"> Uploader <abbr title="Internet Protocol">IP</abbr> address of the current configuration </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row42 roweven">
-		<td class="col0"> cfgLog </td><td class="col1"> Configuration update log </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> cfgDate </td><td class="col1"> Timestamp of the current configuration </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row43 rowodd">
-		<td class="col0"> cfgNum </td><td class="col1"> Enable Cross Domain Authentication </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> cfgLog </td><td class="col1"> Configuration update log </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row44 roweven">
-		<td class="col0"> cfgVersion </td><td class="col1"> Version of LLNG which build configuration </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> cfgNum </td><td class="col1"> Enable Cross Domain Authentication </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row45 rowodd">
-		<td class="col0"> checkState </td><td class="col1"> Enable CheckState plugin </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> cfgVersion </td><td class="col1"> Version of LLNG which build configuration </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row46 roweven">
-		<td class="col0"> checkStateSecret </td><td class="col1"> Secret token for CheckState plugin </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> checkState </td><td class="col1"> Enable CheckState plugin </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row47 rowodd">
-		<td class="col0"> checkTime </td><td class="col1"> Timeout to check new configuration in local cache </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> checkStateSecret </td><td class="col1"> Secret token for CheckState plugin </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row48 roweven">
-		<td class="col0"> checkXSS </td><td class="col1"> Check <abbr title="Cross Site Scripting">XSS</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> checkTime </td><td class="col1"> Timeout to check new configuration in local cache </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row49 rowodd">
-		<td class="col0"> combModules </td><td class="col1"> Combination module description </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> checkXSS </td><td class="col1"> Check <abbr title="Cross Site Scripting">XSS</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row50 roweven">
-		<td class="col0"> combination </td><td class="col1"> Combination rule </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> combModules </td><td class="col1"> Combination module description </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row51 rowodd">
-		<td class="col0"> configStorage </td><td class="col1"> Configuration storage </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
+		<td class="col0"> combination </td><td class="col1"> Combination rule </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row52 roweven">
-		<td class="col0"> confirmFormMethod </td><td class="col1"> HTTP method for confirm page form </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> configStorage </td><td class="col1"> Configuration storage </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row53 rowodd">
-		<td class="col0"> cookieExpiration </td><td class="col1"> Cookie expiration </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> confirmFormMethod </td><td class="col1"> HTTP method for confirm page form </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row54 roweven">
-		<td class="col0"> cookieName </td><td class="col1"> Name of the main cookie </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> cookieExpiration </td><td class="col1"> Cookie expiration </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row55 rowodd">
-		<td class="col0"> cspConnect </td><td class="col1"> Authorized Ajax destination for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> cookieName </td><td class="col1"> Name of the main cookie </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row56 roweven">
-		<td class="col0"> cspDefault </td><td class="col1"> Default value for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> cspConnect </td><td class="col1"> Authorized Ajax destination for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row57 rowodd">
-		<td class="col0"> cspFont </td><td class="col1"> Font source for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> cspDefault </td><td class="col1"> Default value for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row58 roweven">
-		<td class="col0"> cspFormAction </td><td class="col1"> Form action destination for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> cspFont </td><td class="col1"> Font source for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row59 rowodd">
-		<td class="col0"> cspImg </td><td class="col1"> Image source for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> cspFormAction </td><td class="col1"> Form action destination for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row60 roweven">
-		<td class="col0"> cspScript </td><td class="col1"> Javascript source for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> cspImg </td><td class="col1"> Image source for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row61 rowodd">
-		<td class="col0"> cspStyle </td><td class="col1"> Style source for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> cspScript </td><td class="col1"> Javascript source for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row62 roweven">
-		<td class="col0"> customAddParams </td><td class="col1"> Custom additional parameters </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> cspStyle </td><td class="col1"> Style source for Content-Security-Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row63 rowodd">
-		<td class="col0"> customAuth </td><td class="col1"> Custom auth module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> customAddParams </td><td class="col1"> Custom additional parameters </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row64 roweven">
-		<td class="col0"> customFunctions </td><td class="col1"> List of custom functions </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5 leftalign">  </td>
+		<td class="col0"> customAuth </td><td class="col1"> Custom auth module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row65 rowodd">
-		<td class="col0"> customPassword </td><td class="col1"> Custom password module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> customFunctions </td><td class="col1"> List of custom functions </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row66 roweven">
-		<td class="col0"> customRegister </td><td class="col1"> Custom register module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> customPassword </td><td class="col1"> Custom password module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row67 rowodd">
-		<td class="col0"> customUserDB </td><td class="col1"> Custom user DB module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> customRegister </td><td class="col1"> Custom register module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row68 roweven">
-		<td class="col0"> dbiAuthChain </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> customUserDB </td><td class="col1"> Custom user DB module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row69 rowodd">
-		<td class="col0"> dbiAuthLoginCol </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiAuthChain </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row70 roweven">
-		<td class="col0"> dbiAuthPassword </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiAuthLoginCol </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row71 rowodd">
-		<td class="col0"> dbiAuthPasswordCol </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiAuthPassword </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row72 roweven">
-		<td class="col0"> dbiAuthPasswordHash </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiAuthPasswordCol </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row73 rowodd">
-		<td class="col0"> dbiAuthTable </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiAuthPasswordHash </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row74 roweven">
-		<td class="col0"> dbiAuthUser </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiAuthTable </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row75 rowodd">
-		<td class="col0"> dbiAuthnLevel </td><td class="col1"> <abbr title="Database Interface">DBI</abbr> authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiAuthUser </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row76 roweven">
-		<td class="col0"> dbiDynamicHashEnabled </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiAuthnLevel </td><td class="col1"> <abbr title="Database Interface">DBI</abbr> authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row77 rowodd">
-		<td class="col0"> dbiDynamicHashNewPasswordScheme </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiDynamicHashEnabled </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row78 roweven">
-		<td class="col0"> dbiDynamicHashValidSaltedSchemes </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiDynamicHashNewPasswordScheme </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row79 rowodd">
-		<td class="col0"> dbiDynamicHashValidSchemes </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiDynamicHashValidSaltedSchemes </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row80 roweven">
-		<td class="col0"> dbiExportedVars </td><td class="col1"> <abbr title="Database Interface">DBI</abbr> exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiDynamicHashValidSchemes </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row81 rowodd">
-		<td class="col0"> dbiPasswordMailCol </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiExportedVars </td><td class="col1"> <abbr title="Database Interface">DBI</abbr> exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row82 roweven">
-		<td class="col0"> dbiUserChain </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiPasswordMailCol </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row83 rowodd">
-		<td class="col0"> dbiUserPassword </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiUserChain </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row84 roweven">
-		<td class="col0"> dbiUserTable </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiUserPassword </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row85 rowodd">
-		<td class="col0"> dbiUserUser </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiUserTable </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row86 roweven">
-		<td class="col0"> demoExportedVars </td><td class="col1"> Demo exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> dbiUserUser </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row87 rowodd">
-		<td class="col0"> domain </td><td class="col1"> <abbr title="Domain Name System">DNS</abbr> domain </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> demoExportedVars </td><td class="col1"> Demo exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row88 roweven">
-		<td class="col0"> exportedAttr </td><td class="col1"> List of attributes to export by SOAP or REST servers </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> domain </td><td class="col1"> <abbr title="Domain Name System">DNS</abbr> domain </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row89 rowodd">
-		<td class="col0"> exportedVars </td><td class="col1"> Main exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> exportedAttr </td><td class="col1"> List of attributes to export by SOAP or REST servers </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row90 roweven">
-		<td class="col0"> ext2FSendCommand </td><td class="col1"> Send command of External second factor </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> exportedVars </td><td class="col1"> Main exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row91 rowodd">
-		<td class="col0"> ext2FValidateCommand </td><td class="col1"> Validation command of External second factor </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ext2FSendCommand </td><td class="col1"> Send command of External second factor </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row92 roweven">
-		<td class="col0"> ext2fActivation </td><td class="col1"> External second factor activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ext2FValidateCommand </td><td class="col1"> Validation command of External second factor </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row93 rowodd">
-		<td class="col0"> ext2fAuthnLevel </td><td class="col1"> Authentication level for users authentified by External second factor </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ext2fActivation </td><td class="col1"> External second factor activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row94 roweven">
-		<td class="col0"> ext2fLogo </td><td class="col1"> Custom logo for External 2F </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ext2fAuthnLevel </td><td class="col1"> Authentication level for users authentified by External second factor </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row95 rowodd">
-		<td class="col0"> facebookAppId </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ext2fLogo </td><td class="col1"> Custom logo for External 2F </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row96 roweven">
-		<td class="col0"> facebookAppSecret </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> facebookAppId </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row97 rowodd">
-		<td class="col0"> facebookAuthnLevel </td><td class="col1"> Facebook authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> facebookAppSecret </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row98 roweven">
-		<td class="col0"> facebookExportedVars </td><td class="col1"> Facebook exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> facebookAuthnLevel </td><td class="col1"> Facebook authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row99 rowodd">
-		<td class="col0"> facebookUserField </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> facebookExportedVars </td><td class="col1"> Facebook exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row100 roweven">
-		<td class="col0"> failedLoginNumber </td><td class="col1"> Number of failures stored in login history </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> facebookUserField </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row101 rowodd">
-		<td class="col0"> formTimeout </td><td class="col1"> Token timeout for forms </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> failedLoginNumber </td><td class="col1"> Number of failures stored in login history </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row102 roweven">
-		<td class="col0"> globalStorage </td><td class="col1"> Session backend module </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> formTimeout </td><td class="col1"> Token timeout for forms </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row103 rowodd">
-		<td class="col0"> globalStorageOptions </td><td class="col1"> Session backend module options </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> globalStorage </td><td class="col1"> Session backend module </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row104 roweven">
-		<td class="col0"> grantSessionRules </td><td class="col1"> Rules to grant sessions </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> globalStorageOptions </td><td class="col1"> Session backend module options </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row105 rowodd">
-		<td class="col0"> groups </td><td class="col1"> Groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> gpgDb </td><td class="col1"> GPG keys database </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row106 roweven">
-		<td class="col0"> handlerInternalCache </td><td class="col1"> Handler internal cache timeout </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> grantSessionRules </td><td class="col1"> Rules to grant sessions </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row107 rowodd">
-		<td class="col0"> hiddenAttributes </td><td class="col1"> Name of attributes to hide in logs </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> groups </td><td class="col1"> Groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row108 roweven">
-		<td class="col0"> hideOldPassword </td><td class="col1"> Hide old password in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> handlerInternalCache </td><td class="col1"> Handler internal cache timeout </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row109 rowodd">
-		<td class="col0"> httpOnly </td><td class="col1"> Enable httpOnly flag in cookie </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> hiddenAttributes </td><td class="col1"> Name of attributes to hide in logs </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row110 roweven">
-		<td class="col0"> https </td><td class="col1"> Use HTTPS for redirection from portal </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> hideOldPassword </td><td class="col1"> Hide old password in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row111 rowodd">
-		<td class="col0"> infoFormMethod </td><td class="col1"> HTTP method for info page form </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> httpOnly </td><td class="col1"> Enable httpOnly flag in cookie </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row112 roweven">
-		<td class="col0"> issuerDBCASActivation </td><td class="col1"> <abbr title="Central Authentication Service">CAS</abbr> server activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> https </td><td class="col1"> Use HTTPS for redirection from portal </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row113 rowodd">
-		<td class="col0"> issuerDBCASPath </td><td class="col1"> <abbr title="Central Authentication Service">CAS</abbr> server request path </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> infoFormMethod </td><td class="col1"> HTTP method for info page form </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row114 roweven">
-		<td class="col0"> issuerDBCASRule </td><td class="col1"> <abbr title="Central Authentication Service">CAS</abbr> server rule </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBCASActivation </td><td class="col1"> <abbr title="Central Authentication Service">CAS</abbr> server activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row115 rowodd">
-		<td class="col0"> issuerDBGetActivation </td><td class="col1"> Get issuer activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBCASPath </td><td class="col1"> <abbr title="Central Authentication Service">CAS</abbr> server request path </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row116 roweven">
-		<td class="col0"> issuerDBGetParameters </td><td class="col1"> List of virtualHosts with their get parameters </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBCASRule </td><td class="col1"> <abbr title="Central Authentication Service">CAS</abbr> server rule </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row117 rowodd">
-		<td class="col0"> issuerDBGetPath </td><td class="col1"> Get issuer request path </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBGetActivation </td><td class="col1"> Get issuer activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row118 roweven">
-		<td class="col0"> issuerDBGetRule </td><td class="col1"> Get issuer rule </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBGetParameters </td><td class="col1"> List of virtualHosts with their get parameters </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row119 rowodd">
-		<td class="col0"> issuerDBOpenIDActivation </td><td class="col1"> OpenID server activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBGetPath </td><td class="col1"> Get issuer request path </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row120 roweven">
-		<td class="col0"> issuerDBOpenIDConnectActivation </td><td class="col1"> OpenID Connect server activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBGetRule </td><td class="col1"> Get issuer rule </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row121 rowodd">
-		<td class="col0"> issuerDBOpenIDConnectPath </td><td class="col1"> OpenID Connect server request path </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBOpenIDActivation </td><td class="col1"> OpenID server activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row122 roweven">
-		<td class="col0"> issuerDBOpenIDConnectRule </td><td class="col1"> OpenID Connect server rule </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBOpenIDConnectActivation </td><td class="col1"> OpenID Connect server activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row123 rowodd">
-		<td class="col0"> issuerDBOpenIDPath </td><td class="col1"> OpenID server request path </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBOpenIDConnectPath </td><td class="col1"> OpenID Connect server request path </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row124 roweven">
-		<td class="col0"> issuerDBOpenIDRule </td><td class="col1"> OpenID server rule </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBOpenIDConnectRule </td><td class="col1"> OpenID Connect server rule </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row125 rowodd">
-		<td class="col0"> issuerDBSAMLActivation </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBOpenIDPath </td><td class="col1"> OpenID server request path </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row126 roweven">
-		<td class="col0"> issuerDBSAMLPath </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP request path </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBOpenIDRule </td><td class="col1"> OpenID server rule </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row127 rowodd">
-		<td class="col0"> issuerDBSAMLRule </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP rule </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBSAMLActivation </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row128 roweven">
-		<td class="col0"> jsRedirect </td><td class="col1"> Use javascript for redirections </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBSAMLPath </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP request path </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row129 rowodd">
-		<td class="col0"> key </td><td class="col1"> Secret key </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> issuerDBSAMLRule </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP rule </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row130 roweven">
-		<td class="col0"> krbAuthnLevel </td><td class="col1"> Null authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> jsRedirect </td><td class="col1"> Use javascript for redirections </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row131 rowodd">
-		<td class="col0"> krbByJs </td><td class="col1"> Launch Kerberos authentication by Ajax </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> key </td><td class="col1"> Secret key </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row132 roweven">
-		<td class="col0"> krbKeytab </td><td class="col1"> Kerberos keytab </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> krbAuthnLevel </td><td class="col1"> Null authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row133 rowodd">
-		<td class="col0"> krbRemoveDomain </td><td class="col1"> Remove domain in Kerberos username </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> krbByJs </td><td class="col1"> Launch Kerberos authentication by Ajax </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row134 roweven">
-		<td class="col0"> ldapAllowResetExpiredPassword </td><td class="col1"> Allow a user to reset his expired password </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> krbKeytab </td><td class="col1"> Kerberos keytab </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row135 rowodd">
-		<td class="col0"> ldapAuthnLevel </td><td class="col1"> LDAP authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> krbRemoveDomain </td><td class="col1"> Remove domain in Kerberos username </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row136 roweven">
-		<td class="col0"> ldapBase </td><td class="col1"> LDAP search base </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapAllowResetExpiredPassword </td><td class="col1"> Allow a user to reset his expired password </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row137 rowodd">
-		<td class="col0"> ldapChangePasswordAsUser </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapAuthnLevel </td><td class="col1"> LDAP authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row138 roweven">
-		<td class="col0"> ldapExportedVars </td><td class="col1"> LDAP exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapBase </td><td class="col1"> LDAP search base </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row139 rowodd">
-		<td class="col0"> ldapGroupAttributeName </td><td class="col1"> LDAP attribute name for member in groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapChangePasswordAsUser </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row140 roweven">
-		<td class="col0"> ldapGroupAttributeNameGroup </td><td class="col1"> LDAP attribute name in group entry referenced as member in groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapExportedVars </td><td class="col1"> LDAP exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row141 rowodd">
-		<td class="col0"> ldapGroupAttributeNameSearch </td><td class="col1"> LDAP attributes to search in groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapGroupAttributeName </td><td class="col1"> LDAP attribute name for member in groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row142 roweven">
-		<td class="col0"> ldapGroupAttributeNameUser </td><td class="col1"> LDAP attribute name in user entry referenced as member in groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapGroupAttributeNameGroup </td><td class="col1"> LDAP attribute name in group entry referenced as member in groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row143 rowodd">
-		<td class="col0"> ldapGroupBase </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapGroupAttributeNameSearch </td><td class="col1"> LDAP attributes to search in groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row144 roweven">
-		<td class="col0"> ldapGroupObjectClass </td><td class="col1"> LDAP object class of groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapGroupAttributeNameUser </td><td class="col1"> LDAP attribute name in user entry referenced as member in groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row145 rowodd">
-		<td class="col0"> ldapGroupRecursive </td><td class="col1"> LDAP recursive search in groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapGroupBase </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row146 roweven">
-		<td class="col0"> ldapPasswordResetAttribute </td><td class="col1"> LDAP password reset attribute </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapGroupDecodeSearchedValue </td><td class="col1"> Decode value before searching it in LDAP groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row147 rowodd">
-		<td class="col0"> ldapPasswordResetAttributeValue </td><td class="col1"> LDAP password reset value </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapGroupObjectClass </td><td class="col1"> LDAP object class of groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row148 roweven">
-		<td class="col0"> ldapPort </td><td class="col1"> LDAP port </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapGroupRecursive </td><td class="col1"> LDAP recursive search in groups </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row149 rowodd">
-		<td class="col0"> ldapPpolicyControl </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapPasswordResetAttribute </td><td class="col1"> LDAP password reset attribute </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row150 roweven">
-		<td class="col0"> ldapPwdEnc </td><td class="col1"> LDAP password encoding </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapPasswordResetAttributeValue </td><td class="col1"> LDAP password reset value </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row151 rowodd">
-		<td class="col0"> ldapRaw </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapPort </td><td class="col1"> LDAP port </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row152 roweven">
-		<td class="col0"> ldapSearchDeref </td><td class="col1"> “deref” param of Net::LDAP::search() </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapPpolicyControl </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row153 rowodd">
-		<td class="col0"> ldapServer </td><td class="col1"> LDAP server (host or <abbr title="Uniform Resource Identifier">URI</abbr>) </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapPwdEnc </td><td class="col1"> LDAP password encoding </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row154 roweven">
-		<td class="col0"> ldapSetPassword </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapRaw </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row155 rowodd">
-		<td class="col0"> ldapTimeout </td><td class="col1"> LDAP connection timeout </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapSearchDeref </td><td class="col1"> “deref” param of Net::LDAP::search() </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row156 roweven">
-		<td class="col0"> ldapUsePasswordResetAttribute </td><td class="col1"> LDAP store reset flag in an attribute </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapServer </td><td class="col1"> LDAP server (host or <abbr title="Uniform Resource Identifier">URI</abbr>) </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row157 rowodd">
-		<td class="col0"> ldapVersion </td><td class="col1"> LDAP protocol version </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapSetPassword </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row158 roweven">
-		<td class="col0"> linkedInAuthnLevel </td><td class="col1"> LinkedIn authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapTimeout </td><td class="col1"> LDAP connection timeout </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row159 rowodd">
-		<td class="col0"> linkedInClientID </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapUsePasswordResetAttribute </td><td class="col1"> LDAP store reset flag in an attribute </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row160 roweven">
-		<td class="col0"> linkedInClientSecret </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> ldapVersion </td><td class="col1"> LDAP protocol version </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row161 rowodd">
-		<td class="col0"> linkedInFields </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> linkedInAuthnLevel </td><td class="col1"> LinkedIn authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row162 roweven">
-		<td class="col0"> linkedInScope </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> linkedInClientID </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row163 rowodd">
-		<td class="col0"> linkedInUserField </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> linkedInClientSecret </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row164 roweven">
-		<td class="col0"> localSessionStorage </td><td class="col1"> Local sessions cache module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> linkedInFields </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row165 rowodd">
-		<td class="col0"> localSessionStorageOptions </td><td class="col1"> Sessions cache module options </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> linkedInScope </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row166 roweven">
-		<td class="col0"> localStorage </td><td class="col1"> Local cache </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
+		<td class="col0"> linkedInUserField </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row167 rowodd">
-		<td class="col0"> localStorageOptions </td><td class="col1"> Local cache parameters </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
+		<td class="col0"> localSessionStorage </td><td class="col1"> Local sessions cache module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row168 roweven">
-		<td class="col0"> log4perlConfFile </td><td class="col1"> Log4Perl logger configuration file </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
+		<td class="col0"> localSessionStorageOptions </td><td class="col1"> Sessions cache module options </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row169 rowodd">
-		<td class="col0"> logLevel </td><td class="col1"> Log level, must be set in .ini </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
+		<td class="col0"> localStorage </td><td class="col1"> Local cache </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row170 roweven">
-		<td class="col0"> logger </td><td class="col1"> technical logger </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
+		<td class="col0"> localStorageOptions </td><td class="col1"> Local cache parameters </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row171 rowodd">
-		<td class="col0"> loginHistoryEnabled </td><td class="col1"> Enable login history </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> log4perlConfFile </td><td class="col1"> Log4Perl logger configuration file </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row172 roweven">
-		<td class="col0"> logoutServices </td><td class="col1"> Send logout trough GET request to these services </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> logLevel </td><td class="col1"> Log level, must be set in .ini </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row173 rowodd">
-		<td class="col0"> lwpOpts </td><td class="col1"> Options given to LWP::UserAgent </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> logger </td><td class="col1"> technical logger </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row174 roweven">
-		<td class="col0"> lwpSslOpts </td><td class="col1"> SSL options given to LWP::UserAgent </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> loginHistoryEnabled </td><td class="col1"> Enable login history </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row175 rowodd">
-		<td class="col0"> macros </td><td class="col1"> Macros </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> logoutServices </td><td class="col1"> Send logout trough GET request to these services </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row176 roweven">
-		<td class="col0"> mailBody </td><td class="col1"> Custom mail body </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> lwpOpts </td><td class="col1"> Options given to LWP::UserAgent </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row177 rowodd">
-		<td class="col0"> mailCharset </td><td class="col1"> Mail charset </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> lwpSslOpts </td><td class="col1"> SSL options given to LWP::UserAgent </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row178 roweven">
-		<td class="col0"> mailConfirmBody </td><td class="col1"> Custom confirm mail body </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> macros </td><td class="col1"> Macros </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row179 rowodd">
-		<td class="col0"> mailConfirmSubject </td><td class="col1"> Mail subject for reset confirmation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mail2fActivation </td><td class="col1"> Mail second factor activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row180 roweven">
-		<td class="col0"> mailFrom </td><td class="col1"> Sender email </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mail2fAuthnLevel </td><td class="col1"> Authentication level for users authenticated by Mail second factor </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row181 rowodd">
-		<td class="col0"> mailLDAPFilter </td><td class="col1"> LDAP filter for mail search </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mail2fBody </td><td class="col1"> Mail body for second factor authentication </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row182 roweven">
-		<td class="col0"> mailOnPasswordChange </td><td class="col1"> Send a mail when password is changed </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mail2fCodeRegex </td><td class="col1"> Regular expression to create a mail OTP code </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row183 rowodd">
-		<td class="col0"> mailReplyTo </td><td class="col1"> Reply-To address </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mail2fLogo </td><td class="col1"> Custom logo for Mail 2F </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row184 roweven">
-		<td class="col0"> mailSessionKey </td><td class="col1"> Session parameter where mail is stored </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mail2fSubject </td><td class="col1"> Mail subject for second factor authentication </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row185 rowodd">
-		<td class="col0"> mailSubject </td><td class="col1"> Mail subject for new password email </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mail2fTimeout </td><td class="col1"> Second factor code timeout </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row186 roweven">
-		<td class="col0"> mailTimeout </td><td class="col1"> Mail session timeout </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mailBody </td><td class="col1"> Custom password reset mail body </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row187 rowodd">
-		<td class="col0"> mailUrl </td><td class="col1"> <abbr title="Uniform Resource Locator">URL</abbr> of password reset page </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mailCharset </td><td class="col1"> Mail charset </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row188 roweven">
-		<td class="col0"> maintenance </td><td class="col1"> Maintenance mode for all virtual hosts </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mailConfirmBody </td><td class="col1"> Custom confirm password reset mail body </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row189 rowodd">
-		<td class="col0"> managerDn </td><td class="col1"> LDAP manager <abbr title="Distinguished Name">DN</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mailConfirmSubject </td><td class="col1"> Mail subject for reset confirmation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row190 roweven">
-		<td class="col0"> managerPassword </td><td class="col1"> LDAP manager Password </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mailFrom </td><td class="col1"> Sender email </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row191 rowodd">
-		<td class="col0"> max2FDevices </td><td class="col1"> Maximum registered 2F devices </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> mailLDAPFilter </td><td class="col1"> LDAP filter for mail search </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row192 roweven">
-		<td class="col0"> max2FDevicesNameLength </td><td class="col1"> Maximum 2F devices name length </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> mailOnPasswordChange </td><td class="col1"> Send a mail when password is changed </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row193 rowodd">
-		<td class="col0"> multiValuesSeparator </td><td class="col1"> Separator for multiple values </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mailReplyTo </td><td class="col1"> Reply-To address </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row194 roweven">
-		<td class="col0"> mySessionAuthorizedRWKeys </td><td class="col1"> Alterable session keys by user itself </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
+		<td class="col0"> mailSessionKey </td><td class="col1"> Session parameter where mail is stored </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row195 rowodd">
-		<td class="col0"> nginxCustomHandlers </td><td class="col1"> Custom Nginx handler (deprecated) </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mailSubject </td><td class="col1"> Mail subject for new password email </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row196 roweven">
-		<td class="col0"> noAjaxHook </td><td class="col1"> Avoid replacing 302 by 401 for Ajax responses </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mailTimeout </td><td class="col1"> Mail password reset session timeout </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row197 rowodd">
-		<td class="col0"> notification </td><td class="col1"> Notification activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mailUrl </td><td class="col1"> <abbr title="Uniform Resource Locator">URL</abbr> of password reset page </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row198 roweven">
-		<td class="col0"> notificationServer </td><td class="col1"> Notification server activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> maintenance </td><td class="col1"> Maintenance mode for all virtual hosts </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row199 rowodd">
-		<td class="col0"> notificationStorage </td><td class="col1"> Notification backend </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> managerDn </td><td class="col1"> LDAP manager <abbr title="Distinguished Name">DN</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row200 roweven">
-		<td class="col0"> notificationStorageOptions </td><td class="col1"> Notification backend options </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> managerPassword </td><td class="col1"> LDAP manager Password </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row201 rowodd">
-		<td class="col0"> notificationWildcard </td><td class="col1"> Notification string to match all users </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> max2FDevices </td><td class="col1"> Maximum registered 2F devices </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row202 roweven">
-		<td class="col0"> notificationXSLTfile </td><td class="col1"> Custom XSLT document for notifications </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> max2FDevicesNameLength </td><td class="col1"> Maximum 2F devices name length </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row203 rowodd">
-		<td class="col0"> notifyDeleted </td><td class="col1"> Show deleted sessions in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> multiValuesSeparator </td><td class="col1"> Separator for multiple values </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row204 roweven">
-		<td class="col0"> notifyOther </td><td class="col1"> Show other sessions in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> mySessionAuthorizedRWKeys </td><td class="col1"> Alterable session keys by user itself </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row205 rowodd">
-		<td class="col0"> nullAuthnLevel </td><td class="col1"> Null authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> nginxCustomHandlers </td><td class="col1"> Custom Nginx handler (deprecated) </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row206 roweven">
-		<td class="col0"> oidcAuthnLevel </td><td class="col1"> OpenID Connect authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> noAjaxHook </td><td class="col1"> Avoid replacing 302 by 401 for Ajax responses </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row207 rowodd">
-		<td class="col0"> oidcOPMetaDataOptions </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> [1] </td>
+		<td class="col0"> notification </td><td class="col1"> Notification activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row208 roweven">
-		<td class="col0"> oidcRPCallbackGetParam </td><td class="col1"> OpenID Connect Callback GET URLparameter </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> notificationServer </td><td class="col1"> Notification server activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row209 rowodd">
-		<td class="col0"> oidcRPMetaDataOptions </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> [1] </td>
+		<td class="col0"> notificationStorage </td><td class="col1"> Notification backend </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row210 roweven">
-		<td class="col0"> oidcRPStateTimeout </td><td class="col1"> OpenID Connect Timeout of state sessions </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> notificationStorageOptions </td><td class="col1"> Notification backend options </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row211 rowodd">
-		<td class="col0"> oidcServiceAllowAuthorizationCodeFlow </td><td class="col1"> OpenID Connect allow authorization code flow </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> notificationWildcard </td><td class="col1"> Notification string to match all users </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row212 roweven">
-		<td class="col0"> oidcServiceAllowDynamicRegistration </td><td class="col1"> OpenID Connect allow dynamic client registration </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> notificationXSLTfile </td><td class="col1"> Custom XSLT document for notifications </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row213 rowodd">
-		<td class="col0"> oidcServiceAllowHybridFlow </td><td class="col1"> OpenID Connect allow hybrid flow </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> notifyDeleted </td><td class="col1"> Show deleted sessions in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row214 roweven">
-		<td class="col0"> oidcServiceAllowImplicitFlow </td><td class="col1"> OpenID Connect allow implicit flow </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> notifyOther </td><td class="col1"> Show other sessions in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row215 rowodd">
-		<td class="col0"> oidcServiceKeyIdSig </td><td class="col1"> OpenID Connect Signature Key ID </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> nullAuthnLevel </td><td class="col1"> Null authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row216 roweven">
-		<td class="col0"> oidcServiceMetaDataAuthnContext </td><td class="col1"> OpenID Connect Authentication Context Class Ref </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcAuthnLevel </td><td class="col1"> OpenID Connect authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row217 rowodd">
-		<td class="col0"> oidcServiceMetaDataAuthorizeURI </td><td class="col1"> OpenID Connect authorizaton endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcOPMetaDataOptions </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> [1] </td>
 	</tr>
 	<tr class="row218 roweven">
-		<td class="col0"> oidcServiceMetaDataBackChannelURI </td><td class="col1"> OpenID Connect Front-Channel logout endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcRPCallbackGetParam </td><td class="col1"> OpenID Connect Callback GET URLparameter </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row219 rowodd">
-		<td class="col0"> oidcServiceMetaDataCheckSessionURI </td><td class="col1"> OpenID Connect check session iframe </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcRPMetaDataOptions </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> [1] </td>
 	</tr>
 	<tr class="row220 roweven">
-		<td class="col0"> oidcServiceMetaDataEndSessionURI </td><td class="col1"> OpenID Connect end session endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcRPStateTimeout </td><td class="col1"> OpenID Connect Timeout of state sessions </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row221 rowodd">
-		<td class="col0"> oidcServiceMetaDataFrontChannelURI </td><td class="col1"> OpenID Connect Front-Channel logout endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceAllowAuthorizationCodeFlow </td><td class="col1"> OpenID Connect allow authorization code flow </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row222 roweven">
-		<td class="col0"> oidcServiceMetaDataIssuer </td><td class="col1"> OpenID Connect issuer </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceAllowDynamicRegistration </td><td class="col1"> OpenID Connect allow dynamic client registration </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row223 rowodd">
-		<td class="col0"> oidcServiceMetaDataJWKSURI </td><td class="col1"> OpenID Connect JWKS endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceAllowHybridFlow </td><td class="col1"> OpenID Connect allow hybrid flow </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row224 roweven">
-		<td class="col0"> oidcServiceMetaDataRegistrationURI </td><td class="col1"> OpenID Connect registration endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceAllowImplicitFlow </td><td class="col1"> OpenID Connect allow implicit flow </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row225 rowodd">
-		<td class="col0"> oidcServiceMetaDataTokenURI </td><td class="col1"> OpenID Connect token endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceKeyIdSig </td><td class="col1"> OpenID Connect Signature Key ID </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row226 roweven">
-		<td class="col0"> oidcServiceMetaDataUserInfoURI </td><td class="col1"> OpenID Connect user info endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceMetaDataAuthnContext </td><td class="col1"> OpenID Connect Authentication Context Class Ref </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row227 rowodd">
-		<td class="col0"> oidcServicePrivateKeySig </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceMetaDataAuthorizeURI </td><td class="col1"> OpenID Connect authorizaton endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row228 roweven">
-		<td class="col0"> oidcServicePublicKeySig </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceMetaDataBackChannelURI </td><td class="col1"> OpenID Connect Front-Channel logout endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row229 rowodd">
-		<td class="col0"> oidcStorage </td><td class="col1"> Apache::Session module to store OIDC user data </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceMetaDataCheckSessionURI </td><td class="col1"> OpenID Connect check session iframe </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row230 roweven">
-		<td class="col0"> oidcStorageOptions </td><td class="col1"> Apache::Session module parameters </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceMetaDataEndSessionURI </td><td class="col1"> OpenID Connect end session endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row231 rowodd">
-		<td class="col0"> oldNotifFormat </td><td class="col1"> Use old XML format for notifications </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceMetaDataFrontChannelURI </td><td class="col1"> OpenID Connect Front-Channel logout endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row232 roweven">
-		<td class="col0"> openIdAttr </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceMetaDataIssuer </td><td class="col1"> OpenID Connect issuer </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row233 rowodd">
-		<td class="col0"> openIdAuthnLevel </td><td class="col1"> OpenID authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceMetaDataJWKSURI </td><td class="col1"> OpenID Connect JWKS endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row234 roweven">
-		<td class="col0"> openIdExportedVars </td><td class="col1"> OpenID exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceMetaDataRegistrationURI </td><td class="col1"> OpenID Connect registration endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row235 rowodd">
-		<td class="col0"> openIdIDPList </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceMetaDataTokenURI </td><td class="col1"> OpenID Connect token endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row236 roweven">
-		<td class="col0"> openIdIssuerSecret </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServiceMetaDataUserInfoURI </td><td class="col1"> OpenID Connect user info endpoint </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row237 rowodd">
-		<td class="col0"> openIdSPList </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServicePrivateKeySig </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row238 roweven">
-		<td class="col0"> openIdSecret </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcServicePublicKeySig </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row239 rowodd">
-		<td class="col0"> openIdSreg_country </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcStorage </td><td class="col1"> Apache::Session module to store OIDC user data </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row240 roweven">
-		<td class="col0"> openIdSreg_dob </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oidcStorageOptions </td><td class="col1"> Apache::Session module parameters </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row241 rowodd">
-		<td class="col0"> openIdSreg_email </td><td class="col1"> OpenID SREG email session parameter </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> oldNotifFormat </td><td class="col1"> Use old XML format for notifications </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row242 roweven">
-		<td class="col0"> openIdSreg_fullname </td><td class="col1"> OpenID SREG fullname session parameter </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdAttr </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row243 rowodd">
-		<td class="col0"> openIdSreg_gender </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdAuthnLevel </td><td class="col1"> OpenID authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row244 roweven">
-		<td class="col0"> openIdSreg_language </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdExportedVars </td><td class="col1"> OpenID exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row245 rowodd">
-		<td class="col0"> openIdSreg_nickname </td><td class="col1"> OpenID SREG nickname session parameter </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdIDPList </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row246 roweven">
-		<td class="col0"> openIdSreg_postcode </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdIssuerSecret </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row247 rowodd">
-		<td class="col0"> openIdSreg_timezone </td><td class="col1"> OpenID SREG timezone session parameter </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdSPList </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row248 roweven">
-		<td class="col0"> pamAuthnLevel </td><td class="col1"> PAM authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdSecret </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row249 rowodd">
-		<td class="col0"> pamService </td><td class="col1"> PAM service </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdSreg_country </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row250 roweven">
-		<td class="col0"> passwordDB </td><td class="col1"> Password module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdSreg_dob </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row251 rowodd">
-		<td class="col0"> passwordResetAllowedRetries </td><td class="col1"> Maximum number of retries to reset password </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdSreg_email </td><td class="col1"> OpenID SREG email session parameter </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row252 roweven">
-		<td class="col0"> persistentStorage </td><td class="col1"> Storage module for persistent sessions </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdSreg_fullname </td><td class="col1"> OpenID SREG fullname session parameter </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row253 rowodd">
-		<td class="col0"> persistentStorageOptions </td><td class="col1"> Options for persistent sessions storage module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdSreg_gender </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row254 roweven">
-		<td class="col0"> port </td><td class="col1"> Force port in redirection </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdSreg_language </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row255 rowodd">
-		<td class="col0"> portal </td><td class="col1"> Portal <abbr title="Uniform Resource Locator">URL</abbr> </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdSreg_nickname </td><td class="col1"> OpenID SREG nickname session parameter </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row256 roweven">
-		<td class="col0"> portalAntiFrame </td><td class="col1"> Avoid portal to be displayed inside frames </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdSreg_postcode </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row257 rowodd">
-		<td class="col0"> portalCheckLogins </td><td class="col1"> Display login history checkbox in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> openIdSreg_timezone </td><td class="col1"> OpenID SREG timezone session parameter </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row258 roweven">
-		<td class="col0"> portalDisplayAppslist </td><td class="col1"> Display applications tab in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> pamAuthnLevel </td><td class="col1"> PAM authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row259 rowodd">
-		<td class="col0"> portalDisplayChangePassword </td><td class="col1"> Display password tab in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> pamService </td><td class="col1"> PAM service </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row260 roweven">
-		<td class="col0"> portalDisplayLoginHistory </td><td class="col1"> Display login history tab in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> passwordDB </td><td class="col1"> Password module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row261 rowodd">
-		<td class="col0"> portalDisplayLogout </td><td class="col1"> Display logout tab in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> passwordResetAllowedRetries </td><td class="col1"> Maximum number of retries to reset password </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row262 roweven">
-		<td class="col0"> portalDisplayOidcConsents </td><td class="col1"> Display OIDC consent tab in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> persistentStorage </td><td class="col1"> Storage module for persistent sessions </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row263 rowodd">
-		<td class="col0"> portalDisplayRegister </td><td class="col1"> Display register button in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> persistentStorageOptions </td><td class="col1"> Options for persistent sessions storage module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row264 roweven">
-		<td class="col0"> portalDisplayResetPassword </td><td class="col1"> Display reset password button in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> port </td><td class="col1"> Force port in redirection </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row265 rowodd">
-		<td class="col0"> portalErrorOnExpiredSession </td><td class="col1"> Show error if session is expired </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portal </td><td class="col1"> Portal <abbr title="Uniform Resource Locator">URL</abbr> </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row266 roweven">
-		<td class="col0"> portalErrorOnMailNotFound </td><td class="col1"> Show error if mail is not found in password reset process </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalAntiFrame </td><td class="col1"> Avoid portal to be displayed inside frames </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row267 rowodd">
-		<td class="col0"> portalForceAuthn </td><td class="col1"> Enable force to authenticate when displaying portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalCheckLogins </td><td class="col1"> Display login history checkbox in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row268 roweven">
-		<td class="col0"> portalForceAuthnInterval </td><td class="col1"> Maximum interval in seconds since last authentication to force reauthentication </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalDisplayAppslist </td><td class="col1"> Display applications tab in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row269 rowodd">
-		<td class="col0"> portalMainLogo </td><td class="col1"> Portal main logo path </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalDisplayChangePassword </td><td class="col1"> Display password tab in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row270 roweven">
-		<td class="col0"> portalOpenLinkInNewWindow </td><td class="col1"> Open applications in new windows </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalDisplayLoginHistory </td><td class="col1"> Display login history tab in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row271 rowodd">
-		<td class="col0"> portalPingInterval </td><td class="col1 leftalign"> Interval in ms between portal Ajax pings  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalDisplayLogout </td><td class="col1"> Display logout tab in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row272 roweven">
-		<td class="col0"> portalRequireOldPassword </td><td class="col1"> Old password is required to change the password </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalDisplayOidcConsents </td><td class="col1"> Display OIDC consent tab in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row273 rowodd">
-		<td class="col0"> portalSkin </td><td class="col1"> Name of portal skin </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalDisplayRegister </td><td class="col1"> Display register button in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row274 roweven">
-		<td class="col0"> portalSkinBackground </td><td class="col1"> Background image of portal skin </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalDisplayResetPassword </td><td class="col1"> Display reset password button in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row275 rowodd">
-		<td class="col0"> portalSkinRules </td><td class="col1"> Rules to choose portal skin </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalErrorOnExpiredSession </td><td class="col1"> Show error if session is expired </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row276 roweven">
-		<td class="col0"> portalStatus </td><td class="col1"> Enable portal status </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalErrorOnMailNotFound </td><td class="col1"> Show error if mail is not found in password reset process </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row277 rowodd">
-		<td class="col0"> portalUserAttr </td><td class="col1"> Session parameter to display connected user in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalForceAuthn </td><td class="col1"> Enable force to authenticate when displaying portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row278 roweven">
-		<td class="col0"> protection </td><td class="col1"> Manager protection method </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
+		<td class="col0"> portalForceAuthnInterval </td><td class="col1"> Maximum interval in seconds since last authentication to force reauthentication </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row279 rowodd">
-		<td class="col0"> proxyAuthService </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalMainLogo </td><td class="col1"> Portal main logo path </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row280 roweven">
-		<td class="col0"> proxyAuthnLevel </td><td class="col1"> Proxy authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalOpenLinkInNewWindow </td><td class="col1"> Open applications in new windows </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row281 rowodd">
-		<td class="col0"> proxySessionService </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalPingInterval </td><td class="col1 leftalign"> Interval in ms between portal Ajax pings  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row282 roweven">
-		<td class="col0"> proxyUseSoap </td><td class="col1"> Use SOAP instead of REST </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalRequireOldPassword </td><td class="col1"> Old password is required to change the password </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row283 rowodd">
-		<td class="col0"> radiusAuthnLevel </td><td class="col1"> Radius authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalSkin </td><td class="col1"> Name of portal skin </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row284 roweven">
-		<td class="col0"> radiusSecret </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalSkinBackground </td><td class="col1"> Background image of portal skin </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row285 rowodd">
-		<td class="col0"> radiusServer </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalSkinRules </td><td class="col1"> Rules to choose portal skin </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row286 roweven">
-		<td class="col0"> randomPasswordRegexp </td><td class="col1"> Regular expression to create a random password </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalStatus </td><td class="col1"> Enable portal status </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row287 rowodd">
-		<td class="col0"> redirectFormMethod </td><td class="col1"> HTTP method for redirect page form </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> portalUserAttr </td><td class="col1"> Session parameter to display connected user in portal </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row288 roweven">
-		<td class="col0"> registerConfirmSubject </td><td class="col1"> Mail subject for register confirmation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> protection </td><td class="col1"> Manager protection method </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
 	</tr>
 	<tr class="row289 rowodd">
-		<td class="col0"> registerDB </td><td class="col1"> Register module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> proxyAuthService </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row290 roweven">
-		<td class="col0"> registerDoneSubject </td><td class="col1"> Mail subject when register is done </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> proxyAuthnLevel </td><td class="col1"> Proxy authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row291 rowodd">
-		<td class="col0"> registerTimeout </td><td class="col1"> Register session timeout </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> proxySessionService </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row292 roweven">
-		<td class="col0"> registerUrl </td><td class="col1"> <abbr title="Uniform Resource Locator">URL</abbr> of register page </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> proxyUseSoap </td><td class="col1"> Use SOAP instead of REST </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row293 rowodd">
-		<td class="col0"> reloadTimeout </td><td class="col1"> Configuration reload timeout </td><td class="col2 leftalign">  </td><td class="col3 leftalign">  </td><td class="col4"> ✔ </td><td class="col5 leftalign">  </td>
+		<td class="col0"> radiusAuthnLevel </td><td class="col1"> Radius authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row294 roweven">
-		<td class="col0"> reloadUrls </td><td class="col1"> <abbr title="Uniform Resource Locator">URL</abbr> to call on reload </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> radiusSecret </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row295 rowodd">
-		<td class="col0"> remoteCookieName </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> radiusServer </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row296 roweven">
-		<td class="col0"> remoteGlobalStorage </td><td class="col1"> Remote session backend </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> randomPasswordRegexp </td><td class="col1"> Regular expression to create a random password </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row297 rowodd">
-		<td class="col0"> remoteGlobalStorageOptions </td><td class="col1"> Apache::Session module parameters </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> redirectFormMethod </td><td class="col1"> HTTP method for redirect page form </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row298 roweven">
-		<td class="col0"> remotePortal </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> registerConfirmSubject </td><td class="col1"> Mail subject for register confirmation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row299 rowodd">
-		<td class="col0"> requireToken </td><td class="col1"> Enable token for forms </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> registerDB </td><td class="col1"> Register module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row300 roweven">
-		<td class="col0"> rest2fActivation </td><td class="col1"> REST second factor activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> registerDoneSubject </td><td class="col1"> Mail subject when register is done </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row301 rowodd">
-		<td class="col0"> rest2fAuthnLevel </td><td class="col1"> Authentication level for users authentified by REST second factor </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> registerTimeout </td><td class="col1"> Register session timeout </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row302 roweven">
-		<td class="col0"> rest2fInitArgs </td><td class="col1"> Args for REST 2F init </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> registerUrl </td><td class="col1"> <abbr title="Uniform Resource Locator">URL</abbr> of register page </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row303 rowodd">
-		<td class="col0"> rest2fInitUrl </td><td class="col1"> REST 2F init <abbr title="Uniform Resource Locator">URL</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> reloadTimeout </td><td class="col1"> Configuration reload timeout </td><td class="col2 leftalign">  </td><td class="col3 leftalign">  </td><td class="col4"> ✔ </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row304 roweven">
-		<td class="col0"> rest2fLogo </td><td class="col1"> Custom logo for REST 2F </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> reloadUrls </td><td class="col1"> <abbr title="Uniform Resource Locator">URL</abbr> to call on reload </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row305 rowodd">
-		<td class="col0"> rest2fVerifyArgs </td><td class="col1"> Args for REST 2F init </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> remoteCookieName </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row306 roweven">
-		<td class="col0"> rest2fVerifyUrl </td><td class="col1"> REST 2F init <abbr title="Uniform Resource Locator">URL</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> remoteGlobalStorage </td><td class="col1"> Remote session backend </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row307 rowodd">
-		<td class="col0"> restAuthUrl </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> remoteGlobalStorageOptions </td><td class="col1"> Apache::Session module parameters </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row308 roweven">
-		<td class="col0"> restConfigServer </td><td class="col1"> Enable REST config server </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> remotePortal </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row309 rowodd">
-		<td class="col0"> restPwdConfirmUrl </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> requireToken </td><td class="col1"> Enable token for forms </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row310 roweven">
-		<td class="col0"> restPwdModifyUrl </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> rest2fActivation </td><td class="col1"> REST second factor activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row311 rowodd">
-		<td class="col0"> restSessionServer </td><td class="col1"> Enable REST session server </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> rest2fAuthnLevel </td><td class="col1"> Authentication level for users authentified by REST second factor </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row312 roweven">
-		<td class="col0"> restUserDBUrl </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> rest2fInitArgs </td><td class="col1"> Args for REST 2F init </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row313 rowodd">
-		<td class="col0"> samlAttributeAuthorityDescriptorAttributeServiceSOAP </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> Attribute Authority SOAP </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> rest2fInitUrl </td><td class="col1"> REST 2F init <abbr title="Uniform Resource Locator">URL</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row314 roweven">
-		<td class="col0"> samlAuthnContextMapKerberos </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> authn context kerberos level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> rest2fLogo </td><td class="col1"> Custom logo for REST 2F </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row315 rowodd">
-		<td class="col0"> samlAuthnContextMapPassword </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> authn context password level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> rest2fVerifyArgs </td><td class="col1"> Args for REST 2F init </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row316 roweven">
-		<td class="col0"> samlAuthnContextMapPasswordProtectedTransport </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> authn context password protected transport level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> rest2fVerifyUrl </td><td class="col1"> REST 2F init <abbr title="Uniform Resource Locator">URL</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row317 rowodd">
-		<td class="col0"> samlAuthnContextMapTLSClient </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> authn context TLS client level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> restAuthUrl </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row318 roweven">
-		<td class="col0"> samlCommonDomainCookieActivation </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> CDC activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> restConfigServer </td><td class="col1"> Enable REST config server </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row319 rowodd">
-		<td class="col0"> samlCommonDomainCookieDomain </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> restPwdConfirmUrl </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row320 roweven">
-		<td class="col0"> samlCommonDomainCookieReader </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> restPwdModifyUrl </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row321 rowodd">
-		<td class="col0"> samlCommonDomainCookieWriter </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+		<td class="col0"> restSessionServer </td><td class="col1"> Enable REST session server </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 	<tr class="row322 roweven">
+		<td class="col0"> restUserDBUrl </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+	</tr>
+	<tr class="row323 rowodd">
+		<td class="col0"> samlAttributeAuthorityDescriptorAttributeServiceSOAP </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> Attribute Authority SOAP </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+	</tr>
+	<tr class="row324 roweven">
+		<td class="col0"> samlAuthnContextMapKerberos </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> authn context kerberos level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+	</tr>
+	<tr class="row325 rowodd">
+		<td class="col0"> samlAuthnContextMapPassword </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> authn context password level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+	</tr>
+	<tr class="row326 roweven">
+		<td class="col0"> samlAuthnContextMapPasswordProtectedTransport </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> authn context password protected transport level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+	</tr>
+	<tr class="row327 rowodd">
+		<td class="col0"> samlAuthnContextMapTLSClient </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> authn context TLS client level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+	</tr>
+	<tr class="row328 roweven">
+		<td class="col0"> samlCommonDomainCookieActivation </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> CDC activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+	</tr>
+	<tr class="row329 rowodd">
+		<td class="col0"> samlCommonDomainCookieDomain </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+	</tr>
+	<tr class="row330 roweven">
+		<td class="col0"> samlCommonDomainCookieReader </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+	</tr>
+	<tr class="row331 rowodd">
+		<td class="col0"> samlCommonDomainCookieWriter </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
+	</tr>
+	<tr class="row332 roweven">
 		<td class="col0"> samlDiscoveryProtocolActivation </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> Discovery Protocol activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row323 rowodd">
+	<tr class="row333 rowodd">
 		<td class="col0"> samlDiscoveryProtocolIsPassive </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> Discovery Protocol Is Passive </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row324 roweven">
+	<tr class="row334 roweven">
 		<td class="col0"> samlDiscoveryProtocolPolicy </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> Discovery Protocol Policy </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row325 rowodd">
+	<tr class="row335 rowodd">
 		<td class="col0"> samlDiscoveryProtocolURL </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> Discovery Protocol EndPoint <abbr title="Uniform Resource Locator">URL</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row326 roweven">
+	<tr class="row336 roweven">
 		<td class="col0"> samlEntityID </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> service entityID </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row327 rowodd">
+	<tr class="row337 rowodd">
 		<td class="col0"> samlIDPMetaDataOptions </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> [1] </td>
 	</tr>
-	<tr class="row328 roweven">
+	<tr class="row338 roweven">
 		<td class="col0"> samlIDPSSODescriptorArtifactResolutionServiceArtifact </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP artifact resolution service </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row329 rowodd">
+	<tr class="row339 rowodd">
 		<td class="col0"> samlIDPSSODescriptorSingleLogoutServiceHTTPPost </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP SLO HTTP POST </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row330 roweven">
+	<tr class="row340 roweven">
 		<td class="col0"> samlIDPSSODescriptorSingleLogoutServiceHTTPRedirect </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP SLO HTTP Redirect </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row331 rowodd">
+	<tr class="row341 rowodd">
 		<td class="col0"> samlIDPSSODescriptorSingleLogoutServiceSOAP </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP SLO SOAP </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row332 roweven">
+	<tr class="row342 roweven">
 		<td class="col0"> samlIDPSSODescriptorSingleSignOnServiceHTTPArtifact </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP <abbr title="Single Sign On">SSO</abbr> HTTP Artifact </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row333 rowodd">
+	<tr class="row343 rowodd">
 		<td class="col0"> samlIDPSSODescriptorSingleSignOnServiceHTTPPost </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP <abbr title="Single Sign On">SSO</abbr> HTTP POST </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row334 roweven">
+	<tr class="row344 roweven">
 		<td class="col0"> samlIDPSSODescriptorSingleSignOnServiceHTTPRedirect </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP <abbr title="Single Sign On">SSO</abbr> HTTP Redirect </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row335 rowodd">
+	<tr class="row345 rowodd">
 		<td class="col0"> samlIDPSSODescriptorWantAuthnRequestsSigned </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP want authn request signed </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row336 roweven">
+	<tr class="row346 roweven">
 		<td class="col0"> samlIdPResolveCookie </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> IDP resolution cookie </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row337 rowodd">
+	<tr class="row347 rowodd">
 		<td class="col0"> samlMetadataForceUTF8 </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> force metadata UTF8 conversion </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row338 roweven">
+	<tr class="row348 roweven">
 		<td class="col0"> samlNameIDFormatMapEmail </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> session parameter for NameID email </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row339 rowodd">
+	<tr class="row349 rowodd">
 		<td class="col0"> samlNameIDFormatMapKerberos </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> session parameter for NameID kerberos </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row340 roweven">
+	<tr class="row350 roweven">
 		<td class="col0"> samlNameIDFormatMapWindows </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> session parameter for NameID windows </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row341 rowodd">
+	<tr class="row351 rowodd">
 		<td class="col0"> samlNameIDFormatMapX509 </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> session parameter for NameID x509 </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row342 roweven">
+	<tr class="row352 roweven">
 		<td class="col0"> samlOrganizationDisplayName </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> service organization display name </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row343 rowodd">
+	<tr class="row353 rowodd">
 		<td class="col0"> samlOrganizationName </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> service organization name </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row344 roweven">
+	<tr class="row354 roweven">
 		<td class="col0"> samlOrganizationURL </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> service organization <abbr title="Uniform Resource Locator">URL</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row345 rowodd">
+	<tr class="row355 rowodd">
 		<td class="col0"> samlRelayStateTimeout </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> timeout of relay state </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row346 roweven">
+	<tr class="row356 roweven">
 		<td class="col0"> samlSPMetaDataOptions </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> [1] </td>
 	</tr>
-	<tr class="row347 rowodd">
+	<tr class="row357 rowodd">
 		<td class="col0"> samlSPSSODescriptorArtifactResolutionServiceArtifact </td><td class="col1 leftalign"> <abbr title="Security Assertion Markup Language">SAML</abbr> SP artifact resolution service  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row348 roweven">
+	<tr class="row358 roweven">
 		<td class="col0"> samlSPSSODescriptorAssertionConsumerServiceHTTPArtifact </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> SP ACS HTTP artifact </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row349 rowodd">
+	<tr class="row359 rowodd">
 		<td class="col0"> samlSPSSODescriptorAssertionConsumerServiceHTTPPost </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> SP ACS HTTP POST </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row350 roweven">
+	<tr class="row360 roweven">
 		<td class="col0"> samlSPSSODescriptorAuthnRequestsSigned </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> SP AuthnRequestsSigned </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row351 rowodd">
+	<tr class="row361 rowodd">
 		<td class="col0"> samlSPSSODescriptorSingleLogoutServiceHTTPPost </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> SP SLO HTTP POST </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row352 roweven">
+	<tr class="row362 roweven">
 		<td class="col0"> samlSPSSODescriptorSingleLogoutServiceHTTPRedirect </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> SP SLO HTTP Redirect </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row353 rowodd">
+	<tr class="row363 rowodd">
 		<td class="col0"> samlSPSSODescriptorSingleLogoutServiceSOAP </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> SP SLO SOAP </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row354 roweven">
+	<tr class="row364 roweven">
 		<td class="col0"> samlSPSSODescriptorWantAssertionsSigned </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> SP WantAssertionsSigned </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row355 rowodd">
+	<tr class="row365 rowodd">
 		<td class="col0"> samlServicePrivateKeyEnc </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> encryption private key </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row356 roweven">
+	<tr class="row366 roweven">
 		<td class="col0"> samlServicePrivateKeyEncPwd </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row357 rowodd">
+	<tr class="row367 rowodd">
 		<td class="col0"> samlServicePrivateKeySig </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> signature private key </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row358 roweven">
+	<tr class="row368 roweven">
 		<td class="col0"> samlServicePrivateKeySigPwd </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> signature private key password </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row359 rowodd">
+	<tr class="row369 rowodd">
 		<td class="col0"> samlServicePublicKeyEnc </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> encryption public key </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row360 roweven">
+	<tr class="row370 roweven">
 		<td class="col0"> samlServicePublicKeySig </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> signature public key </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row361 rowodd">
+	<tr class="row371 rowodd">
 		<td class="col0"> samlServiceSignatureMethod </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row362 roweven">
+	<tr class="row372 roweven">
 		<td class="col0"> samlServiceUseCertificateInResponse </td><td class="col1"> Use certificate instead of public key in <abbr title="Security Assertion Markup Language">SAML</abbr> responses </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row363 rowodd">
+	<tr class="row373 rowodd">
 		<td class="col0"> samlStorage </td><td class="col1"> Apache::Session module to store <abbr title="Security Assertion Markup Language">SAML</abbr> user data </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row364 roweven">
+	<tr class="row374 roweven">
 		<td class="col0"> samlStorageOptions </td><td class="col1"> Apache::Session module parameters </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row365 rowodd">
+	<tr class="row375 rowodd">
 		<td class="col0"> samlUseQueryStringSpecific </td><td class="col1"> <abbr title="Security Assertion Markup Language">SAML</abbr> use specific method for query_string </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row366 roweven">
+	<tr class="row376 roweven">
 		<td class="col0"> secureTokenAllowOnError </td><td class="col1"> Secure Token allow requests in error </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row367 rowodd">
+	<tr class="row377 rowodd">
 		<td class="col0"> secureTokenAttribute </td><td class="col1"> Secure Token attribute </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row368 roweven">
+	<tr class="row378 roweven">
 		<td class="col0"> secureTokenExpiration </td><td class="col1"> Secure Token expiration </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row369 rowodd">
+	<tr class="row379 rowodd">
 		<td class="col0"> secureTokenHeader </td><td class="col1"> Secure Token header </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row370 roweven">
+	<tr class="row380 roweven">
 		<td class="col0"> secureTokenMemcachedServers </td><td class="col1"> Secure Token Memcached servers </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row371 rowodd">
+	<tr class="row381 rowodd">
 		<td class="col0"> secureTokenUrls </td><td class="col1 leftalign">  </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row372 roweven">
+	<tr class="row382 roweven">
 		<td class="col0"> securedCookie </td><td class="col1"> Cookie securisation method </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row373 rowodd">
+	<tr class="row383 rowodd">
 		<td class="col0"> sentryDsn </td><td class="col1"> Sentry logger DSN </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row374 roweven">
+	<tr class="row384 roweven">
 		<td class="col0"> sessionDataToRemember </td><td class="col1"> Data to remember in login history </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row375 rowodd">
+	<tr class="row385 rowodd">
 		<td class="col0"> sfEngine </td><td class="col1"> Second factor engine </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row376 roweven">
+	<tr class="row386 roweven">
 		<td class="col0"> sfRequired </td><td class="col1"> Second factor required </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row377 rowodd">
+	<tr class="row387 rowodd">
 		<td class="col0"> showLanguages </td><td class="col1"> Display langs icons </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row378 roweven">
+	<tr class="row388 roweven">
 		<td class="col0"> singleIP </td><td class="col1"> Allow only one session per <abbr title="Internet Protocol">IP</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row379 rowodd">
+	<tr class="row389 rowodd">
 		<td class="col0"> singleSession </td><td class="col1"> Allow only one session per user </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row380 roweven">
+	<tr class="row390 roweven">
 		<td class="col0"> singleSessionUserByIP </td><td class="col1"> Allow only one session per user on an <abbr title="Internet Protocol">IP</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row381 rowodd">
+	<tr class="row391 rowodd">
 		<td class="col0"> singleUserByIP </td><td class="col1"> Allow only one user per <abbr title="Internet Protocol">IP</abbr> </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row382 roweven">
+	<tr class="row392 roweven">
 		<td class="col0"> skipRenewConfirmation </td><td class="col1"> Avoid asking confirmation when an Issuer asks to renew auth </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row383 rowodd">
+	<tr class="row393 rowodd">
 		<td class="col0"> slaveAuthnLevel </td><td class="col1"> Slave authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row384 roweven">
+	<tr class="row394 roweven">
 		<td class="col0"> slaveExportedVars </td><td class="col1"> Slave exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row385 rowodd">
+	<tr class="row395 rowodd">
 		<td class="col0"> slaveHeaderContent </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row386 roweven">
+	<tr class="row396 roweven">
 		<td class="col0"> slaveHeaderName </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row387 rowodd">
+	<tr class="row397 rowodd">
 		<td class="col0"> slaveMasterIP </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row388 roweven">
+	<tr class="row398 roweven">
 		<td class="col0"> slaveUserHeader </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row389 rowodd">
+	<tr class="row399 rowodd">
 		<td class="col0"> soapConfigServer </td><td class="col1"> Enable SOAP config server </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row390 roweven">
+	<tr class="row400 roweven">
 		<td class="col0"> soapSessionServer </td><td class="col1"> Enable SOAP session server </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row391 rowodd">
+	<tr class="row401 rowodd">
 		<td class="col0"> sslByAjax </td><td class="col1"> Use Ajax request for SSL </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row392 roweven">
+	<tr class="row402 roweven">
 		<td class="col0"> sslHost </td><td class="col1"> <abbr title="Uniform Resource Locator">URL</abbr> for SSL Ajax request </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row393 rowodd">
+	<tr class="row403 rowodd">
 		<td class="col0"> staticPrefix </td><td class="col1"> Prefix of static files for <abbr title="HyperText Markup Language">HTML</abbr> templates </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row394 roweven">
+	<tr class="row404 roweven">
 		<td class="col0"> status </td><td class="col1"> Status daemon activation </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row395 rowodd">
+	<tr class="row405 rowodd">
 		<td class="col0"> stayConnected </td><td class="col1"> Enable StayConnected plugin </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row396 roweven">
+	<tr class="row406 roweven">
 		<td class="col0"> storePassword </td><td class="col1"> Store password in session </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row397 rowodd">
+	<tr class="row407 rowodd">
 		<td class="col0"> successLoginNumber </td><td class="col1"> Number of success stored in login history </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row398 roweven">
+	<tr class="row408 roweven">
 		<td class="col0"> syslogFacility </td><td class="col1"> Syslog logger technical facility </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row399 rowodd">
+	<tr class="row409 rowodd">
 		<td class="col0"> timeout </td><td class="col1"> Session timeout on server side </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row400 roweven">
+	<tr class="row410 roweven">
 		<td class="col0"> timeoutActivity </td><td class="col1"> Session activity timeout on server side </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row401 rowodd">
+	<tr class="row411 rowodd">
 		<td class="col0"> timeoutActivityInterval </td><td class="col1"> Update session timeout interval on server side </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row402 roweven">
+	<tr class="row412 roweven">
 		<td class="col0"> tokenUseGlobalStorage </td><td class="col1"> Enable global token storage </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row403 rowodd">
+	<tr class="row413 rowodd">
 		<td class="col0"> totp2fActivation </td><td class="col1"> TOTP activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row404 roweven">
+	<tr class="row414 roweven">
 		<td class="col0"> totp2fAuthnLevel </td><td class="col1"> Authentication level for users authentified by password+TOTP </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row405 rowodd">
+	<tr class="row415 rowodd">
 		<td class="col0"> totp2fDigits </td><td class="col1"> Number of digits for TOTP code </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row406 roweven">
+	<tr class="row416 roweven">
 		<td class="col0"> totp2fDisplayExistingSecret </td><td class="col1"> Display existing TOTP secret in registration form </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row407 rowodd">
+	<tr class="row417 rowodd">
 		<td class="col0"> totp2fInterval </td><td class="col1"> TOTP interval </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row408 roweven">
+	<tr class="row418 roweven">
 		<td class="col0"> totp2fIssuer </td><td class="col1"> TOTP Issuer </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row409 rowodd">
+	<tr class="row419 rowodd">
 		<td class="col0"> totp2fRange </td><td class="col1"> TOTP range (number of interval to test) </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row410 roweven">
+	<tr class="row420 roweven">
 		<td class="col0"> totp2fSelfRegistration </td><td class="col1"> TOTP self registration activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row411 rowodd">
+	<tr class="row421 rowodd">
 		<td class="col0"> totp2fUserCanChangeKey </td><td class="col1"> Authorize users to change existing TOTP secret </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row412 roweven">
+	<tr class="row422 roweven">
 		<td class="col0"> totp2fUserCanRemoveKey </td><td class="col1"> Authorize users to remove existing TOTP secret </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row413 rowodd">
+	<tr class="row423 rowodd">
 		<td class="col0"> trustedDomains </td><td class="col1"> Trusted domains </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row414 roweven">
-		<td class="col0"> trustedProxies </td><td class="col1"> Trusted proxies </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
-	</tr>
-	<tr class="row415 rowodd">
+	<tr class="row424 roweven">
 		<td class="col0"> twitterAppName </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row416 roweven">
+	<tr class="row425 rowodd">
 		<td class="col0"> twitterAuthnLevel </td><td class="col1"> Twitter authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row417 rowodd">
+	<tr class="row426 roweven">
 		<td class="col0"> twitterKey </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row418 roweven">
+	<tr class="row427 rowodd">
 		<td class="col0"> twitterSecret </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row419 rowodd">
+	<tr class="row428 roweven">
 		<td class="col0"> twitterUserField </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row420 roweven">
+	<tr class="row429 rowodd">
 		<td class="col0"> u2fActivation </td><td class="col1"> U2F activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row421 rowodd">
+	<tr class="row430 roweven">
 		<td class="col0"> u2fAuthnLevel </td><td class="col1"> Authentication level for users authentified by password+U2F </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row422 roweven">
+	<tr class="row431 rowodd">
 		<td class="col0"> u2fSelfRegistration </td><td class="col1"> U2F self registration activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row423 rowodd">
+	<tr class="row432 roweven">
 		<td class="col0"> u2fUserCanRemoveKey </td><td class="col1"> Authorize users to remove existing U2F key </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row424 roweven">
+	<tr class="row433 rowodd">
 		<td class="col0"> upgradeSession </td><td class="col1"> Upgrade session activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row425 rowodd">
+	<tr class="row434 roweven">
 		<td class="col0"> useRedirectOnError </td><td class="col1"> Use 302 redirect code for error (500) </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row426 roweven">
+	<tr class="row435 rowodd">
 		<td class="col0"> useRedirectOnForbidden </td><td class="col1"> Use 302 redirect code for forbidden (403) </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row427 rowodd">
+	<tr class="row436 roweven">
 		<td class="col0"> useSafeJail </td><td class="col1"> Activate Safe jail </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row428 roweven">
+	<tr class="row437 rowodd">
 		<td class="col0"> userControl </td><td class="col1"> Regular expression to validate login </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row429 rowodd">
+	<tr class="row438 roweven">
 		<td class="col0"> userDB </td><td class="col1"> User module </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row430 roweven">
+	<tr class="row439 rowodd">
 		<td class="col0"> userLogger </td><td class="col1"> User actions logger </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row431 rowodd">
+	<tr class="row440 roweven">
 		<td class="col0"> userPivot </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row432 roweven">
+	<tr class="row441 rowodd">
 		<td class="col0"> userSyslogFacility </td><td class="col1"> Syslog logger user-actions facility </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4"> ✔ </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row433 rowodd">
+	<tr class="row442 roweven">
 		<td class="col0"> utotp2fActivation </td><td class="col1"> UTOTP activation (mixed U2F/TOTP module) </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row434 roweven">
+	<tr class="row443 rowodd">
 		<td class="col0"> utotp2fAuthnLevel </td><td class="col1"> Authentication level for users authentified by password+(U2F or TOTP) </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row435 rowodd">
+	<tr class="row444 roweven">
 		<td class="col0"> vhostOptions </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5"> [1] </td>
 	</tr>
-	<tr class="row436 roweven">
+	<tr class="row445 rowodd">
 		<td class="col0"> webIDAuthnLevel </td><td class="col1"> WebID authentication level </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row437 rowodd">
+	<tr class="row446 roweven">
 		<td class="col0"> webIDExportedVars </td><td class="col1"> WebID exported variables </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row438 roweven">
+	<tr class="row447 rowodd">
 		<td class="col0"> webIDWhitelist </td><td class="col1 leftalign">  </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row439 rowodd">
+	<tr class="row448 roweven">
 		<td class="col0"> whatToTrace </td><td class="col1"> Session parameter used to fill REMOTE_USER </td><td class="col2"> ✔ </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row440 roweven">
+	<tr class="row449 rowodd">
 		<td class="col0"> wsdlServer </td><td class="col1"> Enable /portal.wsdl server </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row441 rowodd">
+	<tr class="row450 roweven">
 		<td class="col0"> yubikey2fActivation </td><td class="col1"> Yubikey second factor activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row442 roweven">
+	<tr class="row451 rowodd">
 		<td class="col0"> yubikey2fAuthnLevel </td><td class="col1"> Authentication level for users authentified by Yubikey second factor </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row443 rowodd">
+	<tr class="row452 roweven">
 		<td class="col0"> yubikey2fClientID </td><td class="col1"> Yubico client ID </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row444 roweven">
+	<tr class="row453 rowodd">
 		<td class="col0"> yubikey2fNonce </td><td class="col1"> Yubico nonce </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row445 rowodd">
+	<tr class="row454 roweven">
 		<td class="col0"> yubikey2fPublicIDSize </td><td class="col1"> Yubikey public ID size </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row446 roweven">
+	<tr class="row455 rowodd">
 		<td class="col0"> yubikey2fSecretKey </td><td class="col1"> Yubico secret key </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row447 rowodd">
+	<tr class="row456 roweven">
 		<td class="col0"> yubikey2fSelfRegistration </td><td class="col1"> Yubikey self registration activation </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row448 roweven">
+	<tr class="row457 rowodd">
 		<td class="col0"> yubikey2fUrl </td><td class="col1"> Yubico server </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row449 rowodd">
+	<tr class="row458 roweven">
 		<td class="col0"> yubikey2fUserCanRemoveKey </td><td class="col1"> Authorize users to remove existing Yubikey </td><td class="col2"> ✔ </td><td class="col3 leftalign">  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
-	<tr class="row450 roweven">
+	<tr class="row459 rowodd">
 		<td class="col0"> zimbraAccountKey </td><td class="col1"> Zimbra account session key </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row451 rowodd">
+	<tr class="row460 roweven">
 		<td class="col0"> zimbraBy </td><td class="col1"> Zimbra account type </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row452 roweven">
+	<tr class="row461 rowodd">
 		<td class="col0"> zimbraPreAuthKey </td><td class="col1"> Zimbra preauthentication key </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row453 rowodd">
+	<tr class="row462 roweven">
 		<td class="col0"> zimbraSsoUrl </td><td class="col1"> Zimbra local <abbr title="Single Sign On">SSO</abbr> <abbr title="Uniform Resource Locator">URL</abbr> pattern </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
-	<tr class="row454 roweven">
+	<tr class="row463 rowodd">
 		<td class="col0"> zimbraUrl </td><td class="col1"> Zimbra preauthentication <abbr title="Uniform Resource Locator">URL</abbr> </td><td class="col2 leftalign">  </td><td class="col3"> ✔ </td><td class="col4 leftalign">  </td><td class="col5"> ✔ </td>
 	</tr>
 </table></div>
-<!-- EDIT3 TABLE [306-30674] --></div>
+<!-- EDIT3 TABLE [306-31476] --></div>
 <p>
 <em>[1]: complex nodes</em>
 </p>
 
 </div>
-<!-- EDIT2 SECTION "Main parameters" [264-30711] -->
+<!-- EDIT2 SECTION "Main parameters" [264-31513] -->
 <h2 class="sectionedit4" id="configuration_backend_parameters">Configuration backend parameters</h2>
 <div class="level2">
 <div class="table sectionedit5"><table class="inline table table-bordered table-striped">
@@ -1478,7 +1505,7 @@ The attribute key name can be used direc
 		<td class="col0"> LDAP ID attribute </td><td class="col1"> ldapAttributeId </td>
 	</tr>
 	<tr class="row14 roweven">
-		<td class="col0"> LDAP content atribute </td><td class="col1"> ldapAttributeContent </td>
+		<td class="col0"> LDAP content attribute </td><td class="col1"> ldapAttributeContent </td>
 	</tr>
 	<tr class="row15 rowodd">
 		<td class="col0"> Certificate authorities file </td><td class="col1"> caFile </td>
@@ -1517,8 +1544,8 @@ The attribute key name can be used direc
 		<td class="col0"> SOAP password </td><td class="col1"> Password </td>
 	</tr>
 </table></div>
-<!-- EDIT5 TABLE [30758-32058] -->
+<!-- EDIT5 TABLE [31560-32861] -->
 </div>
-<!-- EDIT4 SECTION "Configuration backend parameters" [30712-] --></div>
+<!-- EDIT4 SECTION "Configuration backend parameters" [31514-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/passwordstore.html 2.0.2+ds-1/doc/pages/documentation/current/passwordstore.html
--- 2.0.1+ds-2/doc/pages/documentation/current/passwordstore.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/passwordstore.html	2019-02-12 16:28:08.000000000 +0000
@@ -75,7 +75,7 @@ So, to keep user password in session, yo
 <div class="noteimportant"><ul>
 <li class="level1"><div class="li"> As this may be a security hole, password store in session is not activated by default</div>
 </li>
-<li class="level1"><div class="li"> This mechanism can only work with authentication backends using a login/password form (<a href="authldap.html" class="wikilink1" title="documentation:2.0:authldap">LDAP</a>, <a href="authdbi.html" class="wikilink1" title="documentation:2.0:authdbi">DBI</a>, …)</div>
+<li class="level1"><div class="li"> This mechanism can only work with authentication backends using a login/password form (<a href="authldap.html" class="wikilink1" title="documentation:2.0:authldap">LDAP</a>, <a href="authdbi.html" class="wikilink1" title="documentation:2.0:authdbi">DBI</a>, ...)</div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/performances.html 2.0.2+ds-1/doc/pages/documentation/current/performances.html
--- 2.0.1+ds-2/doc/pages/documentation/current/performances.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/performances.html	2019-02-12 16:28:08.000000000 +0000
@@ -215,7 +215,7 @@ The portal is the biggest component of L
 </li>
 <li class="level1"><div class="li"> disable notifications if not used</div>
 </li>
-<li class="level1"><div class="li"> …</div>
+<li class="level1"><div class="li"> ...</div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/platformsoverview.html 2.0.2+ds-1/doc/pages/documentation/current/platformsoverview.html
--- 2.0.1+ds-2/doc/pages/documentation/current/platformsoverview.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/platformsoverview.html	2019-02-12 16:28:08.000000000 +0000
@@ -115,7 +115,7 @@ Applications can be protected:
 <ul>
 <li class="level1"><div class="li"> by a LLNG handler</div>
 </li>
-<li class="level1"><div class="li"> by themselves if they can dial with a supported protocol (<abbr title="Security Assertion Markup Language">SAML</abbr>, OpenID-Connect,…)</div>
+<li class="level1"><div class="li"> by themselves if they can dial with a supported protocol (<abbr title="Security Assertion Markup Language">SAML</abbr>, OpenID-Connect,...)</div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/plugincustom.html 2.0.2+ds-1/doc/pages/documentation/current/plugincustom.html
--- 2.0.1+ds-2/doc/pages/documentation/current/plugincustom.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/plugincustom.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:plugincustom</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="noindex,nofollow"/>
+<meta name="robots" content="index,follow"/>
 <meta name="keywords" content="documentation,2.0,plugincustom"/>
 <link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="plugincustom.html"/>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/portalcustom.html 2.0.2+ds-1/doc/pages/documentation/current/portalcustom.html
--- 2.0.1+ds-2/doc/pages/documentation/current/portalcustom.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/portalcustom.html	2019-02-12 16:28:08.000000000 +0000
@@ -266,7 +266,11 @@ To configure your new skin in Manager, s
 <div class="level3">
 
 <p>
-Messages are defined in source code. If they really do not please you, override them! You just need to know the ID of the message (look at Portal/Simple.pm) and then add to <code>lemonldap-ng.ini</code>:
+Messages are defined in source code. If they really do not please you, override them! You just need to know the ID of the message (look at Portal/Simple.pm) and then : 
+</p>
+
+<p>
+* <strong>add to</strong> <code>lemonldap-ng.ini</code> :
 </p>
 <pre class="code file ini"><span class="re0"><span class="br0">&#91;</span>portal<span class="br0">&#93;</span></span>
 &nbsp;
@@ -275,15 +279,21 @@ Messages are defined in source code. If
 &nbsp;
 # Custom standard messages
 <span class="re1">msg_lastLogins</span> <span class="sy0">=</span><span class="re2"> Your last connections</span></pre>
-<div class="notetip">You can alse define messages in several languages:
+
+<p>
+* <strong>or declare a translation file in</strong> <code>lemonldap-ng.ini</code> :
+</p>
 <pre class="code file ini"><span class="re0"><span class="br0">&#91;</span>portal<span class="br0">&#93;</span></span>
-<span class="re1">error_en_0</span> <span class="sy0">=</span><span class="re2"> Big brother is watching you, authenticated user</span>
+&nbsp;
+# Custom messages
+<span class="re1">translations</span> <span class="sy0">=</span><span class="re2"> site/templates/localeTranslations.txt</span></pre>
+<div class="notetip">You can also define messages in several languages:<pre class="code file ini"><span class="re1">error_en_0</span> <span class="sy0">=</span><span class="re2"> Big brother is watching you, authenticated user</span>
 <span class="re1">error_fr_0</span> <span class="sy0">=</span><span class="re2"> Souriez vous êtes surveillés !</span>
 <span class="re1">msg_fr_lastLogins</span> <span class="sy0">=</span><span class="re2"> Dernières connexions</span></pre>
 
 </div>
 </div>
-<!-- EDIT10 SECTION "Messages" [4400-5042] -->
+<!-- EDIT10 SECTION "Messages" [4400-5210] -->
 <h3 class="sectionedit11" id="menu_tabs">Menu tabs</h3>
 <div class="level3">
 
@@ -299,7 +309,7 @@ This will allow one to display the tab d
 </p>
 
 </div>
-<!-- EDIT11 SECTION "Menu tabs" [5043-5349] -->
+<!-- EDIT11 SECTION "Menu tabs" [5211-5517] -->
 <h3 class="sectionedit12" id="template_parameters">Template parameters</h3>
 <div class="level3">
 
@@ -317,12 +327,17 @@ Then you will be able to use it in your
 <pre class="code file html4strict">Hello <span class="sc2">&lt;TMPL_VAR <span class="kw3">NAME</span><span class="sy0">=</span><span class="st0">&quot;myparam&quot;</span>&gt;</span>!</pre>
 
 <p>
-All session variables are also available in templates, with the prefix “session_” :
+All session variables are also available in templates, with the prefix <code>session_</code>:
 </p>
 <pre class="code file html4strict">Hello <span class="sc2">&lt;TMPL_VAR <span class="kw3">NAME</span><span class="sy0">=</span><span class="st0">&quot;session_cn&quot;</span>&gt;</span>!</pre>
 
+<p>
+You can also display environment variables, with the prefix <code>env_</code>:
+</p>
+<pre class="code file html4strict">Your IP is <span class="sc2">&lt;TMPL_VAR <span class="kw3">NAME</span><span class="sy0">=</span><span class="st0">&quot;env_REMOTE_ADDR&quot;</span>&gt;</span></pre>
+
 </div>
-<!-- EDIT12 SECTION "Template parameters" [5350-5861] -->
+<!-- EDIT12 SECTION "Template parameters" [5518-6165] -->
 <h2 class="sectionedit13" id="buttons">Buttons</h2>
 <div class="level2">
 
@@ -339,7 +354,7 @@ This node allows one to enable/disable b
 </ul>
 
 </div>
-<!-- EDIT13 SECTION "Buttons" [5862-6378] -->
+<!-- EDIT13 SECTION "Buttons" [6166-6682] -->
 <h2 class="sectionedit14" id="password_management">Password management</h2>
 <div class="level2">
 <ul>
@@ -352,7 +367,7 @@ This node allows one to enable/disable b
 </ul>
 
 </div>
-<!-- EDIT14 SECTION "Password management" [6379-6829] -->
+<!-- EDIT14 SECTION "Password management" [6683-7133] -->
 <h2 class="sectionedit15" id="other_parameters">Other parameters</h2>
 <div class="level2">
 <ul>
@@ -371,6 +386,6 @@ This node allows one to enable/disable b
 </ul>
 
 </div>
-<!-- EDIT15 SECTION "Other parameters" [6830-] --></div>
+<!-- EDIT15 SECTION "Other parameters" [7134-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/portal.html 2.0.2+ds-1/doc/pages/documentation/current/portal.html
--- 2.0.1+ds-2/doc/pages/documentation/current/portal.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/portal.html	2019-02-12 16:28:08.000000000 +0000
@@ -55,17 +55,17 @@ The portal is the main component of <abb
 <ul>
 <li class="level2"><div class="li"> Web based for normal users:</div>
 <ul>
-<li class="level3"><div class="li"> using own database (<a href="authldap.html" class="wikilink1" title="documentation:2.0:authldap">LDAP</a>, <a href="authdbi.html" class="wikilink1" title="documentation:2.0:authdbi">SQL</a>, …)</div>
+<li class="level3"><div class="li"> using own database (<a href="authldap.html" class="wikilink1" title="documentation:2.0:authldap">LDAP</a>, <a href="authdbi.html" class="wikilink1" title="documentation:2.0:authdbi">SQL</a>, ...)</div>
 </li>
-<li class="level3"><div class="li"> using web server authentication system (used for <a href="authssl.html" class="wikilink1" title="documentation:2.0:authssl">SSL</a>, <a href="authapache.html" class="wikilink1" title="documentation:2.0:authapache">Kerberos</a>, <a href="authapache.html" class="wikilink1" title="documentation:2.0:authapache">HTTP basic authentication</a>, …)</div>
+<li class="level3"><div class="li"> using web server authentication system (used for <a href="authssl.html" class="wikilink1" title="documentation:2.0:authssl">SSL</a>, <a href="authapache.html" class="wikilink1" title="documentation:2.0:authapache">Kerberos</a>, <a href="authapache.html" class="wikilink1" title="documentation:2.0:authapache">HTTP basic authentication</a>, ...)</div>
 </li>
-<li class="level3"><div class="li"> using external identity provider (<a href="authsaml.html" class="wikilink1" title="documentation:2.0:authsaml">SAML</a>, <a href="authopenid.html" class="wikilink1" title="documentation:2.0:authopenid">OpenID</a>, <a href="authcas.html" class="wikilink1" title="documentation:2.0:authcas">CAS</a>, <a href="authtwitter.html" class="wikilink1" title="documentation:2.0:authtwitter">Twitter</a>, other <abbr title="LemonLDAP::NG">LL::NG</abbr> system, …)</div>
+<li class="level3"><div class="li"> using external identity provider (<a href="authsaml.html" class="wikilink1" title="documentation:2.0:authsaml">SAML</a>, <a href="authopenid.html" class="wikilink1" title="documentation:2.0:authopenid">OpenID</a>, <a href="authcas.html" class="wikilink1" title="documentation:2.0:authcas">CAS</a>, <a href="authtwitter.html" class="wikilink1" title="documentation:2.0:authtwitter">Twitter</a>, other <abbr title="LemonLDAP::NG">LL::NG</abbr> system, ...)</div>
 </li>
-<li class="level3"><div class="li"> all together (based on user <a href="authchoice.html" class="wikilink1" title="documentation:2.0:authchoice">choice</a>, <a href="authmulti.html" class="wikilink1" title="documentation:2.0:authmulti">rules</a>, …)</div>
+<li class="level3"><div class="li"> all together (based on user <a href="authchoice.html" class="wikilink1" title="documentation:2.0:authchoice">choice</a>, <a href="authmulti.html" class="wikilink1" title="documentation:2.0:authmulti">rules</a>, ...)</div>
 </li>
 </ul>
 </li>
-<li class="level2"><div class="li"> <a href="soapservices.html" class="wikilink1" title="documentation:2.0:soapservices">SOAP based</a> and <a href="restservices.html" class="wikilink1" title="documentation:2.0:restservices">REST based</a> for client-server software, specific development, …</div>
+<li class="level2"><div class="li"> <a href="soapservices.html" class="wikilink1" title="documentation:2.0:soapservices">SOAP based</a> and <a href="restservices.html" class="wikilink1" title="documentation:2.0:restservices">REST based</a> for client-server software, specific development, ...</div>
 </li>
 </ul>
 </li>
@@ -79,7 +79,7 @@ The portal is the main component of <abb
 </li>
 </ul>
 </li>
-<li class="level1"><div class="li"> <strong><a href="federationproxy.html" class="wikilink1" title="documentation:2.0:federationproxy">Identity provider proxy</a></strong>: <abbr title="LemonLDAP::NG">LL::NG</abbr> can be used as proxy translator between systems talking <abbr title="Security Assertion Markup Language">SAML</abbr>, OpenID, <abbr title="Central Authentication Service">CAS</abbr>, …</div>
+<li class="level1"><div class="li"> <strong><a href="federationproxy.html" class="wikilink1" title="documentation:2.0:federationproxy">Identity provider proxy</a></strong>: <abbr title="LemonLDAP::NG">LL::NG</abbr> can be used as proxy translator between systems talking <abbr title="Security Assertion Markup Language">SAML</abbr>, OpenID, <abbr title="Central Authentication Service">CAS</abbr>, ...</div>
 </li>
 <li class="level1"><div class="li"> <strong>Internal SOAP server</strong> used by <a href="soapconfbackend.html" class="wikilink1" title="documentation:2.0:soapconfbackend">SOAP configuration backend</a> and usable for specific development (see <a href="soapservices.html" class="wikilink1" title="documentation:2.0:soapservices">SOAP services</a> for more)</div>
 </li>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/portalservers.html 2.0.2+ds-1/doc/pages/documentation/current/portalservers.html
--- 2.0.1+ds-2/doc/pages/documentation/current/portalservers.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/portalservers.html	2019-02-12 16:28:08.000000000 +0000
@@ -64,7 +64,7 @@
 <div class="level1">
 
 </div>
-<!-- EDIT1 SECTION "REST/SOAP servers" [1-33] -->
+<!-- EDIT1 SECTION "REST/SOAP servers" [1-34] -->
 <h2 class="sectionedit2" id="presentation">Presentation</h2>
 <div class="level2">
 
@@ -81,12 +81,12 @@
 </ul>
 
 </div>
-<!-- EDIT2 SECTION "Presentation" [34-230] -->
+<!-- EDIT2 SECTION "Presentation" [35-231] -->
 <h2 class="sectionedit3" id="configuration">Configuration</h2>
 <div class="level2">
 
 </div>
-<!-- EDIT3 SECTION "Configuration" [231-257] -->
+<!-- EDIT3 SECTION "Configuration" [232-258] -->
 <h3 class="sectionedit4" id="rest">REST</h3>
 <div class="level3">
 
@@ -107,7 +107,7 @@ See also <a href="restservices.html" cla
 </p>
 
 </div>
-<!-- EDIT4 SECTION "REST" [258-582] -->
+<!-- EDIT4 SECTION "REST" [259-583] -->
 <h3 class="sectionedit5" id="soapdeprecated">SOAP //(deprecated)//</h3>
 <div class="level3">
 
@@ -128,6 +128,6 @@ See also <a href="soapservices.html" cla
 </p>
 
 </div>
-<!-- EDIT5 SECTION "SOAP //(deprecated)//" [583-] --></div>
+<!-- EDIT5 SECTION "SOAP //(deprecated)//" [584-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/prereq.html 2.0.2+ds-1/doc/pages/documentation/current/prereq.html
--- 2.0.1+ds-2/doc/pages/documentation/current/prereq.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/prereq.html	2019-02-12 16:28:08.000000000 +0000
@@ -97,17 +97,17 @@ For Apache2, you can use all workers mpm
 </p>
 
 <p>
-<a href="llng_deps.png_documentation_2.0_prereq.html" class="media" title="documentation:2.0:llng_deps.png"><img src="llng_deps.480eb0864712527af24b7886eca761d1.png" class="mediacenter" alt="" width="600" /></a>
+<a href="documentation/llng_deps.png_documentation_2.0_prereq.html" class="media" title="documentation:llng_deps.png"><img src="documentation/llng_deps.5777cea9f5c8fa98053294e9fcbf9e90.png" class="mediacenter" alt="" width="600" /></a>
 </p>
 
 </div>
-<!-- EDIT2 SECTION "Web Server" [48-610] -->
+<!-- EDIT2 SECTION "Web Server" [48-594] -->
 <h2 class="sectionedit3" id="perl">Perl</h2>
 <div class="level2">
 <div class="noteclassic">Here the list of Perl modules used in LemonLDAP::NG. Core modules must be installed on the system. Other modules are required only if you plan to use related features.
 </div>
 </div>
-<!-- EDIT3 SECTION "Perl" [611-810] -->
+<!-- EDIT3 SECTION "Perl" [595-794] -->
 <h3 class="sectionedit4" id="core">Core</h3>
 <div class="level3">
 <ul>
@@ -129,6 +129,8 @@ For Apache2, you can use all workers mpm
 </li>
 <li class="level1"><div class="li"> Crypt::Rijndael</div>
 </li>
+<li class="level1"><div class="li"> Crypt::URandom</div>
+</li>
 <li class="level1"><div class="li"> <abbr title="Database Interface">DBI</abbr></div>
 </li>
 <li class="level1"><div class="li"> Digest::HMAC_SHA1</div>
@@ -182,7 +184,7 @@ For Apache2, you can use all workers mpm
 </ul>
 
 </div>
-<!-- EDIT4 SECTION "Core" [811-1434] -->
+<!-- EDIT4 SECTION "Core" [795-1437] -->
 <h3 class="sectionedit5" id="deprecated_features">Deprecated features</h3>
 <div class="level3">
 <ul>
@@ -205,7 +207,7 @@ For Apache2, you can use all workers mpm
 </ul>
 
 </div>
-<!-- EDIT5 SECTION "Deprecated features" [1435-1603] -->
+<!-- EDIT5 SECTION "Deprecated features" [1438-1606] -->
 <h3 class="sectionedit6" id="saml2">SAML2</h3>
 <div class="level3">
 <ul>
@@ -218,7 +220,7 @@ For Apache2, you can use all workers mpm
 </ul>
 
 </div>
-<!-- EDIT6 SECTION "SAML2" [1604-1689] -->
+<!-- EDIT6 SECTION "SAML2" [1607-1692] -->
 <h3 class="sectionedit7" id="second_factor">Second factor</h3>
 <div class="level3">
 <ul>
@@ -229,7 +231,7 @@ For Apache2, you can use all workers mpm
 </ul>
 
 </div>
-<!-- EDIT7 SECTION "Second factor" [1690-1783] -->
+<!-- EDIT7 SECTION "Second factor" [1693-1786] -->
 <h3 class="sectionedit8" id="specific_authentication_backends">Specific authentication backends</h3>
 <div class="level3">
 <ul>
@@ -272,7 +274,7 @@ For Apache2, you can use all workers mpm
 </ul>
 
 </div>
-<!-- EDIT8 SECTION "Specific authentication backends" [1784-2012] -->
+<!-- EDIT8 SECTION "Specific authentication backends" [1787-2015] -->
 <h3 class="sectionedit9" id="smtpreset_password_by_mail">SMTP / Reset password by mail</h3>
 <div class="level3">
 <ul>
@@ -285,7 +287,7 @@ For Apache2, you can use all workers mpm
 </ul>
 
 </div>
-<!-- EDIT9 SECTION "SMTP / Reset password by mail" [2013-2105] -->
+<!-- EDIT9 SECTION "SMTP / Reset password by mail" [2016-2108] -->
 <h3 class="sectionedit10" id="unit_tests">Unit tests</h3>
 <div class="level3">
 <ul>
@@ -302,7 +304,7 @@ For Apache2, you can use all workers mpm
 </ul>
 
 </div>
-<!-- EDIT10 SECTION "Unit tests" [2106-2219] -->
+<!-- EDIT10 SECTION "Unit tests" [2109-2222] -->
 <h2 class="sectionedit11" id="other">Other</h2>
 <div class="level2">
 <ul>
@@ -311,20 +313,20 @@ For Apache2, you can use all workers mpm
 </ul>
 
 </div>
-<!-- EDIT11 SECTION "Other" [2220-2354] -->
+<!-- EDIT11 SECTION "Other" [2223-2357] -->
 <h2 class="sectionedit12" id="install_dependencies_on_your_system">Install dependencies on your system</h2>
 <div class="level2">
 <div class="notewarning">You don&#039;t need to install them if you use <abbr title="LemonLDAP::NG">LL::NG</abbr> packages. With <code>apt</code> or <code>yum</code>, dependencies will be automatically installed.
 </div>
 </div>
-<!-- EDIT12 SECTION "Install dependencies on your system" [2355-2554] -->
+<!-- EDIT12 SECTION "Install dependencies on your system" [2358-2557] -->
 <h3 class="sectionedit13" id="apt">APT</h3>
 <div class="level3">
 
 <p>
 Perl dependencies:
 </p>
-<pre class="code">apt install libapache-session-perl libcache-cache-perl libclone-perl libconfig-inifiles-perl libconvert-pem-perl libcrypt-openssl-bignum-perl libcrypt-openssl-rsa-perl libcrypt-openssl-x509-perl libcrypt-rijndael-perl libdbi-perl libdigest-hmac-perl libemail-sender-perl libgd-securityimage-perl libhtml-template-perl libio-string-perl libjson-perl libmime-tools-perl libmouse-perl libnet-ldap-perl libplack-perl libregexp-assemble-perl libregexp-common-perl libsoap-lite-perl libstring-random-perl libunicode-string-perl liburi-perl libwww-perl libxml-simple-perl libxml-libxslt-perl</pre>
+<pre class="code">apt install libapache-session-perl libcache-cache-perl libclone-perl libconfig-inifiles-perl libconvert-pem-perl libcrypt-openssl-bignum-perl libcrypt-openssl-rsa-perl libcrypt-openssl-x509-perl libcrypt-rijndael-perl libdbi-perl libdigest-hmac-perl libemail-sender-perl libgd-securityimage-perl libhtml-template-perl libio-string-perl libjson-perl libmime-tools-perl libmouse-perl libnet-ldap-perl libplack-perl libregexp-assemble-perl libregexp-common-perl libsoap-lite-perl libstring-random-perl libunicode-string-perl liburi-perl libwww-perl libxml-simple-perl libxml-libxslt-perl libcrypt-urandom-perl</pre>
 
 <p>
 For Apache:
@@ -337,7 +339,7 @@ For Nginx:
 <pre class="code">apt install nginx nginx-extras</pre>
 
 </div>
-<!-- EDIT13 SECTION "APT" [2555-3333] -->
+<!-- EDIT13 SECTION "APT" [2558-3358] -->
 <h3 class="sectionedit14" id="yum">YUM</h3>
 <div class="level3">
 <div class="notetip">You need  <a href="http://fedoraproject.org/wiki/EPEL/" class="urlextern" title="http://fedoraproject.org/wiki/EPEL/"  rel="nofollow">EPEL</a> repository. See below how to enable this repository: <a href="http://fedoraproject.org/wiki/EPEL/FAQ#howtouse" class="urlextern" title="http://fedoraproject.org/wiki/EPEL/FAQ#howtouse"  rel="nofollow">http://fedoraproject.org/wiki/EPEL/FAQ#howtouse</a>
@@ -359,6 +361,6 @@ For Nginx:
 <div class="noteimportant">As you need a recent version of Nginx, the best is to install <a href="https://www.nginx.com/resources/wiki/start/topics/tutorials/install/#official-red-hat-centos-packages" class="urlextern" title="https://www.nginx.com/resources/wiki/start/topics/tutorials/install/#official-red-hat-centos-packages"  rel="nofollow">Nginx official packages</a>.
 </div>
 </div>
-<!-- EDIT14 SECTION "YUM" [3334-] --></div>
+<!-- EDIT14 SECTION "YUM" [3359-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/psgi.html 2.0.2+ds-1/doc/pages/documentation/current/psgi.html
--- 2.0.1+ds-2/doc/pages/documentation/current/psgi.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/psgi.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:psgi</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="noindex,nofollow"/>
+<meta name="robots" content="index,follow"/>
 <meta name="keywords" content="documentation,2.0,psgi"/>
 <link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="psgi.html"/>
@@ -130,10 +130,10 @@ A <code>llng-server.psgi</code> is provi
 <li class="level1"><div class="li"> with uWSGI <em><strong>(see below)</strong></em></div>
 </li>
 </ul>
-<div class="noteimportant">Starman, Twiggy,… are HTTP servers, not FastCGI ones !
+<div class="noteimportant">Starman, Twiggy,... are HTTP servers, not FastCGI ones !
 </div>
 <p>
-You can also replace only a part of it to create a specialized FastCGI server (portal,…). Look at <code>llng-server.psgi</code> example and take the part you want to use.
+You can also replace only a part of it to create a specialized FastCGI server (portal,...). Look at <code>llng-server.psgi</code> example and take the part you want to use.
 </p>
 
 <p>
@@ -158,31 +158,31 @@ There are also some other psgi files in
 	</tr>
 	</thead>
 	<tr class="row2 roweven">
-		<td class="col0 centeralign">  -p  </td><td class="col1 centeralign">  –pid  </td><td class="col2 centeralign">  PID  </td><td class="col3 leftalign"> Process PID  </td>
+		<td class="col0 centeralign">  -p  </td><td class="col1 centeralign">  --pid  </td><td class="col2 centeralign">  PID  </td><td class="col3 leftalign"> Process PID  </td>
 	</tr>
 	<tr class="row3 rowodd">
-		<td class="col0 centeralign">  -u  </td><td class="col1 centeralign">  –user  </td><td class="col2 centeralign">  USER  </td><td class="col3"> Unix uid </td>
+		<td class="col0 centeralign">  -u  </td><td class="col1 centeralign">  --user  </td><td class="col2 centeralign">  USER  </td><td class="col3"> Unix uid </td>
 	</tr>
 	<tr class="row4 roweven">
-		<td class="col0 centeralign">  -g  </td><td class="col1 centeralign">  –group  </td><td class="col2 centeralign">  GROUP  </td><td class="col3"> Unix gid </td>
+		<td class="col0 centeralign">  -g  </td><td class="col1 centeralign">  --group  </td><td class="col2 centeralign">  GROUP  </td><td class="col3"> Unix gid </td>
 	</tr>
 	<tr class="row5 rowodd">
-		<td class="col0 centeralign">  -n  </td><td class="col1 centeralign">  –proc  </td><td class="col2 centeralign">  NPROC  </td><td class="col3"> Number of process to launch <em>(FCGI::ProcManager*)</em> </td>
+		<td class="col0 centeralign">  -n  </td><td class="col1 centeralign">  --proc  </td><td class="col2 centeralign">  NPROC  </td><td class="col3"> Number of process to launch <em>(FCGI::ProcManager*)</em> </td>
 	</tr>
 	<tr class="row6 roweven">
-		<td class="col0 centeralign">  -s  </td><td class="col1 centeralign">  –socket  </td><td class="col2 centeralign">  SOCKET  </td><td class="col3"> Socket to listen to </td>
+		<td class="col0 centeralign">  -s  </td><td class="col1 centeralign">  --socket  </td><td class="col2 centeralign">  SOCKET  </td><td class="col3"> Socket to listen to </td>
 	</tr>
 	<tr class="row7 rowodd">
-		<td class="col0 centeralign">  -l  </td><td class="col1 centeralign">  –listen  </td><td class="col2 centeralign">  LISTEN  </td><td class="col3"> Listening address. Examples: <code>host:port</code>, <code>:port</code>, <code>/socket/path</code> </td>
+		<td class="col0 centeralign">  -l  </td><td class="col1 centeralign">  --listen  </td><td class="col2 centeralign">  LISTEN  </td><td class="col3"> Listening address. Examples: <code>host:port</code>, <code>:port</code>, <code>/socket/path</code> </td>
 	</tr>
 	<tr class="row8 roweven">
-		<td class="col0 centeralign">  -f  </td><td class="col1 centeralign">  –customFunctionsFile  </td><td class="col2 centeralign">  CUSTOM_FUNCTIONS_FILE  </td><td class="col3"> File to load for custom functions </td>
+		<td class="col0 centeralign">  -f  </td><td class="col1 centeralign">  --customFunctionsFile  </td><td class="col2 centeralign">  CUSTOM_FUNCTIONS_FILE  </td><td class="col3"> File to load for custom functions </td>
 	</tr>
 	<tr class="row9 rowodd">
-		<td class="col0 centeralign">  -e  </td><td class="col1 centeralign">  –engine  </td><td class="col2 centeralign">  ENGINE  </td><td class="col3"> Plack::Handler engine, default to FCGI <em>(see below)</em> </td>
+		<td class="col0 centeralign">  -e  </td><td class="col1 centeralign">  --engine  </td><td class="col2 centeralign">  ENGINE  </td><td class="col3"> Plack::Handler engine, default to FCGI <em>(see below)</em> </td>
 	</tr>
 	<tr class="row10 roweven">
-		<td class="col0 leftalign">  </td><td class="col1 centeralign">  –plackOptions  </td><td class="col2 leftalign">  </td><td class="col3"> Other options to path to Plack. Can bu multi-valued. Values must look like <code>–key=value</code> </td>
+		<td class="col0 leftalign">  </td><td class="col1 centeralign">  --plackOptions  </td><td class="col2 leftalign">  </td><td class="col3"> Other options to path to Plack. Can bu multi-valued. Values must look like <code>--key=value</code> </td>
 	</tr>
 </table></div>
 <!-- EDIT4 TABLE [2210-2983] -->
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/resetpassword.html 2.0.2+ds-1/doc/pages/documentation/current/resetpassword.html
--- 2.0.1+ds-2/doc/pages/documentation/current/resetpassword.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/resetpassword.html	2019-02-12 16:28:08.000000000 +0000
@@ -90,41 +90,12 @@ The reset password link must be activate
 </p>
 
 <p>
-Then go in Manager, <code>General Parameters</code> » <code>Advanced Parameters</code> » <code>Password management</code>:
+The SMTP server must be setup, see <a href="smtp.html" class="wikilink1" title="documentation:2.0:smtp">SMTP server setup</a>.
 </p>
-<ul>
-<li class="level1"><div class="li"> <strong>SMTP</strong>:</div>
-<ul>
-<li class="level2"><div class="li"> <strong>SMTP Server</strong>: <abbr title="Internet Protocol">IP</abbr> or hostname of the SMTP server</div>
-</li>
-<li class="level2"><div class="li"> <strong>SMTP User</strong>: SMTP user if authentication is required</div>
-</li>
-<li class="level2"><div class="li"> <strong>SMTP Password</strong>: SMTP password if authentication is required</div>
-</li>
-</ul>
-</li>
-</ul>
-<div class="notetip"><ul>
-<li class="level1"><div class="li"> If no SMTP server is configured, the mail will be sent via the local sendmail program. Else, Net::SMTP module is required to use the SMTP server</div>
-</li>
-<li class="level1"><div class="li"> The SMTP server value can hold the port, for example: <code>mail.example.com:25</code></div>
-</li>
-<li class="level1"><div class="li"> If authentication is configured, Authen::SASL and MIME::Base64 modules are required</div>
-</li>
-</ul>
 
-</div><ul>
-<li class="level1"><div class="li"> <strong>Mail headers</strong>:  </div>
-<ul>
-<li class="level2"><div class="li"> <strong>Mail sender</strong>: address seen in the “From” field (default: noreply@[DOMAIN])</div>
-</li>
-<li class="level2"><div class="li"> <strong>Reply address</strong>: address seen in the “Reply-To” field</div>
-</li>
-<li class="level2"><div class="li"> <strong>Mail charset</strong>: Charset used for the body of the mail (default: utf-8)</div>
-</li>
-</ul>
-</li>
-</ul>
+<p>
+Then go in Manager, <code>General Parameters</code> » <code>Advanced parameters</code> » <code>Password management</code> :
+</p>
 <ul>
 <li class="level1"><div class="li"> <strong>Mail content</strong>:</div>
 <ul>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/rest2f.html 2.0.2+ds-1/doc/pages/documentation/current/rest2f.html
--- 2.0.1+ds-2/doc/pages/documentation/current/rest2f.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/rest2f.html	2019-02-12 16:28:08.000000000 +0000
@@ -114,10 +114,10 @@ REST web services have just to reply wit
 	</tr>
 	</thead>
 	<tr class="row1 rowodd">
-		<td class="col0 centeralign">  Init <abbr title="Uniform Resource Locator">URL</abbr>  </td><td class="col1"> JSON file: <code>{“user”:$user,…}</code> </td><td class="col2"> JSON file: <code>{“result”:true/false}</code> </td>
+		<td class="col0 centeralign">  Init <abbr title="Uniform Resource Locator">URL</abbr>  </td><td class="col1"> JSON file: <code>{“user”:$user,...}</code> </td><td class="col2"> JSON file: <code>{“result”:true/false}</code> </td>
 	</tr>
 	<tr class="row2 roweven">
-		<td class="col0 centeralign">  Verify <abbr title="Uniform Resource Locator">URL</abbr>  </td><td class="col1"> JSON file: <code>{“user”:$user,“code”:“$code”,…}</code> </td><td class="col2"> JSON file: <code>{“result”:true/false}</code> </td>
+		<td class="col0 centeralign">  Verify <abbr title="Uniform Resource Locator">URL</abbr>  </td><td class="col1"> JSON file: <code>{“user”:$user,“code”:“$code”,...}</code> </td><td class="col2"> JSON file: <code>{“result”:true/false}</code> </td>
 	</tr>
 </table></div>
 <!-- EDIT5 TABLE [1310-1539] -->
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/restsessionbackend.html 2.0.2+ds-1/doc/pages/documentation/current/restsessionbackend.html
--- 2.0.1+ds-2/doc/pages/documentation/current/restsessionbackend.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/restsessionbackend.html	2019-02-12 16:28:08.000000000 +0000
@@ -124,7 +124,7 @@ To configure it, REST session backend wi
 <div class="level3">
 
 <p>
-First, active SOAP in <code>General parameters</code> » <code>Advanced parameters</code> » <code>Portal servers</code> » <code>SOAP session server</code>.
+First, activate REST in <code>General parameters</code> » <code>Plugins</code> » <code>Portal servers</code> » <code>REST session server</code>.
 </p>
 
 <p>
@@ -152,27 +152,27 @@ Then, set <code>Lemonldap::NG::Common::A
 		<td class="col0 centeralign">  <strong>password</strong>  </td><td class="col1"> Password to use for auth basic mechanism </td><td class="col2 leftalign">   </td>
 	</tr>
 </table></div>
-<!-- EDIT4 TABLE [1800-2126] -->
+<!-- EDIT4 TABLE [1790-2116] -->
 </div>
-<!-- EDIT3 SECTION "Manager" [1452-2127] -->
+<!-- EDIT3 SECTION "Manager" [1452-2117] -->
 <h3 class="sectionedit5" id="apache">Apache</h3>
 <div class="level3">
 
 <p>
 Sessions REST end points access must be allowed in Apache portal configuration (for example, access by <abbr title="Internet Protocol">IP</abbr> range):
 </p>
-<pre class="code file apache"><span class="co1"># SOAP functions for sessions management (disabled by default)</span>
+<pre class="code file apache"><span class="co1"># REST/SOAP functions for sessions access (disabled by default)</span>
 &lt;<span class="kw3">Location</span> /index.fcgi/sessions&gt;
     <span class="kw1">Require</span> 192.168.2.0/<span class="nu0">24</span>
 &lt;/<span class="kw3">Location</span>&gt;</pre>
 
 </div>
-<!-- EDIT5 SECTION "Apache" [2128-2417] -->
+<!-- EDIT5 SECTION "Apache" [2118-2408] -->
 <h3 class="sectionedit6" id="real_session_backend">Real session backend</h3>
 <div class="level3">
 
 <p>
-Real session backend will be configured in <code>lemonldap-ng.ini</code>, in <code>portal</code> section (the portal hosts the REST service for sessions, and will do the link between SOAP requests and real sessions).
+Real session backend will be configured in <code>lemonldap-ng.ini</code>, in <code>portal</code> section (the portal hosts the REST service for sessions, and will do the link between REST requests and real sessions).
 </p>
 
 <p>
@@ -184,6 +184,6 @@ For example, if real sessions are stored
 <div class="notetip">Session explorer and “single session” features can&#039;t be used using this backend. Session explorer and portal must be launched with real backend.
 </div>
 </div>
-<!-- EDIT6 SECTION "Real session backend" [2418-] --></div>
+<!-- EDIT6 SECTION "Real session backend" [2409-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/secondfactor.html 2.0.2+ds-1/doc/pages/documentation/current/secondfactor.html
--- 2.0.1+ds-2/doc/pages/documentation/current/secondfactor.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/secondfactor.html	2019-02-12 16:28:08.000000000 +0000
@@ -73,7 +73,7 @@ Two-Factor Authentication <em>(as known
 </li>
 <li class="level1"><div class="li"> something they have <em>(U2F Key, smartphone, …) </em> </div>
 </li>
-<li class="level1"><div class="li"> something they are <em>(biometrics like fingerprints, …)</em></div>
+<li class="level1"><div class="li"> something they are <em>(biometrics like fingerprints, ...)</em></div>
 </li>
 </ol>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/security.html 2.0.2+ds-1/doc/pages/documentation/current/security.html
--- 2.0.1+ds-2/doc/pages/documentation/current/security.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/security.html	2019-02-12 16:28:08.000000000 +0000
@@ -66,6 +66,7 @@
 <li class="level2"><div class="li"><a href="#order_your_rules">Order your rules</a></div></li>
 <li class="level2"><div class="li"><a href="#be_careful_with_url_parameters">Be careful with URL parameters</a></div></li>
 <li class="level2"><div class="li"><a href="#encoded_characters">Encoded characters</a></div></li>
+<li class="level2"><div class="li"><a href="#ip_in_rules">IP in rules</a></div></li>
 </ul>
 </li>
 <li class="level1"><div class="li"><a href="#secure_reverse-proxies">Secure reverse-proxies</a></div></li>
@@ -116,7 +117,7 @@ By default, the manager is restricted to
 <div class="level3">
 
 <p>
-You can use any of the mechanisms proposed by Apache: SSL, Auth-Basic, Kerberos,… Example
+You can use any of the mechanisms proposed by Apache: SSL, Auth-Basic, Kerberos,... Example
 </p>
 <pre class="code apache">&lt;<span class="kw3">VirtualHost</span> *:<span class="nu0">443</span>&gt;
     <span class="kw1">ServerName</span> manager.example.com
@@ -312,12 +313,18 @@ You can use the following rules instead:
 <div class="level3">
 
 <p>
-Some characters are encoded in URLs by the browser (such as space,…). To avoid problems, <abbr title="LemonLDAP::NG">LL::NG</abbr> decode them using <a href="https://metacpan.org/pod/Apache2::URI#unescape_url" class="urlextern" title="https://metacpan.org/pod/Apache2::URI#unescape_url"  rel="nofollow">https://metacpan.org/pod/Apache2::URI#unescape_url</a>. So write your rules using normal characters.
+Some characters are encoded in URLs by the browser (such as space,...). To avoid problems, <abbr title="LemonLDAP::NG">LL::NG</abbr> decode them using <a href="https://metacpan.org/pod/Apache2::URI#unescape_url" class="urlextern" title="https://metacpan.org/pod/Apache2::URI#unescape_url"  rel="nofollow">https://metacpan.org/pod/Apache2::URI#unescape_url</a>. So write your rules using normal characters.
 </p>
 
 </div>
 <!-- EDIT15 SECTION "Encoded characters" [5248-5495] -->
-<h2 class="sectionedit16" id="secure_reverse-proxies">Secure reverse-proxies</h2>
+<h3 class="sectionedit16" id="ip_in_rules">IP in rules</h3>
+<div class="level3">
+<div class="notewarning">If you are running LemonLDAP::NG behind a reverse proxy, make sure you check the <a href="behindproxyminihowto.html" class="wikilink1" title="documentation:2.0:behindproxyminihowto">Reverse Proxy how-to</a> so that the rule applies to the real user <abbr title="Internet Protocol">IP</abbr> and not the reverse proxy&#039;s <abbr title="Internet Protocol">IP</abbr>. Make sure you only specify trusted proxy addresses so that an attacker cannot forge the <code>X-Forwarded-For</code> header
+</div>
+</div>
+<!-- EDIT16 SECTION "IP in rules" [5496-5859] -->
+<h2 class="sectionedit17" id="secure_reverse-proxies">Secure reverse-proxies</h2>
 <div class="level2">
 
 <p>
@@ -362,8 +369,8 @@ It is recommended to secure the channel
 </ul>
 
 </div>
-<!-- EDIT16 SECTION "Secure reverse-proxies" [5496-7164] -->
-<h2 class="sectionedit17" id="configure_security_settings">Configure security settings</h2>
+<!-- EDIT17 SECTION "Secure reverse-proxies" [5860-7528] -->
+<h2 class="sectionedit18" id="configure_security_settings">Configure security settings</h2>
 <div class="level2">
 
 <p>
@@ -386,7 +393,7 @@ Go in Manager, <code>General parameters<
 </li>
 <li class="level1"><div class="li"> <strong>Brute-Force Attack protection</strong>: set to &#039;On&#039; to enable it. The aim of a brute force attack is to gain access to user accounts by repeatedly trying to guess the password of a user. If it is disabled, automated tools may submit thousands of password attempts in a matter of seconds, making it easy for an attacker to beat a password-based authentication system.</div>
 </li>
-<li class="level1"><div class="li"> <strong>LWP::UserAgent and SSL options</strong>: insert here options to pass to LWP::UserAgent object (used by <abbr title="Security Assertion Markup Language">SAML</abbr> or OpenID-Connect to query partners). Example: <code>verify_hostname ⇒ 0</code>, <code>SSL_verify_mode ⇒ 0</code></div>
+<li class="level1"><div class="li"> <strong>LWP::UserAgent and SSL options</strong>: insert here options to pass to LWP::UserAgent object (used by <abbr title="Security Assertion Markup Language">SAML</abbr> or OpenID-Connect to query partners). Example: <code>verify_hostname =&gt; 0</code>, <code>SSL_verify_mode =&gt; 0</code></div>
 </li>
 <li class="level1"><div class="li"> <strong>Content Security Policy</strong>:  Portal builds dynamically this header. You can modify default values. Browser implementations of formAction directive are inconsistent (e.g. Firefox doesn&#039;t block the redirects whereas Chrome does). Administrators may have to modify formAction value with wildcard likes *.</div>
 </li>
@@ -399,8 +406,8 @@ Go in Manager, <code>General parameters<
 </ul>
 
 </div>
-<!-- EDIT17 SECTION "Configure security settings" [7165-9494] -->
-<h2 class="sectionedit18" id="fail2ban">Fail2ban</h2>
+<!-- EDIT18 SECTION "Configure security settings" [7529-9858] -->
+<h2 class="sectionedit19" id="fail2ban">Fail2ban</h2>
 <div class="level2">
 
 <p>
@@ -451,8 +458,8 @@ Restart fail2ban
 </p>
 
 </div>
-<!-- EDIT18 SECTION "Fail2ban" [9495-10549] -->
-<h2 class="sectionedit19" id="sessions_identifier">Sessions identifier</h2>
+<!-- EDIT19 SECTION "Fail2ban" [9859-10913] -->
+<h2 class="sectionedit20" id="sessions_identifier">Sessions identifier</h2>
 <div class="level2">
 
 <p>
@@ -464,8 +471,8 @@ We recommend to use : <code>Lemonldap::N
 </p>
 
 </div>
-<!-- EDIT19 SECTION "Sessions identifier" [10550-10812] -->
-<h2 class="sectionedit20" id="saml">SAML</h2>
+<!-- EDIT20 SECTION "Sessions identifier" [10914-11176] -->
+<h2 class="sectionedit21" id="saml">SAML</h2>
 <div class="level2">
 
 <p>
@@ -473,6 +480,6 @@ See <a href="samlservice.html#security_p
 </p>
 
 </div>
-<!-- EDIT20 SECTION "SAML" [10813-] --></div>
+<!-- EDIT21 SECTION "SAML" [11177-] --></div>
 </body>
 </html>
Binary files 2.0.1+ds-2/doc/pages/documentation/current/server_to_server.0fea6a13c52b4d4725368f24b045ca84.png and 2.0.2+ds-1/doc/pages/documentation/current/server_to_server.0fea6a13c52b4d4725368f24b045ca84.png differ
Binary files 2.0.1+ds-2/doc/pages/documentation/current/server_to_server.5462faf15ddb078d04b190542596d5c2.png and 2.0.2+ds-1/doc/pages/documentation/current/server_to_server.5462faf15ddb078d04b190542596d5c2.png differ
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/servertoserver.html 2.0.2+ds-1/doc/pages/documentation/current/servertoserver.html
--- 2.0.1+ds-2/doc/pages/documentation/current/servertoserver.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/servertoserver.html	2019-02-12 16:28:08.000000000 +0000
@@ -55,7 +55,7 @@ In modern applications, web application
 </li>
 <li class="level1"><div class="li"> the Bad (<a href="securetoken.html" class="wikilink1" title="documentation:2.0:securetoken">Secure Token Handler</a>) : <strong>Deprecated</strong>. Can be used in specific cases  </div>
 </li>
-<li class="level1"><div class="li"> the Good (Service Token Handler): See below ! (Thanks Sergio…)</div>
+<li class="level1"><div class="li"> the Good (Service Token Handler): See below ! (Thanks Sergio...)</div>
 </li>
 </ul>
 
@@ -68,11 +68,11 @@ Tokens are time limited (30 seconds) and
 </p>
 
 <p>
-<a href="server_to_server.png_documentation_2.0_servertoserver.html" class="media" title="documentation:2.0:server_to_server.png"><img src="server_to_server.png" class="media" title="Kinematic" alt="Kinematic" /></a>
+<a href="documentation/server_to_server.png_documentation_2.0_servertoserver.html" class="media" title="documentation:server_to_server.png"><img src="documentation/server_to_server.png" class="media" title="Kinematic" alt="Kinematic" /></a>
 </p>
 
 </div>
-<!-- EDIT1 SECTION "Handling server webservice calls" [1-899] -->
+<!-- EDIT1 SECTION "Handling server webservice calls" [1-902] -->
 <h2 class="sectionedit2" id="webapp1_handler_configuration">Webapp1 handler configuration</h2>
 <div class="level2">
 
@@ -86,7 +86,7 @@ Webapp1 can read this header and use it
 </p>
 
 </div>
-<!-- EDIT2 SECTION "Webapp1 handler configuration" [900-1328] -->
+<!-- EDIT2 SECTION "Webapp1 handler configuration" [903-1331] -->
 <h2 class="sectionedit3" id="webapp2_handler_configuration">Webapp2 handler configuration</h2>
 <div class="level2">
 
@@ -95,6 +95,6 @@ Change handler type to “ServiceToken
 </p>
 
 </div>
-<!-- EDIT3 SECTION "Webapp2 handler configuration" [1329-] --></div>
+<!-- EDIT3 SECTION "Webapp2 handler configuration" [1332-] --></div>
 </body>
 </html>
Binary files 2.0.1+ds-2/doc/pages/documentation/current/server_to_server.png and 2.0.2+ds-1/doc/pages/documentation/current/server_to_server.png differ
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/server_to_server.png_documentation_2.0_servertoserver.html 2.0.2+ds-1/doc/pages/documentation/current/server_to_server.png_documentation_2.0_servertoserver.html
--- 2.0.1+ds-2/doc/pages/documentation/current/server_to_server.png_documentation_2.0_servertoserver.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/server_to_server.png_documentation_2.0_servertoserver.html	1970-01-01 00:00:00.000000000 +0000
@@ -1,103 +0,0 @@
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
- lang="en" dir="ltr" class="no-js">
-<head>
-  <meta charset="UTF-8" />
-  <title>documentation:2.0:server_to_server.png [LemonLDAP::NG]</title>
-  <script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
-  <meta name="viewport" content="width=device-width,initial-scale=1" />
-  <link rel="shortcut icon" href="lib/tpl/bootstrap3/images/favicon.ico" />
-<link rel="apple-touch-icon" href="lib/tpl/bootstrap3/images/apple-touch-icon.png" />
-      <!-- //if:usedebianlibs
-  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
-//elsif:useexternallibs
-  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
-//elsif:cssminified
-  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
-//else -->
-  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
-<!-- //endif -->/>
-    <script type="text/javascript">/*<![CDATA[*/
-    var TPL_CONFIG = {"tableFullWidth":1};
-  /*!]]>*/</script>
-  <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="index,follow"/>
-<link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
-<link rel="start" href="servertoserver.html"/>
-<link rel="contents" href="servertoserver.html" title="Sitemap"/>
-<link rel="stylesheet" type="text/css" href="lib/exe/css.php.t.bootstrap3.css"/>
-<!-- //if:usedebianlibs
-  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
-//elsif:useexternallibs
-  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
-//elsif:cssminified
-  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
-//else -->
-  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
-<!-- //endif -->
-<script type="text/javascript">/*<![CDATA[*/var NS='';var JSINFO = null;
-/*!]]>*/</script>
-<script type="text/javascript" charset="utf-8" src="lib/exe/js.php.t.bootstrap3.js"></script>
-<!-- //if:usedebianlibs
-<script type="text/javascript" src="/javascript/jquery/jquery.min.js"></script>
-//elsif:useexternallibs
-<script type="text/javascript" src="http://code.jquery.com/jquery-2.2.0.min.js"></script>
-//elsif:jsminified
-<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.min.js"></script>
-//else -->
-<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.js"></script>
-<!-- //endif -->
-<!-- //if:usedebianlibs
-  <script type="text/javascript" src="/javascript/jquery-ui/jquery-ui.min.js"></script>
-//elsif:useexternallibs
-  <script type="text/javascript" src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
-//elsif:jsminified
-  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.min.js"></script>
-//else -->
-  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.js"></script>
-<!-- //endif -->
-  <script type="text/javascript" src="/javascript/bootstrap/js/bootstrap.min.js"></script>
-  <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
-  <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
-  <!--[if lt IE 9]>
-  <![endif]-->
-</head>
-
-<body class="container">
-  <!--[if lte IE 7 ]><div id="IE7"><![endif]--><!--[if IE 8 ]><div id="IE8"><![endif]-->
-  <div id="dokuwiki__detail" class="dokuwiki mode_ tpl_bootstrap3   ">
-
-    
-    
-      <h1 class="page-header">
-        <i class="glyphicon glyphicon-picture"></i> documentation:2.0:server_to_server.png      </h1>
-
-      <div class="content">
-
-        <a href="server_to_server.0fea6a13c52b4d4725368f24b045ca84.png" title="View original file"><img width="867" height="542" class="img_detail" alt="server_to_server.png" title="server_to_server.png" src="server_to_server.5462faf15ddb078d04b190542596d5c2.png"/></a>
-        <div class="img_detail">
-
-          <div class="panel panel-default">
-            <div class="panel-heading">
-              <h2 class="panel-title"><i class="glyphicon glyphicon-info-sign text-info"></i> server_to_server.png</h2>
-            </div>
-            <div class="panel-body">
-              <dl><dt>Date:</dt><dd>2017/03/04 15:16</dd><dt>Filename:</dt><dd>server_to_server.png</dd><dt>Format:</dt><dd>PNG</dd><dt>Size:</dt><dd>52KB</dd><dt>Width:</dt><dd>867</dd><dt>Height:</dt><dd>542</dd></dl>                          </div>
-          </div>
-
-        </div>
-      </div><!-- /.content -->
-
-      <p class="back">
-
-        <hr/>
-
-        <div class="btn-group">
-          <a href="servertoserver.html"  class="action img_backto" accesskey="b" rel="nofollow" title="Back to documentation:2.0:servertoserver [B]">Back to documentation:2.0:servertoserver</a>                  </div>
-
-      </p>
-
-      </div>
-  <!--[if ( lte IE 7 | IE 8 ) ]></div><![endif]-->
-</body>
-</html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/smtp.html 2.0.2+ds-1/doc/pages/documentation/current/smtp.html
--- 2.0.1+ds-2/doc/pages/documentation/current/smtp.html	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/smtp.html	2019-02-12 16:28:08.000000000 +0000
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+  <meta charset="utf-8" />
+  <title>documentation:2.0:smtp</title>
+<meta name="generator" content="DokuWiki"/>
+<meta name="robots" content="index,follow"/>
+<meta name="keywords" content="documentation,2.0,smtp"/>
+<link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
+<link rel="start" href="smtp.html"/>
+<link rel="contents" href="smtp.html" title="Sitemap"/>
+<link rel="stylesheet" type="text/css" href="lib/exe/css.php.t.bootstrap3.css"/>
+<!-- //if:usedebianlibs
+  <link rel="stylesheet" type="text/css" href="/javascript/bootstrap/css/bootstrap.min.css" />
+//elsif:useexternallibs
+  <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"></script>
+//elsif:cssminified
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.min.css" />
+//else -->
+  <link rel="stylesheet" type="text/css" href="/static/bwr/bootstrap/dist/css/bootstrap.css" />
+<!-- //endif -->
+<script type="text/javascript">/*<![CDATA[*/var NS='documentation:2.0';var JSINFO = {"id":"documentation:2.0:smtp","namespace":"documentation:2.0"};
+/*!]]>*/</script>
+<script type="text/javascript" charset="utf-8" src="lib/exe/js.php.t.bootstrap3.js"></script>
+<!-- //if:usedebianlibs
+<script type="text/javascript" src="/javascript/jquery/jquery.min.js"></script>
+//elsif:useexternallibs
+<script type="text/javascript" src="http://code.jquery.com/jquery-2.2.0.min.js"></script>
+//elsif:jsminified
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.min.js"></script>
+//else -->
+<script type="text/javascript" src="/static/bwr/jquery/dist/jquery.js"></script>
+<!-- //endif -->
+<!-- //if:usedebianlibs
+  <script type="text/javascript" src="/javascript/jquery-ui/jquery-ui.min.js"></script>
+//elsif:useexternallibs
+  <script type="text/javascript" src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
+//elsif:jsminified
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.min.js"></script>
+//else -->
+  <script type="text/javascript" src="/static/bwr/jquery-ui/jquery-ui.js"></script>
+<!-- //endif -->
+</head>
+<body>
+<div class="dokuwiki export container">
+
+<h1 class="sectionedit1" id="smtp_server_setup">SMTP server setup</h1>
+<div class="level1">
+
+<p>
+Go in General Parameters &gt; Extended Parameters &gt; SMTP
+</p>
+<ul>
+<li class="level1"><div class="li"> <strong>SMTP Server</strong>: <abbr title="Internet Protocol">IP</abbr> or hostname of the SMTP server</div>
+</li>
+<li class="level2"><div class="li"> <strong>SMTP Port</strong>: Port of the SMTP server</div>
+</li>
+<li class="level2"><div class="li"> <strong>SMTP User</strong>: SMTP user if authentication is required</div>
+</li>
+<li class="level2"><div class="li"> <strong>SMTP Password</strong>: SMTP password if authentication is required</div>
+</li>
+</ul>
+<div class="notetip"><ul>
+<li class="level1"><div class="li"> If no SMTP server is configured, the mail will be sent via the local sendmail program. Else, Net::SMTP module is required to use the SMTP server</div>
+</li>
+<li class="level1"><div class="li"> The SMTP server value can hold the port, for example: <code>mail.example.com:25</code></div>
+</li>
+<li class="level1"><div class="li"> If authentication is configured, Authen::SASL and MIME::Base64 modules are required</div>
+</li>
+</ul>
+
+</div><ul>
+<li class="level1"><div class="li"> <strong>Mail headers</strong>:  </div>
+<ul>
+<li class="level2"><div class="li"> <strong>Mail sender</strong>: address seen in the “From” field (default: noreply@[DOMAIN])</div>
+</li>
+<li class="level2"><div class="li"> <strong>Reply address</strong>: address seen in the “Reply-To” field</div>
+</li>
+<li class="level2"><div class="li"> <strong>Mail charset</strong>: Charset used for the body of the mail (default: utf-8)</div>
+</li>
+</ul>
+</li>
+</ul>
+
+</div>
+</div>
+</body>
+</html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/sqlsessionbackend.html 2.0.2+ds-1/doc/pages/documentation/current/sqlsessionbackend.html
--- 2.0.1+ds-2/doc/pages/documentation/current/sqlsessionbackend.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/sqlsessionbackend.html	2019-02-12 16:28:08.000000000 +0000
@@ -87,7 +87,7 @@ SQL session backend can be used with man
 </li>
 <li class="level1"><div class="li"> <a href="https://metacpan.org/pod/Apache::Session::Sybase" class="urlextern" title="https://metacpan.org/pod/Apache::Session::Sybase"  rel="nofollow">Sybase</a></div>
 </li>
-<li class="level1"><div class="li"> ….</div>
+<li class="level1"><div class="li"> ....</div>
 </li>
 </ul>
 
@@ -194,7 +194,7 @@ Go in the Manager and set the session mo
 </table></div>
 <!-- EDIT5 TABLE [2702-3105] -->
 <p>
-You must read the man page corresponding to your database (<a href="https://metacpan.org/pod/Apache::Session::MySQL" class="urlextern" title="https://metacpan.org/pod/Apache::Session::MySQL"  rel="nofollow">Apache::Session::MySQL</a>, …) to learn more about parameters. You must also install the database connector (<a href="https://metacpan.org/pod/DBD::Oracle" class="urlextern" title="https://metacpan.org/pod/DBD::Oracle"  rel="nofollow">https://metacpan.org/pod/DBD::Oracle</a>, <a href="https://metacpan.org/pod/DBD::Pg" class="urlextern" title="https://metacpan.org/pod/DBD::Pg"  rel="nofollow">DBD::Pg</a>,…)
+You must read the man page corresponding to your database (<a href="https://metacpan.org/pod/Apache::Session::MySQL" class="urlextern" title="https://metacpan.org/pod/Apache::Session::MySQL"  rel="nofollow">Apache::Session::MySQL</a>, ...) to learn more about parameters. You must also install the database connector (<a href="https://metacpan.org/pod/DBD::Oracle" class="urlextern" title="https://metacpan.org/pod/DBD::Oracle"  rel="nofollow">https://metacpan.org/pod/DBD::Oracle</a>, <a href="https://metacpan.org/pod/DBD::Pg" class="urlextern" title="https://metacpan.org/pod/DBD::Pg"  rel="nofollow">DBD::Pg</a>,...)
 </p>
 <div class="noteimportant">For MySQL, you need to set additional parameters:<ul>
 <li class="level1"><div class="li"> LockDataSource</div>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/ssocookie.html 2.0.2+ds-1/doc/pages/documentation/current/ssocookie.html
--- 2.0.1+ds-2/doc/pages/documentation/current/ssocookie.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/ssocookie.html	2019-02-12 16:28:08.000000000 +0000
@@ -80,14 +80,14 @@ To edit <abbr title="Single Sign On">SSO
 </li>
 <li class="level1"><div class="li"> <strong>Javascript protection</strong>: set httpOnly flag, to prevent cookie from being caught by javascript code</div>
 </li>
-<li class="level1"><div class="li"> <strong>Cookie expiration time</strong>: by default, <abbr title="Single Sign On">SSO</abbr> cookie is a session cookie, which means it will be destroyed when browser is closed. You can change this behavior by setting a cookie expiration time. It must be an integer. <strong>Cookie Expiration Time</strong> value is a number of seconds until the cookie expires. A zero or negative number will expire the cookie immediately.</div>
+<li class="level1"><div class="li"> <strong>Cookie expiration time</strong>: by default, <abbr title="Single Sign On">SSO</abbr> cookie is a session cookie, which means it will be destroyed when browser is closed. You can change this behavior by setting a cookie expiration time. It must be an integer. <strong>Cookie Expiration Time</strong> value is a number of seconds until the cookie expires. Set a zero value to disable expiration time and use a session cookie.</div>
 </li>
 </ul>
 <div class="notewarning">When you change cookie expiration time, it is written on the user hard disk unlike session cookie
 </div><div class="noteimportant">Changing the domain value will not update other configuration parameters, like virtual host names, portal <abbr title="Uniform Resource Locator">URL</abbr>, etc. You have to update them by yourself.
 </div>
 </div>
-<!-- EDIT2 SECTION "SSO cookie" [59-1928] -->
+<!-- EDIT2 SECTION "SSO cookie" [59-1936] -->
 <h2 class="sectionedit3" id="portal_url">Portal URL</h2>
 <div class="level2">
 
@@ -103,6 +103,6 @@ Portal <abbr title="Uniform Resource Loc
 <div class="notewarning">The portal <abbr title="Uniform Resource Locator">URL</abbr> <strong>must</strong> be inside <abbr title="Single Sign On">SSO</abbr> domain. If secured cookie is enabled, the portal <abbr title="Uniform Resource Locator">URL</abbr> <strong>must</strong> be HTTPS.
 </div>
 </div>
-<!-- EDIT3 SECTION "Portal URL" [1929-] --></div>
+<!-- EDIT3 SECTION "Portal URL" [1937-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/start.html 2.0.2+ds-1/doc/pages/documentation/current/start.html
--- 2.0.1+ds-2/doc/pages/documentation/current/start.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/start.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:start</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="index,follow"/>
+<meta name="robots" content="noindex,nofollow"/>
 <meta name="keywords" content="documentation,2.0,start"/>
 <link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="start.html"/>
@@ -157,7 +157,7 @@
 </li>
 <li class="level1"><div class="li"> <a href="docker.html" class="wikilink1" title="documentation:2.0:docker">Run in LemonLDAP::NG in Docker</a></div>
 </li>
-<li class="level1"><div class="li"> <a href="nodehandler.html" class="wikilink1" title="documentation:2.0:nodehandler">Node.js handler</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a></div>
+<li class="level1"><div class="li"> <a href="nodehandler.html" class="wikilink1" title="documentation:2.0:nodehandler">Node.js handler</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a></div>
 </li>
 </ul>
 
@@ -166,7 +166,7 @@
 </p>
 
 </div>
-<!-- EDIT5 SECTION "Installation" [561-1103] -->
+<!-- EDIT5 SECTION "Installation" [561-1106] -->
 <h3 class="sectionedit6" id="after_installation">After installation</h3>
 <div class="level3">
 
@@ -180,7 +180,7 @@
 </li>
 <li class="level1"><div class="li"> <a href="configapache.html" class="wikilink1" title="documentation:2.0:configapache">Deploy Apache configuration</a></div>
 </li>
-<li class="level1"><div class="li"> <a href="configplack.html" class="wikilink1" title="documentation:2.0:configplack">Deploy LemonLDAP::NG on Plack servers family</a> <em>(Twiggy, Starman, Corona,…)</em> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a></div>
+<li class="level1"><div class="li"> <a href="configplack.html" class="wikilink1" title="documentation:2.0:configplack">Deploy LemonLDAP::NG on Plack servers family</a> <em>(Twiggy, Starman, Corona,...)</em> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a></div>
 </li>
 </ul>
 
@@ -189,12 +189,12 @@
 </p>
 
 </div>
-<!-- EDIT6 SECTION "After installation" [1104-1537] -->
+<!-- EDIT6 SECTION "After installation" [1107-1543] -->
 <h2 class="sectionedit7" id="configuration">Configuration</h2>
 <div class="level2">
 
 </div>
-<!-- EDIT7 SECTION "Configuration" [1538-1564] -->
+<!-- EDIT7 SECTION "Configuration" [1544-1570] -->
 <h3 class="sectionedit8" id="first_steps">First steps</h3>
 <div class="level3">
 
@@ -223,7 +223,7 @@
 </p>
 
 </div>
-<!-- EDIT8 SECTION "First steps" [1565-2024] -->
+<!-- EDIT8 SECTION "First steps" [1571-2030] -->
 <h3 class="sectionedit9" id="portal">Portal</h3>
 <div class="level3">
 
@@ -274,7 +274,7 @@
 		<td class="col0"> <a href="authapache.html" class="wikilink1" title="documentation:2.0:authapache">Apache (Basic, NTLM, OTP, ...)</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row3 rowodd">
-		<td class="col0"> <a href="authcas.html" class="wikilink1" title="documentation:2.0:authcas">CAS</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a>  </td><td class="col3 leftalign">    </td>
+		<td class="col0"> <a href="authcas.html" class="wikilink1" title="documentation:2.0:authcas">CAS</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a>  </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row4 roweven">
 		<td class="col0"> <a href="authdbi.html" class="wikilink1" title="documentation:2.0:authdbi">SQL Databases</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td>
@@ -286,103 +286,109 @@
 		<td class="col0"> <a href="authfacebook.html" class="wikilink1" title="documentation:2.0:authfacebook">Facebook</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">   </td>
 	</tr>
 	<tr class="row7 rowodd">
-		<td class="col0"> <a href="authkerberos.html" class="wikilink1" title="documentation:2.0:authkerberos">Kerberos</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td><td class="col3 leftalign">    </td>
+		<td class="col0"> <a href="authgpg.html" class="wikilink1" title="documentation:2.0:authgpg">GPG</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> <em>(introduced in 2.0.2)</em> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row8 roweven">
-		<td class="col0"> <a href="authldap.html" class="wikilink1" title="documentation:2.0:authldap">LDAP</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td>
+		<td class="col0"> <a href="authkerberos.html" class="wikilink1" title="documentation:2.0:authkerberos">Kerberos</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row9 rowodd">
-		<td class="col0"> <a href="authlinkedin.html" class="wikilink1" title="documentation:2.0:authlinkedin">LinkedIn</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"> </td><td class="col3"> </td>
+		<td class="col0"> <a href="authldap.html" class="wikilink1" title="documentation:2.0:authldap">LDAP</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td>
 	</tr>
 	<tr class="row10 roweven">
-		<td class="col0"> <a href="authnull.html" class="wikilink1" title="documentation:2.0:authnull">Null</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td>
+		<td class="col0"> <a href="authlinkedin.html" class="wikilink1" title="documentation:2.0:authlinkedin">LinkedIn</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"> </td><td class="col3"> </td>
 	</tr>
 	<tr class="row11 rowodd">
-		<td class="col0"> <a href="authopenidconnect.html" class="wikilink1" title="documentation:2.0:authopenidconnect">OpenID Connect</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">    </td>
+		<td class="col0"> <a href="authnull.html" class="wikilink1" title="documentation:2.0:authnull">Null</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td>
 	</tr>
 	<tr class="row12 roweven">
-		<td class="col0"> <a href="authpam.html" class="wikilink1" title="documentation:2.0:authpam">PAM</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td><td class="col3 leftalign">    </td>
+		<td class="col0"> <a href="authopenidconnect.html" class="wikilink1" title="documentation:2.0:authopenidconnect">OpenID Connect</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row13 rowodd">
-		<td class="col0"> <a href="authproxy.html" class="wikilink1" title="documentation:2.0:authproxy">Proxy LL::NG</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">    </td>
+		<td class="col0"> <a href="authpam.html" class="wikilink1" title="documentation:2.0:authpam">PAM</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row14 roweven">
-		<td class="col0"> <a href="authradius.html" class="wikilink1" title="documentation:2.0:authradius">Radius</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td><td class="col3 leftalign">    </td>
+		<td class="col0"> <a href="authproxy.html" class="wikilink1" title="documentation:2.0:authproxy">Proxy LL::NG</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row15 rowodd">
-		<td class="col0"> <a href="authrest.html" class="wikilink1" title="documentation:2.0:authrest">REST</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td>
+		<td class="col0"> <a href="authradius.html" class="wikilink1" title="documentation:2.0:authradius">Radius</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row16 roweven">
-		<td class="col0"> <a href="authsaml.html" class="wikilink1" title="documentation:2.0:authsaml">SAML 2.0 / Shibboleth</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">    </td>
+		<td class="col0"> <a href="authrest.html" class="wikilink1" title="documentation:2.0:authrest">REST</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td>
 	</tr>
 	<tr class="row17 rowodd">
-		<td class="col0"> <a href="authslave.html" class="wikilink1" title="documentation:2.0:authslave">Slave</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">   </td>
+		<td class="col0"> <a href="authsaml.html" class="wikilink1" title="documentation:2.0:authsaml">SAML 2.0 / Shibboleth</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row18 roweven">
-		<td class="col0"> <a href="authssl.html" class="wikilink1" title="documentation:2.0:authssl">SSL</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td><td class="col3 leftalign">    </td>
+		<td class="col0"> <a href="authslave.html" class="wikilink1" title="documentation:2.0:authslave">Slave</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">   </td>
 	</tr>
 	<tr class="row19 rowodd">
-		<td class="col0"> <a href="authtwitter.html" class="wikilink1" title="documentation:2.0:authtwitter">Twitter</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td><td class="col3 leftalign">    </td>
+		<td class="col0"> <a href="authssl.html" class="wikilink1" title="documentation:2.0:authssl">SSL</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row20 roweven">
-		<td class="col0"> <a href="authwebid.html" class="wikilink1" title="documentation:2.0:authwebid">WebID</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">   </td>
+		<td class="col0"> <a href="authtwitter.html" class="wikilink1" title="documentation:2.0:authtwitter">Twitter</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row21 rowodd">
-		<td class="col0"> <del><a href="authyubikey.html" class="wikilink1" title="documentation:2.0:authyubikey">Yubikey</a></del> </td><td class="col1 centeralign" colspan="3">  <em>Deprecated, replaced by Yubikey second factor</em>  </td>
+		<td class="col0"> <a href="authwebid.html" class="wikilink1" title="documentation:2.0:authwebid">WebID</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">   </td>
 	</tr>
 	<tr class="row22 roweven">
-		<td class="col0"> <a href="authcustom.html" class="wikilink1" title="documentation:2.0:authcustom">Custom modules</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td>
+		<td class="col0"> <del><a href="authyubikey.html" class="wikilink1" title="documentation:2.0:authyubikey">Yubikey</a></del> </td><td class="col1 centeralign" colspan="3">  <em>Deprecated, replaced by Yubikey second factor</em>  </td>
 	</tr>
 	<tr class="row23 rowodd">
-		<th class="col0"> Combo Backends </th><th class="col1 centeralign">  Authentication  </th><th class="col2 centeralign">  Users  </th><th class="col3 centeralign">  Password  </th>
+		<td class="col0"> <a href="authcustom.html" class="wikilink1" title="documentation:2.0:authcustom">Custom modules</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td>
 	</tr>
 	<tr class="row24 roweven">
-		<td class="col0"> <a href="authchoice.html" class="wikilink1" title="documentation:2.0:authchoice">Choice by users</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td>
+		<th class="col0"> Combo Backends </th><th class="col1 centeralign">  Authentication  </th><th class="col2 centeralign">  Users  </th><th class="col3 centeralign">  Password  </th>
 	</tr>
 	<tr class="row25 rowodd">
-		<td class="col0"> <a href="authcombination.html" class="wikilink1" title="documentation:2.0:authcombination">Combination of auth schemes</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">   </td>
+		<td class="col0"> <a href="authchoice.html" class="wikilink1" title="documentation:2.0:authchoice">Choice by users</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td>
 	</tr>
 	<tr class="row26 roweven">
-		<td class="col0"> <del><a href="authmulti.html" class="wikilink1" title="documentation:2.0:authmulti">Multiple backends stack</a></del> </td><td class="col1 centeralign" colspan="3">  <em>Deprecated, replaced by Combination</em>  </td>
+		<td class="col0"> <a href="authcombination.html" class="wikilink1" title="documentation:2.0:authcombination">Combination of auth schemes</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">   </td>
 	</tr>
 	<tr class="row27 rowodd">
-		<th class="col0"> Obsolete Backends </th><th class="col1 centeralign">  Authentication  </th><th class="col2 centeralign">  Users  </th><th class="col3 centeralign">  Password  </th>
+		<td class="col0"> <del><a href="authmulti.html" class="wikilink1" title="documentation:2.0:authmulti">Multiple backends stack</a></del> </td><td class="col1 centeralign" colspan="3">  <em>Deprecated, replaced by Combination</em>  </td>
 	</tr>
 	<tr class="row28 roweven">
-		<td class="col0"> <a href="authopenid.html" class="wikilink1" title="documentation:2.0:authopenid">OpenID</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">    </td>
+		<th class="col0"> Obsolete Backends </th><th class="col1 centeralign">  Authentication  </th><th class="col2 centeralign">  Users  </th><th class="col3 centeralign">  Password  </th>
 	</tr>
 	<tr class="row29 rowodd">
-		<td class="col0"> <a href="authremote.html" class="wikilink1" title="documentation:2.0:authremote">Remote LL::NG</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">    </td>
+		<td class="col0"> <a href="authopenid.html" class="wikilink1" title="documentation:2.0:authopenid">OpenID</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row30 roweven">
-		<th class="col0"> Second factor (<a href="secondfactor.html" class="wikilink1" title="documentation:2.0:secondfactor">documentation</a>) </th><th class="col1 centeralign">  Authentication  </th><td class="col2"></td><td class="col3"></td>
+		<td class="col0"> <a href="authremote.html" class="wikilink1" title="documentation:2.0:authremote">Remote LL::NG</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 leftalign">    </td>
 	</tr>
 	<tr class="row31 rowodd">
-		<td class="col0"> <a href="utotp2f.html" class="wikilink1" title="documentation:2.0:utotp2f">TOTP-or-U2F</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
+		<th class="col0"> Second factor (<a href="secondfactor.html" class="wikilink1" title="documentation:2.0:secondfactor">documentation</a>) </th><th class="col1 centeralign">  Authentication  </th><td class="col2"></td><td class="col3"></td>
 	</tr>
 	<tr class="row32 roweven">
-		<td class="col0"> <a href="u2f.html" class="wikilink1" title="documentation:2.0:u2f">U2F</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
+		<td class="col0"> <a href="utotp2f.html" class="wikilink1" title="documentation:2.0:utotp2f">TOTP-or-U2F</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
 	</tr>
 	<tr class="row33 rowodd">
-		<td class="col0"> <a href="totp2f.html" class="wikilink1" title="documentation:2.0:totp2f">TOTP</a> <em>(Google Authenticator,…)</em> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
+		<td class="col0"> <a href="u2f.html" class="wikilink1" title="documentation:2.0:u2f">U2F</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
 	</tr>
 	<tr class="row34 roweven">
-		<td class="col0"> <a href="external2f.html" class="wikilink1" title="documentation:2.0:external2f">External Second Factor</a> <em>(OTP, SMS,…)</em> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
+		<td class="col0"> <a href="totp2f.html" class="wikilink1" title="documentation:2.0:totp2f">TOTP</a> <em>(Google Authenticator,...)</em> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
 	</tr>
 	<tr class="row35 rowodd">
-		<td class="col0"> <a href="rest2f.html" class="wikilink1" title="documentation:2.0:rest2f">REST Second Factor</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
+		<td class="col0"> <a href="mail2f.html" class="wikilink1" title="documentation:2.0:mail2f">E-mail Second Factor</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
 	</tr>
 	<tr class="row36 roweven">
-		<td class="col0"> <a href="yubikey2f.html" class="wikilink1" title="documentation:2.0:yubikey2f">Yubikey</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
+		<td class="col0"> <a href="external2f.html" class="wikilink1" title="documentation:2.0:external2f">External Second Factor</a> <em>(OTP, SMS,...)</em> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
 	</tr>
 	<tr class="row37 rowodd">
-		<th class="col0"> Auth addons </th><th class="col1 centeralign">  Authentication  </th><td class="col2"></td><td class="col3"></td>
+		<td class="col0"> <a href="rest2f.html" class="wikilink1" title="documentation:2.0:rest2f">REST Second Factor</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
 	</tr>
 	<tr class="row38 roweven">
-		<td class="col0"> <a href="autosignin.html" class="wikilink1" title="documentation:2.0:autosignin">Auto Signin</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
+		<td class="col0"> <a href="yubikey2f.html" class="wikilink1" title="documentation:2.0:yubikey2f">Yubikey</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
+	</tr>
+	<tr class="row39 rowodd">
+		<th class="col0"> Auth addons </th><th class="col1 centeralign">  Authentication  </th><td class="col2"></td><td class="col3"></td>
+	</tr>
+	<tr class="row40 roweven">
+		<td class="col0"> <a href="autosignin.html" class="wikilink1" title="documentation:2.0:autosignin">Auto Signin</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2"></td><td class="col3"></td>
 	</tr>
 </table></div>
-<!-- EDIT10 TABLE [2561-4916] -->
+<!-- EDIT10 TABLE [2567-5121] -->
 <p>
 </div></div>
 </p>
@@ -426,7 +432,7 @@
 		<td class="col0"> <a href="issuerdbget.html" class="wikilink1" title="documentation:2.0:issuerdbget">Get parameters provider</a> <em>(for poor applications)</em> </td><td class="col1 leftalign">   </td><td class="col2 centeralign">  ✔  </td>
 	</tr>
 </table></div>
-<!-- EDIT11 TABLE [5262-5623] -->
+<!-- EDIT11 TABLE [5467-5828] -->
 <p>
 </div></div>
 </p>
@@ -477,7 +483,7 @@
 		<td class="col0"> <a href="safejail.html" class="wikilink1" title="documentation:2.0:safejail">XSS</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign">    </td>
 	</tr>
 </table></div>
-<!-- EDIT12 TABLE [5908-6422] -->
+<!-- EDIT12 TABLE [6113-6627] -->
 <p>
 </div></div>
 </p>
@@ -499,16 +505,16 @@
 	</tr>
 	</thead>
 	<tr class="row1 rowodd">
-		<td class="col0"> <a href="autosignin.html" class="wikilink1" title="documentation:2.0:autosignin">Auto Signin</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1"> Auto Signin Addon </td>
+		<td class="col0"> <a href="autosignin.html" class="wikilink1" title="documentation:2.0:autosignin">Auto Signin</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1"> Auto Signin Addon </td>
 	</tr>
 	<tr class="row2 roweven">
-		<td class="col0"> <a href="bruteforceprotection.html" class="wikilink1" title="documentation:2.0:bruteforceprotection">Brute Force protection</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1"> User must wait to log in after 3 failed login attempts </td>
+		<td class="col0"> <a href="bruteforceprotection.html" class="wikilink1" title="documentation:2.0:bruteforceprotection">Brute Force protection</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1"> User must wait to log in after 3 failed login attempts </td>
 	</tr>
 	<tr class="row3 rowodd">
 		<td class="col0"> <a href="cda.html" class="wikilink1" title="documentation:2.0:cda">CDA</a> </td><td class="col1"> Cross Domain Authentication </td>
 	</tr>
 	<tr class="row4 roweven">
-		<td class="col0"> <a href="checkstate.html" class="wikilink1" title="documentation:2.0:checkstate">Check state</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1"> Check state plugin (test page) </td>
+		<td class="col0"> <a href="checkstate.html" class="wikilink1" title="documentation:2.0:checkstate">Check state</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1"> Check state plugin (test page) </td>
 	</tr>
 	<tr class="row5 rowodd">
 		<td class="col0"> <a href="plugincustom.html" class="wikilink1" title="documentation:2.0:plugincustom">Custom</a> </td><td class="col1"> Write a custom plugin </td>
@@ -532,7 +538,7 @@
 		<td class="col0"> <a href="resetpassword.html" class="wikilink1" title="documentation:2.0:resetpassword">Reset password by mail</a> </td><td class="col1"></td>
 	</tr>
 	<tr class="row12 roweven">
-		<td class="col0"> <a href="restservices.html" class="wikilink1" title="documentation:2.0:restservices">REST services</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1"> REST server for <a href="authproxy.html" class="wikilink1" title="documentation:2.0:authproxy">Proxy</a> </td>
+		<td class="col0"> <a href="restservices.html" class="wikilink1" title="documentation:2.0:restservices">REST services</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1"> REST server for <a href="authproxy.html" class="wikilink1" title="documentation:2.0:authproxy">Proxy</a> </td>
 	</tr>
 	<tr class="row13 rowodd">
 		<td class="col0"> <a href="soapservices.html" class="wikilink1" title="documentation:2.0:soapservices">SOAP services</a> <em>(deprecated)</em> </td><td class="col1"> SOAP server for <a href="authproxy.html" class="wikilink1" title="documentation:2.0:authproxy">Proxy</a> </td>
@@ -541,19 +547,19 @@
 		<td class="col0"> <a href="status.html" class="wikilink1" title="documentation:2.0:status">Portal Status</a> </td><td class="col1"> Experimental portal status page </td>
 	</tr>
 	<tr class="row15 rowodd">
-		<td class="col0"> <a href="stayconnected" class="wikilink2" title="documentation:2.0:stayconnected" rel="nofollow">Stay connected</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1"> Enable persistent connection on same browser </td>
+		<td class="col0"> <a href="stayconnected" class="wikilink2" title="documentation:2.0:stayconnected" rel="nofollow">Stay connected</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1"> Enable persistent connection on same browser </td>
 	</tr>
 	<tr class="row16 roweven">
-		<td class="col0"> Upgrade session <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1"> Plugin that explain to user that a more secure authentication is needed instead of rejected it </td>
+		<td class="col0"> Upgrade session <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1"> Plugin that explain to user that a more secure authentication is needed instead of rejected it </td>
 	</tr>
 </table></div>
-<!-- EDIT13 TABLE [6590-7820] -->
+<!-- EDIT13 TABLE [6795-8043] -->
 <p>
 </div></div>
 </p>
 
 </div>
-<!-- EDIT9 SECTION "Portal" [2025-7848] -->
+<!-- EDIT9 SECTION "Portal" [2031-8071] -->
 <h3 class="sectionedit14" id="handlers">Handlers</h3>
 <div class="level3">
 
@@ -582,22 +588,22 @@ Handlers are software control agents to
 		<td class="col0"> <a href="cda.html" class="wikilink1" title="documentation:2.0:cda">CDA</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 leftalign">  </td><td class="col5"> For Cross Domain Authentication </td><td class="col6"></td>
 	</tr>
 	<tr class="row4 roweven">
-		<td class="col0"> <a href="devopshandler.html" class="wikilink1" title="documentation:2.0:devopshandler">DevOps</a> <em>(<a href="ssoaas.html" class="wikilink1" title="documentation:2.0:ssoaas">SSOaaS</a>)</em> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 centeralign">  ✔  </td><td class="col5"> Allows application developers to define their own rules and headers inside their applications </td><td class="col6"></td>
+		<td class="col0"> <a href="devopshandler.html" class="wikilink1" title="documentation:2.0:devopshandler">DevOps</a> <em>(<a href="ssoaas.html" class="wikilink1" title="documentation:2.0:ssoaas">SSOaaS</a>)</em> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 centeralign">  ✔  </td><td class="col5"> Allows application developers to define their own rules and headers inside their applications </td><td class="col6"></td>
 	</tr>
 	<tr class="row5 rowodd">
-		<td class="col0"> <a href="devopssthandler.html" class="wikilink1" title="documentation:2.0:devopssthandler">DevOpsST</a> <em>(<a href="ssoaas.html" class="wikilink1" title="documentation:2.0:ssoaas">SSOaaS</a>)</em> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 centeralign">  ✔  </td><td class="col5"> Enables both <a href="devopshandler.html" class="wikilink1" title="documentation:2.0:devopshandler">DevOps</a> and <a href="servertoserver.html" class="wikilink1" title="documentation:2.0:servertoserver">Service Token</a> </td><td class="col6"></td>
+		<td class="col0"> <a href="devopssthandler.html" class="wikilink1" title="documentation:2.0:devopssthandler">DevOpsST</a> <em>(<a href="ssoaas.html" class="wikilink1" title="documentation:2.0:ssoaas">SSOaaS</a>)</em> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 centeralign">  ✔  </td><td class="col5"> Enables both <a href="devopshandler.html" class="wikilink1" title="documentation:2.0:devopshandler">DevOps</a> and <a href="servertoserver.html" class="wikilink1" title="documentation:2.0:servertoserver">Service Token</a> </td><td class="col6"></td>
 	</tr>
 	<tr class="row6 roweven">
 		<td class="col0"> <a href="securetoken.html" class="wikilink1" title="documentation:2.0:securetoken">Secure Token</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 leftalign">  </td><td class="col5"> Designed to secure exchanges between a LLNG reverse-proxy and a remote app </td><td class="col6"></td>
 	</tr>
 	<tr class="row7 rowodd">
-		<td class="col0"> <a href="servertoserver.html" class="wikilink1" title="documentation:2.0:servertoserver">Service Token</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> <em>(Server-to-Server)</em> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 centeralign">  ✔  </td><td class="col5"> Designed to permit underlying requests <em>(<abbr title="Application Programming Interface">API</abbr>-Based Infrastructure)</em> </td><td class="col6"></td>
+		<td class="col0"> <a href="servertoserver.html" class="wikilink1" title="documentation:2.0:servertoserver">Service Token</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> <em>(Server-to-Server)</em> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 centeralign">  ✔  </td><td class="col5"> Designed to permit underlying requests <em>(<abbr title="Application Programming Interface">API</abbr>-Based Infrastructure)</em> </td><td class="col6"></td>
 	</tr>
 	<tr class="row8 roweven">
 		<td class="col0"> <a href="applications/zimbra.html" class="wikilink1" title="documentation:2.0:applications:zimbra">Zimbra PreAuth</a> </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 leftalign">  </td><td class="col5 leftalign">  </td>
 	</tr>
 </table></div>
-<!-- EDIT15 TABLE [8123-9301] -->
+<!-- EDIT15 TABLE [8346-9533] -->
 <p>
 <em>(*): <a href="nodehandler.html" class="wikilink1" title="documentation:2.0:nodehandler">Node.js handler</a> has not yet reached the same level of functionalities.</em>
 </p>
@@ -607,7 +613,7 @@ Handlers are software control agents to
 </p>
 
 </div>
-<!-- EDIT14 SECTION "Handlers" [7849-9426] -->
+<!-- EDIT14 SECTION "Handlers" [8072-9658] -->
 <h3 class="sectionedit16" id="llng_databases">LLNG databases</h3>
 <div class="level3">
 
@@ -632,10 +638,10 @@ Handlers are software control agents to
 	</tr>
 	</thead>
 	<tr class="row1 rowodd">
-		<td class="col0 centeralign">  <a href="fileconfbackend.html" class="wikilink1" title="documentation:2.0:fileconfbackend">File (JSON)</a>  </td><td class="col1"> </td><td class="col2 leftalign">Not shareable between servers except if used in conjunction with <a href="restconfbackend.html" class="wikilink1" title="documentation:2.0:restconfbackend">REST</a> or with a shared file system (NFS,…). Selected by default during installation.  </td>
+		<td class="col0 centeralign">  <a href="fileconfbackend.html" class="wikilink1" title="documentation:2.0:fileconfbackend">File (JSON)</a>  </td><td class="col1"> </td><td class="col2 leftalign">Not shareable between servers except if used in conjunction with <a href="restconfbackend.html" class="wikilink1" title="documentation:2.0:restconfbackend">REST</a> or with a shared file system (NFS,...). Selected by default during installation.  </td>
 	</tr>
 	<tr class="row2 roweven">
-		<td class="col0 centeralign">  <a href="yamlconfbackend.html" class="wikilink1" title="documentation:2.0:yamlconfbackend">YAML</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a>  </td><td class="col1"> </td><td class="col2 leftalign">Same as <a href="fileconfbackend.html" class="wikilink1" title="documentation:2.0:fileconfbackend">File</a> but in YAML format instead of JSON  </td>
+		<td class="col0 centeralign">  <a href="yamlconfbackend.html" class="wikilink1" title="documentation:2.0:yamlconfbackend">YAML</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a>  </td><td class="col1"> </td><td class="col2 leftalign">Same as <a href="fileconfbackend.html" class="wikilink1" title="documentation:2.0:fileconfbackend">File</a> but in YAML format instead of JSON  </td>
 	</tr>
 	<tr class="row3 rowodd">
 		<td class="col0 centeralign">  <a href="sqlconfbackend.html" class="wikilink1" title="documentation:2.0:sqlconfbackend">SQL (RDBI/CDBI)</a>  </td><td class="col1 centeralign">  ✔  </td><td class="col2"> Recommended for large-scale systems. Prefer CDBI. </td>
@@ -650,13 +656,13 @@ Handlers are software control agents to
 		<td class="col0 centeralign">  <a href="soapconfbackend.html" class="wikilink1" title="documentation:2.0:soapconfbackend">SOAP</a> <em>(deprecated)</em>  </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign"> Proxy backend to be used in conjunction with another configuration backend. <br/><strong>Can be used to secure another backend</strong> for remote servers.  </td>
 	</tr>
 	<tr class="row7 rowodd">
-		<td class="col0 centeralign">  <a href="restconfbackend.html" class="wikilink1" title="documentation:2.0:restconfbackend">REST</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a>  </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign"> Proxy backend to be used in conjunction with another configuration backend. <br/><strong>Can be used to secure another backend</strong> for remote servers.  </td>
+		<td class="col0 centeralign">  <a href="restconfbackend.html" class="wikilink1" title="documentation:2.0:restconfbackend">REST</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a>  </td><td class="col1 centeralign">  ✔  </td><td class="col2 leftalign"> Proxy backend to be used in conjunction with another configuration backend. <br/><strong>Can be used to secure another backend</strong> for remote servers.  </td>
 	</tr>
 	<tr class="row8 roweven">
-		<td class="col0 centeralign">  <a href="localconfbackend.html" class="wikilink1" title="documentation:2.0:localconfbackend">Local</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a>  </td><td class="col1 leftalign">  </td><td class="col2 leftalign"> Use only lemonldap-ng.ini parameters.  </td>
+		<td class="col0 centeralign">  <a href="localconfbackend.html" class="wikilink1" title="documentation:2.0:localconfbackend">Local</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a>  </td><td class="col1 leftalign">  </td><td class="col2 leftalign"> Use only lemonldap-ng.ini parameters.  </td>
 	</tr>
 </table></div>
-<!-- EDIT17 TABLE [9731-10834] --><div class="notetip">You can not start with an empty configuration, so read <a href="changeconfbackend.html" class="wikilink1" title="documentation:2.0:changeconfbackend">how to change configuration backend</a> to convert your existing configuration into another one.
+<!-- EDIT17 TABLE [9963-11075] --><div class="notetip">You can not start with an empty configuration, so read <a href="changeconfbackend.html" class="wikilink1" title="documentation:2.0:changeconfbackend">how to change configuration backend</a> to convert your existing configuration into another one.
 </div>
 <p>
 </div></div>
@@ -685,7 +691,7 @@ Sessions are stored using <a href="http:
 	</tr>
 	</thead>
 	<tr class="row1 rowodd">
-		<td class="col0 centeralign">  <a href="filesessionbackend.html" class="wikilink1" title="documentation:2.0:filesessionbackend">File</a>  </td><td class="col1"> </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 centeralign">   ✔  </td><td class="col5 leftalign">Not shareable between servers except if used in conjunction with <a href="restsessionbackend.html" class="wikilink1" title="documentation:2.0:restsessionbackend">REST session backend</a> or with a shared file system (NFS,…). Selected by default during installation.  </td>
+		<td class="col0 centeralign">  <a href="filesessionbackend.html" class="wikilink1" title="documentation:2.0:filesessionbackend">File</a>  </td><td class="col1"> </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 centeralign">   ✔  </td><td class="col5 leftalign">Not shareable between servers except if used in conjunction with <a href="restsessionbackend.html" class="wikilink1" title="documentation:2.0:restsessionbackend">REST session backend</a> or with a shared file system (NFS,...). Selected by default during installation.  </td>
 	</tr>
 	<tr class="row2 roweven">
 		<td class="col0 centeralign">  <a href="sqlsessionbackend.html" class="wikilink1" title="documentation:2.0:sqlsessionbackend">SQL</a>  </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 centeralign">  ✔  </td><td class="col5 leftalign" rowspan="2"> Unoptimized for <a href="documentation/features.html#session_explorer" class="wikilink1" title="documentation:features">session explorer</a> and <a href="documentation/features.html#session_restrictions" class="wikilink1" title="documentation:features">single session</a> features.  </td>
@@ -703,7 +709,7 @@ Sessions are stored using <a href="http:
 		<td class="col0 centeralign">  <a href="browseablesessionbackend.html" class="wikilink1" title="documentation:2.0:browseablesessionbackend">Browseable (SQL, Redis or LDAP)</a>  </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 centeralign">  ✔  </td><td class="col5"> <strong>Optimized</strong> for <a href="documentation/features.html#session_explorer" class="wikilink1" title="documentation:features">session explorer</a> and <a href="documentation/features.html#session_restrictions" class="wikilink1" title="documentation:features">single session</a> features. </td>
 	</tr>
 	<tr class="row7 rowodd">
-		<td class="col0 centeralign">  <a href="restsessionbackend.html" class="wikilink1" title="documentation:2.0:restsessionbackend">REST</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a>  </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 centeralign">  ✔  </td><td class="col5 leftalign"> Proxy backend to be used in conjunction with another session backend. <br/>
+		<td class="col0 centeralign">  <a href="restsessionbackend.html" class="wikilink1" title="documentation:2.0:restsessionbackend">REST</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a>  </td><td class="col1 centeralign">  ✔  </td><td class="col2 centeralign">  ✔  </td><td class="col3 centeralign">  ✔  </td><td class="col4 centeralign">  ✔  </td><td class="col5 leftalign"> Proxy backend to be used in conjunction with another session backend. <br/>
 <strong>Can be used to secure another backend</strong> for remote servers.  </td>
 	</tr>
 	<tr class="row8 roweven">
@@ -711,13 +717,13 @@ Sessions are stored using <a href="http:
 <strong>Can be used to secure another backend</strong> for remote servers.  </td>
 	</tr>
 </table></div>
-<!-- EDIT18 TABLE [11699-13396] -->
+<!-- EDIT18 TABLE [11940-13640] -->
 <p>
 </div></div>
 </p>
 
 </div>
-<!-- EDIT16 SECTION "LLNG databases" [9427-13424] -->
+<!-- EDIT16 SECTION "LLNG databases" [9659-13668] -->
 <h2 class="sectionedit19" id="applications_protection">Applications protection</h2>
 <div class="level2">
 
@@ -746,7 +752,7 @@ Sessions are stored using <a href="http:
 </p>
 
 </div>
-<!-- EDIT19 SECTION "Applications protection" [13425-13915] -->
+<!-- EDIT19 SECTION "Applications protection" [13669-14159] -->
 <h3 class="sectionedit20" id="well_known_compatible_applications">Well known compatible applications</h3>
 <div class="level3">
 <div class="noteclassic">Here is a list of well known applications that are compatible with <abbr title="LemonLDAP::NG">LL::NG</abbr>. A full list is available on <a href="applications.html" class="wikilink1" title="documentation:2.0:applications">vendor applications page</a>.
@@ -835,6 +841,12 @@ Sessions are stored using <a href="http:
 
 <p>
 <div class="col-sm-3">
+<a href="applications/xwiki.html" class="media" title="documentation:2.0:applications:xwiki"><img src="icons/kmultiple.png" class="mediacenter" title="Xwiki" alt="Xwiki" /></a>
+</div>
+</p>
+
+<p>
+<div class="col-sm-3">
 <a href="applications/zimbra.html" class="media" title="documentation:2.0:applications:zimbra"><img src="icons/kmultiple.png" class="mediacenter" title="Zimbra" alt="Zimbra" /></a>
 </div>
 </p>
@@ -844,7 +856,7 @@ Sessions are stored using <a href="http:
 </p>
 
 </div>
-<!-- EDIT20 SECTION "Well known compatible applications" [13916-16129] -->
+<!-- EDIT20 SECTION "Well known compatible applications" [14160-16498] -->
 <h2 class="sectionedit21" id="advanced_features">Advanced features</h2>
 <div class="level2">
 
@@ -854,6 +866,8 @@ Sessions are stored using <a href="http:
 </div><div class="col-md-11">
 </p>
 <ul>
+<li class="level1"><div class="li"> <a href="smtp.html" class="wikilink1" title="documentation:2.0:smtp">SMTP server setup</a></div>
+</li>
 <li class="level1"><div class="li"> <a href="notifications.html" class="wikilink1" title="documentation:2.0:notifications">Notifications system</a></div>
 </li>
 <li class="level1"><div class="li"> <a href="passwordstore.html" class="wikilink1" title="documentation:2.0:passwordstore">Store password in session</a></div>
@@ -876,9 +890,9 @@ Sessions are stored using <a href="http:
 </li>
 <li class="level1"><div class="li"> <a href="handlerauthbasic.html" class="wikilink1" title="documentation:2.0:handlerauthbasic">AuthBasic Handler</a></div>
 </li>
-<li class="level1"><div class="li"> <a href="ssoaas.html" class="wikilink1" title="documentation:2.0:ssoaas">SSO as a Service</a> <em>(SSOaaS)</em> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a></div>
+<li class="level1"><div class="li"> <a href="ssoaas.html" class="wikilink1" title="documentation:2.0:ssoaas">SSO as a Service</a> <em>(SSOaaS)</em> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a></div>
 </li>
-<li class="level1"><div class="li"> <a href="servertoserver.html" class="wikilink1" title="documentation:2.0:servertoserver">Handling server webservice calls</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a></div>
+<li class="level1"><div class="li"> <a href="servertoserver.html" class="wikilink1" title="documentation:2.0:servertoserver">Handling server webservice calls</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a></div>
 </li>
 <li class="level1"><div class="li"> <a href="https://github.com/lemonldap-ng-controller/lemonldap-ng-controller" class="urlextern" title="https://github.com/lemonldap-ng-controller/lemonldap-ng-controller"  rel="nofollow">LemonLDAP::NG kubernetes controller</a></div>
 </li>
@@ -901,7 +915,7 @@ Sessions are stored using <a href="http:
 </p>
 
 </div>
-<!-- EDIT21 SECTION "Advanced features" [16130-17312] -->
+<!-- EDIT21 SECTION "Advanced features" [16499-17718] -->
 <h2 class="sectionedit22" id="mini_howtos">Mini howtos</h2>
 <div class="level2">
 
@@ -923,11 +937,13 @@ Sessions are stored using <a href="http:
 </li>
 <li class="level1"><div class="li"> <a href="activedirectoryminihowto.html" class="wikilink1" title="documentation:2.0:activedirectoryminihowto">Integration in Active Directory (LDAP and Kerberos)</a></div>
 </li>
-<li class="level1"><div class="li"> <a href="federationproxy.html" class="wikilink1" title="documentation:2.0:federationproxy">Create a protocol proxy</a> <em>(<abbr title="Security Assertion Markup Language">SAML</abbr> to OpenID, <abbr title="Central Authentication Service">CAS</abbr> to <abbr title="Security Assertion Markup Language">SAML</abbr> ,…)</em></div>
+<li class="level1"><div class="li"> <a href="federationproxy.html" class="wikilink1" title="documentation:2.0:federationproxy">Create a protocol proxy</a> <em>(<abbr title="Security Assertion Markup Language">SAML</abbr> to OpenID, <abbr title="Central Authentication Service">CAS</abbr> to <abbr title="Security Assertion Markup Language">SAML</abbr> ,...)</em></div>
 </li>
 <li class="level1"><div class="li"> <a href="header_remote_user_conversion.html" class="wikilink1" title="documentation:2.0:header_remote_user_conversion">Convert HTTP header into environment variable</a></div>
 </li>
-<li class="level1"><div class="li"> <a href="renater.html" class="wikilink1" title="documentation:2.0:renater">Connect to Renater Federation</a> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a></div>
+<li class="level1"><div class="li"> <a href="renater.html" class="wikilink1" title="documentation:2.0:renater">Connect to Renater Federation</a> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a></div>
+</li>
+<li class="level1"><div class="li"> <a href="behindproxyminihowto.html" class="wikilink1" title="documentation:2.0:behindproxyminihowto">Run LemonLDAP::NG components behind a reverse proxy</a></div>
 </li>
 </ul>
 
@@ -936,7 +952,7 @@ Sessions are stored using <a href="http:
 </p>
 
 </div>
-<!-- EDIT22 SECTION "Mini howtos" [17313-18123] -->
+<!-- EDIT22 SECTION "Mini howtos" [17719-18613] -->
 <h2 class="sectionedit23" id="exploitation">Exploitation</h2>
 <div class="level2">
 
@@ -954,7 +970,7 @@ Sessions are stored using <a href="http:
 </li>
 <li class="level1"><div class="li"> <a href="status.html" class="wikilink1" title="documentation:2.0:status">Handler status page</a></div>
 </li>
-<li class="level1"><div class="li"> <a href="checkstate.html" class="wikilink1" title="documentation:2.0:checkstate">Portal state check</a> <em>(health check for fail-over)</em> <a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a></div>
+<li class="level1"><div class="li"> <a href="checkstate.html" class="wikilink1" title="documentation:2.0:checkstate">Portal state check</a> <em>(health check for fail-over)</em> <a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a></div>
 </li>
 <li class="level1"><div class="li"> <a href="monitoring.html" class="wikilink1" title="documentation:2.0:monitoring">Monitoring</a></div>
 </li>
@@ -971,7 +987,7 @@ Sessions are stored using <a href="http:
 </p>
 
 </div>
-<!-- EDIT23 SECTION "Exploitation" [18124-18638] -->
+<!-- EDIT23 SECTION "Exploitation" [18614-19131] -->
 <h2 class="sectionedit24" id="bug_report">Bug report</h2>
 <div class="level2">
 
@@ -980,7 +996,7 @@ See <a href="bugreport.html" class="wiki
 </p>
 
 </div>
-<!-- EDIT24 SECTION "Bug report" [18639-18703] -->
+<!-- EDIT24 SECTION "Bug report" [19132-19196] -->
 <h2 class="sectionedit25" id="developer_corner">Developer corner</h2>
 <div class="level2">
 
@@ -1039,6 +1055,6 @@ If you don&#039;t want to publish your t
 </ul>
 
 </div>
-<!-- EDIT25 SECTION "Developer corner" [18704-] --></div>
+<!-- EDIT25 SECTION "Developer corner" [19197-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/status.html 2.0.2+ds-1/doc/pages/documentation/current/status.html
--- 2.0.1+ds-2/doc/pages/documentation/current/status.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/status.html	2019-02-12 16:28:08.000000000 +0000
@@ -4,7 +4,7 @@
   <meta charset="utf-8" />
   <title>documentation:2.0:status</title>
 <meta name="generator" content="DokuWiki"/>
-<meta name="robots" content="noindex,nofollow"/>
+<meta name="robots" content="index,follow"/>
 <meta name="keywords" content="documentation,2.0,status"/>
 <link rel="search" type="application/opensearchdescription+xml" href="lib/exe/opensearch.html" title="LemonLDAP::NG"/>
 <link rel="start" href="status.html"/>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/stayconnected 2.0.2+ds-1/doc/pages/documentation/current/stayconnected
--- 2.0.1+ds-2/doc/pages/documentation/current/stayconnected	2018-12-21 14:21:02.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/stayconnected	2019-02-12 16:27:58.000000000 +0000
@@ -23,10 +23,10 @@
 <link rel="alternate" type="application/rss+xml" title="Current namespace" href="/feed.php?mode=list&amp;ns=documentation:2.0"/>
 <link rel="alternate" type="text/html" title="Plain HTML" href="/_export/xhtml/documentation/2.0/stayconnected"/>
 <link rel="alternate" type="text/plain" title="Wiki Markup" href="/_export/raw/documentation/2.0/stayconnected"/>
-<link rel="stylesheet" type="text/css" href="/lib/exe/css.php?t=bootstrap3&amp;tseed=68165aeb4a485b8d6b99b5c80ffc4981"/>
+<link rel="stylesheet" type="text/css" href="/lib/exe/css.php?t=bootstrap3&amp;tseed=666dbe073d7d2522373106d8d2d68438"/>
 <script type="text/javascript">/*<![CDATA[*/var NS='documentation:2.0';var JSINFO = {"id":"documentation:2.0:stayconnected","namespace":"documentation:2.0"};
 /*!]]>*/</script>
-<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=68165aeb4a485b8d6b99b5c80ffc4981&amp;template=bootstrap3"></script>
+<script type="text/javascript" charset="utf-8" src="/lib/exe/js.php?tseed=666dbe073d7d2522373106d8d2d68438&amp;template=bootstrap3"></script>
   <script type="text/javascript" src="/lib/tpl/bootstrap3/assets/bootstrap/js/bootstrap.min.js"></script>
   <style type="text/css">
     body { padding-top: 20px; }
@@ -90,7 +90,7 @@
         <form action="/start" accept-charset="utf-8" class="search" id="dw__search" method="get" role="search"><div class="no"><input type="hidden" name="do" value="search" /><input type="text" id="qsearch__in" accesskey="f" name="id" class="edit" title="[F]" /><input type="submit" value="Search" class="button" title="Search" /><div id="qsearch__out" class="ajax_qsearch JSpopup"></div></div></form>
         
         <ul class="nav navbar-nav">
-                    <li><a href="/documentation/2.0/stayconnected?do=login&amp;sectok=a56ff368e970c958de63b823f65c2cf0"  class="action login" rel="nofollow" title="Login"><i class="glyphicon glyphicon-log-in"></i> Login</a></li>        </ul>
+                    <li><a href="/documentation/2.0/stayconnected?do=login&amp;sectok=0f10c8fca57376e7bc8695f4a434476e"  class="action login" rel="nofollow" title="Login"><i class="glyphicon glyphicon-log-in"></i> Login</a></li>        </ul>
 
       </div>
 
@@ -157,7 +157,28 @@ You&#039;ve followed a link to a topic t
 <div class="text-center">
 </p>
 
-<h3 class="sectionedit1" id="hosted_by">Hosted by</h3>
+<h3 class="sectionedit1" id="social_networks">Social networks</h3>
+<div class="level3">
+
+<p>
+
+<p><a href="https://twitter.com/lemonldapng/" class="btn btn-large btn-info"><i class="glyphicon glyphicon-retweet"></i> Twitter</a></p>
+<p><a href="https://www.facebook.com/lemonldapng/" class="btn btn-large btn-primary"><i class="glyphicon glyphicon-thumbs-up"></i> Facebook</a></p>
+
+</p>
+
+<p>
+</div>
+</p>
+<hr />
+
+<p>
+<div class="text-center">
+</p>
+
+</div>
+<!-- EDIT1 SECTION "Social networks" [41-433] -->
+<h3 class="sectionedit2" id="hosted_by">Hosted by</h3>
 <div class="level3">
 
 <p>
@@ -171,8 +192,8 @@ You&#039;ve followed a link to a topic t
 </p>
 
 </div>
-<!-- EDIT1 SECTION "Hosted by" [40-174] -->
-<h3 class="sectionedit2" id="certifications">Certifications</h3>
+<!-- EDIT2 SECTION "Hosted by" [434-568] -->
+<h3 class="sectionedit3" id="certifications">Certifications</h3>
 <div class="level3">
 
 <p>
@@ -192,8 +213,8 @@ You&#039;ve followed a link to a topic t
 </p>
 
 </div>
-<!-- EDIT2 SECTION "Certifications" [175-534] -->
-<h3 class="sectionedit3" id="awards">Awards</h3>
+<!-- EDIT3 SECTION "Certifications" [569-928] -->
+<h3 class="sectionedit4" id="awards">Awards</h3>
 <div class="level3">
 
 <p>
@@ -222,7 +243,7 @@ You&#039;ve followed a link to a topic t
 
 
 </div>
-<!-- EDIT3 SECTION "Awards" [535-] -->          </div>
+<!-- EDIT4 SECTION "Awards" [929-] -->          </div>
   </div>
 </aside>
 
@@ -241,7 +262,7 @@ You&#039;ve followed a link to a topic t
       
     </div><!-- /site -->
 
-    <div class="no"><img src="/lib/exe/indexer.php?id=documentation%3A2.0%3Astayconnected&amp;1545402062" width="2" height="1" alt="" /></div>
+    <div class="no"><img src="/lib/exe/indexer.php?id=documentation%3A2.0%3Astayconnected&amp;1549988879" width="2" height="1" alt="" /></div>
     <div id="screen__mode" class="no">
       <span class="visible-xs"></span>
       <span class="visible-sm"></span>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/totp2f.html 2.0.2+ds-1/doc/pages/documentation/current/totp2f.html
--- 2.0.1+ds-2/doc/pages/documentation/current/totp2f.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/totp2f.html	2019-02-12 16:28:08.000000000 +0000
@@ -80,7 +80,8 @@ LLNG can propose to users to register th
 This feature uses libconvert-base32-perl. Before enable it, on Debian you must install libconvert-base32-perl by :
 </p>
 <pre class="code">apt update
-apt install libconvert-base32-perl</pre>
+apt install libconvert-base32-perl
+apt install libdigest-hmac-perl</pre>
 
 <p>
 Or from CPAN repository :
@@ -88,7 +89,7 @@ Or from CPAN repository :
 <pre class="code">cpanm Convert::Base32</pre>
 
 </div>
-<!-- EDIT2 SECTION "Prerequisites and dependencies" [627-911] -->
+<!-- EDIT2 SECTION "Prerequisites and dependencies" [627-943] -->
 <h2 class="sectionedit3" id="configuration">Configuration</h2>
 <div class="level2">
 
@@ -96,29 +97,29 @@ Or from CPAN repository :
 In the manager (advanced parameters), you just have to enable it:
 </p>
 <ul>
-<li class="level1"><div class="li"> TOTP ⇒ Activation: set it to “on”</div>
+<li class="level1"><div class="li"> TOTP =&gt; Activation: set it to “on”</div>
 </li>
-<li class="level1"><div class="li"> TOTP ⇒ Self registration: set it to “on” if users are authorized to generate themselves a TOTP secret</div>
+<li class="level1"><div class="li"> TOTP =&gt; Self registration: set it to “on” if users are authorized to generate themselves a TOTP secret</div>
 </li>
-<li class="level1"><div class="li"> TOTP ⇒ Authentication level: you can overwrite here auth level for TOTP registered users. Leave it blank keeps auth level provided by first authentication module <em>(default: 2 for user/password based modules)</em>. <strong>It is recommended to set an higher value here if you want to give access to some apps only to users enrolled</strong></div>
+<li class="level1"><div class="li"> TOTP =&gt; Authentication level: you can overwrite here auth level for TOTP registered users. Leave it blank keeps auth level provided by first authentication module <em>(default: 2 for user/password based modules)</em>. <strong>It is recommended to set an higher value here if you want to give access to some apps only to users enrolled</strong></div>
 </li>
-<li class="level1"><div class="li"> TOTP ⇒ Issuer: default to portal hostname</div>
+<li class="level1"><div class="li"> TOTP =&gt; Issuer: default to portal hostname</div>
 </li>
-<li class="level1"><div class="li"> TOTP ⇒ Interval: interval for TOTP algorithm (default: 30)</div>
+<li class="level1"><div class="li"> TOTP =&gt; Interval: interval for TOTP algorithm (default: 30)</div>
 </li>
-<li class="level1"><div class="li"> TOTP ⇒ Range: number of additional intervals to test (default: 1)</div>
+<li class="level1"><div class="li"> TOTP =&gt; Range: number of additional intervals to test (default: 1)</div>
 </li>
-<li class="level1"><div class="li"> TOTP ⇒ Digits: number of digit by codes (default: 6)</div>
+<li class="level1"><div class="li"> TOTP =&gt; Digits: number of digit by codes (default: 6)</div>
 </li>
-<li class="level1"><div class="li"> TOTP ⇒ Display existing secret: display an already registered secret (default: disabled)</div>
+<li class="level1"><div class="li"> TOTP =&gt; Display existing secret: display an already registered secret (default: disabled)</div>
 </li>
-<li class="level1"><div class="li"> TOTP ⇒ Change existing secret: authorize a user to change its previoulsy registered TOTP secret</div>
+<li class="level1"><div class="li"> TOTP =&gt; Change existing secret: authorize a user to change its previoulsy registered TOTP secret</div>
 </li>
 </ul>
 <div class="noteimportant">If you want to use a custom rule for “activation” and want to keep self-registration, you must include this in your rule that <code>$_2fDevices =~ /“type”:\s*“TOTP”/s</code> is set, else TOTP will be required even if users are not registered. This is automatically done when “activation” is simply set to “on”.
 </div>
 </div>
-<!-- EDIT3 SECTION "Configuration" [912-2242] -->
+<!-- EDIT3 SECTION "Configuration" [944-2274] -->
 <h2 class="sectionedit4" id="enrollment">Enrollment</h2>
 <div class="level2">
 
@@ -127,7 +128,7 @@ If you&#039;ve enabled self registration
 </p>
 
 </div>
-<!-- EDIT4 SECTION "Enrollment" [2243-2370] -->
+<!-- EDIT4 SECTION "Enrollment" [2275-2402] -->
 <h2 class="sectionedit5" id="assistance">Assistance</h2>
 <div class="level2">
 
@@ -141,7 +142,7 @@ To enable manager Second Factor Administ
 <span class="re1">enabledModules</span> <span class="sy0">=</span><span class="re2"> conf, sessions, notifications, 2ndFA</span></pre>
 
 </div>
-<!-- EDIT5 SECTION "Assistance" [2371-2686] -->
+<!-- EDIT5 SECTION "Assistance" [2403-2718] -->
 <h2 class="sectionedit6" id="developer_corner">Developer corner</h2>
 <div class="level2">
 
@@ -151,6 +152,6 @@ If you have another TOTP registration in
 <pre class="code file json">[{&quot;name&quot; : &quot;MyTOTP&quot; , &quot;type&quot; : &quot;TOTP&quot; , &quot;_secret&quot; : &quot;########&quot; , &quot;epoch&quot;:&quot;1524078936&quot;}, ...]</pre>
 
 </div>
-<!-- EDIT6 SECTION "Developer corner" [2687-] --></div>
+<!-- EDIT6 SECTION "Developer corner" [2719-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/u2f.html 2.0.2+ds-1/doc/pages/documentation/current/u2f.html
--- 2.0.1+ds-2/doc/pages/documentation/current/u2f.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/u2f.html	2019-02-12 16:28:08.000000000 +0000
@@ -91,11 +91,11 @@ This feature uses <a href="https://metac
 In the manager (second factors), you just have to enable it:
 </p>
 <ul>
-<li class="level1"><div class="li"> U2F ⇒ Activation: set it to “on”</div>
+<li class="level1"><div class="li"> U2F =&gt; Activation: set it to “on”</div>
 </li>
-<li class="level1"><div class="li"> U2F ⇒ Self registration: set it to “on” if users are authorized to register their keys</div>
+<li class="level1"><div class="li"> U2F =&gt; Self registration: set it to “on” if users are authorized to register their keys</div>
 </li>
-<li class="level1"><div class="li"> U2F ⇒ Authentication level: you can overwrite here auth level for U2F registered users. Leave it blank keeps auth level provided by first authentication module <em>(default: 2 for user/password based modules)</em>. <strong>It is recommended to set an higher value here if you want to give access to some apps only for enrolled users</strong></div>
+<li class="level1"><div class="li"> U2F =&gt; Authentication level: you can overwrite here auth level for U2F registered users. Leave it blank keeps auth level provided by first authentication module <em>(default: 2 for user/password based modules)</em>. <strong>It is recommended to set an higher value here if you want to give access to some apps only for enrolled users</strong></div>
 </li>
 </ul>
 <div class="noteimportant">If you want to use a custom rule for “activation” and want to keep self-registration, you must include this in your rule: <code>$_2fDevices =~ /“type”:\s*“U2F”/s</code>, else U2F will be required even if users are not registered. This is automatically done when “activation” is set to “on”.
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/upgrade.html 2.0.2+ds-1/doc/pages/documentation/current/upgrade.html
--- 2.0.1+ds-2/doc/pages/documentation/current/upgrade.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/upgrade.html	2019-02-12 16:28:08.000000000 +0000
@@ -141,7 +141,7 @@ For <abbr title="Security Assertion Mark
 </li>
 <li class="level1"><div class="li"> Portal skins are now in <code>/usr/share/lemonldap-ng/portal/templates</code>. See <a href="portalcustom.html#skin_customization" class="wikilink1" title="documentation:2.0:portalcustom">skin customization</a> to adapt your templates.</div>
 </li>
-<li class="level1"><div class="li"> User module in authentication parameters now provides a “Same as authentication” value. You must revalidate it in the manager since all special values must be replaced by this <em>(Multi, Choice, Proxy, Slave, <abbr title="Security Assertion Markup Language">SAML</abbr>, OpenID*,…)</em></div>
+<li class="level1"><div class="li"> User module in authentication parameters now provides a “Same as authentication” value. You must revalidate it in the manager since all special values must be replaced by this <em>(Multi, Choice, Proxy, Slave, <abbr title="Security Assertion Markup Language">SAML</abbr>, OpenID*,...)</em></div>
 </li>
 <li class="level1"><div class="li"> <strong>“Multi” doesn&#039;t exist anymore</strong>: it is replaced by <a href="authcombination.html" class="wikilink1" title="documentation:2.0:authcombination">Combination</a>, a more powerful module.</div>
 </li>
@@ -152,14 +152,18 @@ For <abbr title="Security Assertion Mark
 </ul>
 <pre class="code :perl">  mailUrl <span class="sy0">=&gt;</span> <span class="st_h">'http://auth.example.com/resetpwd'</span><span class="sy0">,</span>
   registerUrl <span class="sy0">=&gt;</span> <span class="st_h">'http://auth.example.com/register'</span><span class="sy0">,</span></pre>
-<div class="noteimportant">Apache mod_perl has got lot of troubleshooting problems since 2.4 version<em>(many segfaults,…)</em>, especially when using mpm-worker. That&#039;s why <abbr title="LemonLDAP::NG">LL::NG</abbr> doesn&#039;t use anymore ModPerl::Registry: all is now handled by FastCGI <em>(portal and manager)</em>.
+<ul>
+<li class="level1"><div class="li"> Option <code>trustedProxies</code> was removed, you must now configure your Web Server to manage <code>X-Forwarded-For</code> header, see <a href="behindproxyminihowto.html" class="wikilink1" title="documentation:2.0:behindproxyminihowto">how to run LL::NG behind a reverse proxy</a>.</div>
+</li>
+</ul>
+<div class="noteimportant">Apache mod_perl has got lot of troubleshooting problems since 2.4 version <em>(many segfaults,...)</em>, especially when using MPM worker or MPM event. That&#039;s why <abbr title="LemonLDAP::NG">LL::NG</abbr> doesn&#039;t use anymore ModPerl::Registry: all is now handled by FastCGI <em>(portal and manager)</em>, except for Apache2 Handler.
 <p>
-<strong>For Handlers, it is now recommended to migrate to Nginx</strong>, but Apache 2 is still supported
+<strong>For Handlers, it is now recommended to migrate to Nginx</strong>, but Apache 2.4 is still supported with MPM prefork.
 </p>
 
 </div>
 </div>
-<!-- EDIT4 SECTION "Configuration" [1094-2668] -->
+<!-- EDIT4 SECTION "Configuration" [1094-2921] -->
 <h3 class="sectionedit5" id="configuration_refresh">Configuration refresh</h3>
 <div class="level3">
 
@@ -169,7 +173,7 @@ Now portal has the same behavior than ha
 <div class="noteimportant">If you want to use reload mechanism on a portal only host, you must install a handler in Portal host to be able to refresh local cache. Include <code>handler-nginx.conf</code> or <code>handler-apache2.conf</code> for example
 </div>
 </div>
-<!-- EDIT5 SECTION "Configuration refresh" [2669-3090] -->
+<!-- EDIT5 SECTION "Configuration refresh" [2922-3343] -->
 <h2 class="sectionedit6" id="ldap_connection">LDAP connection</h2>
 <div class="level2">
 
@@ -178,7 +182,7 @@ Now LDAP connections are kept open to im
 </p>
 
 </div>
-<!-- EDIT6 SECTION "LDAP connection" [3091-3274] -->
+<!-- EDIT6 SECTION "LDAP connection" [3344-3527] -->
 <h2 class="sectionedit7" id="kerberos_or_ssl_usage">Kerberos or SSL usage</h2>
 <div class="level2">
 <ul>
@@ -189,7 +193,7 @@ Now LDAP connections are kept open to im
 </ul>
 
 </div>
-<!-- EDIT7 SECTION "Kerberos or SSL usage" [3275-3783] -->
+<!-- EDIT7 SECTION "Kerberos or SSL usage" [3528-4036] -->
 <h2 class="sectionedit8" id="logs">Logs</h2>
 <div class="level2">
 <ul>
@@ -197,10 +201,12 @@ Now LDAP connections are kept open to im
 </li>
 <li class="level1"><div class="li"> <strong>Apache2</strong>: Portal doesn&#039;t use anymore Apache2 logger. Logs are always written to Apache error.log but Apache “LogLevel” parameter has no more effect on it. Portal is now a FastCGI application and doesn&#039;t use anymore ModPerl. See <a href="logs.html" class="wikilink1" title="documentation:2.0:logs">logs</a> for more.</div>
 </li>
+<li class="level1"><div class="li"> If you are running behind a proxy, make sure LemonLDAP::NG can <a href="behindproxyminihowto.html" class="wikilink1" title="documentation:2.0:behindproxyminihowto">see the original IP address</a> of incoming HTTP connections</div>
+</li>
 </ul>
 
 </div>
-<!-- EDIT8 SECTION "Logs" [3784-4198] -->
+<!-- EDIT8 SECTION "Logs" [4037-4618] -->
 <h2 class="sectionedit9" id="security">Security</h2>
 <div class="level2">
 
@@ -215,7 +221,7 @@ LLNG portal now embeds the following fea
 </ul>
 
 </div>
-<!-- EDIT9 SECTION "Security" [4199-4766] -->
+<!-- EDIT9 SECTION "Security" [4619-5186] -->
 <h2 class="sectionedit10" id="handlers">Handlers</h2>
 <div class="level2">
 <ul>
@@ -229,12 +235,12 @@ LLNG portal now embeds the following fea
 </li>
 <li class="level1"><div class="li"> <a href="cda.html" class="wikilink1" title="documentation:2.0:cda">CDA</a>, <a href="documentation/latest/applications/zimbra.html" class="wikilink1" title="documentation:latest:applications:zimbra">ZimbraPreAuth</a>, <a href="securetoken.html" class="wikilink1" title="documentation:2.0:securetoken">SecureToken</a> and <a href="handlerauthbasic.html" class="wikilink1" title="documentation:2.0:handlerauthbasic">AuthBasic</a> are now <a href="handlerarch.html" class="wikilink1" title="documentation:2.0:handlerarch">Handler Types</a>. So there is no more special file to load: you just have to choose “VirtualHost type” in the manager/VirtualHosts.</div>
 </li>
-<li class="level1"><div class="li"> <a href="ssocookie.html" class="wikilink1" title="documentation:2.0:ssocookie">SSOCookie</a>: Since Firefox 60 and Chrome 68, “+2d, +5M, 12h and so on…” cookie expiration time notation is no more supported. CookieExpiration value is a number of seconds until the cookie expires. A zero or negative number will expire the cookie immediately.</div>
+<li class="level1"><div class="li"> <a href="ssocookie.html" class="wikilink1" title="documentation:2.0:ssocookie">SSOCookie</a>: Since Firefox 60 and Chrome 68, “+2d, +5M, 12h and so on...” cookie expiration time notation is no more supported. CookieExpiration value is a number of seconds until the cookie expires. A zero or negative number will expire the cookie immediately.</div>
 </li>
 </ul>
 
 </div>
-<!-- EDIT10 SECTION "Handlers" [4767-5852] -->
+<!-- EDIT10 SECTION "Handlers" [5187-6272] -->
 <h2 class="sectionedit11" id="rules_and_headers">Rules and headers</h2>
 <div class="level2">
 <ul>
@@ -247,7 +253,7 @@ LLNG portal now embeds the following fea
 </ul>
 
 </div>
-<!-- EDIT11 SECTION "Rules and headers" [5853-6171] -->
+<!-- EDIT11 SECTION "Rules and headers" [6273-6591] -->
 <h2 class="sectionedit12" id="supported_servers">Supported servers</h2>
 <div class="level2">
 <ul>
@@ -256,7 +262,7 @@ LLNG portal now embeds the following fea
 </ul>
 
 </div>
-<!-- EDIT12 SECTION "Supported servers" [6172-6317] -->
+<!-- EDIT12 SECTION "Supported servers" [6592-6737] -->
 <h2 class="sectionedit13" id="ajax_requests">Ajax requests</h2>
 <div class="level2">
 
@@ -265,7 +271,7 @@ Before 2.0, an Ajax query launched after
 </p>
 
 </div>
-<!-- EDIT13 SECTION "Ajax requests" [6318-6515] -->
+<!-- EDIT13 SECTION "Ajax requests" [6738-6935] -->
 <h2 class="sectionedit14" id="soaprest_services">SOAP/REST services</h2>
 <div class="level2">
 <ul>
@@ -281,7 +287,7 @@ Before 2.0, an Ajax query launched after
 <div class="noteimportant"><a href="handlerauthbasic.html" class="wikilink1" title="documentation:2.0:handlerauthbasic">AuthBasic Handler</a> uses now REST services instead of SOAP.
 </div>
 </div>
-<!-- EDIT14 SECTION "SOAP/REST services" [6516-7113] -->
+<!-- EDIT14 SECTION "SOAP/REST services" [6936-7533] -->
 <h2 class="sectionedit15" id="cas">CAS</h2>
 <div class="level2">
 
@@ -294,12 +300,12 @@ Before 2.0, an Ajax query launched after
 </p>
 
 </div>
-<!-- EDIT15 SECTION "CAS" [7114-7491] -->
+<!-- EDIT15 SECTION "CAS" [7534-7911] -->
 <h2 class="sectionedit16" id="developer_corner">Developer corner</h2>
 <div class="level2">
 
 </div>
-<!-- EDIT16 SECTION "Developer corner" [7492-7521] -->
+<!-- EDIT16 SECTION "Developer corner" [7912-7941] -->
 <h3 class="sectionedit17" id="apis">APIs</h3>
 <div class="level3">
 
@@ -308,7 +314,7 @@ Portal has now many REST features and in
 </p>
 
 </div>
-<!-- EDIT17 SECTION "APIs" [7522-7683] -->
+<!-- EDIT17 SECTION "APIs" [7942-8103] -->
 <h3 class="sectionedit18" id="portal_overview">Portal overview</h3>
 <div class="level3">
 
@@ -330,7 +336,7 @@ Requests are independent objects based o
 </p>
 
 </div>
-<!-- EDIT18 SECTION "Portal overview" [7684-8159] -->
+<!-- EDIT18 SECTION "Portal overview" [8104-8579] -->
 <h3 class="sectionedit19" id="handler">Handler</h3>
 <div class="level3">
 
@@ -343,6 +349,6 @@ If you used self protected CGI, you also
 </p>
 
 </div>
-<!-- EDIT19 SECTION "Handler" [8160-] --></div>
+<!-- EDIT19 SECTION "Handler" [8580-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/utotp2f.html 2.0.2+ds-1/doc/pages/documentation/current/utotp2f.html
--- 2.0.1+ds-2/doc/pages/documentation/current/utotp2f.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/utotp2f.html	2019-02-12 16:28:08.000000000 +0000
@@ -81,9 +81,9 @@ In the manager (second factors), you jus
 This module has no self-registration. You have to use U2F and TOTP self registration modules. Example: suppose you want to allow U2F registration only if a TOTP secret is registered:
 </p>
 <ul>
-<li class="level1"><div class="li"> TOTP self-registration ⇒ enabled</div>
+<li class="level1"><div class="li"> TOTP self-registration =&gt; enabled</div>
 </li>
-<li class="level1"><div class="li"> U2F self-registration  ⇒ <code>$_2fDevices =~ /“type”:\s*“TOTP”/s</code></div>
+<li class="level1"><div class="li"> U2F self-registration  =&gt; <code>$_2fDevices =~ /“type”:\s*“TOTP”/s</code></div>
 </li>
 </ul>
 
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/variables.html 2.0.2+ds-1/doc/pages/documentation/current/variables.html
--- 2.0.1+ds-2/doc/pages/documentation/current/variables.html	2018-12-21 14:21:11.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/variables.html	2019-02-12 16:28:08.000000000 +0000
@@ -84,7 +84,7 @@ Variables can be used in rules and heade
 </li>
 <li class="level1"><div class="li"> Session opening</div>
 </li>
-<li class="level1"><div class="li"> …</div>
+<li class="level1"><div class="li"> ...</div>
 </li>
 </ul>
 
@@ -116,7 +116,7 @@ Below are documented internal variables.
 <div class="level2">
 
 <p>
-Register what module was used for authentication, user data, password, …
+Register what module was used for authentication, user data, password, ...
 </p>
 <div class="table sectionedit4"><table class="inline table table-bordered table-striped">
 	<thead>
@@ -162,7 +162,7 @@ Datas concerning the first connection to
 	</tr>
 	</thead>
 	<tr class="row1 rowodd">
-		<td class="col0 leftalign"> ipAddr  </td><td class="col1 leftalign"> <abbr title="Internet Protocol">IP</abbr> of the user (can be the X Forwarded For <abbr title="Internet Protocol">IP</abbr> if trusted proxies are configured)  </td>
+		<td class="col0 leftalign"> ipAddr  </td><td class="col1 leftalign"> <abbr title="Internet Protocol">IP</abbr> of the user (special care must be taken is you run the portal <a href="behindproxyminihowto.html" class="wikilink1" title="documentation:2.0:behindproxyminihowto">behind a reverse proxy</a>)  </td>
 	</tr>
 	<tr class="row2 roweven">
 		<td class="col0 leftalign"> _timezone  </td><td class="col1"> Timezone of the user, set with javascript from standard login form (will be empty if other authentication methods are used) </td>
@@ -171,9 +171,9 @@ Datas concerning the first connection to
 		<td class="col0 leftalign"> _url  </td><td class="col1 leftalign"> <abbr title="Uniform Resource Locator">URL</abbr> used before being redirected to the portal (empty if portal was used as entry point)  </td>
 	</tr>
 </table></div>
-<!-- EDIT6 TABLE [1406-1770] -->
+<!-- EDIT6 TABLE [1406-1821] -->
 </div>
-<!-- EDIT5 SECTION "Connection" [1329-1771] -->
+<!-- EDIT5 SECTION "Connection" [1329-1822] -->
 <h2 class="sectionedit7" id="authentication">Authentication</h2>
 <div class="level2">
 
@@ -199,9 +199,9 @@ Datas around the authentication process.
 		<td class="col0 leftalign"> authenticationLevel  </td><td class="col1 leftalign"> Authentication level  </td>
 	</tr>
 </table></div>
-<!-- EDIT8 TABLE [1842-2139] -->
+<!-- EDIT8 TABLE [1893-2190] -->
 </div>
-<!-- EDIT7 SECTION "Authentication" [1772-2140] -->
+<!-- EDIT7 SECTION "Authentication" [1823-2191] -->
 <h2 class="sectionedit9" id="dates">Dates</h2>
 <div class="level2">
 <div class="table sectionedit10"><table class="inline table table-bordered table-striped">
@@ -223,9 +223,9 @@ Datas around the authentication process.
 		<td class="col0"> _lastAuthnUTime </td><td class="col1 leftalign"> Timestamp of last authentication time  </td>
 	</tr>
 </table></div>
-<!-- EDIT10 TABLE [2160-2389] -->
+<!-- EDIT10 TABLE [2211-2440] -->
 </div>
-<!-- EDIT9 SECTION "Dates" [2141-2390] -->
+<!-- EDIT9 SECTION "Dates" [2192-2441] -->
 <h2 class="sectionedit11" id="saml">SAML</h2>
 <div class="level2">
 
@@ -254,9 +254,9 @@ Datas related to <abbr title="Security A
 		<td class="col0 leftalign"> _lassoIdentityDump  </td><td class="col1 leftalign"> Lasso identity dump  </td>
 	</tr>
 </table></div>
-<!-- EDIT12 TABLE [2441-2706] -->
+<!-- EDIT12 TABLE [2492-2757] -->
 </div>
-<!-- EDIT11 SECTION "SAML" [2391-2707] -->
+<!-- EDIT11 SECTION "SAML" [2442-2758] -->
 <h2 class="sectionedit13" id="notifications">Notifications</h2>
 <div class="level2">
 <div class="table sectionedit14"><table class="inline table table-bordered table-striped">
@@ -269,9 +269,9 @@ Datas related to <abbr title="Security A
 		<td class="col0 leftalign"> _notification_<em>id</em>  </td><td class="col1 leftalign"> Date of validation of the notification <em>id</em>  </td>
 	</tr>
 </table></div>
-<!-- EDIT14 TABLE [2735-2835] -->
+<!-- EDIT14 TABLE [2786-2886] -->
 </div>
-<!-- EDIT13 SECTION "Notifications" [2708-2836] -->
+<!-- EDIT13 SECTION "Notifications" [2759-2887] -->
 <h2 class="sectionedit15" id="login_history">Login history</h2>
 <div class="level2">
 <div class="table sectionedit16"><table class="inline table table-bordered table-striped">
@@ -284,9 +284,9 @@ Datas related to <abbr title="Security A
 		<td class="col0 leftalign"> _loginHistory  </td><td class="col1 leftalign"> HASH of login success and failures  </td>
 	</tr>
 </table></div>
-<!-- EDIT16 TABLE [2864-2946] -->
+<!-- EDIT16 TABLE [2915-2997] -->
 </div>
-<!-- EDIT15 SECTION "Login history" [2837-2947] -->
+<!-- EDIT15 SECTION "Login history" [2888-2998] -->
 <h2 class="sectionedit17" id="ldap">LDAP</h2>
 <div class="level2">
 
@@ -303,9 +303,9 @@ Only with UserDB LDAP.
 		<td class="col0 leftalign"> _dn  </td><td class="col1"> Distinguished name </td>
 	</tr>
 </table></div>
-<!-- EDIT18 TABLE [2990-3045] -->
+<!-- EDIT18 TABLE [3041-3096] -->
 </div>
-<!-- EDIT17 SECTION "LDAP" [2948-3046] -->
+<!-- EDIT17 SECTION "LDAP" [2999-3097] -->
 <h2 class="sectionedit19" id="openid">OpenID</h2>
 <div class="level2">
 <div class="table sectionedit20"><table class="inline table table-bordered table-striped">
@@ -318,9 +318,9 @@ Only with UserDB LDAP.
 		<td class="col0 leftalign"> _openid_<em>id</em>  </td><td class="col1 leftalign"> Consent to share attribute <em>id</em> trough OpenID  </td>
 	</tr>
 </table></div>
-<!-- EDIT20 TABLE [3067-3163] -->
+<!-- EDIT20 TABLE [3118-3214] -->
 </div>
-<!-- EDIT19 SECTION "OpenID" [3047-3164] -->
+<!-- EDIT19 SECTION "OpenID" [3098-3215] -->
 <h2 class="sectionedit21" id="openid_connect">OpenID Connect</h2>
 <div class="level2">
 <div class="table sectionedit22"><table class="inline table table-bordered table-striped">
@@ -345,9 +345,9 @@ Only with UserDB LDAP.
 		<td class="col0"> _oidc_consent_time_<em>rp</em> </td><td class="col1 leftalign"> Time when consent was given for RP <em>rp</em>  </td>
 	</tr>
 </table></div>
-<!-- EDIT22 TABLE [3193-3545] -->
+<!-- EDIT22 TABLE [3244-3596] -->
 </div>
-<!-- EDIT21 SECTION "OpenID Connect" [3165-3546] -->
+<!-- EDIT21 SECTION "OpenID Connect" [3216-3597] -->
 <h2 class="sectionedit23" id="other">Other</h2>
 <div class="level2">
 <div class="table sectionedit24"><table class="inline table table-bordered table-striped">
@@ -360,11 +360,11 @@ Only with UserDB LDAP.
 		<td class="col0 leftalign"> _appsListOrder  </td><td class="col1 leftalign"> Order of categories in the menu  </td>
 	</tr>
 	<tr class="row2 roweven">
-		<td class="col0 leftalign"> _session_kind  </td><td class="col1 leftalign"> Type of session (<abbr title="Single Sign On">SSO</abbr>, Persistent, …)  </td>
+		<td class="col0 leftalign"> _session_kind  </td><td class="col1 leftalign"> Type of session (<abbr title="Single Sign On">SSO</abbr>, Persistent, ...)  </td>
 	</tr>
 </table></div>
-<!-- EDIT24 TABLE [3566-3707] -->
+<!-- EDIT24 TABLE [3617-3758] -->
 </div>
-<!-- EDIT23 SECTION "Other" [3547-] --></div>
+<!-- EDIT23 SECTION "Other" [3598-] --></div>
 </body>
 </html>
diff -pruN 2.0.1+ds-2/doc/pages/documentation/current/writingrulesand_headers.html 2.0.2+ds-1/doc/pages/documentation/current/writingrulesand_headers.html
--- 2.0.1+ds-2/doc/pages/documentation/current/writingrulesand_headers.html	2018-12-21 14:21:10.000000000 +0000
+++ 2.0.2+ds-1/doc/pages/documentation/current/writingrulesand_headers.html	2019-02-12 16:28:08.000000000 +0000
@@ -67,7 +67,7 @@
 <div class="level1">
 
 <p>
-Lemonldap::NG manage applications by their hostname (Apache&#039;s virtualHosts). Rules are used to protect applications, headers are HTTP headers added to the request to give datas to the application (for logs, profiles,…).
+Lemonldap::NG manage applications by their hostname (Apache&#039;s virtualHosts). Rules are used to protect applications, headers are HTTP headers added to the request to give datas to the application (for logs, profiles,...).
 </p>
 <div class="noteimportant">Note that variables designed by $xx correspond to the name of the <a href="exportedvars.html" class="wikilink1" title="documentation:2.0:exportedvars">exported variables</a> or <a href="performances.html#macros_and_groups" class="wikilink1" title="documentation:2.0:performances">macro names</a> except for <code>$ENV{&lt;cgi-header&gt;}</code> which correspond to CGI header <em>(<code>$ENV{REMOTE_ADDR}</code> for example)</em>.
 </div>
@@ -252,7 +252,7 @@ Examples:
 </table></div>
 <!-- EDIT8 TABLE [5037-5373] -->
 <p>
-As described in <a href="performances.html#handler_performance" class="wikilink1" title="documentation:2.0:performances">performances chapter</a>, you can use macros, local macros,…
+As described in <a href="performances.html#handler_performance" class="wikilink1" title="documentation:2.0:performances">performances chapter</a>, you can use macros, local macros,...
 </p>
 <div class="noteimportant"><ul>
 <li class="level1"><div class="li"> Since many HTTP servers refuse non ascii headers, it is recommended to use encode_base64() function to transmit those headers</div>
@@ -288,7 +288,7 @@ In addition to macros and name, you can
 <div class="level2">
 
 <p>
-<a href="new.png" class="media" title="documentation:2.0:new.png"><img src="new.edf565b3f89a0ad56df9a5e7a31a6de8.png" class="media" alt="" width="35" /></a> Since 2.0, a wildcard can be used in virtualhost name (not in aliases !): <code>*.example.com</code> matches all hostnames that belong to <code>example.com</code> domain.
+<a href="documentation/new.png" class="media" title="documentation:new.png"><img src="documentation/new.ae92cc06c5d7671f1d904a7fe6e5ed09.png" class="media" alt="" width="35" /></a> Since 2.0, a wildcard can be used in virtualhost name (not in aliases !): <code>*.example.com</code> matches all hostnames that belong to <code>example.com</code> domain.
 </p>
 
 <p>
diff -pruN 2.0.1+ds-2/e2e-tests/handler/README.md 2.0.2+ds-1/e2e-tests/handler/README.md
--- 2.0.1+ds-2/e2e-tests/handler/README.md	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/handler/README.md	2019-02-04 09:52:16.000000000 +0000
@@ -0,0 +1,47 @@
+#End 2 End Testing (Protractor)
+To run the end-2-end tests against the application you use [Protractor](https://github.com/angular/protractor).
+
+## Testing with Protractor
+
+As a one-time setup, download webdriver.
+```
+npm run update-webdriver
+```
+
+Start the Protractor test runner using the e2e configuration:
+
+```
+make e2e_test
+```
+
+## Devel tips
+
+    {
+      locator_:  {
+        using: 'css selector',
+        value: '[ng-click="getLanguage(lang)"]'
+       },
+      parentElementFinder_: null,
+      opt_actionResult_: {
+        then: [Function: then],
+        cancel: [Function: cancel],
+        isPending: [Function: isPending]
+      },
+      opt_index_: 1,
+      click: [Function],
+      sendKeys: [Function],
+      getTagName: [Function],
+      getCssValue: [Function],
+      getAttribute: [Function],
+      getText: [Function],
+      getSize: [Function],
+      getLocation: [Function],
+      isEnabled: [Function],
+      isSelected: [Function],
+      submit: [Function],
+      clear: [Function],
+      isDisplayed: [Function],
+      getOuterHtml: [Function],
+      getInnerHtml: [Function],
+      toWireValue: [Function]
+    }
diff -pruN 2.0.1+ds-2/e2e-tests/lemonldap-ng.ini 2.0.2+ds-1/e2e-tests/lemonldap-ng.ini
--- 2.0.1+ds-2/e2e-tests/lemonldap-ng.ini	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/lemonldap-ng.ini	2019-02-11 20:17:19.000000000 +0000
@@ -24,8 +24,11 @@ staticPrefix = /static
 languages    = fr, en, vi, it, ar, de, zh, nl, es, pt, ro
 templateDir  = __pwd__/lemonldap-ng-portal/site/templates
 portalStatus = 1
-;totp2fActivation = 1
-;totp2fSelfRegistration = 1
+totp2fActivation = 1
+totp2fSelfRegistration = 1
+captcha_mail_enabled = 0
+portalDisplayResetPassword = 1
+translations = __pwd__/lemonldap-ng-portal/site/templates/localeTranslations.txt
 
 [handler]
 
diff -pruN 2.0.1+ds-2/e2e-tests/lmConf-1.json 2.0.2+ds-1/e2e-tests/lmConf-1.json
--- 2.0.1+ds-2/e2e-tests/lmConf-1.json	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/lmConf-1.json	2019-02-04 09:52:16.000000000 +0000
@@ -57,6 +57,16 @@
         },
         "type": "application"
       },
+      "0008-app": {
+        "options": {
+          "description": "Explore WebSSO 2FA sessions",
+          "display": "auto",
+          "logo": "database.png",
+          "name": "2FA Sessions explorer",
+          "uri": "http://manager.example.com:__port__/2ndfa.html"
+        },
+        "type": "application"
+      },
       "type": "category"
     },
     "0008-cat": {
@@ -76,7 +86,7 @@
           "description": "Official LemonLDAP::NG Website",
           "display": "on",
           "logo": "network.png",
-          "name": "Offical Website",
+          "name": "Official Website",
           "uri": "http://lemonldap-ng.org/"
         },
         "type": "application"
@@ -155,7 +165,7 @@
     "_whatToTrace": "$_auth eq 'SAML' ? \"$_user\\@$_idpConfKey\" : $_auth eq 'OpenIDConnect' ? \"$_user\\@$_oidcConnectedRP\" : \"$_user\""
   },
   "mailUrl": "http://auth.example.com:__port__/resetpwd",
-  "notification": 0,
+  "notification": 1,
   "notificationStorage": "File",
   "notificationStorageOptions": {
     "dirName": "__pwd__/e2e-tests/conf"
diff -pruN 2.0.1+ds-2/e2e-tests/manager/00-auth.js 2.0.2+ds-1/e2e-tests/manager/00-auth.js
--- 2.0.1+ds-2/e2e-tests/manager/00-auth.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/00-auth.js	2019-02-04 09:52:16.000000000 +0000
@@ -3,14 +3,13 @@
 /* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
 
 describe('00 Lemonldap::NG', function() {
-
   describe('Auth mechanism', function() {
-
     it('should want to authenticate', function() {
       browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
+      // Login attempt
       browser.driver.findElement(by.xpath("//input[@name='user']")).sendKeys('dwho');
       browser.driver.findElement(by.xpath("//input[@name='password']")).sendKeys('dwho');
       browser.driver.findElement(by.xpath("//button[@type='submit']")).click();
     });
   });
-});
\ No newline at end of file
+});
diff -pruN 2.0.1+ds-2/e2e-tests/manager/01-generalParameters.js 2.0.2+ds-1/e2e-tests/manager/01-generalParameters.js
--- 2.0.1+ds-2/e2e-tests/manager/01-generalParameters.js	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/01-generalParameters.js	2019-02-04 09:52:16.000000000 +0000
@@ -0,0 +1,215 @@
+'use strict';
+
+/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
+
+describe('01 Lemonldap::NG Manager', function() {
+  describe('Tree display -> General Parameters', function() {
+    it('Main => should display 12 main nodes', function() {
+      browser.get('/');
+      expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(12);
+    });
+    it('General Parameters should display 10 sub nodes', function() {
+      element(by.id('a-generalParameters')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(10);
+    });
+
+    // Portal
+    it('General Parameters > Portal -> Append 4 sub nodes', function() {
+      element(by.id('a-portalParams')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(14);
+    });
+    it('General Parameters > Portal > URL => Match', function() {
+      element(by.id('t-portal')).click();
+      expect(element(by.id('textinput')).getAttribute('value')).toEqual('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
+    });
+    it('General Parameters > Portal > Menu => Append 2 sub nodes', function() {
+      element(by.id('a-portalMenu')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(16);
+    });
+    it('General Parameters > Portal > Menu > Module Activation => Append 5 sub nodes', function() {
+      element(by.id('a-portalModules')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(21);
+    });
+    it('General Parameters > Portal > Menu > Cat. and Apps. => Append 11 sub nodes', function() {
+      element(by.id('a-applicationList')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(32);
+    });
+    it('General Parameters > Portal > Customization => Append 8 sub nodes', function() {
+      element(by.id('a-portalCustomization')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(40);
+    });
+    it('General Parameters > Portal > Customization > Buttons => Append 4 sub nodes', function() {
+      element(by.id('a-portalButtons')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(44);
+    });
+    it('General Parameters > Portal > Customization > Password Management => Append 3 sub nodes', function() {
+      element(by.id('a-passwordManagement')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(47);
+    });
+    it('General Parameters > Portal > Customization > Other => Append 6 sub nodes', function() {
+      element(by.id('a-portalOther')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(53);
+    });
+    // Authentication Parameters
+    it('Main => should display 12 main nodes', function() {
+      browser.get('/');
+      expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(12);
+    });
+    it('General Parameters should display 10 sub nodes', function() {
+      element(by.id('a-generalParameters')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(10);
+    });
+    it('General Parameters > Authn. parameters => Append 4 sub nodes', function() {
+      element(by.id('a-authParams')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(14);
+    });
+    it('General Parameters > Authn. parameters > Authn. modules => Should have 26 modules availabled with "Demonstration" selected', function() {
+      element(by.id('t-authentication')).click();
+      expect(element(by.css('option[selected="selected"]')).getAttribute('Value')).toEqual('Demo');
+      expect(element.all(by.repeater('item in currentNode.select')).count()).toEqual(26);
+    });
+    it('General Parameters > Authn. parameters > Users modules => Should have 7 modules availabled with "Same" selected', function() {
+      element(by.id('t-userDB')).click();
+      browser.sleep(1000);
+      expect(element(by.css('option[selected="selected"]')).getAttribute('Value')).toEqual('Same');
+      expect(element.all(by.repeater('item in currentNode.select')).count()).toEqual(7);
+    });
+    it('General Parameters > Authn. parameters > Password modules => Should have 8 modules availabled with "Demo" selected', function() {
+      element(by.id('t-passwordDB')).click();
+      expect(element(by.css('option[selected="selected"]')).getAttribute('Value')).toEqual('Demo');
+      expect(element.all(by.repeater('item in currentNode.select')).count()).toEqual(8);
+    });
+    it('General Parameters > Authn. parameters > Register modules => Should have 5 modules availabled with "Demo" selected', function() {
+      element(by.id('t-registerDB')).click();
+      expect(element(by.css('option[selected="selected"]')).getAttribute('Value')).toEqual('Demo');
+      expect(element.all(by.repeater('item in currentNode.select')).count()).toEqual(5);
+    });
+    it('should have a hash form if a key is clicked', function() {
+      element(by.id('a-demoParams')).click();
+      element(by.id('a-demoExportedVars')).click();
+      element(by.id('t-demoExportedVars/cn')).click();
+      expect(element.all(by.id('hashkeyinput')).count()).toEqual(1);
+    });
+    // Issuer Modules
+    it('Main => should display 12 main nodes', function() {
+      browser.get('/');
+      //var mainNodes = element.all(by.repeater('node in data track by node.id'));
+      //expect(mainNodes.count()).toEqual(12);
+      expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(12);
+    });
+    it('General Parameters should display 10 sub nodes', function() {
+      element(by.id('a-generalParameters')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(10);
+    });
+    it('General Parameters > Issuer modules => Append 5 sub nodes', function() {
+      element(by.id('a-issuerParams')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(15);
+    });
+    it('General Parameters > Issuer modules > SAML => Append 3 sub nodes', function() {
+      element(by.id('a-issuerDBSAML')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(18);
+    });
+    it('General Parameters > Issuer modules > CAS => Append 3 sub nodes', function() {
+      element(by.id('a-issuerDBCAS')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(21);
+    });
+    it('General Parameters > Issuer modules > OpenID => Append 4 sub nodes', function() {
+      element(by.id('a-issuerDBOpenID')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(25);
+    });
+    it('General Parameters > Issuer modules > OpenIDConnect => Append 3 sub nodes', function() {
+      element(by.id('a-issuerDBOpenIDConnect')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(28);
+    });
+    it('General Parameters > Issuer modules > GET => Append 4 sub nodes', function() {
+      element(by.id('a-issuerDBGet')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(32);
+    });
+    // Logs
+    it('Main => should display 12 main nodes', function() {
+      browser.get('/');
+      expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(12);
+    });
+    it('General Parameters should display 10 sub nodes', function() {
+      element(by.id('a-generalParameters')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(10);
+    });
+    it('General Parameters > Logs => Append 3 sub nodes', function() {
+      element(by.id('a-logParams')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(13);
+    });
+    // Cookies
+    it('Main => should display 12 main nodes', function() {
+      browser.get('/');
+      expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(12);
+    });
+    it('General Parameters should display 10 sub nodes', function() {
+      element(by.id('a-generalParameters')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(10);
+    });
+    it('General Parameters > Cookies => Append 6 sub nodes', function() {
+      element(by.id('a-cookieParams')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(16);
+    });
+    // Sessions
+    it('Main => should display 12 main nodes', function() {
+      browser.get('/');
+      expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(12);
+    });
+    it('General Parameters should display 10 sub nodes', function() {
+      element(by.id('a-generalParameters')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(10);
+    });
+    it('General Parameters > Sessions => Append 8 sub nodes', function() {
+      element(by.id('a-sessionParams')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(18);
+    });
+    it('General Parameters > Sessions > Opening conditions => New grant rule button + 2 rules', function() {
+      element(by.id('t-grantSessionRules')).click();
+      element(by.css('[ng-click="menuClick(button)"]')).click();
+      element(by.css('[ng-click="menuClick(button)"]')).click();
+      expect(element.all(by.repeater('s in currentNode.nodes')).count()).toEqual(2);
+      expect(element.all(by.xpath('//tbody/tr')).count()).toEqual(2);
+      expect(element.all(by.xpath('//tbody/tr/td/input')).count()).toEqual(6);
+    });
+    it('General Parameters > Sessions > Session storage => Append 4 sub nodes', function() {
+      element(by.id('a-sessionStorage')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(24);
+    });
+    it('General Parameters > Sessions > Multiple sessions => Append 6 sub nodes', function() {
+      element(by.id('a-multipleSessions')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(30);
+    });
+    it('General Parameters > Sessions > Persistent sessions => Append 2 sub nodes', function() {
+      element(by.id('a-persistentSessions')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(32);
+    });
+    it('General Parameters > Sessions > Persistent storage options => Append 3 sub nodes', function() {
+      element(by.id('t-persistentStorageOptions')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(35);
+      expect(element.all(by.xpath('//tbody/tr')).count()).toEqual(3);
+      expect(element.all(by.xpath('//tbody/tr/td/input')).count()).toEqual(6);
+    });
+    // Configuration reload
+    it('Main => should display 12 main nodes', function() {
+      browser.get('/');
+      expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(12);
+    });
+    it('General Parameters should display 10 sub nodes', function() {
+      element(by.id('a-generalParameters')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(10);
+    });
+    it('General Parameters > Configuration reload => Append 2 sub nodes', function() {
+      element(by.id('a-reloadParams')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(12);
+    });
+    it('General Parameters > Configuration relaod > Reload URLs => "New entry" button + 2 new URLS', function() {
+      element(by.id('t-reloadUrls')).click();
+      element(by.css('[ng-click="menuClick(button)"]')).click();
+      element(by.css('[ng-click="menuClick(button)"]')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(14);
+      expect(element.all(by.xpath('//tbody/tr')).count()).toEqual(2);
+      expect(element.all(by.xpath('//tbody/tr/td/input')).count()).toEqual(4);
+    });
+  });
+});
\ No newline at end of file
diff -pruN 2.0.1+ds-2/e2e-tests/manager/01-tree.js 2.0.2+ds-1/e2e-tests/manager/01-tree.js
--- 2.0.1+ds-2/e2e-tests/manager/01-tree.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/01-tree.js	1970-01-01 00:00:00.000000000 +0000
@@ -1,40 +0,0 @@
-'use strict';
-
-/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
-
-describe('01 Lemonldap::NG Manager', function() {
-
-  describe('Tree display', function() {
-
-    it('should display 9 main nodes', function() {
-      browser.get('/');
-      var mainNodes = element.all(by.repeater('node in data track by node.id'));
-      expect(mainNodes.count()).toEqual(12);
-    });
-
-    it('should find a rule', function() {
-      browser.get('/#/confs/1');
-      var vhs = element(by.id('a-virtualHosts'));
-      vhs.click();
-      var vh = element(by.id('a-virtualHosts/manager.example.com'));
-      vh.click();
-      var r = element(by.id('a-virtualHosts/manager.example.com/locationRules'));
-      r.click();
-      var def = element.all(by.id("t-virtualHosts/manager.example.com/locationRules/1"));
-      expect(def.count()).toEqual(1);
-    });
-    it('should find 19 auth/user modules but only Demo visible', function() {
-      browser.get('/#/confs/1');
-      element(by.id('a-generalParameters')).click();
-      element(by.id('a-authParams')).click();
-      /* todo */
-    });
-    it('should have a hash form if a key is clicked', function() {
-      element(by.id('a-demoParams')).click();
-      element(by.id('a-demoExportedVars')).click();
-      element(by.id('t-demoExportedVars/cn')).click();
-      var def = element.all(by.id('hashkeyinput'));
-      expect(def.count()).toEqual(1);
-    });
-  });
-});
\ No newline at end of file
diff -pruN 2.0.1+ds-2/e2e-tests/manager/01-variables.js 2.0.2+ds-1/e2e-tests/manager/01-variables.js
--- 2.0.1+ds-2/e2e-tests/manager/01-variables.js	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/01-variables.js	2019-02-04 09:52:16.000000000 +0000
@@ -0,0 +1,16 @@
+'use strict';
+
+/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
+
+describe('01 Lemonldap::NG Manager', function() {
+  describe('Tree display -> Variables', function() {
+    it('Main => should display 12 main nodes', function() {
+      browser.get('/');
+      expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(12);
+    });
+    it('Variables should display 3 sub nodes', function() {
+      element(by.id('a-variables')).click();
+      expect(element.all(by.repeater('node in node.nodes track by node.id')).count()).toEqual(3);
+    });
+  });
+});
\ No newline at end of file
diff -pruN 2.0.1+ds-2/e2e-tests/manager/01-virtualHosts.js 2.0.2+ds-1/e2e-tests/manager/01-virtualHosts.js
--- 2.0.1+ds-2/e2e-tests/manager/01-virtualHosts.js	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/01-virtualHosts.js	2019-02-04 09:52:16.000000000 +0000
@@ -0,0 +1,23 @@
+'use strict';
+
+/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
+
+describe('01 Lemonldap::NG Manager', function() {
+  describe('Tree display', function() {
+    it('Main => should display 12 main nodes', function() {
+      browser.get('/');
+      expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(12);
+    });
+    it('should find a rule', function() {
+      browser.get('/#/confs/1');
+      var vhs = element(by.id('a-virtualHosts'));
+      vhs.click();
+      var vh = element(by.id('a-virtualHosts/manager.example.com'));
+      vh.click();
+      var r = element(by.id('a-virtualHosts/manager.example.com/locationRules'));
+      r.click();
+      var def = element.all(by.id("t-virtualHosts/manager.example.com/locationRules/1"));
+      expect(def.count()).toEqual(1);
+    });
+  });
+});
\ No newline at end of file
diff -pruN 2.0.1+ds-2/e2e-tests/manager/02-lang.js 2.0.2+ds-1/e2e-tests/manager/02-lang.js
--- 2.0.1+ds-2/e2e-tests/manager/02-lang.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/02-lang.js	1970-01-01 00:00:00.000000000 +0000
@@ -1,30 +0,0 @@
-'use strict';
-
-/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
-
-describe('02 Lemonldap::NG Manager', function() {
-
-  describe('translation', function() {
-
-    it('should translate in english and french', function() {
-      var tests = {
-        "en": "General Parameters",
-        "fr": "Paramètres généraux"
-      };
-      var els = element.all(by.css('[ng-click="getLanguage(lang)"]'));
-      expect(els.count()).toEqual(8);
-      els.each(function(el) {
-        el.isDisplayed().then(function(isVisible) {
-          if (isVisible) {
-            el.getAttribute('src').then(function(lang) {
-              lang = lang.replace(/^.*\/(\w+)\.png$/, '$1');
-              el.click();
-              var gp = element(by.id('t-generalParameters'));
-              expect(gp.getText()).toEqual(tests[lang]);
-            });
-          }
-        });
-      });
-    });
-  });
-});
diff -pruN 2.0.1+ds-2/e2e-tests/manager/02-menu.js 2.0.2+ds-1/e2e-tests/manager/02-menu.js
--- 2.0.1+ds-2/e2e-tests/manager/02-menu.js	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/02-menu.js	2019-02-04 09:52:16.000000000 +0000
@@ -0,0 +1,45 @@
+'use strict';
+
+/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
+
+describe('02 Lemonldap::NG Manger', function() {
+  describe('Menu', function() {
+    it('should translate in english and french', function() {
+      var tests = {
+        "en": "General Parameters",
+        "fr": "Paramètres généraux"
+      };
+
+      // // Login attempt
+      // browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
+      // browser.driver.findElement(by.xpath("//input[@name='user']")).sendKeys('dwho');
+      // browser.driver.findElement(by.xpath("//input[@name='password']")).sendKeys('dwho');
+      // browser.driver.findElement(by.xpath("//button[@type='submit']")).click();
+      // browser.get('/');
+
+      var els = element.all(by.css('[ng-click="getLanguage(lang)"]'));
+      expect(els.count()).toEqual(14);
+      els.each(function(el) {
+        el.isDisplayed().then(function(isVisible) {
+          if (isVisible) {
+            el.getAttribute('src').then(function(lang) {
+              lang = lang.replace(/^.*\/(\w+)\.png$/, '$1');
+              el.click();
+              var gp = element(by.id('t-generalParameters'));
+              expect(gp.getText()).toEqual(tests[lang]);
+            });
+          }
+        });
+      });
+    });
+
+    it('Should display Menu -> Links', function() {
+      element(by.id("mainlangmenu")).click();
+      browser.sleep(500);
+      var links = element.all(by.repeater('menulink in menulinks'));
+      expect(links.count()).toEqual(4);
+      expect(links.get(0).getText()).toEqual('Retour au portail');
+      expect(links.get(1).getText()).toEqual('Déconnexion');
+    });
+  });
+});
diff -pruN 2.0.1+ds-2/e2e-tests/manager/05-form.js 2.0.2+ds-1/e2e-tests/manager/05-form.js
--- 2.0.1+ds-2/e2e-tests/manager/05-form.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/05-form.js	2019-02-04 09:52:16.000000000 +0000
@@ -44,7 +44,7 @@ describe('05 Lemonldap::NG Manager', fun
       ['exportedVars', 'macros', 'groups'].forEach(function(type) {
         element(by.id('a-' + type)).click();
         element(by.id('t-' + type)).click();
-        element(by.css('.glyphicon-plus-sign')).click();
+        element.all(by.css('.glyphicon-plus-sign')).first().click();
         expect(element(by.id('t-' + type + '/n' + id)).getText()).toEqual('new');
         browser.sleep(3000);
         id++;
diff -pruN 2.0.1+ds-2/e2e-tests/manager/06-form.js 2.0.2+ds-1/e2e-tests/manager/06-form.js
--- 2.0.1+ds-2/e2e-tests/manager/06-form.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/06-form.js	2019-02-04 09:52:16.000000000 +0000
@@ -7,14 +7,19 @@ describe('06 Lemonldap::NG Manager', fun
   describe('Form control, part 2', function() {
 
     it('should display portal skin choice', function() {
-      browser.get('/#/confs/1');
+      browser.get('/#!/confs/lastest');
       element(by.id('a-generalParameters')).click();
       element(by.id('a-portalParams')).click();
       element(by.id('a-portalCustomization')).click();
       element(by.id('t-portalSkin')).click();
       element(by.css('[ng-click="showModal(\'portalSkinChoice.html\')"]')).click();
+            browser.sleep(1000);
+
       var skinChoice = element.all(by.repeater('b in currentNode.select'));
       expect(skinChoice.count()).toEqual(1);
+      element(by.css('[trspan="cancel"]')).click();
+            browser.sleep(1000);
+
     });
   });
 });
diff -pruN 2.0.1+ds-2/e2e-tests/manager/07-authParams.js 2.0.2+ds-1/e2e-tests/manager/07-authParams.js
--- 2.0.1+ds-2/e2e-tests/manager/07-authParams.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/07-authParams.js	2019-02-04 09:52:16.000000000 +0000
@@ -7,37 +7,57 @@ describe('07 Lemonldap::NG Manager', fun
   describe('Form control, part 3 - authParams', function() {
 
     it('should display auth modules chosen', function() {
-      browser.get('/#/confs/1');
+      browser.get('/#!/confs/latest');
+            browser.sleep(2000);
+
       element(by.id('a-generalParameters')).click();
+      browser.sleep(1000);
       element(by.id('a-authParams')).click();
+      browser.sleep(1000);
       element(by.id('t-authentication')).click();
+            browser.sleep(2000);
+
       expect(element(by.id('t-demoParams')).isDisplayed()).toBeTruthy();
       element(by.xpath("//option[@value='Apache']")).click();
+      browser.sleep(2000);
       expect(element(by.id('t-apacheParams')).isDisplayed()).toBeTruthy();
     });
 
     it('should display auth modules chosen with authChoice', function() {
       element(by.xpath("//option[@value='Choice']")).click();
+      browser.sleep(1000);
       expect(element(by.id('t-choiceParams')).isDisplayed()).toBeTruthy();
       element(by.id('a-choiceParams')).click();
+      browser.sleep(1000);
       element(by.id('t-authChoiceModules')).click();
-      element(by.css('.glyphicon-plus-sign')).click();
+            browser.sleep(2000);
+
+      //element(by.css('.glyphicon-plus-sign')).click();
+      browser.sleep(2000);
       element(by.id('a-authChoiceModules')).click();
+      browser.sleep(2000);
+      element.all(by.css('.glyphicon-plus-sign')).first().click();
       element(by.id('t-authChoiceModules/n1')).click();
-      element(by.xpath("//option[@value='LDAP']")).click();
+      browser.sleep(2000);
+      element.all(by.xpath("//option[@value='LDAP']")).first().click();
       expect(element(by.id('t-ldapParams')).isDisplayed()).toBeTruthy();
     });
 
     it('should display auth modules chosen with authCombination', function() {
       element(by.id('t-authentication')).click();
+      browser.sleep(1000);
       element(by.xpath("//option[@value='Combination']")).click();
+      browser.sleep(1000);
       expect(element(by.id('t-combinationParams')).isDisplayed()).toBeTruthy();
       element(by.id('a-combinationParams')).click();
+      browser.sleep(1000);
       element(by.id('t-combModules')).click();
+            browser.sleep(2000);
+
       element(by.css('.glyphicon-plus-sign')).click();
       element(by.xpath("//option[@value='DBI']")).click();
       expect(element(by.id('t-dbiParams')).isDisplayed()).toBeTruthy();
-      element(by.xpath("//option[@value='LDAP']")).click();
+      element.all(by.xpath("//option[@value='LDAP']")).first().click();
       expect(element(by.id('t-ldapParams')).isDisplayed()).toBeTruthy();
     });
   });
diff -pruN 2.0.1+ds-2/e2e-tests/manager/07-utf8.js 2.0.2+ds-1/e2e-tests/manager/07-utf8.js
--- 2.0.1+ds-2/e2e-tests/manager/07-utf8.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/07-utf8.js	2019-02-04 09:52:16.000000000 +0000
@@ -7,7 +7,7 @@ describe('07u Lemonldap::NG Manager', fu
   describe('Apply mechanism', function() {
 
     it('should be able to send UTF-8 chars', function() {
-      browser.get('/#/confs/latest');
+      browser.get('/#!/confs/latest');
       element(by.id('a-generalParameters')).click();
       element(by.id('a-advancedParams')).click();
       element(by.id('a-security')).click();
@@ -18,6 +18,8 @@ describe('07u Lemonldap::NG Manager', fu
       element(by.id('save')).click();
       element(by.id('longtextinput')).sendKeys('UTF-8 tests');
       element(by.id('saveok')).click();
+            browser.sleep(2000);
+
       element(by.id('messageok')).click();
       expect(element(by.id('cfgnum')).getText()).toEqual('2');
     });
diff -pruN 2.0.1+ds-2/e2e-tests/manager/08-apply.js 2.0.2+ds-1/e2e-tests/manager/08-apply.js
--- 2.0.1+ds-2/e2e-tests/manager/08-apply.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/08-apply.js	2019-02-04 09:52:16.000000000 +0000
@@ -7,24 +7,38 @@ describe('08 Lemonldap::NG Manager', fun
   describe('Apply mechanism', function() {
 
     it('should be able to add reload urls', function() {
-      browser.get('/#/confs/latest');
+      browser.get('/#!/confs/latest');
+      browser.sleep(1000);
       element(by.id('a-generalParameters')).click();
+      element(by.id('a-reloadParams')).click();
       element(by.id('t-reloadUrls')).click();
+            element(by.id('a-reloadUrls')).click();
+
+      browser.sleep(1000);
+      //element(by.id('a-reloadUrls')).click();
       element(by.css('.glyphicon-plus-sign')).click();
-      element(by.id('a-reloadUrls')).click();
+      browser.sleep(1000);
+
       element(by.id('t-reloadUrls/n1')).click();
-      element(by.id('hashkeyinput')).clear().sendKeys('auth.example.com:19876');
-      element(by.id('hashvalueinput')).clear().sendKeys('http://auth.example.com:19876/static/nothing');
+      browser.sleep(1000);
+      element(by.id('hashkeyinput')).clear().sendKeys('auth.example.com');
+      browser.sleep(1000);
+      element(by.id('hashvalueinput')).clear().sendKeys('http://auth.example.com:19876/static/common/icons/ok.png');
+      browser.sleep(1000);
       element(by.css('.glyphicon-plus-sign')).click();
       element(by.id('t-reloadUrls/n2')).click();
-      element(by.id('hashkeyinput')).clear().sendKeys('manager.example.com:19876');
-      element(by.id('hashvalueinput')).clear().sendKeys('http://auth.example.com:19876/static/js/manager.js');
+      element(by.id('hashkeyinput')).clear().sendKeys('manager.example.com');
+      element(by.id('hashvalueinput')).clear().sendKeys('http://manager.example.com:19876/static/js/manager.js');
+            browser.sleep(1000);
+
     });
     it('should save new configuration', function() {
       element(by.id('save')).click();
       element(by.id('longtextinput')).sendKeys('Reload URLs test');
       element(by.id('saveok')).click();
       expect(element.all(by.repeater('item in item.items')).count()).toEqual(2);
+            browser.sleep(1000);
+
       element(by.id('messageok')).click();
       expect(element(by.id('cfgnum')).getText()).toEqual('3');
     });
diff -pruN 2.0.1+ds-2/e2e-tests/manager/11-oidcop-config.js 2.0.2+ds-1/e2e-tests/manager/11-oidcop-config.js
--- 2.0.1+ds-2/e2e-tests/manager/11-oidcop-config.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/11-oidcop-config.js	2019-02-04 09:52:16.000000000 +0000
@@ -9,7 +9,7 @@ describe('11 Lemonldap::NG Manager', fun
     it('should add an OIDC OP', function() {
       browser.get('/#/confs/latest');
       element(by.id('t-oidcOPMetaDataNodes')).click();
-      element(by.css('.glyphicon-plus-sign')).click();
+      element.all(by.css('.glyphicon-plus-sign')).first().click();
       element(by.id('promptok')).click();
       browser.sleep(500);
       element(by.id('a-oidcOPMetaDataNodes/new__op-example')).click();
@@ -18,7 +18,7 @@ describe('11 Lemonldap::NG Manager', fun
       element(by.id('t-oidcOPMetaDataNodes/new__op-example/oidcOPMetaDataJWKS')).click();
       element(by.id('filetext')).sendKeys('{"c":"d"}');
       element(by.id('t-oidcOPMetaDataNodes/new__op-example/oidcOPMetaDataExportedVars')).click();
-      element(by.css('.glyphicon-plus-sign')).click();
+      element.all(by.css('.glyphicon-plus-sign')).first().click();
       //element(by.id('a-oidcOPMetaDataNodes/new__op-example/oidcOPMetaDataExportedVars')).click();
       element(by.id('t-oidcOPMetaDataNodes/new__op-example/oidcOPMetaDataExportedVars/n1')).click();
       element(by.id('hashkeyinput')).clear().sendKeys('MyKey');
diff -pruN 2.0.1+ds-2/e2e-tests/manager/12-oidcrp-config.js 2.0.2+ds-1/e2e-tests/manager/12-oidcrp-config.js
--- 2.0.1+ds-2/e2e-tests/manager/12-oidcrp-config.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/12-oidcrp-config.js	2019-02-04 09:52:16.000000000 +0000
@@ -9,12 +9,12 @@ describe('12 Lemonldap::NG Manager', fun
     it('should add an OIDC RP', function() {
       browser.get('/#/confs/latest');
       element(by.id('t-oidcRPMetaDataNodes')).click();
-      element(by.css('.glyphicon-plus-sign')).click();
+      element.all(by.css('.glyphicon-plus-sign')).first().click();
       element(by.id('promptok')).click();
       browser.sleep(500);
       element(by.id('a-oidcRPMetaDataNodes/new__rp-example')).click();
       element(by.id('t-oidcRPMetaDataNodes/new__rp-example/oidcRPMetaDataExportedVars')).click();
-      element(by.css('.glyphicon-plus-sign')).click();
+      element.all(by.css('.glyphicon-plus-sign')).first().click();
       //element(by.id('a-oidcRPMetaDataNodes/new__rp-example/oidcRPMetaDataExportedVars')).click();
       element(by.id('t-oidcRPMetaDataNodes/new__rp-example/oidcRPMetaDataExportedVars/n1')).click();
       element(by.id('hashkeyinput')).clear().sendKeys('MyKey');
@@ -24,7 +24,7 @@ describe('12 Lemonldap::NG Manager', fun
       element(by.id('t-oidcRPMetaDataNodes/new__rp-example/oidcRPMetaDataOptionsClientID')).click();
       element(by.id('textinput')).clear().sendKeys('MyClientID');
       element(by.id('t-oidcRPMetaDataNodes/new__rp-example/oidcRPMetaDataOptionsExtraClaims')).click();
-      element(by.css('.glyphicon-plus-sign')).click();
+      element.all(by.css('.glyphicon-plus-sign')).first().click();
       //element(by.id('a-oidcRPMetaDataNodes/new__rp-example/oidcRPMetaDataOptionsExtraClaims')).click();
       element(by.id('t-oidcRPMetaDataNodes/new__rp-example/oidcRPMetaDataOptionsExtraClaims/n2')).click();
       element(by.id('hashkeyinput')).clear().sendKeys('MyClaim');
diff -pruN 2.0.1+ds-2/e2e-tests/manager/35-apply-old-conf.js 2.0.2+ds-1/e2e-tests/manager/35-apply-old-conf.js
--- 2.0.1+ds-2/e2e-tests/manager/35-apply-old-conf.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/35-apply-old-conf.js	2019-02-04 09:52:16.000000000 +0000
@@ -5,14 +5,13 @@
 describe('35 Lemonldap::NG Manager', function() {
 
   it('should be able to restore an old configuration', function() {
-    browser.get('/#/confs/1');
+    browser.get('/#!/confs/1');
     element(by.id('save')).click();
     element(by.id('longtextinput')).sendKeys('Restore conf 1');
     element(by.id('saveok')).click();
-    browser.sleep(500);
     element(by.id('messageok')).click();
-    browser.sleep(500);
     element(by.id('forcesave')).click();
+    element(by.id('save')).click();
     element(by.id('longtextinput')).sendKeys('Force to restore conf 1');
     element(by.id('saveok')).click();
     element(by.id('messageok')).click();
diff -pruN 2.0.1+ds-2/e2e-tests/manager/36-diff.js 2.0.2+ds-1/e2e-tests/manager/36-diff.js
--- 2.0.1+ds-2/e2e-tests/manager/36-diff.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/36-diff.js	2019-02-04 09:52:16.000000000 +0000
@@ -7,7 +7,9 @@ describe('36 Lemonldap::NG Manager', fun
   describe('Diff interface', function() {
 
     it('should find key changed', function() {
-      browser.get('/diff.html#6/7');
+      browser.get('/diff.html#!/5/6');
+            browser.sleep(5000);
+
       element(by.id('t-generalParameters')).click();
       element(by.id('t-advancedParams')).click();
       element(by.id('t-security')).click();
diff -pruN 2.0.1+ds-2/e2e-tests/manager/40-sessions.js 2.0.2+ds-1/e2e-tests/manager/40-sessions.js
--- 2.0.1+ds-2/e2e-tests/manager/40-sessions.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/40-sessions.js	2019-02-04 09:52:16.000000000 +0000
@@ -5,18 +5,19 @@ describe('40 Lemonldap::NG Manager', fun
   it('should display other modules', function() {
     browser.get('/');
     var links = element.all(by.repeater('l in links'));
-    expect(links.count()).toEqual(3);
-    element(by.xpath("//a[@href='sessions.html']")).click();
+    expect(links.count()).toEqual(4);
+    element.all(by.xpath("//a[@href='sessions.html']")).first().click();
   });
 
 });
 
-describe('40 Lemonldap::NG Session explorer', function() {
+describe('40 Lemonldap::NG Sessions explorer', function() {
 
   var session, ip;
 
   it('Should display at least my session', function() {
     browser.get('/sessions.html');
+    expect(element.all(by.xpath("//a[@href='sessions.html']")).first().getCssValue("color")).toEqual('rgba(157, 157, 157, 1)');
     var t = element.all(by.repeater('node in data track by node.id'));
     expect(t.count()).toBeGreaterThan(0);
     element(by.id("a-d")).click();
diff -pruN 2.0.1+ds-2/e2e-tests/manager/50-2ndFA.js 2.0.2+ds-1/e2e-tests/manager/50-2ndFA.js
--- 2.0.1+ds-2/e2e-tests/manager/50-2ndFA.js	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/manager/50-2ndFA.js	2019-02-04 09:52:16.000000000 +0000
@@ -0,0 +1,68 @@
+'use strict';
+
+describe('50 Lemonldap::NG Manager', function() {
+  it('should display 2FA Sessions explorer', function() {
+    //// Login attempt
+    // browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
+    // browser.driver.findElement(by.xpath("//input[@name='user']")).sendKeys('dwho');
+    // browser.driver.findElement(by.xpath("//input[@name='password']")).sendKeys('dwho');
+    // browser.driver.findElement(by.xpath("//button[@type='submit']")).click();
+
+    browser.get('/');
+    var links = element.all(by.repeater('l in links'));
+    expect(links.count()).toEqual(4);
+    expect(element.all(by.xpath("//a[@href='2ndfa.html']")).first().getCssValue("color")).toEqual('rgba(157, 157, 157, 1)');
+    element.all(by.xpath("//a[@href='2ndfa.html']")).first().click();
+  });
+});
+
+describe('50 Lemonldap::NG 2FA Sessions explorer', function() {
+  it('Should display at least my persistent session', function() {
+    browser.get('/2ndfa.html');
+    expect(element(by.id('a-persistent')).getText()).toEqual('Explorateur sessions 2ndFA   ');
+    expect(element.all(by.css("input[type=checkbox]")).count()).toEqual(3);
+    expect(element.all(by.css("input[type=text]")).count()).toEqual(1);
+    expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(1);
+    element(by.id("a-d")).click();
+    expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(1);
+    element(by.id("s-5efe8af397fc3577e05b483aca964f1b")).click();
+    browser.sleep(500);
+  });
+
+  it('Should display Dwho session', function() {
+    expect(element(by.tagName('h1')).getText()).toEqual('Contenu de la session 5efe8af397fc3577e05b483aca964f1b');
+    var titles = element.all(by.tagName('h2'));
+    expect(titles.get(0).getText()).toEqual('Dates');
+    expect(titles.get(1).getText()).toEqual("Seconds Facteurs d'Authentification");
+    var nodes = element.all(by.className('glyphicon-minus-sign'));
+    expect(nodes.count()).toEqual(3);
+    nodes.get(0).click();
+    expect(element.all(by.className('glyphicon-minus-sign')).count()).toEqual(2);
+  });
+
+  it('Should filter persistent sessions', function() {
+    element(by.css('input[ng-model="U2FCheck"]')).click();
+    expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(1);
+    element(by.css('input[ng-model="UBKCheck"]')).click();
+    expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(1);
+    element(by.css('input[ng-model="TOTPCheck"]')).click();
+    expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(0);
+    expect(element.all(by.className('label-warning')).get(0).getText()).toEqual('Aucune donnée à afficher');
+    element(by.css('input[ng-model="TOTPCheck"]')).click();
+    expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(1);
+    element(by.css('input[ng-model="searchString"]')).clear().sendKeys('dw');
+    expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(1);
+    expect(element(by.id("a-dw")));
+    browser.sleep(500);
+    element(by.css('input[ng-model="searchString"]')).clear().sendKeys('dwho');
+    expect(element(by.id("a-dwho")));
+    browser.sleep(500);
+    element(by.css('input[ng-model="searchString"]')).clear().sendKeys('a');
+    expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(0);
+    expect(element.all(by.className('label-warning')).get(0).getText()).toEqual('Aucune donnée à afficher');
+    browser.sleep(500);
+    element(by.className('glyphicon-search')).click();
+    expect(element.all(by.repeater('node in data track by node.id')).count()).toEqual(1);
+    browser.sleep(500);
+  });
+});
diff -pruN 2.0.1+ds-2/e2e-tests/persistent/5efe8af397fc3577e05b483aca964f1b 2.0.2+ds-1/e2e-tests/persistent/5efe8af397fc3577e05b483aca964f1b
--- 2.0.1+ds-2/e2e-tests/persistent/5efe8af397fc3577e05b483aca964f1b	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/persistent/5efe8af397fc3577e05b483aca964f1b	2019-02-04 09:52:16.000000000 +0000
@@ -0,0 +1 @@
+{"_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
diff -pruN 2.0.1+ds-2/e2e-tests/portal/00-auth.js 2.0.2+ds-1/e2e-tests/portal/00-auth.js
--- 2.0.1+ds-2/e2e-tests/portal/00-auth.js	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/portal/00-auth.js	2019-02-04 09:52:16.000000000 +0000
@@ -0,0 +1,114 @@
+'use strict';
+
+/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
+
+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();
+      expect(browser.driver.findElement(by.css('[trmsg="78"]')).getText()).toEqual('Merci de saisir vos informations');
+
+      // A four inputs form + one captcha
+      browser.driver.findElements(by.className('input-group')).then(function(elems) {
+        expect(elems.length).toEqual(4);
+      });
+      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');
+      browser.driver.findElement(by.css('[trspan="back2Portal"]')).click();
+      
+      // Failed login attempt
+      browser.driver.findElement(by.xpath("//input[@name='user']")).sendKeys('dwho');
+      browser.driver.findElement(by.xpath("//input[@name='password']")).sendKeys('ohwd');
+      browser.driver.findElement(by.xpath("//input[@name='checkLogins']")).click();
+      browser.driver.findElement(by.xpath("//button[@type='submit']")).click();
+      expect(browser.driver.findElement(by.css('[trmsg="5"]')).getText()).toEqual('Mot de passe ou identifiant incorrect');
+      browser.driver.findElement(by.css('[trspan="goToPortal"]')).click();
+      
+      // Login attempt
+      browser.driver.findElement(by.xpath("//input[@name='user']")).sendKeys('dwho');
+      browser.driver.findElement(by.xpath("//input[@name='password']")).sendKeys('dwho');
+      browser.driver.findElement(by.xpath("//input[@name='checkLogins']")).click();
+      browser.driver.findElement(by.xpath("//button[@type='submit']")).click();
+
+      // Change lang
+      browser.driver.findElement(by.xpath("//img[@title='de']")).click();
+      expect(browser.driver.findElement(by.css('[trspan="info"]')).getText()).toEqual("Information");
+    });
+    it('should display history', function() {
+      // Three entries
+      browser.driver.findElements(by.xpath('//table/tbody/tr')).then(function(elems) {
+        expect(elems.length).toEqual(3);
+      });
+      // 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');
+        expect(elems[1].getText()).toEqual('Letzte Anmeldungen');
+        expect(elems[2].getText()).toEqual('Letzte fehlgeschlagene Anmeldungen');
+      });
+      browser.driver.findElements(by.xpath('//table/thead/tr/th')).then(function(elems) {
+      	expect(elems.length).toEqual(5);
+      	expect(elems[0].getText()).toEqual('Datum');
+      	expect(elems[2].getText()).toEqual('Datum');
+      	expect(elems[4].getText()).toEqual('Fehlermeldung');
+      });
+      browser.driver.findElements(by.xpath('//table/tbody/tr/td')).then(function(elems) {
+      	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[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$/);
+      browser.driver.findElement(by.xpath("//button[@type='reset']")).click();
+      expect(browser.driver.findElement(by.id('timer')).isDisplayed()).toEqual(false);
+      browser.driver.findElement(by.xpath("//button[@type='submit']")).click();
+    });
+  });
+});
\ No newline at end of file
diff -pruN 2.0.1+ds-2/e2e-tests/portal/01-menu.js 2.0.2+ds-1/e2e-tests/portal/01-menu.js
--- 2.0.1+ds-2/e2e-tests/portal/01-menu.js	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/portal/01-menu.js	2019-02-04 09:52:16.000000000 +0000
@@ -0,0 +1,133 @@
+'use strict';
+
+/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
+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();
+      browser.driver.findElement(by.xpath("//button[@type='button']")).click();
+
+      // Change password form
+      browser.driver.findElements(by.xpath('//li/a/span/img')).then(function(links) {
+        expect(links.length).toEqual(4);
+        links[1].click();
+        browser.sleep(1000);
+        browser.driver.findElement(by.xpath("//input[@name='oldpassword']")).sendKeys('dwho');
+        browser.driver.findElement(by.xpath("//input[@name='newpassword']")).sendKeys('newpwd');
+        browser.driver.findElement(by.xpath("//input[@name='confirmpassword']")).sendKeys('newpwd');
+        browser.driver.findElement(by.xpath("//button[@type='submit']")).click();
+        expect(browser.driver.findElement(by.css('[trmsg="35"]')).getText()).toEqual('Le mot de passe a été changé');
+        browser.driver.findElement(by.css('[trspan="goToPortal"]')).click();
+        browser.driver.findElement(by.xpath("//button[@type='button']")).click();
+        browser.sleep(1000);
+      });
+
+      // History page
+      browser.driver.findElements(by.xpath('//li/a/span/img')).then(function(links) {
+        expect(links.length).toEqual(4);
+        links[2].click();
+        browser.sleep(1000);
+        // Expect history with one login and one failed login
+        browser.driver.findElements(by.xpath('//main/div/div/div/div/h4')).then(function(elems) {
+          expect(elems.length).toEqual(7);
+          expect(elems[4].getText()).toEqual('Dernières connexions');
+          expect(elems[5].getText()).toEqual('Dernières connexions refusées');
+        });
+        browser.driver.findElements(by.xpath('//table/thead/tr/th')).then(function(elems) {
+          expect(elems.length).toEqual(5);
+          expect(elems[0].getText()).toEqual('Date');
+          expect(elems[1].getText()).toEqual('Adresse IP');
+          expect(elems[2].getText()).toEqual('Date');
+          expect(elems[3].getText()).toEqual('Adresse IP');
+          expect(elems[4].getText()).toEqual("Message d'erreur");
+        });
+        browser.driver.findElements(by.xpath('//table/tbody/tr/td')).then(function(elems) {
+          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[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);
+      });
+
+      // Logout page
+      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 ?');
+        expect(browser.driver.findElement(by.css('[trspan="imSure"]')).getText()).toEqual('Je suis sûr');
+        browser.driver.findElement(by.xpath("//button[@type='button']")).click();
+        browser.sleep(1000);
+      });
+
+      // Applications page
+      browser.driver.findElements(by.xpath('//li/a/span/img')).then(function(links) {
+        expect(links.length).toEqual(4);
+        links[0].click();
+        browser.sleep(1000);
+      });
+    });
+    it('Should have seven links', function() {
+      browser.driver.findElements(by.xpath('//main/div/div/div/div/h4')).then(function(elems) {
+        expect(elems.length).toEqual(7);
+        expect(elems[0].getText()).toEqual('Sample applications');
+        expect(elems[1].getText()).toEqual('Administration');
+        expect(elems[2].getText()).toEqual('Documentation');
+      });
+      browser.driver.findElements(by.xpath('//main/div/div/div/div/div/div/div/a/div/div/div/h5')).then(function(elems) {
+        expect(elems.length).toEqual(8);
+        expect(elems[0].getText()).toEqual('Application Test 1');
+        expect(elems[1].getText()).toEqual('Application Test 2');
+        expect(elems[2].getText()).toEqual('WebSSO Manager');
+        expect(elems[3].getText()).toEqual('Notifications explorer');
+        expect(elems[4].getText()).toEqual('Sessions explorer');
+        expect(elems[5].getText()).toEqual('2FA Sessions explorer');
+        expect(elems[6].getText()).toEqual('Local documentation');
+        expect(elems[7].getText()).toEqual('Official Website');
+      });
+      browser.driver.findElement(by.css('[alt="Application Test 1"]')).click();
+      browser.sleep(1000);
+      expect(browser.driver.findElement(by.id('v-Host')).getText()).toEqual('test1.example.com:' + process.env.TESTWEBSERVERPORT );
+      browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
+
+      browser.driver.findElement(by.css('[alt="Application Test 2"]')).click();
+      browser.sleep(1000);
+      expect(browser.driver.findElement(by.id('v-Host')).getText()).toEqual('test2.example.com:' + process.env.TESTWEBSERVERPORT );
+      browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
+
+      browser.driver.findElement(by.css('[alt="WebSSO Manager"]')).click();
+      expect(element.all(by.xpath("//a[@href='manager.html']")).first().getCssValue("color")).toEqual('rgba(157, 157, 157, 1)');
+      browser.sleep(1000);
+      expect(browser.driver.findElement(by.css('[trspan="currentConfiguration"]')).getText()).toEqual('Configuration actuelle');
+      browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
+
+      browser.driver.findElement(by.css('[alt="Sessions explorer"]')).click();
+      expect(element.all(by.xpath("//a[@href='sessions.html']")).first().getCssValue("color")).toEqual('rgba(157, 157, 157, 1)');
+      browser.sleep(1000);
+      expect(browser.driver.findElement(by.css('[trspan="session_s"]')).getText()).toEqual('session(s)');
+      browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
+
+      browser.driver.findElement(by.css('[alt="Notifications explorer"]')).click();
+      expect(element(by.xpath("//a[@href='notifications.html']")).getCssValue("color")).toEqual('rgba(157, 157, 157, 1)');
+      browser.sleep(1000);
+      expect(browser.driver.findElement(by.css('[trspan="noDatas"]')).getText()).toEqual('Aucune donnée à afficher');
+      browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
+
+      browser.driver.findElement(by.css('[alt="2FA Sessions explorer"]')).click();
+      expect(element.all(by.xpath("//a[@href='2ndfa.html']")).first().getCssValue("color")).toEqual('rgba(157, 157, 157, 1)');
+      browser.sleep(1000);
+      expect(browser.driver.findElement(by.id('a-persistent')).getText()).toEqual('Explorateur sessions 2ndFA   ');
+      browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
+
+      browser.driver.findElement(by.css('[alt="Local documentation"]')).click();
+      browser.sleep(1000);
+      expect(browser.driver.findElement(by.xpath("//body/div/h1")).getText()).toEqual('LemonLDAP::NG offline documentation');
+      browser.driver.findElement(by.tagName('a')).click();
+      expect(browser.driver.findElement(by.tagName('h1')).getText()).toEqual('Documentation for LemonLDAP::NG 2.0');
+      browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
+    });
+  });
+});
diff -pruN 2.0.1+ds-2/e2e-tests/portal/10-sfaManager.js 2.0.2+ds-1/e2e-tests/portal/10-sfaManager.js
--- 2.0.1+ds-2/e2e-tests/portal/10-sfaManager.js	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/portal/10-sfaManager.js	2019-02-04 09:52:16.000000000 +0000
@@ -0,0 +1,93 @@
+'use strict';
+
+/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
+describe('10 Lemonldap::NG', function() {
+  describe('Second Factor Manager', function() {
+    it('Should have two links in dropDown menu', function() {
+      // // Login attempt
+      // browser.driver.get('http://auth.example.com:' + process.env.TESTWEBSERVERPORT + '/');
+      // browser.driver.findElement(by.xpath("//input[@name='user']")).sendKeys('dwho');
+      // browser.driver.findElement(by.xpath("//input[@name='password']")).sendKeys('dwho');
+      // browser.driver.findElement(by.xpath("//button[@type='submit']")).click();
+
+      // Toggle Menu bar
+      // Need to be clicked twice ???
+      browser.driver.findElement(by.xpath("//button[@type='button']")).click();
+      browser.sleep(1000);
+      browser.driver.findElement(by.css('[data-toggle="dropdown"]')).click();
+      browser.sleep(1000);
+      browser.driver.findElement(by.xpath("//button[@type='button']")).click();
+      browser.sleep(1000);
+      browser.driver.findElement(by.css('[data-toggle="dropdown"]')).click();
+      //
+
+      browser.driver.findElements(by.className('dropdown-item')).then(function(links) {
+        expect(links.length).toEqual(2);
+        links[0].click();
+        browser.sleep(1000);
+      });
+    });
+    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');
+        expect(links[1].getText()).toEqual('Enregistrer');
+        expect(links[2].getText()).toEqual('Gestionnaire 2ndFA');
+        expect(links[3].getText()).toEqual('Aller au portail');
+        expect(browser.driver.findElement(by.css('[trspan="yourNewTotpKey"]')).getText()).toEqual('Votre nouvelle clef TOTP. Testez-la et entrez le code');
+        
+        // Submit an empty form
+        browser.driver.findElement(by.id('verify')).click();
+        expect(browser.driver.findElement(by.css('[trspan="yourNewTotpKey"]')).getText()).toEqual('Remplissez le formulaire');
+        browser.sleep(500);
+
+        // Submit a bad TOTP code
+        browser.driver.findElement(by.xpath("//input[@name='TOTPName']")).sendKeys('_TEST_');
+        browser.driver.findElement(by.xpath("//input[@name='code']")).sendKeys('1234567');
+        browser.driver.findElement(by.id('verify')).click();
+        expect(browser.driver.findElement(by.css('[trspan="yourNewTotpKey"]')).getText()).toEqual('Mauvais code');
+        browser.sleep(500);
+
+        // Generate a new TOTP code
+        browser.driver.findElement(by.id('changekey')).click();
+        expect(browser.driver.findElement(by.css('[trspan="yourNewTotpKey"]')).getText()).toEqual('Votre nouvelle clef TOTP. Testez-la et entrez le code');
+        browser.sleep(500);
+
+        // Back to Portal
+        links[3].click();
+        browser.driver.findElement(by.xpath("//button[@type='button']")).click();
+        browser.sleep(500);
+        expect(browser.driver.findElement(by.css('[trspan="yourApps"]')).getText()).toEqual('Vos applications');
+      });
+    });
+  });
+});
diff -pruN 2.0.1+ds-2/e2e-tests/portal/99-logout.js 2.0.2+ds-1/e2e-tests/portal/99-logout.js
--- 2.0.1+ds-2/e2e-tests/portal/99-logout.js	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/portal/99-logout.js	2019-02-04 09:52:16.000000000 +0000
@@ -0,0 +1,19 @@
+'use strict';
+
+/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
+
+describe('99 Lemonldap::NG auth mechanism', function() {
+  it('should allow logout', function() {
+	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
diff -pruN 2.0.1+ds-2/e2e-tests/portal/README.md 2.0.2+ds-1/e2e-tests/portal/README.md
--- 2.0.1+ds-2/e2e-tests/portal/README.md	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/portal/README.md	2019-02-04 09:52:16.000000000 +0000
@@ -0,0 +1,47 @@
+#End 2 End Testing (Protractor)
+To run the end-2-end tests against the application you use [Protractor](https://github.com/angular/protractor).
+
+## Testing with Protractor
+
+As a one-time setup, download webdriver.
+```
+npm run update-webdriver
+```
+
+Start the Protractor test runner using the e2e configuration:
+
+```
+make e2e_test
+```
+
+## Devel tips
+
+    {
+      locator_:  {
+        using: 'css selector',
+        value: '[ng-click="getLanguage(lang)"]'
+       },
+      parentElementFinder_: null,
+      opt_actionResult_: {
+        then: [Function: then],
+        cancel: [Function: cancel],
+        isPending: [Function: isPending]
+      },
+      opt_index_: 1,
+      click: [Function],
+      sendKeys: [Function],
+      getTagName: [Function],
+      getCssValue: [Function],
+      getAttribute: [Function],
+      getText: [Function],
+      getSize: [Function],
+      getLocation: [Function],
+      isEnabled: [Function],
+      isSelected: [Function],
+      submit: [Function],
+      clear: [Function],
+      isDisplayed: [Function],
+      getOuterHtml: [Function],
+      getInnerHtml: [Function],
+      toWireValue: [Function]
+    }
diff -pruN 2.0.1+ds-2/e2e-tests/protractor-conf.js 2.0.2+ds-1/e2e-tests/protractor-conf.js
--- 2.0.1+ds-2/e2e-tests/protractor-conf.js	2018-10-25 16:47:11.000000000 +0000
+++ 2.0.2+ds-1/e2e-tests/protractor-conf.js	2019-02-04 09:52:16.000000000 +0000
@@ -1,9 +1,13 @@
 exports.config = {
-  allScriptsTimeout: 11000,
+  allScriptsTimeout: 300000,
 
-  specs: ['manager/*.js', 'handler/*.js'],
+  // Specific test
+   specs: process.env.E2E_TESTS,
+  // All tests
+  //specs: ['portal/*.js', 'handler/*.js', 'manager/*.js' ],
 
-  capabilities: {
+    capabilities: {
+    //'browserName': 'firefox'
     'browserName': 'chrome'
   },
 
@@ -14,6 +18,6 @@ exports.config = {
   framework: 'jasmine',
 
   jasmineNodeOpts: {
-    defaultTimeoutInterval: 30000
+    defaultTimeoutInterval: 60000
   }
 };
\ No newline at end of file
diff -pruN 2.0.1+ds-2/_example/conf/lmConf-1.json 2.0.2+ds-1/_example/conf/lmConf-1.json
--- 2.0.1+ds-2/_example/conf/lmConf-1.json	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/_example/conf/lmConf-1.json	2019-02-08 10:08:28.000000000 +0000
@@ -75,7 +75,7 @@
                "description" : "Official LemonLDAP::NG Website",
                "display" : "on",
                "logo" : "network.png",
-               "name" : "Offical Website",
+               "name" : "Official Website",
                "uri" : "http://lemonldap-ng.org/"
             },
             "type" : "application"
@@ -86,7 +86,7 @@
    "authentication" : "Demo",
    "cfgAuthor" : "The LemonLDAP::NG team",
    "cfgNum" : 1,
-   "cfgVersion" : "2.0.0",
+   "cfgVersion" : "2.0.2",
    "cookieName" : "lemonldap",
    "demoExportedVars" : {
       "cn" : "cn",
diff -pruN 2.0.1+ds-2/_example/etc/handler-apache2.4.conf 2.0.2+ds-1/_example/etc/handler-apache2.4.conf
--- 2.0.1+ds-2/_example/etc/handler-apache2.4.conf	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/handler-apache2.4.conf	2019-02-04 09:52:16.000000000 +0000
@@ -12,9 +12,6 @@
 # IMPORTANT:
 # To protect applications, see test-apache.conf template in example files
 
-# Uncomment this if no previous NameVirtualHost declaration
-#NameVirtualHost __VHOSTLISTEN__
-
 # Load LemonLDAP::NG Handler
 PerlOptions +GlobalRequest
 PerlModule Lemonldap::NG::Handler::ApacheMP2
diff -pruN 2.0.1+ds-2/_example/etc/handler-apache2.X.conf 2.0.2+ds-1/_example/etc/handler-apache2.X.conf
--- 2.0.1+ds-2/_example/etc/handler-apache2.X.conf	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/handler-apache2.X.conf	2019-02-08 10:14:37.000000000 +0000
@@ -35,7 +35,7 @@ ErrorDocument 503 http://auth.__DNSDOMAI
     <Location /reload>
         <IfVersion >= 2.3>
             Require ip 127 ::1
-        </IfVersion> 
+        </IfVersion>
         <IfVersion < 2.3>
             Order Deny,Allow
             Deny from all
@@ -49,7 +49,7 @@ ErrorDocument 503 http://auth.__DNSDOMAI
     #<Location /status>
     #    <IfVersion >= 2.3>
     #        Require ip 127 ::1
-    #    </IfVersion> 
+    #    </IfVersion>
     #    <IfVersion < 2.3>
     #        Order Deny,Allow
     #        Deny from all
diff -pruN 2.0.1+ds-2/_example/etc/handler-nginx.conf 2.0.2+ds-1/_example/etc/handler-nginx.conf
--- 2.0.1+ds-2/_example/etc/handler-nginx.conf	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/handler-nginx.conf	2019-02-08 10:14:37.000000000 +0000
@@ -21,6 +21,15 @@ server {
   server_name reload.__DNSDOMAIN__;
   root /var/www/html;
 
+  # Uncomment this if you are running behind a reverse proxy and want
+  # LemonLDAP::NG to see the real IP address of the end user
+  # Adjust the settings to match the IP address of your reverse proxy
+  # and the header containing the original IP address
+  # As an alternative, you can use the PROXY protocol
+  #
+  #set_real_ip_from  127.0.0.1;
+  #real_ip_header    X-Forwarded-For;
+
   location = /reload {
     allow 127.0.0.1;
     deny all;
diff -pruN 2.0.1+ds-2/_example/etc/manager-apache2.4.conf 2.0.2+ds-1/_example/etc/manager-apache2.4.conf
--- 2.0.1+ds-2/_example/etc/manager-apache2.4.conf	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/manager-apache2.4.conf	2019-02-08 10:14:37.000000000 +0000
@@ -2,9 +2,6 @@
 # Apache configuration for LemonLDAP::NG Manager
 #====================================================================
 
-# Uncomment this if no previous NameVirtualHost declaration
-#NameVirtualHost __VHOSTLISTEN__
-
 # To insert LLNG user id in Apache logs, declare this format and use it in
 # CustomLog directive
 #LogFormat "%v:%p %h %l %{Lm-Remote-User}o %t \"%r\" %>s %O" llng
@@ -14,8 +11,17 @@
     ServerName manager.__DNSDOMAIN__
     LogLevel notice
     # See above to set LLNG user id in Apache logs
-    #CustomLog ${APACHE_LOG_DIR}/manager.log llng
-    #ErrorLog ${APACHE_LOG_DIR}/lm_err.log
+    #CustomLog __APACHELOGDIR__/manager.log llng
+    #ErrorLog __APACHELOGDIR__/lm_err.log
+
+    # Uncomment this if you are running behind a reverse proxy and want
+    # LemonLDAP::NG to see the real IP address of the end user
+    # Adjust the settings to match the IP address of your reverse proxy
+    # and the header containing the original IP address
+    #
+    #RemoteIPHeader X-Forwarded-For
+    #RemoteIPInternalProxy 127.0.0.1
+
 
     # FASTCGI CONFIGURATION
     # ---------------------
@@ -68,7 +74,7 @@
             Header append Vary User-Agent env=!dont-vary
         </IfModule>
     </Location>
-    
+
     # Static files (javascripts, HTML forms,...)
 
     Alias /static/ __MANAGERSTATICDIR__/
diff -pruN 2.0.1+ds-2/_example/etc/manager-apache2.conf 2.0.2+ds-1/_example/etc/manager-apache2.conf
--- 2.0.1+ds-2/_example/etc/manager-apache2.conf	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/manager-apache2.conf	2019-02-08 10:14:37.000000000 +0000
@@ -14,8 +14,8 @@
     ServerName manager.__DNSDOMAIN__
     LogLevel notice
     # See above to set LLNG user id in Apache logs
-    #CustomLog ${APACHE_LOG_DIR}/manager.log llng
-    #ErrorLog ${APACHE_LOG_DIR}/lm_err.log
+    #CustomLog __APACHELOGDIR__/manager.log llng
+    #ErrorLog __APACHELOGDIR__/lm_err.log
 
     # FASTCGI CONFIGURATION
     # ---------------------
@@ -69,7 +69,7 @@
             Header append Vary User-Agent env=!dont-vary
         </IfModule>
     </Location>
-    
+
     # Static files (javascripts, HTML forms,...)
 
     Alias /static/ __MANAGERSTATICDIR__/
diff -pruN 2.0.1+ds-2/_example/etc/manager-apache2.X.conf 2.0.2+ds-1/_example/etc/manager-apache2.X.conf
--- 2.0.1+ds-2/_example/etc/manager-apache2.X.conf	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/manager-apache2.X.conf	2019-02-08 10:14:37.000000000 +0000
@@ -14,8 +14,8 @@
     ServerName manager.__DNSDOMAIN__
     LogLevel notice
     # See above to set LLNG user id in Apache logs
-    #CustomLog ${APACHE_LOG_DIR}/manager.log llng
-    #ErrorLog ${APACHE_LOG_DIR}/lm_err.log
+    #CustomLog __APACHELOGDIR__/manager.log llng
+    #ErrorLog __APACHELOGDIR__/lm_err.log
 
     # FASTCGI CONFIGURATION
     # ---------------------
@@ -75,7 +75,7 @@
             Header append Vary User-Agent env=!dont-vary
         </IfModule>
     </Location>
-    
+
     # Static files (javascripts, HTML forms,...)
 
     Alias /static/ __MANAGERSTATICDIR__/
diff -pruN 2.0.1+ds-2/_example/etc/manager-nginx.conf 2.0.2+ds-1/_example/etc/manager-nginx.conf
--- 2.0.1+ds-2/_example/etc/manager-nginx.conf	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/manager-nginx.conf	2019-02-08 10:14:37.000000000 +0000
@@ -5,6 +5,15 @@ server {
   # Use "lm_app" format to get username in nginx.log (see nginx-lmlog.conf)
   #access_log /var/log/nginx/portal.log lm_app;
 
+  # Uncomment this if you are running behind a reverse proxy and want
+  # LemonLDAP::NG to see the real IP address of the end user
+  # Adjust the settings to match the IP address of your reverse proxy
+  # and the header containing the original IP address
+  # As an alternative, you can use the PROXY protocol
+  #
+  #set_real_ip_from  127.0.0.1;
+  #real_ip_header    X-Forwarded-For;
+
   if ($uri !~ ^/(.*\.psgi|static|doc|lib|javascript|favicon)) {
     rewrite ^/(.*)$ /manager.psgi/$1 break;
   }
diff -pruN 2.0.1+ds-2/_example/etc/portal-apache2.4.conf 2.0.2+ds-1/_example/etc/portal-apache2.4.conf
--- 2.0.1+ds-2/_example/etc/portal-apache2.4.conf	2018-12-18 08:43:46.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/portal-apache2.4.conf	2019-02-08 10:14:37.000000000 +0000
@@ -2,9 +2,6 @@
 # Apache configuration for LemonLDAP::NG Portal
 #====================================================================
 
-# Uncomment this if no previous NameVirtualHost declaration
-#NameVirtualHost __VHOSTLISTEN__
-
 # To insert LLNG user id in Apache logs, declare this format and use it in
 # CustomLog directive
 #LogFormat "%v:%p %h %l %{Lm-Remote-User}o %t \"%r\" %>s %O" llng
@@ -13,7 +10,15 @@
 <VirtualHost __VHOSTLISTEN__>
     ServerName auth.__DNSDOMAIN__
     # See above to set LLNG user id in Apache logs
-    #CustomLog /var/log/apache2/portal.log llng
+    #CustomLog __APACHELOGDIR__/portal.log llng
+
+    # Uncomment this if you are running behind a reverse proxy and want
+    # LemonLDAP::NG to see the real IP address of the end user
+    # Adjust the settings to match the IP address of your reverse proxy
+    # and the header containing the original IP address
+    #
+    #RemoteIPHeader X-Forwarded-For
+    #RemoteIPInternalProxy 127.0.0.1
 
     # DocumentRoot (FCGI scripts)
     DocumentRoot __PORTALSITEDIR__
@@ -46,7 +51,7 @@
     #FcgidInitialEnv LLNGSTATUSHOST 127.0.0.1:64321
 
     # Static files
-    Alias /static/ __PORTALSTATICDIR__/
+    Alias /static/ __PORTALSTATICDIR__
     <Directory __PORTALSTATICDIR__>
         Require all granted
         Options +FollowSymLinks
diff -pruN 2.0.1+ds-2/_example/etc/portal-apache2.conf 2.0.2+ds-1/_example/etc/portal-apache2.conf
--- 2.0.1+ds-2/_example/etc/portal-apache2.conf	2018-12-18 08:43:46.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/portal-apache2.conf	2019-02-04 09:52:16.000000000 +0000
@@ -13,7 +13,7 @@
 <VirtualHost __VHOSTLISTEN__>
     ServerName auth.__DNSDOMAIN__
     # See above to set LLNG user id in Apache logs
-    #CustomLog /var/log/apache2/portal.log llng
+    #CustomLog __APACHELOGDIR__/portal.log llng
 
     # DocumentRoot (FCGI scripts)
     DocumentRoot __PORTALSITEDIR__
@@ -47,7 +47,7 @@
     #FcgidInitialEnv LLNGSTATUSHOST 127.0.0.1:64321
 
     # Static files
-    Alias /static/ __PORTALSTATICDIR__/
+    Alias /static/ __PORTALSTATICDIR__
     <Directory __PORTALSTATICDIR__>
         Order allow,deny
         Allow from all
diff -pruN 2.0.1+ds-2/_example/etc/portal-apache2.X.conf 2.0.2+ds-1/_example/etc/portal-apache2.X.conf
--- 2.0.1+ds-2/_example/etc/portal-apache2.X.conf	2018-12-18 08:43:46.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/portal-apache2.X.conf	2019-02-04 09:52:16.000000000 +0000
@@ -13,7 +13,7 @@
 <VirtualHost __VHOSTLISTEN__>
     ServerName auth.__DNSDOMAIN__
     # See above to set LLNG user id in Apache logs
-    #CustomLog /var/log/apache2/portal.log llng
+    #CustomLog __APACHELOGDIR__/portal.log llng
 
     # DocumentRoot (FCGI scripts)
     DocumentRoot __PORTALSITEDIR__
@@ -52,7 +52,7 @@
     #FcgidInitialEnv LLNGSTATUSHOST 127.0.0.1:64321
 
     # Static files
-    Alias /static/ __PORTALSTATICDIR__/
+    Alias /static/ __PORTALSTATICDIR__
     <Directory __PORTALSTATICDIR__>
         Require all granted
         Options +FollowSymLinks
diff -pruN 2.0.1+ds-2/_example/etc/portal-nginx.conf 2.0.2+ds-1/_example/etc/portal-nginx.conf
--- 2.0.1+ds-2/_example/etc/portal-nginx.conf	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/portal-nginx.conf	2019-02-08 10:14:37.000000000 +0000
@@ -5,6 +5,15 @@ server {
   # Use "lm_app" format to get username in nginx.log (see nginx-lmlog.conf)
   #access_log /var/log/nginx/portal.log lm_app;
 
+  # Uncomment this if you are running behind a reverse proxy and want
+  # LemonLDAP::NG to see the real IP address of the end user
+  # Adjust the settings to match the IP address of your reverse proxy
+  # and the header containing the original IP address
+  # As an alternative, you can use the PROXY protocol
+  #
+  #set_real_ip_from  127.0.0.1;
+  #real_ip_header    X-Forwarded-For;
+
   if ($uri !~ ^/((static|javascript|favicon).*|.*\.psgi)) {
     rewrite ^/(.*)$ /index.psgi/$1 break;
   }
diff -pruN 2.0.1+ds-2/_example/etc/test-apache2.4.conf 2.0.2+ds-1/_example/etc/test-apache2.4.conf
--- 2.0.1+ds-2/_example/etc/test-apache2.4.conf	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/test-apache2.4.conf	2019-02-08 10:14:37.000000000 +0000
@@ -2,8 +2,6 @@
 # Apache configuration for LemonLDAP::NG sample applications
 #====================================================================
 
-# Uncomment this if no previous NameVirtualHost declaration
-#NameVirtualHost __VHOSTLISTEN__
 PerlModule Lemonldap::NG::Handler::ApacheMP2::Menu
 
 # Sample application
@@ -11,6 +9,14 @@ PerlModule Lemonldap::NG::Handler::Apach
     ServerName test1.__DNSDOMAIN__
     ServerAlias test2.__DNSDOMAIN__
 
+    # Uncomment this if you are running behind a reverse proxy and want
+    # LemonLDAP::NG to see the real IP address of the end user
+    # Adjust the settings to match the IP address of your reverse proxy
+    # and the header containing the original IP address
+    #
+    #RemoteIPHeader X-Forwarded-For
+    #RemoteIPInternalProxy 127.0.0.1
+
     # SSO protection
     PerlHeaderParserHandler Lemonldap::NG::Handler::ApacheMP2
 
diff -pruN 2.0.1+ds-2/_example/etc/test-nginx.conf 2.0.2+ds-1/_example/etc/test-nginx.conf
--- 2.0.1+ds-2/_example/etc/test-nginx.conf	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/_example/etc/test-nginx.conf	2019-02-08 10:14:37.000000000 +0000
@@ -3,6 +3,14 @@ server {
   server_name test1.__DNSDOMAIN__ test2.__DNSDOMAIN__;
   root __TESTDIR__;
 
+  # Uncomment this if you are running behind a reverse proxy and want
+  # LemonLDAP::NG to see the real IP address of the end user
+  # Adjust the settings to match the IP address of your reverse proxy
+  # and the header containing the original IP address
+  # As an alternative, you can use the PROXY protocol
+  #
+  #set_real_ip_from  127.0.0.1;
+  #real_ip_header    X-Forwarded-For;
 
   # Internal authentication request
   location = /lmauth {
@@ -61,10 +69,10 @@ server {
     # Set manually your headers
     #auth_request_set $authuser $upstream_http_auth_user;
     #proxy_set_header Auth-User $authuser;
-    # OR in the correspondinc block
+    # OR in the corresponding block
     #fastcgi_param HTTP_AUTH_USER $authuser;
 
-    # Then (if LUA not supported), change cookie header to hide LLNG cookie
+    # Then (if LUA is not supported), change cookie header to hide LLNG cookie
     #auth_request_set $lmcookie $upstream_http_cookie;
     #proxy_set_header Cookie: $lmcookie;
     # OR in the corresponding block
@@ -100,7 +108,7 @@ server {
   #  include /etc/nginx/fastcgi_params;
   #  fastcgi_pass unix:__FASTCGISOCKDIR__/llng-fastcgi.sock;
   #  fastcgi_param LLTYPE status;
-  
+
   ### Or with uWSGI
   ## include /etc/nginx/uwsgi_params;
   ## uwsgi_pass 127.0.0.1:5000;
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lemonldap-ng.ini 2.0.2+ds-1/lemonldap-ng-common/lemonldap-ng.ini
--- 2.0.1+ds-2/lemonldap-ng-common/lemonldap-ng.ini	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lemonldap-ng.ini	2019-02-11 20:17:19.000000000 +0000
@@ -204,6 +204,7 @@ languages    = en, fr, vi, it, ar
 ;useOldMenuItems=1
 ; Override error codes
 ;error_0 = You are well authenticated!
+;translations = __PORTALTEMPLATESDIR__/localeTranslations.txt
 ; Custom template parameters
 ; For example to use <TMPL_VAR NAME="myparam"> 
 ;tpl_myparam = test
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Apache/Session/Generate/SHA256.pm 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Apache/Session/Generate/SHA256.pm
--- 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Apache/Session/Generate/SHA256.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Apache/Session/Generate/SHA256.pm	2019-02-04 09:52:16.000000000 +0000
@@ -9,9 +9,10 @@
 package Lemonldap::NG::Common::Apache::Session::Generate::SHA256;
 
 use strict;
+use Crypt::URandom;
 use Digest::SHA qw(sha256 sha256_hex sha256_base64);
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 sub generate {
     my $session = shift;
@@ -23,7 +24,9 @@ sub generate {
 
     $session->{data}->{_session_id} = substr(
         Digest::SHA::sha256_hex(
-            Digest::SHA::sha256_hex( time() . {} . rand() . $$ )
+            Digest::SHA::sha256_hex(
+                time() . {} . Crypt::URandom::urandom($length) . $$
+            )
         ),
         0, $length
     );
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Cli.pm 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Cli.pm
--- 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Cli.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Cli.pm	2019-02-07 08:33:15.000000000 +0000
@@ -9,9 +9,7 @@ our $VERSION = '2.0.0';
 has confAccess => (
     is      => 'rw',
     builder => sub {
-        my $res = Lemonldap::NG::Common::Conf->new(
-            {
-                (
+        my $res = Lemonldap::NG::Common::Conf->new( { (
                     ref $_[0] && $_[0]->{iniFile}
                     ? ( confFile => $_[0]->{iniFile} )
                     : ()
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/Constants.pm 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/Constants.pm
--- 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/Constants.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/Constants.pm	2019-02-08 10:08:27.000000000 +0000
@@ -5,7 +5,7 @@ use strict;
 use Exporter 'import';
 use base qw(Exporter);
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 # CONSTANTS
 
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/DefaultValues.pm 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/DefaultValues.pm
--- 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/DefaultValues.pm	2018-12-20 13:33:54.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/DefaultValues.pm	2019-02-08 10:14:42.000000000 +0000
@@ -1,7 +1,7 @@
 # This file is generated by Lemonldap::NG::Manager::Build. Don't modify it by hand
 package Lemonldap::NG::Common::Conf::DefaultValues;
 
-our $VERSION = '2.0.1';
+our $VERSION = '2.0.2';
 
 sub defaultValues {
     return {
@@ -15,9 +15,9 @@ sub defaultValues {
                 'type'    => 'category'
             }
         },
-        'authChoiceParam'               => 'lmAuth',
-        'authentication'                => 'Demo',
-        'available2F'                   => 'UTOTP,TOTP,U2F,REST,Ext2F,Yubikey',
+        'authChoiceParam' => 'lmAuth',
+        'authentication'  => 'Demo',
+        'available2F'     => 'UTOTP,TOTP,U2F,REST,Mail2F,Ext2F,Yubikey',
         'available2FSelfRegistration'   => 'TOTP,U2F,Yubikey',
         'bruteForceProtectionMaxAge'    => 300,
         'bruteForceProtectionMaxFailed' => 3,
@@ -62,10 +62,12 @@ sub defaultValues {
               'Lemonldap::NG::Common::Apache::Session::Generate::SHA256',
             'LockDirectory' => '/var/lib/lemonldap-ng/sessions/lock/'
         },
+        'gpgDb'                     => '',
         'groups'                    => {},
         'handlerInternalCache'      => 15,
         'hiddenAttributes'          => '_password',
         'httpOnly'                  => 1,
+        'https'                     => -1,
         'infoFormMethod'            => 'get',
         'issuerDBCASPath'           => '^/cas/',
         'issuerDBCASRule'           => 1,
@@ -119,6 +121,8 @@ sub defaultValues {
         },
         'logoutServices'         => {},
         'macros'                 => {},
+        'mail2fActivation'       => 0,
+        'mail2fCodeRegex'        => '\\d{6}',
         'mailCharset'            => 'utf-8',
         'mailFrom'               => 'noreply@example.com',
         'mailSessionKey'         => 'mail',
@@ -171,6 +175,7 @@ sub defaultValues {
         'pamService'                         => 'login',
         'passwordDB'                         => 'Demo',
         'passwordResetAllowedRetries'        => 3,
+        'port'                               => -1,
         'portal'                             => 'http://auth.example.com/',
         'portalAntiFrame'                    => 1,
         'portalCheckLogins'                  => 1,
@@ -271,7 +276,6 @@ sub defaultValues {
         'totp2fRange'                             => 1,
         'totp2fSelfRegistration'                  => 0,
         'totp2fUserCanRemoveKey'                  => 1,
-        'trustedProxies'                          => '',
         'twitterAuthnLevel'                       => 1,
         'twitterUserField'                        => 'screen_name',
         'u2fActivation'                           => 0,
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/ReConstants.pm 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/ReConstants.pm
--- 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/ReConstants.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/ReConstants.pm	2019-02-08 10:08:27.000000000 +0000
@@ -5,7 +5,7 @@ use strict;
 use Exporter 'import';
 use base qw(Exporter);
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 our %EXPORT_TAGS = ( 'all' => [qw($simpleHashKeys $doubleHashKeys $specialNodeKeys $casAppMetaDataNodeKeys $casSrvMetaDataNodeKeys $oidcOPMetaDataNodeKeys $oidcRPMetaDataNodeKeys $samlIDPMetaDataNodeKeys $samlSPMetaDataNodeKeys $virtualHostKeys $specialNodeHash $authParameters $issuerParameters $samlServiceParameters $oidcServiceParameters $casServiceParameters)] );
 our @EXPORT_OK   = ( @{ $EXPORT_TAGS{'all'} } );
@@ -28,7 +28,7 @@ our $casAppMetaDataNodeKeys = 'casAppMet
 our $casSrvMetaDataNodeKeys = 'casSrvMetaData(?:Options(?:ProxiedServices|DisplayName|Gateway|Renew|Icon|Url)|ExportedVars)';
 our $oidcOPMetaDataNodeKeys = 'oidcOPMetaData(?:Options(?:C(?:lient(?:Secret|ID)|heckJWTSignature|onfigurationURI)|TokenEndpointAuthMethod|(?:JWKSTimeou|Promp)t|I(?:DTokenMaxAge|con)|S(?:toreIDToken|cope)|U(?:iLocales|seNonce)|Display(?:Name)?|AcrValues|MaxAge)|ExportedVars|J(?:SON|WKS))';
 our $oidcRPMetaDataNodeKeys = 'oidcRPMetaData(?:Options(?:(?:PostLogoutRedirectUri|ExtraClaim)s|I(?:DToken(?:Expiration|SignAlg)|con)|Logout(?:SessionRequired|Type|Url)|AccessTokenExpiration|R(?:edirectUris|ule)|Client(?:Secret|ID)|BypassConsent|DisplayName|UserIDAttr)|ExportedVars)';
-our $samlIDPMetaDataNodeKeys = 'samlIDPMetaData(?:Options(?:(?:Check(?:S[LS]OMessageSignatur|Audienc|Tim)|EncryptionMod|UserAttribut|IsPassiv)e|A(?:llow(?:LoginFromIDP|ProxiedAuthn)|daptSessionUtime)|Re(?:questedAuthnContext|solutionRule|layStateURL)|S(?:ignS[LS]OMessage|toreSAMLToken|[LS]OBinding)|Force(?:Authn|UTF8)|NameIDFormat)|ExportedAttributes|XML)';
+our $samlIDPMetaDataNodeKeys = 'samlIDPMetaData(?:Options(?:(?:Check(?:S[LS]OMessageSignatur|Audienc|Tim)|EncryptionMod|UserAttribut|DisplayNam)e|A(?:llow(?:LoginFromIDP|ProxiedAuthn)|daptSessionUtime)|Re(?:questedAuthnContext|solutionRule|layStateURL)|S(?:ignS[LS]OMessage|toreSAMLToken|[LS]OBinding)|Force(?:Authn|UTF8)|I(?:sPassive|con)|NameIDFormat)|ExportedAttributes|XML)';
 our $samlSPMetaDataNodeKeys = 'samlSPMetaData(?:Options(?:N(?:ameID(?:SessionKey|Format)|otOnOrAfterTimeout)|S(?:essionNotOnOrAfterTimeout|ignS[LS]OMessage)|(?:CheckS[LS]OMessageSignatur|OneTimeUs|Rul)e|En(?:ableIDPInitiatedURL|cryptionMode)|ForceUTF8)|ExportedAttributes|XML)';
 our $virtualHostKeys = '(?:vhost(?:A(?:uthnLevel|liases)|(?:Maintenanc|Typ)e|Https|Port)|(?:exportedHeader|locationRule)s|post)';
 
@@ -42,8 +42,9 @@ our $authParameters = {
   dbiParams => [qw(dbiAuthnLevel dbiExportedVars dbiAuthChain dbiAuthUser dbiAuthPassword dbiUserChain dbiUserUser dbiUserPassword dbiAuthTable dbiUserTable dbiAuthLoginCol dbiAuthPasswordCol dbiPasswordMailCol userPivot dbiAuthPasswordHash dbiDynamicHashEnabled dbiDynamicHashValidSchemes dbiDynamicHashValidSaltedSchemes dbiDynamicHashNewPasswordScheme)],
   demoParams => [qw(demoExportedVars)],
   facebookParams => [qw(facebookAuthnLevel facebookExportedVars facebookAppId facebookAppSecret facebookUserField)],
+  gpgParams => [qw(gpgDb)],
   kerberosParams => [qw(krbKeytab krbByJs krbAuthnLevel krbRemoveDomain)],
-  ldapParams => [qw(ldapAuthnLevel ldapExportedVars ldapServer ldapPort ldapBase managerDn managerPassword ldapTimeout ldapVersion ldapRaw LDAPFilter AuthLDAPFilter mailLDAPFilter ldapSearchDeref ldapGroupBase ldapGroupObjectClass ldapGroupAttributeName ldapGroupAttributeNameUser ldapGroupAttributeNameSearch ldapGroupRecursive ldapGroupAttributeNameGroup ldapPpolicyControl ldapSetPassword ldapChangePasswordAsUser ldapPwdEnc ldapUsePasswordResetAttribute ldapPasswordResetAttribute ldapPasswordResetAttributeValue ldapAllowResetExpiredPassword)],
+  ldapParams => [qw(ldapAuthnLevel ldapExportedVars ldapServer ldapPort ldapBase managerDn managerPassword ldapTimeout ldapVersion ldapRaw LDAPFilter AuthLDAPFilter mailLDAPFilter ldapSearchDeref ldapGroupBase ldapGroupObjectClass ldapGroupAttributeName ldapGroupAttributeNameUser ldapGroupAttributeNameSearch ldapGroupDecodeSearchedValue ldapGroupRecursive ldapGroupAttributeNameGroup ldapPpolicyControl ldapSetPassword ldapChangePasswordAsUser ldapPwdEnc ldapUsePasswordResetAttribute ldapPasswordResetAttribute ldapPasswordResetAttributeValue ldapAllowResetExpiredPassword)],
   linkedinParams => [qw(linkedInAuthnLevel linkedInClientID linkedInClientSecret linkedInFields linkedInUserField linkedInScope)],
   nullParams => [qw(nullAuthnLevel)],
   oidcParams => [qw(oidcAuthnLevel oidcRPCallbackGetParam oidcRPStateTimeout)],
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf.pm 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf.pm
--- 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf.pm	2019-02-08 10:14:42.000000000 +0000
@@ -258,14 +258,6 @@ sub setDefault {
         $conf->{$k} //= $defaultValues->{$k};
     }
 
-    # Convert old option useXForwardedForIP into trustedProxies
-    if ( defined $conf->{useXForwardedForIP}
-        and $conf->{useXForwardedForIP} == 1 )
-    {
-        $conf->{trustedProxies} = '*';
-        delete $conf->{useXForwardedForIP};
-    }
-
     # Some parameters expect key name (example), not variable ($example)
     if ( defined $conf->{whatToTrace} ) {
         $conf->{whatToTrace} =~ s/^\$//;
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Notifications/DBI.pm 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Notifications/DBI.pm
--- 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Notifications/DBI.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Notifications/DBI.pm	2019-02-07 08:33:15.000000000 +0000
@@ -11,7 +11,7 @@ use Time::Local;
 use DBI;
 use Encode;
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 extends 'Lemonldap::NG::Common::Notifications';
 
@@ -70,7 +70,7 @@ sub get {
           . $self->dbiTable
           . " WHERE done IS NULL AND uid=?"
           . ( $ref ? " AND ref=?" : '' )
-          . "ORDER BY date",
+          . " ORDER BY date",
         $uid,
         ( $ref ? $ref : () )
     ) or return ();
@@ -98,8 +98,9 @@ sub get {
 # keys date, uid and ref.
 sub getAll {
     my $self = shift;
-    $self->_execute(
-        "SELECT * FROM $self->{dbiTable} WHERE done IS NULL ORDER BY date");
+    $self->_execute( 'SELECT * FROM '
+          . $self->dbiTable
+          . ' WHERE done IS NULL ORDER BY date' );
     my $result;
     while ( my $h = $self->sth->fetchrow_hashref() ) {
         $result->{"$h->{date}#$h->{uid}#$h->{ref}"} = {
@@ -126,9 +127,10 @@ sub delete {
     my @ts = localtime();
     $ts[5] += 1900;
     $ts[4]++;
-    return $self->_execute( "UPDATE $self->{dbiTable} "
-          . "SET done='$ts[5]-$ts[4]-$ts[3] $ts[2]:$ts[1]' "
-          . "WHERE done IS NULL AND uid=? AND ref=? AND date=?",
+    return $self->_execute( 'UPDATE '
+          . $self->dbiTable
+          . " SET done='$ts[5]-$ts[4]-$ts[3] $ts[2]:$ts[1]' "
+          . 'WHERE done IS NULL AND uid=? AND ref=? AND date=?',
         $u, $r, $d );
 }
 
@@ -144,12 +146,17 @@ sub purge {
         $self->logger->warn("Bad reference $myref");
         return 0;
     }
+    unless ( $d =~ s/^(\d{4})(\d{2})(\d{2}).*$/$1-$2-$3/ ) {
+        $self->logger->warn("Bad date $d");
+        return 0;
+    }
 
     my $clause;
     $clause = "done IS NOT NULL AND" unless ($force);
 
-    return $self->_execute( "DELETE FROM $self->{dbiTable} "
-          . "WHERE $clause uid=? AND ref=? AND date=?",
+    return $self->_execute( 'DELETE FROM '
+          . $self->dbiTable
+          . " WHERE $clause uid=? AND ref=? AND date=?",
         $u, $r, $d );
 }
 
@@ -166,12 +173,13 @@ sub newNotif {
 
     my $res =
       $condition =~ /.+/
-      ? $self->_execute(
-        "INSERT INTO $self->{dbiTable} (date,uid,ref,cond,xml) "
-          . "VALUES(?,?,?,?,?)",
+      ? $self->_execute( 'INSERT INTO '
+          . $self->dbiTable
+          . ' (date,uid,ref,cond,xml) VALUES(?,?,?,?,?)',
         $date, $uid, $ref, $condition, $xml )
-      : $self->_execute(
-        "INSERT INTO $self->{dbiTable} (date,uid,ref,xml) " . "VALUES(?,?,?,?)",
+      : $self->_execute( 'INSERT INTO '
+          . $self->dbiTable
+          . ' (date,uid,ref,xml) VALUES(?,?,?,?)',
         $date, $uid, $ref, $xml );
     return $res;
 }
@@ -182,12 +190,14 @@ sub newNotif {
 # keys notified, uid and ref.
 sub getDone {
     my ($self) = @_;
-    $self->_execute(
-        "SELECT * FROM $self->{dbiTable} WHERE done IS NOT NULL ORDER BY done");
+    $self->_execute( 'SELECT * FROM '
+          . $self->dbiTable
+          . ' WHERE done IS NOT NULL ORDER BY done' );
     my $result;
     while ( my $h = $self->sth->fetchrow_hashref() ) {
         my @t = split( /\D+/, $h->{date} );
-        my $done = timelocal( $t[5], $t[4], $t[3], $t[2], $t[1], $t[0] );
+        my $done =
+          timelocal( $t[5] || 0, $t[4] || 0, $t[3] || 0, $t[2], $t[1], $t[0] );
         $result->{"$h->{date}#$h->{uid}#$h->{ref}"} =
           { notified => $done, uid => $h->{uid}, ref => $h->{ref}, };
     }
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI/Cli/Lib.pm 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI/Cli/Lib.pm
--- 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI/Cli/Lib.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI/Cli/Lib.pm	2019-02-07 08:33:15.000000000 +0000
@@ -13,8 +13,7 @@ has app => ( is => 'ro', isa => 'CodeRef
 sub _get {
     my ( $self, $path, $query ) = @_;
     $query //= '';
-    return $self->app->(
-        {
+    return $self->app->( {
             'HTTP_ACCEPT'          => 'application/json, text/plain, */*',
             'SCRIPT_NAME'          => '',
             'HTTP_ACCEPT_ENCODING' => 'gzip, deflate',
@@ -39,8 +38,7 @@ sub _post {
     my ( $self, $path, $query, $body, $type, $len ) = @_;
     die "$body must be a IO::Handle"
       unless ( ref($body) and $body->can('read') );
-    return $self->app->(
-        {
+    return $self->app->( {
             'HTTP_ACCEPT'          => 'application/json, text/plain, */*',
             'SCRIPT_NAME'          => '',
             'HTTP_ACCEPT_ENCODING' => 'gzip, deflate',
@@ -69,8 +67,7 @@ sub _put {
     my ( $self, $path, $query, $body, $type, $len ) = @_;
     die "$body must be a IO::Handle"
       unless ( ref($body) and $body->can('read') );
-    return $self->app->(
-        {
+    return $self->app->( {
             'HTTP_ACCEPT'          => 'application/json, text/plain, */*',
             'SCRIPT_NAME'          => '',
             'HTTP_ACCEPT_ENCODING' => 'gzip, deflate',
@@ -97,8 +94,7 @@ sub _put {
 
 sub _del {
     my ( $self, $path, $query ) = @_;
-    return $self->app->(
-        {
+    return $self->app->( {
             'HTTP_ACCEPT'          => 'application/json, text/plain, */*',
             'SCRIPT_NAME'          => '',
             'HTTP_ACCEPT_ENCODING' => 'gzip, deflate',
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI.pm 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI.pm
--- 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI.pm	2019-02-06 17:01:17.000000000 +0000
@@ -6,7 +6,7 @@ use JSON;
 use Lemonldap::NG::Common::PSGI::Constants;
 use Lemonldap::NG::Common::PSGI::Request;
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 our $_json = JSON->new->allow_nonref;
 
@@ -241,7 +241,7 @@ sub sendHtml {
     $args{code} ||= 200;
     $args{headers} ||= $req->respHeaders || [];
     my $htpl;
-    $template = $self->templateDir . "/$template.tpl";
+    $template = ( $args{templateDir} // $self->templateDir ) . "/$template.tpl";
     return $self->sendError( $req, "Unable to read $template", 500 )
       unless ( -r $template and -f $template );
     eval {
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Session/REST.pm 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Session/REST.pm
--- 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/Session/REST.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/Session/REST.pm	2019-02-07 08:33:15.000000000 +0000
@@ -239,8 +239,7 @@ sub session {
 
 sub getApacheSession {
     my ( $self, $mod, $id, $info, $force ) = @_;
-    my $apacheSession = Lemonldap::NG::Common::Session->new(
-        {
+    my $apacheSession = Lemonldap::NG::Common::Session->new( {
             storageModule        => $mod->{module},
             storageModuleOptions => $mod->{options},
             cacheModule =>
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/TOTP.pm 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/TOTP.pm
--- 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common/TOTP.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common/TOTP.pm	2019-02-04 09:52:16.000000000 +0000
@@ -5,10 +5,11 @@ package Lemonldap::NG::Common::TOTP;
 
 use strict;
 use Mouse;
-use Convert::Base32 'decode_base32';
+use Convert::Base32 qw(decode_base32 encode_base32);
+use Crypt::URandom;
 use Digest::HMAC_SHA1 'hmac_sha1_hex';
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 # Verify that TOTP $code matches with $secret
 sub verifyCode {
@@ -47,8 +48,7 @@ sub _code {
 # Simply generate new base32 secret
 sub newSecret {
     my ($self) = @_;
-    my @chars = ( 'a' .. 'z', 2 .. 7 );
-    return join( '', @chars[ map { int( rand(32) ) } 1 .. 32 ] );
+    return encode_base32( Crypt::URandom::urandom(20) );
 }
 
 1;
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common.pm 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common.pm
--- 2.0.1+ds-2/lemonldap-ng-common/lib/Lemonldap/NG/Common.pm	2018-12-20 13:33:54.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/lib/Lemonldap/NG/Common.pm	2019-02-04 09:52:16.000000000 +0000
@@ -1,6 +1,6 @@
 package Lemonldap::NG::Common;
 
-our $VERSION = '2.0.1';
+our $VERSION = '2.0.2';
 
 1;
 __END__
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/Makefile.PL 2.0.2+ds-1/lemonldap-ng-common/Makefile.PL
--- 2.0.1+ds-2/lemonldap-ng-common/Makefile.PL	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/Makefile.PL	2019-02-04 09:52:16.000000000 +0000
@@ -33,6 +33,7 @@ WriteMakefile(
             'Apache::Session::Browseable' => 0,
             'Convert::Base32'             => 0,
             'Cookie::Baker::XS'           => 0,
+            'Crypt::URandom'              => 0,
             'DBI'                         => 0,
             'Net::LDAP'                   => 0,
             'SOAP::Lite'                  => 0,
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/META.json 2.0.2+ds-1/lemonldap-ng-common/META.json
--- 2.0.1+ds-2/lemonldap-ng-common/META.json	2018-12-21 14:18:18.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/META.json	2019-02-12 17:23:23.000000000 +0000
@@ -4,13 +4,13 @@
       "Xavier Guimard <x.guimard@free.fr>, ClÃ©ment Oudot <clement@oodo.net>"
    ],
    "dynamic_config" : 1,
-   "generated_by" : "ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter version 2.150010",
+   "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010",
    "license" : [
       "open_source"
    ],
    "meta-spec" : {
       "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
-      "version" : "2"
+      "version" : 2
    },
    "name" : "Lemonldap-NG-Common",
    "no_index" : {
@@ -37,6 +37,7 @@
             "Apache::Session::Browseable" : "0",
             "Convert::Base32" : "0",
             "Cookie::Baker::XS" : "0",
+            "Crypt::URandom" : "0",
             "DBI" : "0",
             "LWP::Protocol::https" : "0",
             "Net::LDAP" : "0",
@@ -69,6 +70,6 @@
       ],
       "x_MailingList" : "mailto:lemonldap-ng-dev@ow2.org"
    },
-   "version" : "v2.0.1",
-   "x_serialization_backend" : "JSON::PP version 2.27400_02"
+   "version" : "v2.0.2",
+   "x_serialization_backend" : "JSON::PP version 2.97001"
 }
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/META.yml 2.0.2+ds-1/lemonldap-ng-common/META.yml
--- 2.0.1+ds-2/lemonldap-ng-common/META.yml	2018-12-21 14:18:18.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/META.yml	2019-02-12 17:23:23.000000000 +0000
@@ -9,7 +9,7 @@ build_requires:
 configure_requires:
   ExtUtils::MakeMaker: '0'
 dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter version 2.150010'
+generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010'
 license: open_source
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -23,6 +23,7 @@ recommends:
   Apache::Session::Browseable: '0'
   Convert::Base32: '0'
   Cookie::Baker::XS: '0'
+  Crypt::URandom: '0'
   DBI: '0'
   LWP::Protocol::https: '0'
   Net::LDAP: '0'
@@ -47,5 +48,5 @@ resources:
   X_twitter: https://twitter.com/lemonldapng
   homepage: http://lemonldap-ng.org/
   license: http://opensource.org/licenses/GPL-2.0
-version: v2.0.1
+version: v2.0.2
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/t/01-Common-Conf.t 2.0.2+ds-1/lemonldap-ng-common/t/01-Common-Conf.t
--- 2.0.1+ds-2/lemonldap-ng-common/t/01-Common-Conf.t	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/t/01-Common-Conf.t	2019-02-07 08:33:15.000000000 +0000
@@ -17,8 +17,7 @@ my $h;
 my $inifile     = "lemonldap-ng.ini";
 my $confsection = "configuration";
 
-ok(
-    (
+ok( (
         Lemonldap::NG::Common::Conf->new( type => 'bad' ) == 0
           and $Lemonldap::NG::Common::Conf::msg =~
           /Error: Unknown package Lemonldap::NG::Common::Conf::Backends::bad\.$/
@@ -28,8 +27,7 @@ ok(
 
 $h = bless {}, 'Lemonldap::NG::Common::Conf';
 
-ok(
-    (
+ok( (
         %$h = ( %$h, %{ $h->getLocalConf( $confsection, $inifile, 0 ) } )
           and exists $h->{localStorage}
     ),
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/t/02-Common-Conf-File.t 2.0.2+ds-1/lemonldap-ng-common/t/02-Common-Conf-File.t
--- 2.0.1+ds-2/lemonldap-ng-common/t/02-Common-Conf-File.t	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/t/02-Common-Conf-File.t	2019-02-07 08:33:15.000000000 +0000
@@ -17,8 +17,7 @@ BEGIN { use_ok('Lemonldap::NG::Common::C
 my $h;
 
 ok(
-    $h = new Lemonldap::NG::Common::Conf(
-        {
+    $h = new Lemonldap::NG::Common::Conf( {
             type    => 'File',
             dirName => "t/",
         }
@@ -43,16 +42,6 @@ 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 $!";
     $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;
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/t/03-Common-Conf-CDBI.t 2.0.2+ds-1/lemonldap-ng-common/t/03-Common-Conf-CDBI.t
--- 2.0.1+ds-2/lemonldap-ng-common/t/03-Common-Conf-CDBI.t	2018-10-25 16:47:11.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/t/03-Common-Conf-CDBI.t	2019-02-07 08:33:15.000000000 +0000
@@ -27,8 +27,7 @@ SKIP: {
     my $skipSQLite = 0;
 
     ok(
-        $h = new Lemonldap::NG::Common::Conf(
-            {
+        $h = new Lemonldap::NG::Common::Conf( {
                 type        => 'CDBI',
                 dbiChain    => "DBI:SQLite:dbname=t/lmConf.sql",
                 dbiUser     => '',
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/t/03-Common-Conf-RDBI.t 2.0.2+ds-1/lemonldap-ng-common/t/03-Common-Conf-RDBI.t
--- 2.0.1+ds-2/lemonldap-ng-common/t/03-Common-Conf-RDBI.t	2018-10-25 16:47:11.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/t/03-Common-Conf-RDBI.t	2019-02-07 08:33:15.000000000 +0000
@@ -27,8 +27,7 @@ SKIP: {
     my $skipSQLite = 0;
 
     ok(
-        $h = new Lemonldap::NG::Common::Conf(
-            {
+        $h = new Lemonldap::NG::Common::Conf( {
                 type        => 'RDBI',
                 dbiChain    => "DBI:SQLite:dbname=t/lmConf.sql",
                 dbiUser     => '',
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/t/05-Common-Conf-LDAP.t 2.0.2+ds-1/lemonldap-ng-common/t/05-Common-Conf-LDAP.t
--- 2.0.1+ds-2/lemonldap-ng-common/t/05-Common-Conf-LDAP.t	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/t/05-Common-Conf-LDAP.t	2019-02-07 08:33:15.000000000 +0000
@@ -18,8 +18,7 @@ SKIP: {
     use_ok('Lemonldap::NG::Common::Conf');
     my $h;
     ok(
-        $h = new Lemonldap::NG::Common::Conf(
-            {
+        $h = new Lemonldap::NG::Common::Conf( {
                 type             => 'LDAP',
                 ldapServer       => 'ldap://localhost',
                 ldapConfBase     => 'ou=conf,ou=websso,dc=example,dc=com',
diff -pruN 2.0.1+ds-2/lemonldap-ng-common/t/40-Common-Session.t 2.0.2+ds-1/lemonldap-ng-common/t/40-Common-Session.t
--- 2.0.1+ds-2/lemonldap-ng-common/t/40-Common-Session.t	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-common/t/40-Common-Session.t	2019-02-07 08:33:15.000000000 +0000
@@ -23,8 +23,7 @@ my $sessionOptions = {
     LockDirectory => $dir,
 };
 
-my $session = Lemonldap::NG::Common::Session->new(
-    {
+my $session = Lemonldap::NG::Common::Session->new( {
         storageModule        => $sessionModule,
         storageModuleOptions => $sessionOptions,
         kind                 => "TEST",
@@ -43,8 +42,7 @@ use_ok('Lemonldap::NG::Common::Apache::S
 $sessionOptions->{generateModule} =
   "Lemonldap::NG::Common::Apache::Session::Generate::SHA256";
 
-my $session2 = Lemonldap::NG::Common::Session->new(
-    {
+my $session2 = Lemonldap::NG::Common::Session->new( {
         storageModule        => $sessionModule,
         storageModuleOptions => $sessionOptions,
         kind                 => "TEST",
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/AuthBasic.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/AuthBasic.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/AuthBasic.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/AuthBasic.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable AuthBasic handler with Apache-2/ModPerl-2
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::ApacheMP2::AuthBasic;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/CDA.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/CDA.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/CDA.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/CDA.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable CDA handler with Apache-2/ModPerl-2
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::ApacheMP2::CDA;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/DevOps.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/DevOps.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/DevOps.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/DevOps.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable DevOps handler with Apache-2/ModPerl-2
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::ApacheMP2::DevOps;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/DevOpsST.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/DevOpsST.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/DevOpsST.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/DevOpsST.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable DevOps+ServiceToken handler with Apache-2/ModPerl-2
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::ApacheMP2::DevOpsST;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/Main.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/Main.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/Main.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/Main.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # Main ApacheMP2 adapter for LLNG handler
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::ApacheMP2::Main;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/SecureToken.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/SecureToken.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/SecureToken.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/SecureToken.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable SecureToken handler with Apache-2/ModPerl-2
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::ApacheMP2::SecureToken;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/ServiceToken.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/ServiceToken.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/ServiceToken.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/ServiceToken.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable ServiceToken handler with Apache-2/ModPerl-2
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::ApacheMP2::ServiceToken;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/ZimbraPreAuth.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/ZimbraPreAuth.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/ZimbraPreAuth.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/ZimbraPreAuth.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable ZimbraPreAuth handler with Apache-2/ModPerl-2
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::ApacheMP2::ZimbraPreAuth;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG platform class for Apache-2/ModPerl-2
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::ApacheMP2;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/AuthBasic.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/AuthBasic.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/AuthBasic.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/AuthBasic.pm	2019-02-07 08:33:15.000000000 +0000
@@ -161,8 +161,7 @@ our $_ua;
 sub ua {
     my ($class) = @_;
     return $_ua if ($_ua);
-    $_ua = Lemonldap::NG::Common::UserAgent->new(
-        {
+    $_ua = Lemonldap::NG::Common::UserAgent->new( {
             lwpOpts    => $class->localConfig->{lwpOpts},
             lwpSslOpts => $class->localConfig->{lwpSslOpts}
         }
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/CDA.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/CDA.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/CDA.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/CDA.pm	2019-02-07 08:33:15.000000000 +0000
@@ -59,8 +59,7 @@ sub getCDAInfos {
     my $infos = {};
 
     # Get the session
-    my $cdaSession = Lemonldap::NG::Common::Session->new(
-        {
+    my $cdaSession = Lemonldap::NG::Common::Session->new( {
             storageModule        => $class->tsv->{sessionStorageModule},
             storageModuleOptions => $class->tsv->{sessionStorageOptions},
             cacheModule          => $class->tsv->{sessionCacheModule},
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/DevOps.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/DevOps.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/DevOps.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/DevOps.pm	2019-02-07 08:33:15.000000000 +0000
@@ -37,8 +37,7 @@ sub loadVhostConfig {
     my $json;
     if ( $class->tsv->{useSafeJail} ) {
         my $rUrl = $req->{env}->{RULES_URL}
-          || (
-            (
+          || ( (
                 $class->localConfig->{loopBackUrl}
                 || "http://127.0.0.1:" . $req->{env}->{SERVER_PORT}
             )
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/Status.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/Status.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/Status.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/Status.pm	2019-02-06 17:01:17.000000000 +0000
@@ -9,7 +9,7 @@ use JSON qw(to_json);
 use IO::Select;
 use IO::Socket::INET;
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 our $status   = {};
 our $activity = [];
@@ -105,6 +105,7 @@ sub portalTab {
         85 => 'PE_RENEWSESSION',
         86 => 'PE_WAIT',
         87 => 'PE_MUSTAUTHN',
+        88 => 'PE_MUSTHAVEMAIL',
     };
 }
 
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Init.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Init.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Init.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Init.pm	2019-02-06 17:01:17.000000000 +0000
@@ -1,6 +1,6 @@
 package Lemonldap::NG::Handler::Main::Init;
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 package Lemonldap::NG::Handler::Main;
 
@@ -66,7 +66,9 @@ sub logLevelInit {
 # adapt server signature
 sub serverSignatureInit {
     my $class = shift;
-    $class->setServerSignature("Lemonldap::NG/$VERSION");
+    require Lemonldap::NG::Handler;
+    my $version = $Lemonldap::NG::Handler::VERSION;
+    $class->setServerSignature("Lemonldap::NG/$version");
 }
 
 ## @ifn protected void statusInit()
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Reload.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Reload.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Reload.pm	2018-12-20 13:33:54.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Reload.pm	2019-02-07 08:33:15.000000000 +0000
@@ -1,6 +1,6 @@
 package Lemonldap::NG::Handler::Main::Reload;
 
-our $VERSION = '2.0.1';
+our $VERSION = '2.0.2';
 
 package Lemonldap::NG::Handler::Main;
 
@@ -72,6 +72,7 @@ sub checkConf {
                     $class->logger->error( "Underlying object can't load conf ("
                           . ref($obj)
                           . "->$sub)" );
+                    return 0;
                 }
             }
         }
@@ -177,8 +178,7 @@ sub configReload {
 sub jailInit {
     my ( $class, $conf ) = @_;
 
-    $class->tsv->{jail} = Lemonldap::NG::Handler::Main::Jail->new(
-        {
+    $class->tsv->{jail} = Lemonldap::NG::Handler::Main::Jail->new( {
             useSafeJail     => $conf->{useSafeJail},
             customFunctions => $conf->{customFunctions},
         }
@@ -192,8 +192,7 @@ sub jailInit {
 sub defaultValuesInit {
     my ( $class, $conf ) = @_;
 
-    $class->tsv->{$_} = $conf->{$_} foreach (
-        qw(
+    $class->tsv->{$_} = $conf->{$_} foreach ( qw(
         cookieExpiration        cookieName         customFunctions httpOnly
         securedCookie           timeout            timeoutActivity
         timeoutActivityInterval useRedirectOnError useRedirectOnForbidden
@@ -204,7 +203,6 @@ sub defaultValuesInit {
     $class->tsv->{cipher} = Lemonldap::NG::Common::Crypto->new( $conf->{key} );
 
     foreach my $opt (qw(https port maintenance)) {
-        next unless defined $conf->{$opt};
 
         # Record default value in key '_'
         $class->tsv->{$opt} = { _ => $conf->{$opt} };
@@ -216,7 +214,7 @@ sub defaultValuesInit {
                 $conf->{vhostOptions}->{$vhost} ||= {};
                 my $val = $conf->{vhostOptions}->{$vhost}->{$name};
 
-                # Keep default value if $val is negative
+                # Keep global value if $val is negative
                 if ( defined $val and $val >= 0 ) {
                     $class->logger->debug(
                         "Options $opt for vhost $vhost: $val");
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Run.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Run.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Run.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Run.pm	2019-02-07 08:33:15.000000000 +0000
@@ -1,7 +1,7 @@
 # Main running methods file
 package Lemonldap::NG::Handler::Main::Run;
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 package Lemonldap::NG::Handler::Main;
 
@@ -341,8 +341,12 @@ sub hideCookie {
     my ( $class, $req ) = @_;
     $class->logger->debug("removing cookie");
     my $cookie = $req->env->{HTTP_COOKIE};
-    my $cn     = $class->tsv->{cookieName};
-    $cookie =~ s/$cn(http)?=[^,;]*[,;\s]*//og;
+    $class->logger->debug("Cookies -> $cookie");
+    my $cn = $class->tsv->{cookieName};
+    $class->logger->debug("CookieName -> $cn");
+    $cookie =~ s/\b$cn(http)?=[^,;]*[,;\s]*//og;
+    $class->logger->debug("newCookies -> $cookie");
+
     if ($cookie) {
         $class->set_header_in( $req, 'Cookie' => $cookie );
     }
@@ -398,12 +402,8 @@ sub fetchId {
     my ( $class, $req ) = @_;
     my $t                 = $req->{env}->{HTTP_COOKIE} or return 0;
     my $vhost             = $class->resolveAlias($req);
-    my $lookForHttpCookie = (
-        $class->tsv->{securedCookie} =~ /^(2|3)$/
-          and !( defined( $class->tsv->{https}->{$vhost} ) )
-        ? $class->tsv->{https}->{$vhost}
-        : $class->tsv->{https}->{_}
-    );
+    my $lookForHttpCookie = ( $class->tsv->{securedCookie} =~ /^(2|3)$/
+          and not $class->_isHttps( $req, $vhost ) );
     my $cn = $class->tsv->{cookieName};
     my $value =
       $lookForHttpCookie
@@ -437,8 +437,8 @@ sub retrieveSession {
     #     (15 seconds)
     if (    defined $class->data->{_session_id}
         and $id eq $class->data->{_session_id}
-        and ( $now - $class->dataUpdate < $class->tsv->{handlerInternalCache} )
-      )
+        and
+        ( $now - $class->dataUpdate < $class->tsv->{handlerInternalCache} ) )
     {
         $class->logger->debug("Get session $id from Handler internal cache");
         return $class->data;
@@ -446,8 +446,7 @@ sub retrieveSession {
 
     # 2. Get the session from cache or backend
     my $session = $req->data->{session} = (
-        Lemonldap::NG::Common::Session->new(
-            {
+        Lemonldap::NG::Common::Session->new( {
                 storageModule        => $class->tsv->{sessionStorageModule},
                 storageModuleOptions => $class->tsv->{sessionStorageOptions},
                 cacheModule          => $class->tsv->{sessionCacheModule},
@@ -533,23 +532,67 @@ sub retrieveSession {
     }
 }
 
+## @cmethod private int _getPort(string s)
+# Returns the port on which this vhost is accessed
+# @param $s VHost name
+# @return PORT
+
+sub _getPort {
+
+    my ( $class, $req, $vhost ) = @_;
+
+    if ( defined $class->tsv->{port}->{$vhost}
+        and ( $class->tsv->{port}->{$vhost} > 0 ) )
+    {
+        return $class->tsv->{port}->{$vhost};
+    }
+    else {
+        if ( defined $class->tsv->{port}->{_}
+            and ( $class->tsv->{port}->{_} > 0 ) )
+        {
+            return $class->tsv->{port}->{_};
+        }
+        else {
+            return $req->{env}->{SERVER_PORT};
+        }
+    }
+}
+## @cmethod private boot _isHttps(string s)
+# Returns whether this VHost should he accessed
+# via HTTPS
+# @param $s VHost name
+# @return RUE if the vhost should be accessed over HTTPS
+sub _isHttps {
+
+    my ( $class, $req, $vhost ) = @_;
+
+    if ( defined $class->tsv->{https}->{$vhost}
+        and ( $class->tsv->{https}->{$vhost} > -1 ) )
+    {
+        return $class->tsv->{https}->{$vhost};
+    }
+    else {
+        if ( defined $class->tsv->{https}->{_}
+            and ( $class->tsv->{https}->{_} > -1 ) )
+        {
+            return $class->tsv->{https}->{_};
+        }
+        else {
+            return ( ( uc( $req->{env}->{HTTPS} ) || "OFF" ) eq "ON" );
+        }
+    }
+}
+
 ## @cmethod private string _buildUrl(string s)
 # Transform /<s> into http(s?)://<host>:<port>/s
 # @param $s path
 # @return URL
 sub _buildUrl {
     my ( $class, $req, $s ) = @_;
-    my $realvhost = $req->{env}->{HTTP_HOST};
-    my $vhost     = $class->resolveAlias($req);
-    my $_https    = (
-        defined( $class->tsv->{https}->{$vhost} )
-        ? $class->tsv->{https}->{$vhost}
-        : $class->tsv->{https}->{_}
-    );
-    my $portString =
-         $class->tsv->{port}->{$vhost}
-      || $class->tsv->{port}->{_}
-      || $req->{env}->{SERVER_PORT};
+    my $realvhost  = $req->{env}->{HTTP_HOST};
+    my $vhost      = $class->resolveAlias($req);
+    my $_https     = $class->_isHttps( $req, $vhost );
+    my $portString = $class->_getPort( $req, $vhost );
     $portString = (
              ( $realvhost =~ /:\d+/ )
           or ( $_https  && $portString == 443 )
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # Common class for all handlers
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::Main;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/AuthBasic.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/AuthBasic.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/AuthBasic.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/AuthBasic.pm	2019-02-06 17:01:17.000000000 +0000
@@ -1,7 +1,7 @@
 # LLNG wrapper class to enable AuthBasic handler with auto-protected PSGI
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
-package Lemonldap::NG::Handler::Server::AuthBasic;
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
+package Lemonldap::NG::Handler::PSGI::AuthBasic;
 
 use strict;
 
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/CDA.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/CDA.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/CDA.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/CDA.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,13 +1,13 @@
 # LLNG wrapper class to enable CDA handler with auto-protected PSGI
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
-package Lemonldap::NG::Handler::Server::CDA;
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
+package Lemonldap::NG::Handler::PSGI::CDA;
 
 use strict;
 
 use base 'Lemonldap::NG::Handler::Lib::CDA',
   'Lemonldap::NG::Handler::PSGI::Main';
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 1;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/Main.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/Main.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/Main.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/Main.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # Main auto-protected PSGI adapter for LLNG handler
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::PSGI::Main;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/ServiceToken.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/ServiceToken.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/ServiceToken.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/ServiceToken.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable ServiceToken handler with FastCGI handler
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::PSGI::ServiceToken;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG platform class for auto-protected PSGI
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::PSGI;
 
 use 5.10.0;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/AuthBasic.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/AuthBasic.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/AuthBasic.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/AuthBasic.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable AuthBasic handler with FastCGI handler
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::Server::AuthBasic;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/CDA.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/CDA.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/CDA.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/CDA.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable CDA handler with FastCGI handler
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::Server::CDA;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/DevOps.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/DevOps.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/DevOps.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/DevOps.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable DevOps handler with FastCGI handler
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::Server::DevOps;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/DevOpsST.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/DevOpsST.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/DevOpsST.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/DevOpsST.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable DevOps+ServiceToken handler with FastCGI handler
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::Server::DevOpsST;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/Main.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/Main.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/Main.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/Main.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,11 +1,11 @@
 # Main FastCGI handler adapter for LLNG handler
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::Server::Main;
 
 use strict;
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 use base 'Lemonldap::NG::Handler::PSGI::Main';
 
@@ -27,10 +27,11 @@ sub set_header_in {
 
 sub unset_header_in {
     my ( $class, $req, $header ) = @_;
-    $req->{respHeaders} = [ grep { $_ ne $header } @{ $req->{respHeaders} } ];
+    $req->{respHeaders} = [ grep { $_ ne $header and $_ ne cgiName($header) }
+          @{ $req->{respHeaders} } ];
+    delete $req->{env}->{ cgiName($header) };
     $header =~ s/-/_/g;
     delete $req->{env}->{$header};
-    delete $req->{env}->{"HTTP_$header"};
 }
 
 # Inheritence is broken in this case with Debian >= jessie
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/SecureToken.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/SecureToken.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/SecureToken.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/SecureToken.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable SecureToken handler with FastCGI handler
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::Server::SecureToken;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/ServiceToken.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/ServiceToken.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/ServiceToken.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/ServiceToken.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable ServiceToken handler with FastCGI handler
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::Server::ServiceToken;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/ZimbraPreAuth.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/ZimbraPreAuth.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/ZimbraPreAuth.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server/ZimbraPreAuth.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG wrapper class to enable ZimbraPreAuth handler with FastCGI handler
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::Server::ZimbraPreAuth;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Server.pm	2019-02-06 10:31:02.000000000 +0000
@@ -1,6 +1,6 @@
 # LLNG platform class for FastCGI handler (Nginx)
 #
-# See http://lemonldap-ng.org/documentation/latest/handlerarch
+# See https://lemonldap-ng.org/documentation/latest/handlerarch
 package Lemonldap::NG::Handler::Server;
 
 use strict;
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler.pm 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/lib/Lemonldap/NG/Handler.pm	2018-12-20 13:33:54.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/lib/Lemonldap/NG/Handler.pm	2019-02-04 09:52:16.000000000 +0000
@@ -1,9 +1,9 @@
 package Lemonldap::NG::Handler;
 
-print STDERR
-"Use the appropriate handler. For Apache, use Lemonldap::NG::Handler::ApacheMP2";
+# Use the appropriate handler
+# For Apache, use Lemonldap::NG::Handler::ApacheMP2
 
-our $VERSION = '2.0.1';
+our $VERSION = '2.0.2';
 
 1;
 
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/Makefile.PL 2.0.2+ds-1/lemonldap-ng-handler/Makefile.PL
--- 2.0.1+ds-2/lemonldap-ng-handler/Makefile.PL	2018-12-21 14:18:08.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/Makefile.PL	2019-02-04 09:52:16.000000000 +0000
@@ -39,7 +39,7 @@ WriteMakefile(
         },
     },
     PREREQ_PM => {
-        'Lemonldap::NG::Common' => '2.0.1',
+        'Lemonldap::NG::Common' => '2.0.2',
         'LWP::UserAgent'        => 0,
         'Mouse'                 => 0,
         'URI'                   => 0,
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/MANIFEST 2.0.2+ds-1/lemonldap-ng-handler/MANIFEST
--- 2.0.1+ds-2/lemonldap-ng-handler/MANIFEST	2018-12-21 14:18:23.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/MANIFEST	2019-02-08 10:31:03.000000000 +0000
@@ -66,6 +66,7 @@ t/63-Lemonldap-NG-Handler-PSGI-Try.t
 t/64-Lemonldap-NG-Handler-PSGI-DevOps.t
 t/65-Lemonldap-NG-Handler-PSGI-ServiceToken.t
 t/66-Lemonldap-NG-Handler-PSGI-wildcard.t
+t/67-Lemonldap-NG-Handler-PSGI-vhostoptions.t
 t/99-pod.t
 t/lmConf-1.json
 t/sessions/lock/Apache-Session-f5eec18ebb9bc96352595e2d8ce962e8ecf7af7c9a98cb9a43f9cd181cf4b545.lock
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/META.json 2.0.2+ds-1/lemonldap-ng-handler/META.json
--- 2.0.1+ds-2/lemonldap-ng-handler/META.json	2018-12-21 14:18:18.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/META.json	2019-02-12 17:23:23.000000000 +0000
@@ -4,13 +4,13 @@
       "Xavier Guimard <x.guimard@free.fr>, ClÃ©ment Oudot <clement@oodo.net>"
    ],
    "dynamic_config" : 1,
-   "generated_by" : "ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter version 2.150010",
+   "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010",
    "license" : [
       "open_source"
    ],
    "meta-spec" : {
       "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
-      "version" : "2"
+      "version" : 2
    },
    "name" : "Lemonldap-NG-Handler",
    "no_index" : {
@@ -43,7 +43,7 @@
          },
          "requires" : {
             "LWP::UserAgent" : "0",
-            "Lemonldap::NG::Common" : "v2.0.1",
+            "Lemonldap::NG::Common" : "v2.0.2",
             "Mouse" : "0",
             "URI" : "0"
          }
@@ -58,6 +58,6 @@
       ],
       "x_MailingList" : "mailto:lemonldap-ng-dev@ow2.org"
    },
-   "version" : "v2.0.1",
-   "x_serialization_backend" : "JSON::PP version 2.27400_02"
+   "version" : "v2.0.2",
+   "x_serialization_backend" : "JSON::PP version 2.97001"
 }
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/META.yml 2.0.2+ds-1/lemonldap-ng-handler/META.yml
--- 2.0.1+ds-2/lemonldap-ng-handler/META.yml	2018-12-21 14:18:18.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/META.yml	2019-02-12 17:23:23.000000000 +0000
@@ -11,7 +11,7 @@ build_requires:
 configure_requires:
   ExtUtils::MakeMaker: '0'
 dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter version 2.150010'
+generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010'
 license: open_source
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -28,7 +28,7 @@ recommends:
   SOAP::Lite: '0'
 requires:
   LWP::UserAgent: '0'
-  Lemonldap::NG::Common: v2.0.1
+  Lemonldap::NG::Common: v2.0.2
   Mouse: '0'
   URI: '0'
 resources:
@@ -36,5 +36,5 @@ resources:
   X_twitter: https://twitter.com/lemonldapng
   homepage: http://lemonldap-ng.org/
   license: http://opensource.org/licenses/GPL-2.0
-version: v2.0.1
+version: v2.0.2
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/t/05-Lemonldap-NG-Handler-Reload.t 2.0.2+ds-1/lemonldap-ng-handler/t/05-Lemonldap-NG-Handler-Reload.t
--- 2.0.1+ds-2/lemonldap-ng-handler/t/05-Lemonldap-NG-Handler-Reload.t	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/t/05-Lemonldap-NG-Handler-Reload.t	2019-02-07 08:33:15.000000000 +0000
@@ -15,7 +15,7 @@ BEGIN {
 
 #########################
 
-# Insert your test code below, the Test::More module is use()ed here so read
+# Insert your test code below, the Test::More module is used here so read
 # its man page ( perldoc Test::More ) for help writing this test script.
 
 my $globalinit;
@@ -30,8 +30,7 @@ eval { Lemonldap::NG::Handler::Main->log
 ok( !$@, 'logLevelInit' );
 
 ok(
-    Lemonldap::NG::Handler::Main->jailInit(
-        {
+    Lemonldap::NG::Handler::Main->jailInit( {
             https        => 0,
             port         => 0,
             maintenance  => 0,
@@ -51,8 +50,7 @@ ok(
 );
 
 ok(
-    Lemonldap::NG::Handler::Main->defaultValuesInit(
-        {
+    Lemonldap::NG::Handler::Main->defaultValuesInit( {
             https        => 0,
             port         => 0,
             maintenance  => 0,
@@ -72,8 +70,7 @@ ok(
 );
 
 ok(
-    Lemonldap::NG::Handler::Main->locationRulesInit(
-        {
+    Lemonldap::NG::Handler::Main->locationRulesInit( {
             'locationRules' => {
                 'www1' => {
                     'default' => 'accept',
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/t/12-Lemonldap-NG-Handler-Jail.t 2.0.2+ds-1/lemonldap-ng-handler/t/12-Lemonldap-NG-Handler-Jail.t
--- 2.0.1+ds-2/lemonldap-ng-handler/t/12-Lemonldap-NG-Handler-Jail.t	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/t/12-Lemonldap-NG-Handler-Jail.t	2019-02-06 10:31:02.000000000 +0000
@@ -12,7 +12,7 @@ BEGIN { use_ok('Lemonldap::NG::Handler::
 
 #########################
 
-# Insert your test code below, the Test::More module is use()ed here so read
+# Insert your test code below, the Test::More module is used here so read
 # its man page ( perldoc Test::More ) for help writing this test script.
 my $res;
 
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/t/13-Lemonldap-NG-Handler-Fake-Safe.t 2.0.2+ds-1/lemonldap-ng-handler/t/13-Lemonldap-NG-Handler-Fake-Safe.t
--- 2.0.1+ds-2/lemonldap-ng-handler/t/13-Lemonldap-NG-Handler-Fake-Safe.t	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/t/13-Lemonldap-NG-Handler-Fake-Safe.t	2019-02-06 10:31:02.000000000 +0000
@@ -11,7 +11,7 @@ BEGIN { use_ok('Lemonldap::NG::Handler::
 
 #########################
 
-# Insert your test code below, the Test::More module is use()ed here so read
+# Insert your test code below, the Test::More module is used here so read
 # its man page ( perldoc Test::More ) for help writing this test script.
 
 ok(
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/t/50-Lemonldap-NG-Handler-SecureToken.t 2.0.2+ds-1/lemonldap-ng-handler/t/50-Lemonldap-NG-Handler-SecureToken.t
--- 2.0.1+ds-2/lemonldap-ng-handler/t/50-Lemonldap-NG-Handler-SecureToken.t	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/t/50-Lemonldap-NG-Handler-SecureToken.t	2019-02-06 10:31:02.000000000 +0000
@@ -30,7 +30,7 @@ open STDERR, '>/dev/null';
 
 #########################
 
-# Insert your test code below, the Test::More module is use()ed here so read
+# Insert your test code below, the Test::More module is used here so read
 # its man page ( perldoc Test::More ) for help writing this test script.
 
 SKIP: {
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/t/51-Lemonldap-NG-Handler-Zimbra.t 2.0.2+ds-1/lemonldap-ng-handler/t/51-Lemonldap-NG-Handler-Zimbra.t
--- 2.0.1+ds-2/lemonldap-ng-handler/t/51-Lemonldap-NG-Handler-Zimbra.t	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/t/51-Lemonldap-NG-Handler-Zimbra.t	2019-02-06 10:31:02.000000000 +0000
@@ -29,7 +29,7 @@ open STDERR, '>/dev/null';
 
 #########################
 
-# Insert your test code below, the Test::More module is use()ed here so read
+# Insert your test code below, the Test::More module is used here so read
 # its man page ( perldoc Test::More ) for help writing this test script.
 SKIP: {
     eval { require Digest::HMAC_SHA1 };
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/t/60-Lemonldap-NG-Handler-PSGI.t 2.0.2+ds-1/lemonldap-ng-handler/t/60-Lemonldap-NG-Handler-PSGI.t
--- 2.0.1+ds-2/lemonldap-ng-handler/t/60-Lemonldap-NG-Handler-PSGI.t	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/t/60-Lemonldap-NG-Handler-PSGI.t	2019-02-05 15:40:30.000000000 +0000
@@ -1,6 +1,7 @@
 use Test::More;
 use JSON;
 use MIME::Base64;
+use Data::Dumper;
 
 require 't/test-psgi-lib.pm';
 
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/t/63-Lemonldap-NG-Handler-PSGI-Try.t 2.0.2+ds-1/lemonldap-ng-handler/t/63-Lemonldap-NG-Handler-PSGI-Try.t
--- 2.0.1+ds-2/lemonldap-ng-handler/t/63-Lemonldap-NG-Handler-PSGI-Try.t	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/t/63-Lemonldap-NG-Handler-PSGI-Try.t	2019-02-07 08:33:15.000000000 +0000
@@ -13,8 +13,7 @@ ok( $app = module( Lemonldap::NG::Handle
 init();
 
 ok(
-    $app->init(
-        {
+    $app->init( {
             configStorage       => { type => 'File', dirName => 't' },
             localSessionStorage => '',
             logLevel            => 'warn',
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/t/67-Lemonldap-NG-Handler-PSGI-vhostoptions.t 2.0.2+ds-1/lemonldap-ng-handler/t/67-Lemonldap-NG-Handler-PSGI-vhostoptions.t
--- 2.0.1+ds-2/lemonldap-ng-handler/t/67-Lemonldap-NG-Handler-PSGI-vhostoptions.t	1970-01-01 00:00:00.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/t/67-Lemonldap-NG-Handler-PSGI-vhostoptions.t	2019-02-06 17:01:17.000000000 +0000
@@ -0,0 +1,44 @@
+use Test::More;
+use JSON;
+use MIME::Base64;
+use Data::Dumper;
+
+require 't/test-psgi-lib.pm';
+
+init(
+    'Lemonldap::NG::Handler::PSGI',
+    {
+        vhostOptions => {
+            'test1.example.com' => {
+                vhostHttps => 1,
+                vhostPort  => 443,
+            },
+        },
+        locationRules   => {},
+        exportedHeaders => {},
+        https           => undef,
+        port            => undef,
+        maintenance     => undef,
+    }
+);
+
+my $res;
+
+ok( $res = $client->_get('/'), 'Unauthentified query' );
+ok( ref($res) eq 'ARRAY', 'Response is an array' ) or explain( $res, 'array' );
+ok( $res->[0] == 302, 'Code is 302' ) or explain( $res->[0], 302 );
+my %h = @{ $res->[1] };
+ok(
+    $h{Location} eq 'http://auth.example.com/?url='
+      . encode_base64( 'https://test1.example.com/', '' ),
+    'Redirection points to portal and site is https'
+  )
+  or explain(
+    \%h,
+    'Location => http://auth.example.com/?url='
+      . encode_base64( 'https://test1.example.com/', '' )
+  );
+
+count(4);
+done_testing( count() );
+clean();
diff -pruN 2.0.1+ds-2/lemonldap-ng-handler/t/test-psgi-lib.pm 2.0.2+ds-1/lemonldap-ng-handler/t/test-psgi-lib.pm
--- 2.0.1+ds-2/lemonldap-ng-handler/t/test-psgi-lib.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-handler/t/test-psgi-lib.pm	2019-02-07 08:33:15.000000000 +0000
@@ -105,8 +105,7 @@ sub _get {
     my ( $self, $path, $query, $host, $cookie, %custom ) = @_;
     $query //= '';
     $host ||= 'test1.example.com';
-    return $self->app->(
-        {
+    return $self->app->( {
             'HTTP_ACCEPT'          => 'text/html',
             'SCRIPT_NAME'          => 'lmAuth',
             'SERVER_NAME'          => '127.0.0.1',
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/2ndFA.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/2ndFA.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/2ndFA.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/2ndFA.pm	2019-02-06 17:01:17.000000000 +0000
@@ -16,7 +16,7 @@ use feature 'state';
 extends 'Lemonldap::NG::Common::Conf::AccessLib',
   'Lemonldap::NG::Common::Session::REST';
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 #############################
 # I. INITIALIZATION METHODS #
@@ -42,26 +42,10 @@ sub addRoutes {
         ['DELETE']
       );
 
-    ## ADD 2FA DEVICE
-    #->addRoute(
-    #sfa => { ':sessionType' => { ':sessionId' => 'add2FA' } },
-    #['PUT']
-    #)
-
-    ## VERIFY 2FA DEVICE
-    #->addRoute(
-    #sfa => { ':sessionType' => { ':sessionId' => 'verify2FA' } },
-    #['POST']
-    #);
-
     $self->setTypes($conf);
-
-    #$self->{ipField}              ||= 'ipAddr';
     $self->{multiValuesSeparator} ||= '; ';
     $self->{hiddenAttributes} //= "_password";
-    $self->{TOTPCheck} = '1';
-    $self->{U2FCheck}  = '1';
-    $self->{UBKCheck}  = '1';
+    $self->{TOTPCheck} = $self->{U2FCheck} = $self->{UBKCheck} = '1';
 }
 
 ###################
@@ -91,26 +75,6 @@ sub del2F {
     }
 }
 
-#sub add2FA {
-
-#my ( $self, $req, $session, $skey ) = @_;
-
-#eval 'use Crypt::U2F::Server::Simple';
-#if ($@) {
-#$self->error("Can't load U2F library: $@");
-#return 0;
-#}
-
-#return $self->addU2FKey( $req, $session, $skey );
-#}
-
-#sub verify2FA {
-
-#my ( $self, $req, $session, $skey ) = @_;
-
-#return $self->addU2FKey( $req, $session, $skey );
-#}
-
 ########################
 # III. DISPLAY METHODS #
 ########################
@@ -120,7 +84,6 @@ sub sfa {
 
     # Case 1: only one session is required
     if ($session) {
-
         return $self->session( $req, $session, $skey );
     }
 
@@ -243,14 +206,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 );
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm	2018-12-20 13:33:54.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm	2019-02-08 10:14:42.000000000 +0000
@@ -1,24 +1,24 @@
 # This file is generated by Lemonldap::NG::Manager::Build. Don't modify it by hand
 package Lemonldap::NG::Manager::Attributes;
 
-our $VERSION = '2.0.1';
+our $VERSION = '2.0.2';
 
 sub types {
     return {
         'array' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'authParamsText' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'blackWhiteList' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'bool' => {
             'msgFail' => '__notABoolean__',
@@ -36,17 +36,17 @@ sub types {
                         split( /\n/, $@, 0 ) )
                 );
                 return $err ? ( 1, "__badExpression__: $err" ) : 1;
-            }
+              }
         },
         'catAndAppList' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'file' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'hostname' => {
             'form'    => 'text',
@@ -80,48 +80,48 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-
                       if $_ =~ /exportedvars$/i and defined $conf->{$_}{$val};
                 }
                 return 1, "__unknownAttrOrMacro__: $val";
-            }
+              }
         },
         'longtext' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'menuApp' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'menuCat' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'oidcmetadatajson' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'oidcmetadatajwks' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'oidcOPMetaDataNode' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'oidcRPMetaDataNode' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'password' => {
             'msgFail' => '__malformedValue__',
             'test'    => sub {
                 1;
-            }
+              }
         },
         'pcre' => {
             'form' => 'text',
@@ -132,7 +132,7 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-
                       }
                 };
                 return $@ ? ( 0, "__badRegexp__: $@" ) : 1;
-            }
+              }
         },
         'PerlModule' => {
             'form'    => 'text',
@@ -142,17 +142,17 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-
         'portalskin' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'portalskinbackground' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'post' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'RSAPrivateKey' => {
             'test' => sub {
@@ -160,7 +160,7 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-
 m[^(?:(?:\-+\s*BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY\s*\-+\r?\n)?(?:Proc-Type:.*\r?\nDEK-Info:.*\r?\n[\r\n]*)?[a-zA-Z0-9/\+\r\n]+={0,2}(?:\r?\n\-+\s*END\s+(?:RSA\s+)PRIVATE\s+KEY\s*\-+)?[\r\n]*)?$]s
                   ? 1
                   : ( 1, '__badPemEncoding__' );
-            }
+              }
         },
         'RSAPublicKey' => {
             'test' => sub {
@@ -168,7 +168,7 @@ m[^(?:(?:\-+\s*BEGIN\s+(?:RSA\s+)?PRIVAT
 m[^(?:(?:\-+\s*BEGIN\s+PUBLIC\s+KEY\s*\-+\r?\n)?[a-zA-Z0-9/\+\r\n]+={0,2}(?:\r?\n\-+\s*END\s+PUBLIC\s+KEY\s*\-+)?[\r\n]*)?$]s
                   ? 1
                   : ( 1, '__badPemEncoding__' );
-            }
+              }
         },
         'RSAPublicKeyOrCertificate' => {
             'test' => sub {
@@ -176,37 +176,37 @@ m[^(?:(?:\-+\s*BEGIN\s+PUBLIC\s+KEY\s*\-
 m[^(?:(?:\-+\s*BEGIN\s+(?:PUBLIC\s+KEY|CERTIFICATE)\s*\-+\r?\n)?[a-zA-Z0-9/\+\r\n]+={0,2}(?:\r?\n\-+\s*END\s+(?:PUBLIC\s+KEY|CERTIFICATE)\s*\-+)?[\r\n]*)?$]s
                   ? 1
                   : ( 1, '__badPemEncoding__' );
-            }
+              }
         },
         'rule' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'samlAssertion' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'samlAttribute' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'samlIDPMetaDataNode' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'samlService' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'samlSPMetaDataNode' => {
             'test' => sub {
                 1;
-            }
+              }
         },
         'select' => {
             'test' => sub {
@@ -216,19 +216,19 @@ m[^(?:(?:\-+\s*BEGIN\s+(?:PUBLIC\s+KEY|C
                 return $test
                   ? 1
                   : ( 1, "Invalid value '$_[0]' for this select" );
-            }
+              }
         },
         'subContainer' => {
             'keyTest' => qr/\w/,
             'test'    => sub {
                 1;
-            }
+              }
         },
         'text' => {
             'msgFail' => '__malformedValue__',
             'test'    => sub {
                 1;
-            }
+              }
         },
         'trool' => {
             'msgFail' => '__authorizedValues__: -1, 0, 1',
@@ -274,9 +274,7 @@ sub attributes {
         'authChoiceModules' => {
             'keyMsgFail' => '__badChoiceKey__',
             'keyTest'    => qr/^(\d*)?[a-zA-Z0-9_]+$/,
-            'select'     => [
-                [
-                    {
+            'select'     => [ [ {
                         'k' => 'Apache',
                         'v' => 'Apache'
                     },
@@ -301,8 +299,8 @@ sub attributes {
                         'v' => 'Facebook'
                     },
                     {
-                        'k' => 'Google',
-                        'v' => 'Google'
+                        'k' => 'GPG',
+                        'v' => 'GPG'
                     },
                     {
                         'k' => 'Kerberos',
@@ -373,8 +371,7 @@ sub attributes {
                         'v' => 'customModule'
                     }
                 ],
-                [
-                    {
+                [ {
                         'k' => 'AD',
                         'v' => 'Active Directory'
                     },
@@ -395,10 +392,6 @@ sub attributes {
                         'v' => 'Facebook'
                     },
                     {
-                        'k' => 'Google',
-                        'v' => 'Google'
-                    },
-                    {
                         'k' => 'LDAP',
                         'v' => 'LDAP'
                     },
@@ -443,8 +436,7 @@ sub attributes {
                         'v' => 'customModule'
                     }
                 ],
-                [
-                    {
+                [ {
                         'k' => 'AD',
                         'v' => 'Active Directory'
                     },
@@ -485,8 +477,7 @@ sub attributes {
         },
         'authentication' => {
             'default' => 'Demo',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'Apache',
                     'v' => 'Apache'
                 },
@@ -503,8 +494,8 @@ sub attributes {
                     'v' => 'Facebook'
                 },
                 {
-                    'k' => 'Google',
-                    'v' => 'Google'
+                    'k' => 'GPG',
+                    'v' => 'GPG'
                 },
                 {
                     'k' => 'Kerberos',
@@ -600,7 +591,7 @@ sub attributes {
             'type' => 'keyTextContainer'
         },
         'available2F' => {
-            'default' => 'UTOTP,TOTP,U2F,REST,Ext2F,Yubikey',
+            'default' => 'UTOTP,TOTP,U2F,REST,Mail2F,Ext2F,Yubikey',
             'type'    => 'text'
         },
         'available2FSelfRegistration' => {
@@ -641,8 +632,7 @@ sub attributes {
         },
         'casAccessControlPolicy' => {
             'default' => 'none',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'none',
                     'v' => 'None'
                 },
@@ -786,8 +776,7 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
         },
         'combModules' => {
             'keyTest' => qr/^\w+$/,
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'Apache',
                     'v' => 'Apache'
                 },
@@ -804,8 +793,8 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
                     'v' => 'Facebook'
                 },
                 {
-                    'k' => 'Google',
-                    'v' => 'Google'
+                    'k' => 'GPG',
+                    'v' => 'GPG'
                 },
                 {
                     'k' => 'Kerberos',
@@ -890,8 +879,7 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
         },
         'confirmFormMethod' => {
             'default' => 'post',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'get',
                     'v' => 'GET'
                 },
@@ -1058,7 +1046,7 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
                             split( /\n/, $@, 0 ) )
                     );
                     return $err ? ( 1, "__badExpression__: $err" ) : 1;
-                }
+                  }
             },
             'type' => 'keyTextContainer'
         },
@@ -1131,6 +1119,10 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
             },
             'type' => 'keyTextContainer'
         },
+        'gpgDb' => {
+            'default' => '',
+            'type'    => 'text'
+        },
         'grantSessionRules' => {
             'keyTest' => sub {
                 my ( $val, $conf ) = @_;
@@ -1180,13 +1172,12 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
             'type'    => 'bool'
         },
         'https' => {
-            'default' => 0,
-            'type'    => 'bool'
+            'default' => -1,
+            'type'    => 'trool'
         },
         'infoFormMethod' => {
             'default' => 'get',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'get',
                     'v' => 'GET'
                 },
@@ -1231,7 +1222,7 @@ qr/^(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*
                           and defined $conf->{$_}{$val};
                     }
                     return 1, "__unknownAttrOrMacro__: $val";
-                }
+                  }
             },
             'type' => 'doubleHash'
         },
@@ -1353,6 +1344,10 @@ qr/^(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*
         'ldapGroupBase' => {
             'type' => 'text'
         },
+        'ldapGroupDecodeSearchedValue' => {
+            'default' => 0,
+            'type'    => 'bool'
+        },
         'ldapGroupObjectClass' => {
             'default' => 'groupOfNames',
             'type'    => 'text'
@@ -1388,8 +1383,7 @@ qr/^(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*
         },
         'ldapSearchDeref' => {
             'default' => 'find',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'never',
                     'v' => 'never'
                 },
@@ -1514,7 +1508,7 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
                             split( /\n/, $@, 0 ) )
                     );
                     return $err ? ( 1, "__badExpression__: $err" ) : 1;
-                }
+                  }
             },
             'type' => 'ruleContainer'
         },
@@ -1558,6 +1552,29 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
             },
             'type' => 'keyTextContainer'
         },
+        'mail2fActivation' => {
+            'default' => 0,
+            'type'    => 'boolOrExpr'
+        },
+        'mail2fAuthnLevel' => {
+            'type' => 'int'
+        },
+        'mail2fBody' => {
+            'type' => 'longtext'
+        },
+        'mail2fCodeRegex' => {
+            'default' => '\\d{6}',
+            'type'    => 'pcre'
+        },
+        'mail2fLogo' => {
+            'type' => 'text'
+        },
+        'mail2fSubject' => {
+            'type' => 'text'
+        },
+        'mail2fTimeout' => {
+            'type' => 'int'
+        },
         'mailBody' => {
             'type' => 'longtext'
         },
@@ -1723,8 +1740,7 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
         },
         'oidcOPMetaDataOptionsDisplay' => {
             'default' => '',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => '',
                     'v' => ''
                 },
@@ -1778,8 +1794,7 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
         },
         'oidcOPMetaDataOptionsTokenEndpointAuthMethod' => {
             'default' => 'client_secret_post',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'client_secret_post',
                     'v' => 'client_secret_post'
                 },
@@ -1845,8 +1860,7 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
         },
         'oidcRPMetaDataOptionsIDTokenSignAlg' => {
             'default' => 'HS512',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'none',
                     'v' => 'None'
                 },
@@ -1883,8 +1897,7 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
         },
         'oidcRPMetaDataOptionsLogoutType' => {
             'default' => 'front',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'front',
                     'v' => 'Front Channel'
                 },
@@ -2081,8 +2094,7 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
         },
         'passwordDB' => {
             'default' => 'Demo',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'AD',
                     'v' => 'Active Directory'
                 },
@@ -2128,7 +2140,8 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
             'type' => 'keyTextContainer'
         },
         'port' => {
-            'type' => 'int'
+            'default' => -1,
+            'type'    => 'int'
         },
         'portal' => {
             'default' => 'http://auth.example.com/',
@@ -2207,8 +2220,7 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
         },
         'portalSkin' => {
             'default' => 'bootstrap',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'bootstrap',
                     'v' => 'Bootstrap'
                 }
@@ -2216,8 +2228,7 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
             'type' => 'portalskin'
         },
         'portalSkinBackground' => {
-            'select' => [
-                {
+            'select' => [ {
                     'k' => '',
                     'v' => 'None'
                 },
@@ -2319,8 +2330,7 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
         },
         'redirectFormMethod' => {
             'default' => 'get',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'get',
                     'v' => 'GET'
                 },
@@ -2336,8 +2346,7 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-
         },
         'registerDB' => {
             'default' => 'Null',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'AD',
                     'v' => 'Active Directory'
                 },
@@ -2563,10 +2572,12 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
             'default' => 1,
             'type'    => 'bool'
         },
+        'samlIDPMetaDataOptionsDisplayName' => {
+            'type' => 'text'
+        },
         'samlIDPMetaDataOptionsEncryptionMode' => {
             'default' => 'none',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'none',
                     'v' => 'None'
                 },
@@ -2589,14 +2600,16 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
             'default' => 0,
             'type'    => 'bool'
         },
+        'samlIDPMetaDataOptionsIcon' => {
+            'type' => 'text'
+        },
         'samlIDPMetaDataOptionsIsPassive' => {
             'default' => 0,
             'type'    => 'bool'
         },
         'samlIDPMetaDataOptionsNameIDFormat' => {
             'default' => '',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => '',
                     'v' => ''
                 },
@@ -2645,8 +2658,7 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
         },
         'samlIDPMetaDataOptionsRequestedAuthnContext' => {
             'default' => '',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => '',
                     'v' => ''
                 },
@@ -2683,8 +2695,7 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
         },
         'samlIDPMetaDataOptionsSLOBinding' => {
             'default' => '',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => '',
                     'v' => ''
                 },
@@ -2705,8 +2716,7 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
         },
         'samlIDPMetaDataOptionsSSOBinding' => {
             'default' => '',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => '',
                     'v' => ''
                 },
@@ -2743,7 +2753,7 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
                     unless ( $v->{$idpId}{'samlIDPMetaDataXML'} =~
                         /entityID="(.+?)"/is )
                     {
-                        push @msg, "$idpId SAML metadata has ne EntityID";
+                        push @msg, "$idpId SAML metadata has no EntityID";
                         $res = 0;
                         next;
                     }
@@ -2864,8 +2874,7 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
         },
         'samlServiceSignatureMethod' => {
             'default' => 'RSA_SHA1',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'RSA_SHA1',
                     'v' => 'RSA SHA1'
                 },
@@ -2910,8 +2919,7 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
         },
         'samlSPMetaDataOptionsEncryptionMode' => {
             'default' => 'none',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'none',
                     'v' => 'None'
                 },
@@ -2932,8 +2940,7 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
         },
         'samlSPMetaDataOptionsNameIDFormat' => {
             'default' => '',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => '',
                     'v' => ''
                 },
@@ -3066,8 +3073,7 @@ qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[
         },
         'securedCookie' => {
             'default' => 0,
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => '0',
                     'v' => 'unsecuredCookie'
                 },
@@ -3187,8 +3193,7 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-
         },
         'SMTPTLS' => {
             'default' => '',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => '',
                     'v' => 'none'
                 },
@@ -3320,10 +3325,6 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-
         'trustedDomains' => {
             'type' => 'text'
         },
-        'trustedProxies' => {
-            'default' => '',
-            'type'    => 'text'
-        },
         'twitterAppName' => {
             'type' => 'text'
         },
@@ -3366,8 +3367,7 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-
         },
         'userDB' => {
             'default' => 'Same',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'Same',
                     'v' => 'Same'
                 },
@@ -3449,8 +3449,7 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-
         },
         'vhostType' => {
             'default' => 'Main',
-            'select'  => [
-                {
+            'select'  => [ {
                     'k' => 'Main',
                     'v' => 'Main'
                 },
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm	2018-12-20 13:33:54.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm	2019-02-08 10:14:42.000000000 +0000
@@ -6,11 +6,10 @@
 
 package Lemonldap::NG::Manager::Build::Attributes;
 
-our $VERSION = '2.0.1';
+our $VERSION = '2.0.2';
 use strict;
 use Regexp::Common qw/URI/;
 
-
 my $perlExpr = sub {
     my ( $val, $conf ) = @_;
     my $s = '';
@@ -292,8 +291,8 @@ sub attributes {
             flags         => 'hmp',
         },
         https => {
-            default       => 0,
-            type          => 'bool',
+            default       => -1,
+            type          => 'trool',
             documentation => 'Use HTTPS for redirection from portal',
             flags         => 'h',
         },
@@ -305,6 +304,7 @@ sub attributes {
             documentation => 'HTTP method for info page form',
         },
         port => {
+            default       => -1,
             type          => 'int',
             documentation => 'Force port in redirection',
             flags         => 'h',
@@ -612,7 +612,7 @@ sub attributes {
             default => 300,
             type    => 'int',
             documentation =>
-              'Brute force attack protection -> Max age between last and first allowed failed login',
+'Brute force attack protection -> Max age between last and first allowed failed login',
         },
         bruteForceProtectionMaxFailed => {
             default => 3,
@@ -712,11 +712,6 @@ sub attributes {
             default       => 60,
             documentation => 'Update session timeout interval on server side',
         },
-        trustedProxies => {
-            type          => 'text',
-            default       => '',
-            documentation => 'Trusted proxies',
-        },
         userControl => {
             type          => 'pcre',
             default       => '^[\w\.\-@]+$',
@@ -1085,47 +1080,7 @@ sub attributes {
             documentation => 'Hide old password in portal',
         },
 
-        # Mails
-        mailBody =>
-          { type => 'longtext', documentation => 'Custom mail body', },
-        mailCharset => {
-            type          => 'text',
-            default       => 'utf-8',
-            documentation => 'Mail charset',
-        },
-        mailConfirmBody => {
-            type          => 'longtext',
-            documentation => 'Custom confirm mail body',
-        },
-        mailConfirmSubject => {
-            type          => 'text',
-            documentation => 'Mail subject for reset confirmation',
-        },
-        mailFrom => {
-            type          => 'text',
-            default       => 'noreply@example.com',
-            documentation => 'Sender email',
-        },
-        mailReplyTo => { type => 'text', documentation => 'Reply-To address' },
-        mailSessionKey => {
-            type          => 'text',
-            default       => 'mail',
-            documentation => 'Session parameter where mail is stored',
-        },
-        mailSubject => {
-            type          => 'text',
-            documentation => 'Mail subject for new password email',
-        },
-        mailTimeout => {
-            type          => 'int',
-            default       => 0,
-            documentation => 'Mail session timeout',
-        },
-        mailUrl => {
-            type          => 'url',
-            default       => 'http://auth.example.com/resetpwd',
-            documentation => 'URL of password reset page',
-        },
+        # SMTP server
         SMTPServer => {
             type    => 'text',
             default => '',
@@ -1159,6 +1114,54 @@ sub attributes {
             documentation => 'Password to use to send mails',
         },
 
+        # Mails
+        mailCharset => {
+            type          => 'text',
+            default       => 'utf-8',
+            documentation => 'Mail charset',
+        },
+        mailFrom => {
+            type          => 'text',
+            default       => 'noreply@example.com',
+            documentation => 'Sender email',
+        },
+        mailSessionKey => {
+            type          => 'text',
+            default       => 'mail',
+            documentation => 'Session parameter where mail is stored',
+        },
+        mailReplyTo => { type => 'text', documentation => 'Reply-To address' },
+        mailTimeout => {
+            type          => 'int',
+            default       => 0,
+            documentation => 'Mail password reset session timeout',
+        },
+
+        # Password reset
+        mailBody => {
+            type          => 'longtext',
+            documentation => 'Custom password reset mail body',
+        },
+
+        mailConfirmBody => {
+            type          => 'longtext',
+            documentation => 'Custom confirm password reset mail body',
+        },
+        mailConfirmSubject => {
+            type          => 'text',
+            documentation => 'Mail subject for reset confirmation',
+        },
+        mailSubject => {
+            type          => 'text',
+            documentation => 'Mail subject for new password email',
+        },
+
+        mailUrl => {
+            type          => 'url',
+            default       => 'http://auth.example.com/resetpwd',
+            documentation => 'URL of password reset page',
+        },
+
         # Registration
         registerConfirmSubject => {
             type          => 'text',
@@ -1296,6 +1299,39 @@ sub attributes {
 'Authentication level for users authentified by password+(U2F or TOTP)'
         },
 
+        # Mail second factor
+        mail2fActivation => {
+            type          => 'boolOrExpr',
+            default       => 0,
+            documentation => 'Mail second factor activation',
+        },
+        mail2fSubject => {
+            type          => 'text',
+            documentation => 'Mail subject for second factor authentication',
+        },
+        mail2fBody => {
+            type          => 'longtext',
+            documentation => 'Mail body for second factor authentication',
+        },
+        mail2fCodeRegex => {
+            type          => 'pcre',
+            default       => '\d{6}',
+            documentation => 'Regular expression to create a mail OTP code',
+        },
+        mail2fTimeout => {
+            type          => 'int',
+            documentation => 'Second factor code timeout',
+        },
+        mail2fAuthnLevel => {
+            type => 'int',
+            documentation =>
+'Authentication level for users authenticated by Mail second factor'
+        },
+        mail2fLogo => {
+            type          => 'text',
+            documentation => 'Custom logo for Mail 2F',
+        },
+
         # External second factor
         ext2fActivation => {
             type          => 'boolOrExpr',
@@ -1705,7 +1741,7 @@ sub attributes {
         casAppMetaDataNodes => {
             type     => 'casAppMetaDataNodeContainer',
             template => 'casAppMetaDataNode',
-            help     => 'idpcas.html',
+            help     => 'idpcas.html#configuring_cas_applications',
         },
 
         # OpenID Issuer
@@ -2021,7 +2057,7 @@ sub attributes {
                     unless ( $v->{$idpId}->{samlIDPMetaDataXML} =~
                         /entityID="(.+?)"/si )
                     {
-                        push @msg, "$idpId SAML metadata has ne EntityID";
+                        push @msg, "$idpId SAML metadata has no EntityID";
                         $res = 0;
                         next;
                     }
@@ -2162,6 +2198,8 @@ sub attributes {
             default => 0,
         },
         samlIDPMetaDataOptionsUserAttribute => { type => 'text', },
+        samlIDPMetaDataOptionsDisplayName   => { type => 'text', },
+        samlIDPMetaDataOptionsIcon          => { type => 'text', },
 
         # SP keys
         samlSPMetaDataExportedAttributes => {
@@ -2304,7 +2342,7 @@ sub attributes {
                 { k => 'AD',          v => 'Active Directory' },
                 { k => 'DBI',         v => 'Database (DBI)' },
                 { k => 'Facebook',    v => 'Facebook' },
-                { k => 'Google',      v => 'Google' },
+                { k => 'GPG',         v => 'GPG' },
                 { k => 'Kerberos',    v => 'Kerberos' },
                 { k => 'LDAP',        v => 'LDAP' },
                 { k => 'LinkedIn',    v => 'LinkedIn' },
@@ -2360,7 +2398,7 @@ sub attributes {
             documentation => 'Password module',
         },
 
-        # Seconf Factor Engine
+        # Second Factor Engine
         sfEngine => {
             type          => 'text',
             default       => '::2F::Engines::Default',
@@ -2374,7 +2412,7 @@ sub attributes {
         },
         available2F => {
             type          => 'text',
-            default       => 'UTOTP,TOTP,U2F,REST,Ext2F,Yubikey',
+            default       => 'UTOTP,TOTP,U2F,REST,Mail2F,Ext2F,Yubikey',
             documentation => 'Available second factor modules',
         },
         available2FSelfRegistration => {
@@ -2519,6 +2557,11 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{
             type          => 'text',
             documentation => 'LDAP filter for auth search'
         },
+        ldapGroupDecodeSearchedValue => {
+            default       => 0,
+            type          => 'bool',
+            documentation => 'Decode value before searching it in LDAP groups',
+        },
         ldapGroupRecursive => {
             default       => 0,
             type          => 'bool',
@@ -2649,6 +2692,13 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{
             documentation => 'PAM service',
         },
 
+        # GPG
+        gpgDb => {
+            type          => 'text',
+            default       => '',
+            documentation => 'GPG keys database',
+        },
+
         # Radius
         radiusAuthnLevel => {
             type          => 'int',
@@ -2889,8 +2939,7 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{
             keyTest    => qr/^(\d*)?[a-zA-Z0-9_]+$/,
             keyMsgFail => '__badChoiceKey__',
             test       => sub { 1 },
-            select     => [
-                [
+            select     => [ [
                     { k => 'Apache', v => 'Apache' },
                     { k => 'AD',     v => 'Active Directory' },
                     {
@@ -2900,7 +2949,7 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{
                     { k => 'DBI',           v => 'Database (DBI)' },
                     { k => 'Demo',          v => 'Demo' },
                     { k => 'Facebook',      v => 'Facebook' },
-                    { k => 'Google',        v => 'Google' },
+                    { k => 'GPG',           v => 'GPG' },
                     { k => 'Kerberos',      v => 'Kerberos' },
                     { k => 'LDAP',          v => 'LDAP' },
                     { k => 'LinkedIn',      v => 'LinkedIn' },
@@ -2928,7 +2977,6 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{
                     { k => 'DBI',           v => 'Database (DBI)' },
                     { k => 'Demo',          v => 'Demo' },
                     { k => 'Facebook',      v => 'Facebook' },
-                    { k => 'Google',        v => 'Google' },
                     { k => 'LDAP',          v => 'LDAP' },
                     { k => 'Null',          v => 'None' },
                     { k => 'OpenID',        v => 'OpenID' },
@@ -2969,7 +3017,7 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{
                 { k => 'AD',       v => 'Active Directory' },
                 { k => 'DBI',      v => 'Database (DBI)' },
                 { k => 'Facebook', v => 'Facebook' },
-                { k => 'Google',   v => 'Google' },
+                { k => 'GPG',      v => 'GPG' },
                 { k => 'Kerberos', v => 'Kerberos' },
                 { k => 'LDAP',     v => 'LDAP' },
                 { k => 'PAM',      v => 'PAM' },
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/CTrees.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/CTrees.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/CTrees.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/CTrees.pm	2019-02-08 10:14:37.000000000 +0000
@@ -22,8 +22,7 @@ sub cTrees {
             'locationRules',
             'exportedHeaders',
             'post',
-            {
-                title => 'vhostOptions',
+            {   title => 'vhostOptions',
                 help  => 'configvhost.html#options',
                 form  => 'simpleInputContainer',
                 nodes => [
@@ -36,23 +35,8 @@ sub cTrees {
         samlIDPMetaDataNode => [
             'samlIDPMetaDataXML',
             'samlIDPMetaDataExportedAttributes',
-            {
-                title => 'samlIDPMetaDataOptions',
-                help  => 'authsaml.html#options',
-                form  => 'simpleInputContainer',
-                nodes => [
-                    'samlIDPMetaDataOptionsResolutionRule',
-                    'samlIDPMetaDataOptionsNameIDFormat',
-                    'samlIDPMetaDataOptionsForceAuthn',
-                    'samlIDPMetaDataOptionsIsPassive',
-                    'samlIDPMetaDataOptionsAllowProxiedAuthn',
-                    'samlIDPMetaDataOptionsAllowLoginFromIDP',
-                    'samlIDPMetaDataOptionsRequestedAuthnContext',
-                    'samlIDPMetaDataOptionsRelayStateURL',
-                ],
-            },
-            {
-                title => "samlIDPMetaDataOptionsSession",
+
+            {   title => "samlIDPMetaDataOptionsSession",
                 form  => 'simpleInputContainer',
                 nodes => [
                     "samlIDPMetaDataOptionsAdaptSessionUtime",
@@ -61,8 +45,7 @@ sub cTrees {
                     "samlIDPMetaDataOptionsUserAttribute"
                 ]
             },
-            {
-                title => "samlIDPMetaDataOptionsSignature",
+            {   title => "samlIDPMetaDataOptionsSignature",
                 form  => 'simpleInputContainer',
                 nodes => [
                     "samlIDPMetaDataOptionsSignSSOMessage",
@@ -71,33 +54,50 @@ sub cTrees {
                     "samlIDPMetaDataOptionsCheckSLOMessageSignature"
                 ]
             },
-            {
-                title => "samlIDPMetaDataOptionsBinding",
+            {   title => "samlIDPMetaDataOptionsBinding",
                 form  => 'simpleInputContainer',
                 nodes => [
                     "samlIDPMetaDataOptionsSSOBinding",
                     "samlIDPMetaDataOptionsSLOBinding"
                 ]
             },
-            {
-                title => "samlIDPMetaDataOptionsSecurity",
+            {   title => "samlIDPMetaDataOptionsSecurity",
                 form  => 'simpleInputContainer',
                 nodes => [
                     "samlIDPMetaDataOptionsEncryptionMode",
                     "samlIDPMetaDataOptionsCheckTime",
                     "samlIDPMetaDataOptionsCheckAudience"
                 ]
+            },
+            {   title => 'samlIDPMetaDataOptions',
+                help  => 'authsaml.html#options',
+                form  => 'simpleInputContainer',
+                nodes => [
+                    'samlIDPMetaDataOptionsResolutionRule',
+                    'samlIDPMetaDataOptionsNameIDFormat',
+                    'samlIDPMetaDataOptionsForceAuthn',
+                    'samlIDPMetaDataOptionsIsPassive',
+                    'samlIDPMetaDataOptionsAllowProxiedAuthn',
+                    'samlIDPMetaDataOptionsAllowLoginFromIDP',
+                    'samlIDPMetaDataOptionsRequestedAuthnContext',
+                    'samlIDPMetaDataOptionsRelayStateURL',
+                ],
+            },
+            {   title => "samlIDPMetaDataOptionsDisplay",
+                form  => 'simpleInputContainer',
+                nodes => [
+                    "samlIDPMetaDataOptionsDisplayName",
+                    "samlIDPMetaDataOptionsIcon"
+                ]
             }
         ],
         samlSPMetaDataNode => [
             "samlSPMetaDataXML",
             "samlSPMetaDataExportedAttributes",
-            {
-                title => "samlSPMetaDataOptions",
+            {   title => "samlSPMetaDataOptions",
                 help  => 'idpsaml.html#options',
                 nodes => [
-                    {
-                        title => "samlSPMetaDataOptionsAuthnResponse",
+                    {   title => "samlSPMetaDataOptionsAuthnResponse",
                         form  => 'simpleInputContainer',
                         nodes => [
                             "samlSPMetaDataOptionsNameIDFormat",
@@ -108,8 +108,7 @@ sub cTrees {
                             "samlSPMetaDataOptionsForceUTF8"
                         ]
                     },
-                    {
-                        title => "samlSPMetaDataOptionsSignature",
+                    {   title => "samlSPMetaDataOptionsSignature",
                         form  => 'simpleInputContainer',
                         nodes => [
                             "samlSPMetaDataOptionsSignSSOMessage",
@@ -118,8 +117,7 @@ sub cTrees {
                             "samlSPMetaDataOptionsCheckSLOMessageSignature"
                         ]
                     },
-                    {
-                        title => "samlSPMetaDataOptionsSecurity",
+                    {   title => "samlSPMetaDataOptionsSecurity",
                         form  => 'simpleInputContainer',
                         nodes => [
                             "samlSPMetaDataOptionsEncryptionMode",
@@ -134,11 +132,9 @@ sub cTrees {
             'oidcOPMetaDataJSON',
             'oidcOPMetaDataJWKS',
             'oidcOPMetaDataExportedVars',
-            {
-                title => 'oidcOPMetaDataOptions',
+            {   title => 'oidcOPMetaDataOptions',
                 nodes => [
-                    {
-                        title => 'oidcOPMetaDataOptionsConfiguration',
+                    {   title => 'oidcOPMetaDataOptionsConfiguration',
                         form  => 'simpleInputContainer',
                         nodes => [
                             'oidcOPMetaDataOptionsConfigurationURI',
@@ -148,8 +144,7 @@ sub cTrees {
                             'oidcOPMetaDataOptionsStoreIDToken'
                         ]
                     },
-                    {
-                        title => 'oidcOPMetaDataOptionsProtocol',
+                    {   title => 'oidcOPMetaDataOptionsProtocol',
                         form  => 'simpleInputContainer',
                         nodes => [
                             'oidcOPMetaDataOptionsScope',
@@ -164,46 +159,35 @@ sub cTrees {
                             'oidcOPMetaDataOptionsUseNonce'
                         ]
                     },
-                    {
-                        title => 'oidcOPMetaDataOptionsDisplayParams',
-                        form  => 'simpleInputContainer',
-                        nodes => [
-                            'oidcOPMetaDataOptionsDisplayName',
-                            'oidcOPMetaDataOptionsIcon'
-                        ]
-                    },
+                ]
+            },
+            {   title => 'oidcOPMetaDataOptionsDisplayParams',
+                form  => 'simpleInputContainer',
+                nodes => [
+                    'oidcOPMetaDataOptionsDisplayName',
+                    'oidcOPMetaDataOptionsIcon'
                 ]
             },
         ],
         oidcRPMetaDataNode => [
             'oidcRPMetaDataExportedVars',
-            {
-                title => 'oidcRPMetaDataOptions',
+            'oidcRPMetaDataOptionsExtraClaims',
+            {   title => 'oidcRPMetaDataOptions',
                 nodes => [
-                    {
-                        title => 'oidcRPMetaDataOptionsAuthentication',
+                    {   title => 'oidcRPMetaDataOptionsAuthentication',
                         form  => 'simpleInputContainer',
                         nodes => [
                             'oidcRPMetaDataOptionsClientID',
                             'oidcRPMetaDataOptionsClientSecret'
                         ]
                     },
-                    {
-                        title => 'oidcRPMetaDataOptionsDisplay',
-                        form  => 'simpleInputContainer',
-                        nodes => [
-                            'oidcRPMetaDataOptionsDisplayName',
-                            'oidcRPMetaDataOptionsIcon'
-                        ],
-                    },
                     'oidcRPMetaDataOptionsUserIDAttr',
                     'oidcRPMetaDataOptionsIDTokenSignAlg',
                     'oidcRPMetaDataOptionsIDTokenExpiration',
                     'oidcRPMetaDataOptionsAccessTokenExpiration',
                     'oidcRPMetaDataOptionsRedirectUris',
                     'oidcRPMetaDataOptionsBypassConsent',
-                    {
-                        title => 'logout',
+                    {   title => 'logout',
                         form  => 'simpleInputContainer',
                         nodes => [
                             'oidcRPMetaDataOptionsPostLogoutRedirectUris',
@@ -215,26 +199,35 @@ sub cTrees {
                     'oidcRPMetaDataOptionsRule',
                 ]
             },
-            'oidcRPMetaDataOptionsExtraClaims',
+            {   title => 'oidcRPMetaDataOptionsDisplay',
+                form  => 'simpleInputContainer',
+                nodes => [
+                    'oidcRPMetaDataOptionsDisplayName',
+                    'oidcRPMetaDataOptionsIcon'
+                ],
+            },
         ],
         casSrvMetaDataNode => [
-            {
-                title => 'casSrvMetaDataOptions',
+            'casSrvMetaDataExportedVars',
+            'casSrvMetaDataOptionsProxiedServices',
+            {   title => 'casSrvMetaDataOptions',
                 form  => 'simpleInputContainer',
                 nodes => [
                     'casSrvMetaDataOptionsUrl',
                     'casSrvMetaDataOptionsRenew',
                     'casSrvMetaDataOptionsGateway',
+                ]
+            },
+            {   title => 'casSrvMetaDataOptionsDisplay',
+                form  => 'simpleInputContainer',
+                nodes => [
                     'casSrvMetaDataOptionsDisplayName',
                     'casSrvMetaDataOptionsIcon',
                 ]
             },
-            'casSrvMetaDataExportedVars',
-            'casSrvMetaDataOptionsProxiedServices',
         ],
         casAppMetaDataNode => [
-            {
-                title => 'casAppMetaDataOptions',
+            {   title => 'casAppMetaDataOptions',
                 form  => 'simpleInputContainer',
                 nodes => [
                     'casAppMetaDataOptionsService',
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Tree.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Tree.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Tree.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Tree.pm	2019-02-08 10:14:42.000000000 +0000
@@ -17,24 +17,25 @@
 
 package Lemonldap::NG::Manager::Build::Tree;
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 # TODO: Missing:
 #  * activeTimer
 #  * confirmFormMethod
 #  * redirectFormMethod
 sub tree {
-    return [
-        {   title => 'generalParameters',
-            nodes => [
-                {   title => 'portalParams',
+    return [ {
+            title => 'generalParameters',
+            nodes => [ {
+                    title => 'portalParams',
                     help  => 'portal.html',
                     nodes => [
                         '*portal',
-                        {   title => 'portalMenu',
+                        {
+                            title => 'portalMenu',
                             help  => 'portalmenu.html',
-                            nodes => [
-                                {   title => 'portalModules',
+                            nodes => [ {
+                                    title => 'portalModules',
                                     form  => 'simpleInputContainer',
                                     nodes => [
                                         'portalDisplayLogout',
@@ -47,7 +48,8 @@ sub tree {
                                 'applicationList'
                             ]
                         },
-                        {   title => 'portalCustomization',
+                        {
+                            title => 'portalCustomization',
                             help  => 'portalcustom.html',
                             nodes => [
                                 'portalMainLogo',
@@ -55,7 +57,8 @@ sub tree {
                                 'portalSkin',
                                 'portalSkinBackground',
                                 'portalSkinRules',
-                                {   title => 'portalButtons',
+                                {
+                                    title => 'portalButtons',
                                     help  => 'portalcustom.html#buttons',
                                     form  => 'simpleInputContainer',
                                     nodes => [
@@ -65,9 +68,10 @@ sub tree {
                                         'portalDisplayRegister'
                                     ]
                                 },
-                                {   title => 'passwordManagement',
+                                {
+                                    title => 'passwordManagement',
                                     help =>
-                                        'portalcustom.html#password_management',
+                                      'portalcustom.html#password_management',
                                     form  => 'simpleInputContainer',
                                     nodes => [
                                         'portalRequireOldPassword',
@@ -75,9 +79,10 @@ sub tree {
                                         'mailOnPasswordChange'
                                     ]
                                 },
-                                {   title => 'portalOther',
+                                {
+                                    title => 'portalOther',
                                     help =>
-                                        'portalcustom.html#other_parameters',
+                                      'portalcustom.html#other_parameters',
                                     form  => 'simpleInputContainer',
                                     nodes => [
                                         'portalUserAttr',
@@ -90,7 +95,8 @@ sub tree {
                                 }
                             ]
                         },
-                        {   title => 'portalCaptcha',
+                        {
+                            title => 'portalCaptcha',
                             help  => 'captcha.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -102,43 +108,48 @@ sub tree {
                         }
                     ]
                 },
-                {   title => 'authParams',
+                {
+                    title => 'authParams',
                     help =>
-                        'start.html#authentication_users_and_password_databases',
+                      'start.html#authentication_users_and_password_databases',
                     form  => 'authParams',
                     nodes => [
-                        'authentication', 'userDB',
-                        'passwordDB',     'registerDB'
+                        'authentication', 'userDB', 'passwordDB', 'registerDB'
                     ],
-                    nodes_cond => [
-                        {   title => 'adParams',
+                    nodes_cond => [ {
+                            title => 'adParams',
                             help  => 'authad.html',
+                            form  => 'simpleInputContainer',
                             nodes => [ 'ADPwdMaxAge', 'ADPwdExpireWarning' ]
                         },
-                        {   title => 'choiceParams',
+                        {
+                            title => 'choiceParams',
                             help  => 'authchoice.html',
-                            nodes =>
-                                [ 'authChoiceParam', 'authChoiceModules' ]
+                            nodes => [ 'authChoiceParam', 'authChoiceModules' ]
                         },
-                        {   title => 'apacheParams',
+                        {
+                            title => 'apacheParams',
                             help  => 'authapache.html',
                             form  => 'simpleInputContainer',
                             nodes => ['apacheAuthnLevel']
                         },
-                        {   title => 'casParams',
+                        {
+                            title => 'casParams',
                             help  => 'authcas.html',
                             form  => 'simpleInputContainer',
                             nodes => ['casAuthnLevel']
                         },
-                        {   title => 'dbiParams',
+                        {
+                            title => 'dbiParams',
                             help  => 'authdbi.html',
                             nodes => [
                                 'dbiAuthnLevel',
                                 'dbiExportedVars',
-                                {   title => 'dbiConnection',
+                                {
+                                    title => 'dbiConnection',
                                     help  => 'authdbi.html#connection',
-                                    nodes => [
-                                        {   title => 'dbiConnectionAuth',
+                                    nodes => [ {
+                                            title => 'dbiConnectionAuth',
                                             form  => 'simpleInputContainer',
                                             nodes => [
                                                 'dbiAuthChain',
@@ -146,7 +157,8 @@ sub tree {
                                                 'dbiAuthPassword'
                                             ]
                                         },
-                                        {   title => 'dbiConnectionUser',
+                                        {
+                                            title => 'dbiConnectionUser',
                                             form  => 'simpleInputContainer',
                                             nodes => [
                                                 'dbiUserChain',
@@ -156,7 +168,8 @@ sub tree {
                                         }
                                     ]
                                 },
-                                {   title => 'dbiSchema',
+                                {
+                                    title => 'dbiSchema',
                                     help  => 'authdbi.html#schema',
                                     form  => 'simpleInputContainer',
                                     nodes => [
@@ -168,51 +181,57 @@ sub tree {
                                         'userPivot'
                                     ]
                                 },
-                                {   title => 'dbiPassword',
+                                {
+                                    title => 'dbiPassword',
                                     help  => 'authdbi.html#password',
                                     nodes => [
                                         'dbiAuthPasswordHash',
-                                        {   title => 'dbiDynamicHash',
+                                        {
+                                            title => 'dbiDynamicHash',
                                             help  => 'authdbi.html#password',
                                             form  => 'simpleInputContainer',
                                             nodes => [
                                                 'dbiDynamicHashEnabled',
                                                 'dbiDynamicHashValidSchemes',
-                                                'dbiDynamicHashValidSaltedSchemes',
-                                                'dbiDynamicHashNewPasswordScheme'
+'dbiDynamicHashValidSaltedSchemes',
+'dbiDynamicHashNewPasswordScheme'
                                             ]
                                         }
                                     ]
                                 }
                             ]
                         },
-                        {   title => 'demoParams',
+                        {
+                            title => 'demoParams',
                             help  => 'authdemo.html',
                             nodes => ['demoExportedVars']
                         },
-                        {   title => 'facebookParams',
+                        {
+                            title => 'facebookParams',
                             help  => 'authfacebook.html',
                             nodes => [
-                                'facebookAuthnLevel',
-                                'facebookExportedVars',
-                                'facebookAppId',
-                                'facebookAppSecret',
+                                'facebookAuthnLevel', 'facebookExportedVars',
+                                'facebookAppId',      'facebookAppSecret',
                                 'facebookUserField'
                             ]
                         },
-                        {   title => 'kerberosParams',
+                        {
+                            title => 'kerberosParams',
+                            form  => 'simpleInputContainer',
                             help  => 'authkerberos.html',
                             nodes => [
                                 'krbKeytab',     'krbByJs',
                                 'krbAuthnLevel', 'krbRemoveDomain'
                             ]
                         },
-                        {   title => 'ldapParams',
+                        {
+                            title => 'ldapParams',
                             help  => 'authldap.html',
                             nodes => [
                                 'ldapAuthnLevel',
                                 'ldapExportedVars',
-                                {   title => 'ldapConnection',
+                                {
+                                    title => 'ldapConnection',
                                     help  => 'authldap.html#connection',
                                     form  => 'simpleInputContainer',
                                     nodes => [
@@ -222,7 +241,8 @@ sub tree {
                                         'ldapVersion',     'ldapRaw'
                                     ]
                                 },
-                                {   title => 'ldapFilters',
+                                {
+                                    title => 'ldapFilters',
                                     help  => 'authldap.html#filters',
                                     form  => 'simpleInputContainer',
                                     nodes => [
@@ -230,7 +250,8 @@ sub tree {
                                         'mailLDAPFilter', 'ldapSearchDeref',
                                     ]
                                 },
-                                {   title => 'ldapGroups',
+                                {
+                                    title => 'ldapGroups',
                                     help  => 'authldap.html#groups',
                                     form  => 'simpleInputContainer',
                                     nodes => [
@@ -239,11 +260,13 @@ sub tree {
                                         'ldapGroupAttributeName',
                                         'ldapGroupAttributeNameUser',
                                         'ldapGroupAttributeNameSearch',
+                                        'ldapGroupDecodeSearchedValue',
                                         'ldapGroupRecursive',
                                         'ldapGroupAttributeNameGroup'
                                     ]
                                 },
-                                {   title => 'ldapPassword',
+                                {
+                                    title => 'ldapPassword',
                                     help  => 'authldap.html#password',
                                     form  => 'simpleInputContainer',
                                     nodes => [
@@ -259,7 +282,8 @@ sub tree {
                                 },
                             ]
                         },
-                        {   title => 'linkedinParams',
+                        {
+                            title => 'linkedinParams',
                             help  => 'authlinkedin.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -268,23 +292,27 @@ sub tree {
                                 'linkedInUserField',    'linkedInScope'
                             ]
                         },
-                        {   title => 'combinationParams',
+                        {
+                            title => 'combinationParams',
                             help  => 'authcombination.html',
                             nodes => [ 'combination', 'combModules' ]
                         },
-                        {   title => 'nullParams',
+                        {
+                            title => 'nullParams',
                             help  => 'authnull.html',
                             form  => 'simpleInputContainer',
                             nodes => ['nullAuthnLevel']
                         },
-                        {   title => 'openidParams',
+                        {
+                            title => 'openidParams',
                             help  => 'authopenid.html',
                             nodes => [
                                 'openIdAuthnLevel', 'openIdExportedVars',
                                 'openIdSecret',     'openIdIDPList'
                             ]
                         },
-                        {   title => 'oidcParams',
+                        {
+                            title => 'oidcParams',
                             help  => 'authopenidconnect.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -293,7 +321,14 @@ sub tree {
                                 'oidcRPStateTimeout'
                             ]
                         },
-                        {   title => 'proxyParams',
+                        {
+                            title => 'gpgParams',
+                            help  => 'authgpg.html',
+                            form  => 'simpleInputContainer',
+                            nodes => ['gpgDb'],
+                        },
+                        {
+                            title => 'proxyParams',
                             help  => 'authproxy.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -302,12 +337,14 @@ sub tree {
                                 'proxyUseSoap'
                             ]
                         },
-                        {   title => 'pamParams',
+                        {
+                            title => 'pamParams',
                             help  => 'authpam.html',
                             form  => 'simpleInputContainer',
                             nodes => [ 'pamService', 'pamAuthnLevel', ]
                         },
-                        {   title => 'radiusParams',
+                        {
+                            title => 'radiusParams',
                             help  => 'authradius.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -315,7 +352,8 @@ sub tree {
                                 'radiusServer'
                             ]
                         },
-                        {   title => 'restParams',
+                        {
+                            title => 'restParams',
                             help  => 'authrest.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -323,7 +361,8 @@ sub tree {
                                 'restPwdConfirmUrl', 'restPwdModifyUrl'
                             ]
                         },
-                        {   title => 'remoteParams',
+                        {
+                            title => 'remoteParams',
                             help  => 'authremote.html',
                             nodes => [
                                 'remotePortal',
@@ -332,7 +371,8 @@ sub tree {
                                 'remoteGlobalStorageOptions'
                             ]
                         },
-                        {   title => 'slaveParams',
+                        {
+                            title => 'slaveParams',
                             help  => 'authslave.html',
                             nodes => [
                                 'slaveAuthnLevel', 'slaveExportedVars',
@@ -340,7 +380,8 @@ sub tree {
                                 'slaveHeaderName', 'slaveHeaderContent'
                             ]
                         },
-                        {   title => 'sslParams',
+                        {
+                            title => 'sslParams',
                             help  => 'authssl.html',
                             nodes => [
                                 'SSLAuthnLevel', 'SSLVar',
@@ -348,7 +389,8 @@ sub tree {
                                 'sslHost',
                             ]
                         },
-                        {   title => 'twitterParams',
+                        {
+                            title => 'twitterParams',
                             help  => 'authtwitter.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -357,14 +399,16 @@ sub tree {
                                 'twitterUserField'
                             ]
                         },
-                        {   title => 'webidParams',
+                        {
+                            title => 'webidParams',
                             help  => 'authwebid.html',
                             nodes => [
                                 'webIDAuthnLevel', 'webIDExportedVars',
                                 'webIDWhitelist'
                             ]
                         },
-                        {   title => 'customParams',
+                        {
+                            title => 'customParams',
                             help  => 'authcustom.html',
                             nodes => [
                                 'customAuth',     'customUserDB',
@@ -375,38 +419,42 @@ sub tree {
                     ],
                     'nodes_filter' => 'authParams'
                 },
-                {   title => 'issuerParams',
+                {
+                    title => 'issuerParams',
                     help  => 'start.html#identity_provider',
-                    nodes => [
-                        {   title => 'issuerDBSAML',
+                    nodes => [ {
+                            title => 'issuerDBSAML',
                             help  => 'idpsaml.html',
                             form  => 'simpleInputContainer',
                             nodes => [
-                                'issuerDBSAMLActivation',
-                                'issuerDBSAMLPath',
+                                'issuerDBSAMLActivation', 'issuerDBSAMLPath',
                                 'issuerDBSAMLRule'
                             ]
                         },
-                        {   title => 'issuerDBCAS',
-                            help  => 'idpcas.html',
+                        {
+                            title => 'issuerDBCAS',
+                            help  => 'idpcas.html#enabling_cas',
                             form  => 'simpleInputContainer',
                             nodes => [
                                 'issuerDBCASActivation', 'issuerDBCASPath',
                                 'issuerDBCASRule',
                             ]
                         },
-                        {   title => 'issuerDBOpenID',
+                        {
+                            title => 'issuerDBOpenID',
                             help  => 'idpopenid.html',
                             nodes => [
                                 'issuerDBOpenIDActivation',
                                 'issuerDBOpenIDPath',
                                 'issuerDBOpenIDRule',
-                                {   title => 'issuerDBOpenIDOptions',
+                                {
+                                    title => 'issuerDBOpenIDOptions',
                                     nodes => [
                                         'openIdIssuerSecret',
                                         'openIdAttr',
                                         'openIdSPList',
-                                        {   title => 'openIdSreg',
+                                        {
+                                            title => 'openIdSreg',
                                             form  => 'simpleInputContainer',
                                             nodes => [
                                                 'openIdSreg_fullname',
@@ -424,7 +472,8 @@ sub tree {
                                 }
                             ]
                         },
-                        {   title => 'issuerDBOpenIDConnect',
+                        {
+                            title => 'issuerDBOpenIDConnect',
                             help  => 'idpopenidconnect.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -433,7 +482,8 @@ sub tree {
                                 'issuerDBOpenIDConnectRule',
                             ]
                         },
-                        {   title => 'issuerDBGet',
+                        {
+                            title => 'issuerDBGet',
                             help  => 'issuerdbget.html',
                             nodes => [
                                 'issuerDBGetActivation',
@@ -444,15 +494,15 @@ sub tree {
                         },
                     ]
                 },
-                {   title => 'logParams',
+                {
+                    title => 'logParams',
                     help  => 'logs.html',
                     form  => 'simpleInputContainer',
-                    nodes => [
-                        'trustedProxies', 'whatToTrace',
-                        'hiddenAttributes'
-                    ]
+                    nodes =>
+                      [ 'whatToTrace', 'hiddenAttributes' ]
                 },
-                {   title => 'cookieParams',
+                {
+                    title => 'cookieParams',
                     help  => 'ssocookie.html',
                     form  => 'simpleInputContainer',
                     nodes => [
@@ -461,7 +511,8 @@ sub tree {
                         'httpOnly',   'cookieExpiration'
                     ]
                 },
-                {   title => 'sessionParams',
+                {
+                    title => 'sessionParams',
                     help  => 'sessions.html',
                     nodes => [
                         'storePassword',
@@ -469,7 +520,8 @@ sub tree {
                         'timeoutActivity',
                         'timeoutActivityInterval',
                         'grantSessionRules',
-                        {   title => 'sessionStorage',
+                        {
+                            title => 'sessionStorage',
                             help  => 'start.html#sessions_database',
                             nodes => [
                                 'globalStorage',
@@ -478,7 +530,8 @@ sub tree {
                                 'localSessionStorageOptions'
                             ]
                         },
-                        {   title => 'multipleSessions',
+                        {
+                            title => 'multipleSessions',
                             form  => 'simpleInputContainer',
                             nodes => [
                                 'singleSession',  'singleIP',
@@ -486,34 +539,38 @@ sub tree {
                                 'notifyDeleted',  'notifyOther'
                             ]
                         },
-                        {   title => 'persistentSessions',
+                        {
+                            title => 'persistentSessions',
                             nodes => [
-                                'persistentStorage',
-                                'persistentStorageOptions'
+                                'persistentStorage', 'persistentStorageOptions'
                             ]
                         }
                     ]
                 },
-                {   title => 'reloadParams',
+                {
+                    title => 'reloadParams',
                     help  => 'configlocation.html#configuration_reload',
                     nodes => [ 'reloadUrls', 'reloadTimeout', ]
                 },
-                {   title => 'plugins',
+                {
+                    title => 'plugins',
                     help  => 'start.html#plugins',
                     nodes => [
                         'stayConnected',
                         'portalStatus',
                         'upgradeSession',
-                        {   title => 'portalServers',
+                        {
+                            title => 'portalServers',
                             help  => 'portalservers.html',
                             form  => 'simpleInputContainer',
                             nodes => [
                                 'wsdlServer',       'restSessionServer',
                                 'restConfigServer', 'soapSessionServer',
-                                'soapConfigServer', 'exportedAttr'
+                                'soapConfigServer', 'exportedAttr',
                             ]
                         },
-                        {   title => 'loginHistory',
+                        {
+                            title => 'loginHistory',
                             help  => 'loginhistory.html',
                             nodes => [
                                 'loginHistoryEnabled',
@@ -522,7 +579,8 @@ sub tree {
                                 'sessionDataToRemember'
                             ]
                         },
-                        {   title => 'notifications',
+                        {
+                            title => 'notifications',
                             help  => 'notifications.html',
                             nodes => [
                                 'notification',
@@ -534,24 +592,11 @@ sub tree {
                                 'notificationXSLTfile'
                             ]
                         },
-                        {   title => 'passwordManagement',
+                        {
+                            title => 'passwordManagement',
                             help  => 'resetpassword.html',
-                            nodes => [
-                                {   title => 'SMTP',
-                                    nodes => [
-                                        'SMTPServer',   'SMTPPort',
-                                        'SMTPAuthUser', 'SMTPAuthPass',
-                                        'SMTPTLS',      'SMTPTLSOpts',
-                                    ]
-                                },
-                                {   title => 'mailHeaders',
-                                    form  => 'simpleInputContainer',
-                                    nodes => [
-                                        'mailFrom', 'mailReplyTo',
-                                        'mailCharset'
-                                    ]
-                                },
-                                {   title => 'mailContent',
+                            nodes => [ {
+                                    title => 'mailContent',
                                     form  => 'simpleInputContainer',
                                     nodes => [
                                         'mailSubject',
@@ -560,18 +605,18 @@ sub tree {
                                         'mailConfirmBody'
                                     ]
                                 },
-                                {   title => 'mailOther',
+                                {
+                                    title => 'mailOther',
                                     form  => 'simpleInputContainer',
                                     nodes => [
-                                        'mailUrl',
+                                        'mailUrl', 'mailTimeout',
                                         'randomPasswordRegexp',
-                                        'mailTimeout',
-                                        'mailSessionKey'
                                     ]
                                 }
                             ]
                         },
-                        {   title => 'register',
+                        {
+                            title => 'register',
                             help  => 'register.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -581,27 +626,31 @@ sub tree {
                                 'registerDoneSubject'
                             ]
                         },
-                        {   title => 'autoSignin',
+                        {
+                            title => 'autoSignin',
                             help  => 'autosignin.html',
                             nodes => ['autoSigninRules'],
                         },
-                        {   title => 'stateCheck',
+                        {
+                            title => 'stateCheck',
                             help  => 'checkstate.html',
                             form  => 'simpleInputContainer',
                             nodes => [ 'checkState', 'checkStateSecret', ],
                         },
                     ]
                 },
-                {   title => 'secondFactors',
+                {
+                    title => 'secondFactors',
                     help  => 'secondfactor.html',
-                    nodes => [
-                        {   title => 'utotp2f',
+                    nodes => [ {
+                            title => 'utotp2f',
                             help  => 'utotp2f.html',
                             form  => 'simpleInputContainer',
                             nodes =>
-                                [ 'utotp2fActivation', 'utotp2fAuthnLevel' ]
+                              [ 'utotp2fActivation', 'utotp2fAuthnLevel' ]
                         },
-                        {   title => 'totp',
+                        {
+                            title => 'totp',
                             help  => 'totp2f.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -617,7 +666,8 @@ sub tree {
                                 'totp2fUserCanRemoveKey',
                             ]
                         },
-                        {   title => 'u2f',
+                        {
+                            title => 'u2f',
                             help  => 'u2f.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -625,7 +675,19 @@ sub tree {
                                 'u2fAuthnLevel', 'u2fUserCanRemoveKey',
                             ]
                         },
-                        {   title => 'external2f',
+                        {
+                            title => 'mail2f',
+                            help  => 'mail2f.html',
+                            form  => 'simpleInputContainer',
+                            nodes => [
+                                'mail2fActivation', 'mail2fCodeRegex',
+                                'mail2fTimeout',    'mail2fSubject',
+                                'mail2fBody',       'mail2fAuthnLevel',
+                                'mail2fLogo',
+                            ]
+                        },
+                        {
+                            title => 'external2f',
                             help  => 'external2f.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -634,7 +696,8 @@ sub tree {
                                 'ext2fLogo',
                             ]
                         },
-                        {   title => 'rest2f',
+                        {
+                            title => 'rest2f',
                             help  => 'rest2f.html',
                             nodes => [
                                 'rest2fActivation', 'rest2fInitUrl',
@@ -643,7 +706,8 @@ sub tree {
                                 'rest2fLogo',
                             ]
                         },
-                        {   title => 'yubikey2f',
+                        {
+                            title => 'yubikey2f',
                             help  => 'yubikey2f.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -661,14 +725,36 @@ sub tree {
                         'sfRequired',
                     ]
                 },
-                {   title => 'advancedParams',
+                {
+                    title => 'advancedParams',
                     help  => 'start.html#advanced_features',
                     nodes => [
                         'customFunctions',
                         'multiValuesSeparator',
-                        {   title => 'security',
-                            help =>
-                                'security.html#configure_security_settings',
+                        {
+                            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',
                             nodes => [
                                 'userControl',
                                 'portalForceAuthn',
@@ -683,7 +769,8 @@ sub tree {
                                 'tokenUseGlobalStorage',
                                 'lwpOpts',
                                 'lwpSslOpts',
-                                {   title => 'contentSecurityPolicy',
+                                {
+                                    title => 'contentSecurityPolicy',
                                     help  => 'security.html#portal',
                                     form  => 'simpleInputContainer',
                                     nodes => [
@@ -695,7 +782,8 @@ sub tree {
                                 },
                             ]
                         },
-                        {   title => 'redirection',
+                        {
+                            title => 'redirection',
                             help  => 'redirections.html',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -706,7 +794,8 @@ sub tree {
                                 'maintenance'
                             ]
                         },
-                        {   title => 'portalRedirection',
+                        {
+                            title => 'portalRedirection',
                             help  => 'redirections.html#portal_redirections',
                             form  => 'simpleInputContainer',
                             nodes => [
@@ -715,8 +804,9 @@ sub tree {
                             ]
                         },
                         'nginxCustomHandlers',
-                        'logoutServices',   
-                        {   title => 'forms',
+                        'logoutServices',
+                        {
+                            title => 'forms',
                             form  => 'simpleInputContainer',
                             nodes => [
                                 'infoFormMethod',     'confirmFormMethod',
@@ -727,19 +817,22 @@ sub tree {
                 }
             ]
         },
-        {   title => 'variables',
+        {
+            title => 'variables',
             help  => 'variables.html',
             nodes => [ 'exportedVars', 'macros', 'groups' ]
         },
         'virtualHosts',
-        {   title => 'samlServiceMetaData',
+        {
+            title => 'samlServiceMetaData',
             help  => 'samlservice.html',
             nodes => [
                 'samlEntityID',
-                {   title => 'samlServiceSecurity',
+                {
+                    title => 'samlServiceSecurity',
                     help  => 'samlservice.html#security_parameters',
-                    nodes => [
-                        {   title => 'samlServiceSecuritySig',
+                    nodes => [ {
+                            title => 'samlServiceSecuritySig',
                             form  => 'RSAKey',
                             group => [
                                 'samlServicePrivateKeySig',
@@ -747,7 +840,8 @@ sub tree {
                                 'samlServicePublicKeySig'
                             ]
                         },
-                        {   title => 'samlServiceSecurityEnc',
+                        {
+                            title => 'samlServiceSecurityEnc',
                             form  => 'RSAKey',
                             group => [
                                 'samlServicePrivateKeyEnc',
@@ -759,7 +853,8 @@ sub tree {
                         'samlServiceSignatureMethod'
                     ]
                 },
-                {   title => 'samlNameIDFormatMap',
+                {
+                    title => 'samlNameIDFormatMap',
                     help  => 'samlservice.html#nameid_formats',
                     form  => 'simpleInputContainer',
                     nodes => [
@@ -769,7 +864,8 @@ sub tree {
                         'samlNameIDFormatMapKerberos'
                     ]
                 },
-                {   title => 'samlAuthnContextMap',
+                {
+                    title => 'samlAuthnContextMap',
                     help  => 'samlservice.html#authentication_contexts',
                     form  => 'simpleInputContainer',
                     nodes => [
@@ -779,82 +875,90 @@ sub tree {
                         'samlAuthnContextMapKerberos'
                     ]
                 },
-                {   title => 'samlOrganization',
+                {
+                    title => 'samlOrganization',
                     help  => 'samlservice.html#organization',
                     form  => 'simpleInputContainer',
                     nodes => [
-                        'samlOrganizationDisplayName',
-                        'samlOrganizationName',
+                        'samlOrganizationDisplayName', 'samlOrganizationName',
                         'samlOrganizationURL'
                     ]
                 },
-                {   title => 'samlSPSSODescriptor',
+                {
+                    title => 'samlSPSSODescriptor',
                     help  => 'samlservice.html#service_provider',
                     nodes => [
                         'samlSPSSODescriptorAuthnRequestsSigned',
                         'samlSPSSODescriptorWantAssertionsSigned',
-                        {   title => 'samlSPSSODescriptorSingleLogoutService',
+                        {
+                            title => 'samlSPSSODescriptorSingleLogoutService',
                             nodes => [
-                                'samlSPSSODescriptorSingleLogoutServiceHTTPRedirect',
-                                'samlSPSSODescriptorSingleLogoutServiceHTTPPost',
+'samlSPSSODescriptorSingleLogoutServiceHTTPRedirect',
+'samlSPSSODescriptorSingleLogoutServiceHTTPPost',
                                 'samlSPSSODescriptorSingleLogoutServiceSOAP'
                             ]
                         },
-                        {   title =>
-                                'samlSPSSODescriptorAssertionConsumerService',
+                        {
+                            title =>
+                              'samlSPSSODescriptorAssertionConsumerService',
                             nodes => [
-                                'samlSPSSODescriptorAssertionConsumerServiceHTTPArtifact',
-                                'samlSPSSODescriptorAssertionConsumerServiceHTTPPost'
+'samlSPSSODescriptorAssertionConsumerServiceHTTPArtifact',
+'samlSPSSODescriptorAssertionConsumerServiceHTTPPost'
                             ]
                         },
-                        {   title =>
-                                'samlSPSSODescriptorArtifactResolutionService',
+                        {
+                            title =>
+                              'samlSPSSODescriptorArtifactResolutionService',
                             nodes => [
-                                'samlSPSSODescriptorArtifactResolutionServiceArtifact'
+'samlSPSSODescriptorArtifactResolutionServiceArtifact'
                             ]
                         }
                     ]
                 },
-                {   title => 'samlIDPSSODescriptor',
+                {
+                    title => 'samlIDPSSODescriptor',
                     help  => 'samlservice.html#identity_provider',
                     nodes => [
                         'samlIDPSSODescriptorWantAuthnRequestsSigned',
-                        {   title =>
-                                'samlIDPSSODescriptorSingleSignOnService',
+                        {
+                            title => 'samlIDPSSODescriptorSingleSignOnService',
                             nodes => [
-                                'samlIDPSSODescriptorSingleSignOnServiceHTTPRedirect',
-                                'samlIDPSSODescriptorSingleSignOnServiceHTTPPost',
-                                'samlIDPSSODescriptorSingleSignOnServiceHTTPArtifact',
+'samlIDPSSODescriptorSingleSignOnServiceHTTPRedirect',
+'samlIDPSSODescriptorSingleSignOnServiceHTTPPost',
+'samlIDPSSODescriptorSingleSignOnServiceHTTPArtifact',
                             ]
                         },
-                        {   title =>
-                                'samlIDPSSODescriptorSingleLogoutService',
+                        {
+                            title => 'samlIDPSSODescriptorSingleLogoutService',
                             nodes => [
-                                'samlIDPSSODescriptorSingleLogoutServiceHTTPRedirect',
-                                'samlIDPSSODescriptorSingleLogoutServiceHTTPPost',
+'samlIDPSSODescriptorSingleLogoutServiceHTTPRedirect',
+'samlIDPSSODescriptorSingleLogoutServiceHTTPPost',
                                 'samlIDPSSODescriptorSingleLogoutServiceSOAP'
                             ]
                         },
-                        {   title =>
-                                'samlIDPSSODescriptorArtifactResolutionService',
+                        {
+                            title =>
+                              'samlIDPSSODescriptorArtifactResolutionService',
                             nodes => [
-                                'samlIDPSSODescriptorArtifactResolutionServiceArtifact'
+'samlIDPSSODescriptorArtifactResolutionServiceArtifact'
                             ]
                         }
                     ]
                 },
-                {   title => 'samlAttributeAuthorityDescriptor',
+                {
+                    title => 'samlAttributeAuthorityDescriptor',
                     help  => 'samlservice.html#attribute_authority',
-                    nodes => [
-                        {   title =>
-                                'samlAttributeAuthorityDescriptorAttributeService',
+                    nodes => [ {
+                            title =>
+'samlAttributeAuthorityDescriptorAttributeService',
                             nodes => [
-                                'samlAttributeAuthorityDescriptorAttributeServiceSOAP'
+'samlAttributeAuthorityDescriptorAttributeServiceSOAP'
                             ]
                         }
                     ]
                 },
-                {   title => 'samlAdvanced',
+                {
+                    title => 'samlAdvanced',
                     help  => 'samlservice.html#advanced',
                     nodes => [
                         'samlIdPResolveCookie',
@@ -863,7 +967,8 @@ sub tree {
                         'samlStorageOptions',
                         'samlRelayStateTimeout',
                         'samlUseQueryStringSpecific',
-                        {   title => 'samlCommonDomainCookie',
+                        {
+                            title => 'samlCommonDomainCookie',
                             form  => 'simpleInputContainer',
                             nodes => [
                                 'samlCommonDomainCookieActivation',
@@ -872,7 +977,8 @@ sub tree {
                                 'samlCommonDomainCookieWriter'
                             ]
                         },
-                        {   title => 'samlDiscoveryProtocol',
+                        {
+                            title => 'samlDiscoveryProtocol',
                             form  => 'simpleInputContainer',
                             nodes => [
                                 'samlDiscoveryProtocolActivation',
@@ -887,11 +993,13 @@ sub tree {
         },
         'samlIDPMetaDataNodes',
         'samlSPMetaDataNodes',
-        {   title => 'oidcServiceMetaData',
+        {
+            title => 'oidcServiceMetaData',
             help  => 'openidconnectservice.html#service_configuration',
             nodes => [
                 'oidcServiceMetaDataIssuer',
-                {   title => 'oidcServiceMetaDataEndPoints',
+                {
+                    title => 'oidcServiceMetaDataEndPoints',
                     form  => 'simpleInputContainer',
                     nodes => [
                         'oidcServiceMetaDataAuthorizeURI',
@@ -906,9 +1014,10 @@ sub tree {
                     ]
                 },
                 'oidcServiceMetaDataAuthnContext',
-                {   title => 'oidcServiceMetaDataSecurity',
-                    nodes => [
-                        {   title => 'oidcServiceMetaDataKeys',
+                {
+                    title => 'oidcServiceMetaDataSecurity',
+                    nodes => [ {
+                            title => 'oidcServiceMetaDataKeys',
                             form  => 'RSAKeyNoPassword',
                             group => [
                                 'oidcServicePrivateKeySig',
@@ -922,17 +1031,22 @@ sub tree {
                         'oidcServiceAllowHybridFlow',
                     ],
                 },
-                {   title => "oidcServiceMetaDataSessions",
+                {
+                    title => "oidcServiceMetaDataSessions",
                     nodes => [ 'oidcStorage', 'oidcStorageOptions', ],
                 },
             ]
         },
         'oidcOPMetaDataNodes',
         'oidcRPMetaDataNodes',
-        {   title => 'casServiceMetadata',
+        {
+            title => 'casServiceMetadata',
+            help  => 'idpcas.html#configuring_the_cas_service',
             nodes => [
                 'casAttr',
-                'casAccessControlPolicy', 'casStorage', 'casStorageOptions',
+                'casAccessControlPolicy',
+                'casStorage',
+                'casStorageOptions',
                 'casAttributes',
 
             ]
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build.pm	2019-02-07 08:33:15.000000000 +0000
@@ -269,8 +269,7 @@ $defaultAttr}
     foreach ( @simpleHashKeys, @doubleHashKeys, sort keys %cnodesRe ) {
         $ra->add($_);
     }
-    foreach (
-        qw(
+    foreach ( qw(
         exportedHeaders locationRules post vhostOptions
         samlIDPMetaDataXML samlIDPMetaDataExportedAttributes
         samlIDPMetaDataOptions samlSPMetaDataXML
@@ -462,8 +461,7 @@ sub scanTree {
                     $jleaf->{"_$n"} = [];
                     $self->scanTree( $leaf->{$n}, $jleaf->{"_$n"}, $prefix,
                         "$path.$nodeName\[$ord\]" );
-                    if (
-                        (
+                    if ( (
                                 $leaf->{title} eq 'authParams'
                             and $n eq 'nodes_cond'
                         )
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Cli.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Cli.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Cli.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Cli.pm	2019-02-07 08:33:15.000000000 +0000
@@ -1,11 +1,12 @@
 package Lemonldap::NG::Manager::Cli;
 
 use strict;
+use Crypt::URandom;
 use Mouse;
 use Data::Dumper;
 use Lemonldap::NG::Common::Conf::ReConstants;
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 $Data::Dumper::Useperl = 1;
 
 extends('Lemonldap::NG::Manager::Cli::Lib');
@@ -233,8 +234,7 @@ sub _setKey {
 sub _save {
     my ( $self, $new ) = @_;
     require Lemonldap::NG::Manager::Conf::Parser;
-    my $parser = Lemonldap::NG::Manager::Conf::Parser->new(
-        {
+    my $parser = Lemonldap::NG::Manager::Conf::Parser->new( {
             newConf => $new,
             refConf => $self->mgr->currentConf,
             req     => $self->req
@@ -248,6 +248,16 @@ sub _save {
         $saveParams->{cfgNum}      = $self->cfgNum;
         $saveParams->{cfgNumFixed} = 1;
     }
+    $new->{cfgAuthor} = 'lmConfigEditor: ' . `whoami`;
+    chomp $new->{cfgAuthor};
+    $new->{cfgAuthorIP} = '';
+    $new->{cfgDate}     = time;
+    $new->{cfgVersion}  = $VERSION;
+    $new->{cfgLog}      = '';
+    $new->{key} ||= join( '',
+        map { chr( int( ord( Crypt::URandom::urandom(1) ) * 94 / 256 ) + 33 ) }
+          ( 1 .. 16 ) );
+
     my $s = $self->mgr->confAcc->saveConf( $new, %$saveParams );
     if ( $s > 0 ) {
         print STDERR "Saved under number $s\n";
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Diff.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Diff.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Diff.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Diff.pm	2019-02-07 08:33:15.000000000 +0000
@@ -90,10 +90,8 @@ sub diff {
     while ( my $key = shift @{ $keys[1] } ) {
         next unless ( defined( $conf[1]->{$key} ) );
         next if ( $key =~ $hashParameters and not( %{ $conf[1]->{$key} } ) );
-        if (
-            (
-                not ref( $conf[1]->{$key} ) and not(
-                    (
+        if ( (
+                not ref( $conf[1]->{$key} ) and not( (
                         defined defaultValue( $self, $key )
                         and $conf[1]->{$key} eq defaultValue( $self, $key )
                     )
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Parser.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Parser.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Parser.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Parser.pm	2019-02-07 08:33:15.000000000 +0000
@@ -20,12 +20,13 @@ package Lemonldap::NG::Manager::Conf::Pa
 
 use strict;
 use utf8;
+use Crypt::URandom;
 use Mouse;
 use JSON 'to_json';
 use Lemonldap::NG::Common::Conf::ReConstants;
 use Lemonldap::NG::Manager::Attributes;
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 extends 'Lemonldap::NG::Common::Conf::Compact';
 
@@ -55,10 +56,10 @@ has message => (
         hdebug( "Message becomes " . $_[0]->{message} );
     }
 );
+has needConfirmation =>
+  ( is => 'rw', isa => 'ArrayRef', default => sub { return [] } );
 
 # Booleans
-has needConfirm =>
-  ( is => 'rw', isa => 'ArrayRef', default => sub { return [] } );
 has confChanged => (
     is      => 'rw',
     isa     => 'Bool',
@@ -125,13 +126,14 @@ sub scanTree {
     # metadata and set a value to the key if empty
     $self->newConf->{cfgNum} = $self->req->params('cfgNum');
     $self->newConf->{cfgAuthor} =
-      $self->req->userData->{ $Lemonldap::NG::Handler::Main::tsv->{whatToTrace}
+      $self->req->userData->{ Lemonldap::NG::Handler::Main->tsv->{whatToTrace}
           || '_whatToTrace' } // "anonymous";
     $self->newConf->{cfgAuthorIP} = $self->req->address;
     $self->newConf->{cfgDate}     = time;
     $self->newConf->{cfgVersion}  = $VERSION;
-    $self->newConf->{key} ||=
-      join( '', map { chr( int( rand(94) ) + 33 ) } ( 1 .. 16 ) );
+    $self->newConf->{key} ||= join( '',
+        map { chr( int( ord( Crypt::URandom::urandom(1) ) * 94 / 256 ) + 33 ) }
+          ( 1 .. 16 ) );
 
     return 1;
 }
@@ -306,7 +308,8 @@ sub _scanNodes {
             # SAML
             elsif ( $base =~ /^saml(?:S|ID)PMetaDataNodes$/ ) {
                 hdebug('SAML');
-                if ( defined $leaf->{data} and ref( $leaf->{data} ) eq 'ARRAY' )
+                if ( defined $leaf->{data}
+                    and ref( $leaf->{data} ) eq 'ARRAY' )
                 {
                     hdebug("  SAML data is an array, serializing");
                     $leaf->{data} = join ';', @{ $leaf->{data} };
@@ -532,6 +535,11 @@ sub _scanNodes {
                         : {}
                     }
                   );
+
+                @listCatRef = sort @listCatRef;
+                @listCatNew = sort @listCatNew;
+                hdebug( '# @listCatRef : ' . \@listCatRef );
+                hdebug( '# @listCatNew : ' . \@listCatNew );
                 for ( my $i = 0 ; $i < @listCatNew ; $i++ ) {
                     if ( not( defined $listCatRef[$i] )
                         or $listCatRef[$i] ne $listCatNew[$i] )
@@ -585,8 +593,7 @@ sub _scanNodes {
                 $knownCat->{__id}++;
                 my $s = $knownCat->{$app} = sprintf '%04d-cat',
                   $knownCat->{__id};
-                $cn->{$s} =
-                  { catname => $leaf->{title}, type => 'category' };
+                $cn->{$s} = { catname => $leaf->{title}, type => 'category' };
                 unless ($cmp->{$app}
                     and $cmp->{$app}->{catname} eq $cn->{$s}->{catname} )
                 {
@@ -1063,8 +1070,7 @@ sub _unitTest {
                 my $msg    = $attr->{msgFail} // $type->{msgFail};
                 $res = 0
                   unless (
-                    $self->_execTest(
-                        {
+                    $self->_execTest( {
                             keyTest    => $attr->{keyTest} // $type->{keyTest},
                             keyMsgFail => $attr->{keyMsgFail}
                               // $type->{keyMsgFail},
@@ -1165,7 +1171,7 @@ sub _globalTest {
         eval {
             ( $res, $msg ) = $sub->();
             if ( $res == -1 ) {
-                push @{ $self->needConfirm }, { message => $msg };
+                push @{ $self->needConfirmation }, { message => $msg };
             }
             elsif ($res) {
                 if ($msg) {
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Tests.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Tests.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Tests.pm	2018-12-20 13:33:54.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Tests.pm	2019-02-12 11:10:53.000000000 +0000
@@ -2,8 +2,9 @@ package Lemonldap::NG::Manager::Conf::Te
 
 use utf8;
 use Lemonldap::NG::Common::Regexp;
+use Lemonldap::NG::Handler::Main;
 
-our $VERSION = '2.0.1';
+our $VERSION = '2.0.2';
 
 ## @method hashref tests(hashref conf)
 # Return a hash ref where keys are the names of the tests and values
@@ -30,7 +31,8 @@ sub tests {
         portalIsInDomain => sub {
             return (
                 1,
-                (   index( $conf->{portal}, $conf->{domain} ) > 0
+                (
+                    index( $conf->{portal}, $conf->{domain} ) > 0
                     ? ''
                     : "Portal seems not to be in the domain $conf->{domain}"
                 )
@@ -42,7 +44,7 @@ sub tests {
 
             # Checking for ending slash
             $conf->{portal} .= '/'
-                unless ( $conf->{portal} =~ qr#/$# );
+              unless ( $conf->{portal} =~ qr#/$# );
 
             # Deleting trailing ending slash
             my $regex = qr#/+$#;
@@ -60,10 +62,11 @@ sub tests {
             }
             return (
                 1,
-                (   @pb
+                (
+                    @pb
                     ? 'Virtual hosts '
-                        . join( ', ', @pb )
-                        . " are not in $conf->{domain} and cross-domain-authentication is not set"
+                      . join( ', ', @pb )
+                      . " are not in $conf->{domain} and cross-domain-authentication is not set"
                     : undef
                 )
             );
@@ -77,9 +80,9 @@ sub tests {
             }
             if (@pb) {
                 return ( 0,
-                          'Virtual hosts '
-                        . join( ', ', @pb )
-                        . " contain a port, this is not allowed" );
+                        'Virtual hosts '
+                      . join( ', ', @pb )
+                      . " contain a port, this is not allowed" );
             }
             else { return 1; }
         },
@@ -92,9 +95,9 @@ sub tests {
             }
             if (@pb) {
                 return ( 0,
-                          'Virtual hosts '
-                        . join( ', ', @pb )
-                        . " must be in lower case" );
+                        'Virtual hosts '
+                      . join( ', ', @pb )
+                      . " must be in lower case" );
             }
             else { return 1; }
         },
@@ -102,12 +105,12 @@ sub tests {
         # Check if "userDB" and "authentication" are consistent
         authAndUserDBConsistency => sub {
             foreach
-                my $type (qw(Facebook Google OpenID OpenIDConnect SAML WebID))
+              my $type (qw(Facebook Google OpenID OpenIDConnect SAML WebID))
             {
                 return ( 0,
-                    "\"$type\" can not be used as user database without using \"$type\" for authentication"
-                    )
-                    if ($conf->{userDB} =~ /$type/
+"\"$type\" can not be used as user database without using \"$type\" for authentication"
+                  )
+                  if (  $conf->{userDB} =~ /$type/
                     and $conf->{authentication} !~ /$type/ );
             }
             return 1;
@@ -117,29 +120,30 @@ sub tests {
         checkAttrAndMacros => sub {
             my @tmp;
             foreach my $k ( keys %$conf ) {
-                if ( $k
-                    =~ /^(?:openIdSreg_(?:(?:(?:full|nick)nam|languag|postcod|timezon)e|country|gender|email|dob)|whatToTrace)$/
-                    )
+                if ( $k =~
+/^(?:openIdSreg_(?:(?:(?:full|nick)nam|languag|postcod|timezon)e|country|gender|email|dob)|whatToTrace)$/
+                  )
                 {
                     my $v = $conf->{$k};
                     $v =~ s/^$//;
                     next if ( $v =~ /^_/ );
                     push @tmp,
-                        $k
-                        unless (
+                      $k
+                      unless (
                         defined(
                             $conf->{exportedVars}->{$v}
-                                or defined( $conf->{macros}->{$v} )
+                              or defined( $conf->{macros}->{$v} )
                         )
-                        );
+                      );
                 }
             }
             return (
                 1,
-                (   @tmp
+                (
+                    @tmp
                     ? 'Values of parameter(s) "'
-                        . join( ', ', @tmp )
-                        . '" are not defined in exported attributes or macros'
+                      . join( ', ', @tmp )
+                      . '" are not defined in exported attributes or macros'
                     : ''
                 )
             );
@@ -151,18 +155,18 @@ sub tests {
             if ( $conf->{userDB} =~ /^Google$/ ) {
                 foreach my $k ( keys %{ $conf->{exportedVars} } ) {
                     my $v = $conf->{exportedVars}->{$k};
-                    if ( $v !~ Lemonldap::NG::Common::Regexp::GOOGLEAXATTR() )
-                    {
+                    if ( $v !~ Lemonldap::NG::Common::Regexp::GOOGLEAXATTR() ) {
                         push @tmp, $v;
                     }
                 }
             }
             return (
                 1,
-                (   @tmp
+                (
+                    @tmp
                     ? 'Values of parameter(s) "'
-                        . join( ', ', @tmp )
-                        . '" are not exported by Google'
+                      . join( ', ', @tmp )
+                      . '" are not exported by Google'
                     : ''
                 )
             );
@@ -174,8 +178,7 @@ sub tests {
             if ( $conf->{userDB} =~ /^OpenID$/ ) {
                 foreach my $k ( keys %{ $conf->{exportedVars} } ) {
                     my $v = $conf->{exportedVars}->{$k};
-                    if ( $v
-                        !~ Lemonldap::NG::Common::Regexp::OPENIDSREGATTR() )
+                    if ( $v !~ Lemonldap::NG::Common::Regexp::OPENIDSREGATTR() )
                     {
                         push @tmp, $v;
                     }
@@ -183,10 +186,11 @@ sub tests {
             }
             return (
                 1,
-                (   @tmp
+                (
+                    @tmp
                     ? 'Values of parameter(s) "'
-                        . join( ', ', @tmp )
-                        . '" are not exported by OpenID SREG'
+                      . join( ', ', @tmp )
+                      . '" are not exported by OpenID SREG'
                     : ''
                 )
             );
@@ -195,51 +199,51 @@ sub tests {
         # Try to use Apache::Session module
         testApacheSession => sub {
             my ( $id, %h );
-            my $gc = $Lemonldap::NG::Handler::PSGI::Main::tsv
-                ->{sessionStorageModule};
+            my $gc = Lemonldap::NG::Handler::Main->tsv->{sessionStorageModule};
             return 1
-                if ( ( $gc and $gc eq $conf->{globalStorage} )
-                or $conf->{globalStorage}
-                =~ /^Lemonldap::NG::Common::Apache::Session::/ );
+              if ( ( $gc and $gc eq $conf->{globalStorage} )
+                or $conf->{globalStorage} =~
+                /^Lemonldap::NG::Common::Apache::Session::/ );
             eval "use $conf->{globalStorage}";
             return ( -1, "Unknown package $conf->{globalStorage}" ) if ($@);
             eval {
                 tie %h, 'Lemonldap::NG::Common::Apache::Session', undef,
-                    {
+                  {
                     %{ $conf->{globalStorageOptions} },
                     backend => $conf->{globalStorage}
-                    };
+                  };
             };
             return ( -1, "Unable to create a session ($@)" )
-                if ( $@ or not tied(%h) );
+              if ( $@ or not tied(%h) );
             eval {
                 $h{a} = 1;
                 $id = $h{_session_id} or return ( -1, 'No _session_id' );
                 untie(%h);
                 tie %h, 'Lemonldap::NG::Common::Apache::Session', $id,
-                    {
+                  {
                     %{ $conf->{globalStorageOptions} },
                     backend => $conf->{globalStorage}
-                    };
+                  };
             };
             return ( -1, "Unable to insert data ($@)" ) if ($@);
             return ( -1, "Unable to recover data stored" )
-                unless ( $h{a} == 1 );
+              unless ( $h{a} == 1 );
             eval { tied(%h)->delete; };
             return ( -1, "Unable to delete session ($@)" ) if ($@);
             return ( -1,
-                'All sessions may be lost and you must restart all your Apache servers'
+'All sessions may be lost and you must restart all your Apache servers'
             ) if ( $gc and $conf->{globalStorage} ne $gc );
             return 1;
         },
 
         # Warn if cookie name has changed
         cookieNameChanged => sub {
-            my $cn = $Lemonldap::NG::Handler::PSGI::API::tsv->{cookieName};
+            my $cn = Lemonldap::NG::Handler::Main->tsv->{cookieName};
             return (
                 1,
-                (   $cn
-                        and $cn ne $conf->{cookieName}
+                (
+                    $cn
+                      and $cn ne $conf->{cookieName}
                     ? 'Cookie name has changed, you must restart all your web servers'
                     : ()
                 )
@@ -250,9 +254,10 @@ sub tests {
         cookieTTL => sub {
             return 1 unless ( defined $conf->{cookieExpiration} );
             return ( 0, "Cookie TTL must be higher than one minute" )
-                unless ( $conf->{cookieExpiration} > 60 );
+              unless ( $conf->{cookieExpiration} == 0
+                || $conf->{cookieExpiration} > 60 );
             return ( 1, "Cookie TTL should be higher or equal than one hour" )
-                unless ( $conf->{cookieExpiration} >= 3600
+              unless ( $conf->{cookieExpiration} >= 3600
                 || $conf->{cookieExpiration} == 0 );
 
             # Return
@@ -260,10 +265,10 @@ sub tests {
         },
 
         # Warn if session timeout is lower than 10 minutes
-        timeoutActivity => sub {
+        sessionTimeout => sub {
             return 1 unless ( defined $conf->{timeout} );
-            return ( 1, "Session timeout should be higher than ten minutes" )
-                unless ( $conf->{timeout} > 600
+            return ( -1, "Session timeout should be higher than ten minutes" )
+              unless ( $conf->{timeout} > 600
                 || $conf->{timeout} == 0 );
 
             # Return
@@ -271,12 +276,12 @@ sub tests {
         },
 
         # Error if session Activity Timeout is equal or lower than one minute
-        timeoutActivity => sub {
+        sessionTimeoutActivity => sub {
             return 1 unless ( defined $conf->{timeoutActivity} );
             return ( 0,
-                "Session activity timeout must be higher or equal than one minute"
-                )
-                unless ( $conf->{timeoutActivity} > 59
+"Session activity timeout must be higher or equal than one minute"
+              )
+              unless ( $conf->{timeoutActivity} > 59
                 || $conf->{timeoutActivity} == 0 );
 
             # Return
@@ -287,11 +292,11 @@ sub tests {
         timeoutActivityInterval => sub {
             return 1 unless ( defined $conf->{timeoutActivityInterval} );
             return ( 0,
-                "Activity timeout interval must be lower than session activity timeout"
-                )
-                if ($conf->{timeoutActivity}
-                and $conf->{timeoutActivity}
-                <= $conf->{timeoutActivityInterval} );
+"Activity timeout interval must be lower than session activity timeout"
+              )
+              if (  $conf->{timeoutActivity}
+                and $conf->{timeoutActivity} <=
+                $conf->{timeoutActivityInterval} );
 
             # Return
             return 1;
@@ -301,7 +306,8 @@ sub tests {
         managerProtection => sub {
             return (
                 1,
-                (   $conf->{cfgAuthor} eq 'anonymous'
+                (
+                    $conf->{cfgAuthor} eq 'anonymous'
                     ? 'Your manager seems to be unprotected'
                     : ''
                 )
@@ -317,21 +323,25 @@ sub tests {
             # Use SMTP
             eval "use Net::SMTP";
             return ( 1, "Net::SMTP module is required to use SMTP server" )
-                if ($@);
+              if ($@);
 
             # Create SMTP object
-            my $smtp = Net::SMTP->new( $conf->{SMTPServer}, Timeout => 5 );
+            my $smtp = Net::SMTP->new(
+                $conf->{SMTPServer},
+                Timeout => 5,
+                ( $conf->{SMTPPort} ? ( Port => $conf->{SMTPPort} ) : () ),
+            );
             return ( 1,
                 "SMTP connection to " . $conf->{SMTPServer} . " failed" )
-                unless ($smtp);
+              unless ($smtp);
 
             # Skip other tests if no authentication
             return 1
-                unless ( $conf->{SMTPAuthUser} and $conf->{SMTPAuthPass} );
+              unless ( $conf->{SMTPAuthUser} and $conf->{SMTPAuthPass} );
 
             # Try authentication
             return ( 1, "SMTP authentication failed" )
-                unless $smtp->auth( $conf->{SMTPAuthUser},
+              unless $smtp->auth( $conf->{SMTPAuthUser},
                 $conf->{SMTPAuthPass} );
 
             # Return
@@ -341,14 +351,15 @@ sub tests {
         # SAML entity ID must be uniq
         samlIDPEntityIdUniqueness => sub {
             return 1
-                unless ( $conf->{samlIDPMetaDataXML}
+              unless ( $conf->{samlIDPMetaDataXML}
                 and %{ $conf->{samlIDPMetaDataXML} } );
             my @msg;
             my $res = 1;
             my %entityIds;
             foreach my $idpId ( keys %{ $conf->{samlIDPMetaDataXML} } ) {
-                unless ( $conf->{samlIDPMetaDataXML}->{$idpId}
-                    ->{samlIDPMetaDataXML} =~ /entityID=(['"])(.+?)\1/si )
+                unless (
+                    $conf->{samlIDPMetaDataXML}->{$idpId}->{samlIDPMetaDataXML}
+                    =~ /entityID=(['"])(.+?)\1/si )
                 {
                     push @msg, "$idpId SAML metadata has no EntityID";
                     $res = 0;
@@ -357,7 +368,7 @@ sub tests {
                 my $eid = $2;
                 if ( defined $entityIds{$eid} ) {
                     push @msg,
-                        "$idpId and $entityIds{$eid} have the same SAML EntityID";
+                      "$idpId and $entityIds{$eid} have the same SAML EntityID";
                     $res = 0;
                     next;
                 }
@@ -367,15 +378,15 @@ sub tests {
         },
         samlSPEntityIdUniqueness => sub {
             return 1
-                unless ( $conf->{samlSPMetaDataXML}
+              unless ( $conf->{samlSPMetaDataXML}
                 and %{ $conf->{samlSPMetaDataXML} } );
             my @msg;
             my $res = 1;
             my %entityIds;
             foreach my $spId ( keys %{ $conf->{samlSPMetaDataXML} } ) {
                 unless (
-                    $conf->{samlSPMetaDataXML}->{$spId}->{samlSPMetaDataXML}
-                    =~ /entityID=(['"])(.+?)\1/si )
+                    $conf->{samlSPMetaDataXML}->{$spId}->{samlSPMetaDataXML} =~
+                    /entityID=(['"])(.+?)\1/si )
                 {
                     push @msg, "$spId SAML metadata has no EntityID";
                     $res = 0;
@@ -384,7 +395,7 @@ sub tests {
                 my $eid = $2;
                 if ( defined $entityIds{$eid} ) {
                     push @msg,
-                        "$spId and $entityIds{$eid} have the same SAML EntityID";
+                      "$spId and $entityIds{$eid} have the same SAML EntityID";
                     $res = 0;
                     next;
                 }
@@ -398,7 +409,7 @@ sub tests {
             return 1 unless ( $conf->{authentication} eq 'Combination' );
             require Lemonldap::NG::Common::Combination::Parser;
             return ( 0, 'No module declared for combination' )
-                unless ( $conf->{combModules} and %{ $conf->{combModules} } );
+              unless ( $conf->{combModules} and %{ $conf->{combModules} } );
             my $moduleList;
             foreach my $md ( keys %{ $conf->{combModules} } ) {
                 my $entry = $conf->{combModules}->{$md};
@@ -409,8 +420,8 @@ sub tests {
                 );
             }
             eval {
-                Lemonldap::NG::Common::Combination::Parser->parse(
-                    $moduleList, $conf->{combination} );
+                Lemonldap::NG::Common::Combination::Parser->parse( $moduleList,
+                    $conf->{combination} );
             };
             return ( 0, $@ ) if ($@);
 
@@ -422,9 +433,9 @@ sub tests {
         combinationParameters => sub {
             return 1 unless ( $conf->{authentication} eq "Combination" );
             return ( 0, "Combination rule must be defined" )
-                unless ( $conf->{combination} );
+              unless ( $conf->{combination} );
             return ( 0, 'userDB must be set to "Same" to enable Combination' )
-                unless ( $conf->{userDB} eq "Same" );
+              unless ( $conf->{userDB} eq "Same" );
 
             # Return
             return 1;
@@ -447,7 +458,7 @@ sub tests {
                 eval "use Convert::Base32";
                 return ( 1,
                     "Convert::Base32 module is required to enable TOTP" )
-                    if ($@);
+                  if ($@);
             }
 
             # Use U2F
@@ -456,7 +467,7 @@ sub tests {
             {
                 eval "use Crypt::U2F::Server::Simple";
                 return ( 1,
-                    "Crypt::U2F::Server::Simple module is required to enable U2F"
+"Crypt::U2F::Server::Simple module is required to enable U2F"
                 ) if ($@);
             }
 
@@ -464,7 +475,7 @@ sub tests {
             if ( $conf->{yubikey2fActivation} ) {
                 eval "use Auth::Yubikey_WebClient";
                 return ( 1,
-                    "Auth::Yubikey_WebClient module is required to enable Yubikey"
+"Auth::Yubikey_WebClient module is required to enable Yubikey"
                 ) if ($@);
             }
 
@@ -478,7 +489,7 @@ sub tests {
             my $w = "";
             foreach ( 'totp', 'u' ) {
                 $w .= uc($_) . "2F is activated twice \n"
-                    if ( $conf->{ $_ . '2fActivation' } eq '1' );
+                  if ( $conf->{ $_ . '2fActivation' } eq '1' );
             }
             return ( 1, ( $w ? $w : () ) );
         },
@@ -489,8 +500,9 @@ sub tests {
             return 1 unless ( defined $conf->{totp2fDigits} );
             return (
                 1,
-                (   (          $conf->{totp2fDigits} == 6
-                            or $conf->{totp2fDigits} == 8
+                ( (
+                             $conf->{totp2fDigits} == 6
+                          or $conf->{totp2fDigits} == 8
                     )
                     ? ''
                     : 'TOTP should be 6 or 8 digits long'
@@ -502,9 +514,9 @@ sub tests {
         totp2fParams => sub {
             return 1 unless ( $conf->{totp2fActivation} );
             return ( 0, 'TOTP range must be defined' )
-                unless ( $conf->{totp2fRange} );
+              unless ( $conf->{totp2fRange} );
             return ( 1, "TOTP interval should be higher than 10s" )
-                unless ( $conf->{totp2fInterval} > 10 );
+              unless ( $conf->{totp2fInterval} > 10 );
 
             # Return
             return 1;
@@ -515,11 +527,12 @@ sub tests {
         yubikey2fParams => sub {
             return 1 unless ( $conf->{yubikey2fActivation} );
             return ( 0, "Yubikey client ID and secret key must be set" )
-                unless ( defined $conf->{yubikey2fSecretKey}
+              unless ( defined $conf->{yubikey2fSecretKey}
                 && defined $conf->{yubikey2fClientID} );
             return (
                 1,
-                (   ( $conf->{yubikey2fPublicIDSize} == 12 )
+                (
+                    ( $conf->{yubikey2fPublicIDSize} == 12 )
                     ? ''
                     : 'Yubikey public ID size should be 12 digits long'
                 )
@@ -530,7 +543,7 @@ sub tests {
         rest2fVerifyUrl => sub {
             return 1 unless ( $conf->{rest2fActivation} );
             return ( 0, "REST 2F Verify URL must be set" )
-                unless ( defined $conf->{rest2fVerifyUrl} );
+              unless ( defined $conf->{rest2fVerifyUrl} );
 
             # Return
             return 1;
@@ -544,16 +557,15 @@ sub tests {
             my $ok  = 0;
             foreach (qw(u totp yubikey)) {
                 $ok ||= $conf->{ $_ . '2fActivation' }
-                    && $conf->{ $_ . '2fSelfRegistration' };
+                  && $conf->{ $_ . '2fSelfRegistration' };
                 last if ($ok);
             }
 
             $ok ||= $conf->{'utotp2fActivation'}
-                && ( $conf->{'u2fSelfRegistration'}
+              && ( $conf->{'u2fSelfRegistration'}
                 || $conf->{'totp2fSelfRegistration'} );
-            $msg
-                = "A self registrable module should be enabled to require 2FA"
-                unless ($ok);
+            $msg = "A self registrable module should be enabled to require 2FA"
+              unless ($ok);
 
             return ( 1, $msg );
         },
@@ -562,7 +574,7 @@ sub tests {
         ext2fCommands => sub {
             return 1 unless ( $conf->{ext2fActivation} );
             return ( 0, "External 2F Send or Validate command must be set" )
-                unless ( defined $conf->{ext2FSendCommand}
+              unless ( defined $conf->{ext2FSendCommand}
                 && defined $conf->{ext2FValidateCommand} );
 
             # Return
@@ -573,9 +585,9 @@ sub tests {
         formTimeout => sub {
             return 1 unless ( defined $conf->{formTimeout} );
             return ( 0, "XSRF form token TTL must be higher than 30s" )
-                unless ( $conf->{formTimeout} > 30 );
+              unless ( $conf->{formTimeout} > 30 );
             return ( 1, "XSRF form token TTL should not be higher than 2mn" )
-                if ( $conf->{formTimeout} > 120 );
+              if ( $conf->{formTimeout} > 120 );
 
             # Return
             return 1;
@@ -584,9 +596,8 @@ sub tests {
         # Warn if number of password reset retries is null
         passwordResetRetries => sub {
             return 1 unless ( $conf->{portalDisplayResetPassword} );
-            return ( 1,
-                "Number of reset password retries should not be null" )
-                unless ( $conf->{passwordResetAllowedRetries} );
+            return ( 1, "Number of reset password retries should not be null" )
+              unless ( $conf->{passwordResetAllowedRetries} );
 
             # Return
             return 1;
@@ -596,14 +607,27 @@ sub tests {
         bruteForceProtection => sub {
             return 1 unless ( $conf->{bruteForceProtection} );
             return ( 1,
-                '"History" plugin is required to enable "BruteForceProtection" plugin'
+'"History" plugin is required to enable "BruteForceProtection" plugin'
             ) unless ( $conf->{loginHistoryEnabled} );
             return ( 1,
-                'Number of failed logins must be higher than 2 to enable "BruteForceProtection" plugin'
+'Number of failed logins must be higher than 2 to enable "BruteForceProtection" plugin'
             ) unless ( $conf->{failedLoginNumber} > 2 );
 
             # Return
             return 1;
+        },
+
+        # Warn if Mailrest plugin is enabled without Token or Captcha
+        checkMailResetSecurity => sub {
+            return 1 unless ( $conf->{portalDisplayResetPassword} );
+            return ( -1,
+'"passwordMailReset" plugin is enabled without CSRF Token neither Captcha required !!!'
+              )
+              unless ( $conf->{requireToken}
+                or $conf->{captcha_mail_enabled} );
+
+            # Return
+            return 1;
         },
 
     };
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Zero.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Zero.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Zero.pm	2018-12-20 13:33:54.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf/Zero.pm	2019-02-05 17:46:40.000000000 +0000
@@ -1,6 +1,6 @@
 package Lemonldap::NG::Manager::Conf::Zero;
 
-our $VERSION = '2.0.1';
+our $VERSION = '2.0.2';
 
 sub zeroConf {
     my ( $domain, $sessionDir, $persistentSessionDir, $notificationDir ) = @_;
@@ -66,7 +66,7 @@ sub zeroConf {
                         'uri'         => 'http://lemonldap-ng.org/',
                         'display'     => 'on',
                         'logo'        => 'network.png',
-                        'name'        => 'Offical Website'
+                        'name'        => 'Official Website'
                     },
                     'type' => 'application'
                 },
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Conf.pm	2019-02-06 17:01:17.000000000 +0000
@@ -19,7 +19,7 @@ use feature 'state';
 
 extends 'Lemonldap::NG::Common::Conf::RESTServer';
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 #############################
 # I. INITIALIZATION METHODS #
@@ -56,8 +56,11 @@ sub addRoutes {
 
       # New key and conf save
       ->addRoute(
-        confs =>
-          { newRSAKey => 'newRSAKey', raw => 'newRawConf', '*' => 'newConf' },
+        confs => {
+            newRSAKey => 'newRSAKey',
+            raw       => 'newRawConf',
+            '*'       => 'newConf'
+        },
         ['POST']
       )
 
@@ -228,10 +231,16 @@ sub newConf {
 
     # "message" fields: note that words enclosed by "__" (__word__) will be
     # translated
-    $res->{message} = $parser->{message};
-    foreach my $t (qw(errors warnings changes)) {
-        $res->{details}->{ '__' . $t . '__' } = $parser->$t
-          if ( @{ $parser->$t } );
+    $res->{details}->{'__errors__'} = $parser->{errors}
+      if ( @{ $parser->{errors} } );
+    unless ( @{ $parser->{errors} } ) {
+        $res->{details}->{'__needConfirmation__'} = $parser->{needConfirmation}
+          if ( @{ $parser->{needConfirmation} } && !$req->params('force') );
+        $res->{message} = $parser->{message};
+        foreach my $t (qw(warnings changes)) {
+            $res->{details}->{ '__' . $t . '__' } = $parser->$t
+              if ( @{ $parser->$t } );
+        }
     }
     if ( $res->{result} ) {
         if ( $self->{demoMode} ) {
@@ -240,7 +249,9 @@ sub newConf {
         else {
             my %args;
             $args{force} = 1 if ( $req->params('force') );
-            my $s = $self->confAcc->saveConf( $parser->newConf, %args );
+            my $s = CONFIG_WAS_CHANGED;
+            $s = $self->confAcc->saveConf( $parser->newConf, %args )
+              unless ( @{ $parser->{needConfirmation} } && !$args{force} );
             if ( $s > 0 ) {
                 $self->userLogger->notice(
                     'User ' . $self->userId($req) . " has stored conf $s" );
@@ -259,7 +270,8 @@ sub newConf {
                 $res->{result} = 0;
                 if ( $s == CONFIG_WAS_CHANGED ) {
                     $res->{needConfirm} = 1;
-                    $res->{message} .= '__needConfirmation__';
+                    $res->{message} .= '__needConfirmation__'
+                      unless @{ $parser->{needConfirmation} };
                 }
                 else {
                     $res->{message} = $Lemonldap::NG::Common::Conf::msg;
@@ -345,7 +357,8 @@ sub applyConf {
             $r =
               HTTP::Request->new( 'GET', $targetUrl,
                 HTTP::Headers->new( Host => $url->host ) );
-            if ( defined $url->userinfo && $url->userinfo =~ /^([^:]+):(.*)$/ )
+            if ( defined $url->userinfo
+                && $url->userinfo =~ /^([^:]+):(.*)$/ )
             {
                 $r->authorization_basic( $1, $2 );
             }
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Notifications.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Notifications.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Notifications.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Notifications.pm	2019-02-07 08:33:15.000000000 +0000
@@ -109,8 +109,7 @@ sub setNotifAccess {
     unless (
         eval {
             $self->notifAccess(
-                $type->new(
-                    {
+                $type->new( {
                         %{ $self->{notificationStorageOptions} },
                         p    => $self,
                         conf => $self
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Sessions.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Sessions.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Sessions.pm	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Sessions.pm	2019-02-07 08:33:15.000000000 +0000
@@ -17,7 +17,7 @@ use feature 'state';
 extends 'Lemonldap::NG::Common::Conf::AccessLib',
   'Lemonldap::NG::Common::Session::REST';
 
-our $VERSION = '2.0.0';
+our $VERSION = '2.0.2';
 
 #############################
 # I. INITIALIZATION METHODS #
@@ -103,7 +103,7 @@ sub sessions {
 
     # Case 2: list of sessions
 
-    my $whatToTrace = Lemonldap::NG::Handler::PSGI::Main->tsv->{whatToTrace};
+    my $whatToTrace = Lemonldap::NG::Handler::Main->tsv->{whatToTrace};
 
     # 2.1 Get fields to require
     my @fields = ( '_httpSessionType', $self->{ipField}, $whatToTrace );
@@ -236,8 +236,7 @@ sub sessions {
                 value    => $uid,
                 count    => scalar( @{ $r->{$uid} } ),
                 sessions => [
-                    map {
-                        {
+                    map { {
                             session => $_->{_sessionId},
                             date    => $_->{_utime}
                         }
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager.pm 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager.pm
--- 2.0.1+ds-2/lemonldap-ng-manager/lib/Lemonldap/NG/Manager.pm	2018-12-20 13:33:54.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/lib/Lemonldap/NG/Manager.pm	2019-02-04 09:52:16.000000000 +0000
@@ -17,7 +17,7 @@ use JSON;
 use Lemonldap::NG::Common::Conf::Constants;
 use Lemonldap::NG::Common::PSGI::Constants;
 
-our $VERSION = '2.0.1';
+our $VERSION = '2.0.2';
 
 extends 'Lemonldap::NG::Common::Conf::AccessLib',
   'Lemonldap::NG::Handler::PSGI::Router';
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/Makefile.PL 2.0.2+ds-1/lemonldap-ng-manager/Makefile.PL
--- 2.0.1+ds-2/lemonldap-ng-manager/Makefile.PL	2018-12-21 14:17:37.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/Makefile.PL	2019-02-04 09:52:16.000000000 +0000
@@ -35,8 +35,8 @@ WriteMakefile(
     PREREQ_PM => {
         'Convert::PEM'           => 0,
         'Crypt::OpenSSL::RSA'    => 0,
-        'Lemonldap::NG::Common'  => '2.0.1',
-        'Lemonldap::NG::Handler' => '2.0.1',
+        'Lemonldap::NG::Common'  => '2.0.2',
+        'Lemonldap::NG::Handler' => '2.0.2',
         'LWP::UserAgent'         => 0,
     },    # e.g., Module::Name => 1.1
     (
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/MANIFEST 2.0.2+ds-1/lemonldap-ng-manager/MANIFEST
--- 2.0.1+ds-2/lemonldap-ng-manager/MANIFEST	2018-12-21 14:18:23.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/MANIFEST	2019-02-08 10:31:03.000000000 +0000
@@ -193,11 +193,13 @@ t/05-rest-api.t
 t/06-rest-api.t
 t/07-utf8.t
 t/10-save-unchanged-conf.t
+t/11-save-changed-conf-with-confirmation.t
 t/12-save-changed-conf.t
 t/14-bad-changes-in-conf.t
 t/15-combination.t
 t/20-test-coverage.t
 t/40-sessions.t
+t/50-notifications-DBI.t
 t/50-notifications.t
 t/60-2ndfa.t
 t/80-attributes.t
@@ -206,8 +208,10 @@ t/99-pod.t
 t/conf/lmConf-1.json
 t/jsonfiles/01-base-tree.json
 t/jsonfiles/02-base-tree-all-nodes-opened.json
+t/jsonfiles/11-modified-with-confirmation.json
 t/jsonfiles/12-modified.json
 t/jsonfiles/14-bad.json
 t/jsonfiles/15-combination.json
+t/lemonldap-ng-dbi.ini
 t/lemonldap-ng.ini
 t/test-lib.pm
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/META.json 2.0.2+ds-1/lemonldap-ng-manager/META.json
--- 2.0.1+ds-2/lemonldap-ng-manager/META.json	2018-12-21 14:18:19.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/META.json	2019-02-12 17:23:23.000000000 +0000
@@ -4,13 +4,13 @@
       "Xavier Guimard <x.guimard@free.fr>, ClÃ©ment Oudot <clement@oodo.net>"
    ],
    "dynamic_config" : 1,
-   "generated_by" : "ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter version 2.150010",
+   "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010",
    "license" : [
       "open_source"
    ],
    "meta-spec" : {
       "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
-      "version" : "2"
+      "version" : 2
    },
    "name" : "Lemonldap-NG-Manager",
    "no_index" : {
@@ -40,8 +40,8 @@
             "Convert::PEM" : "0",
             "Crypt::OpenSSL::RSA" : "0",
             "LWP::UserAgent" : "0",
-            "Lemonldap::NG::Common" : "v2.0.1",
-            "Lemonldap::NG::Handler" : "v2.0.1"
+            "Lemonldap::NG::Common" : "v2.0.2",
+            "Lemonldap::NG::Handler" : "v2.0.2"
          }
       }
    },
@@ -54,6 +54,6 @@
       ],
       "x_MailingList" : "mailto:lemonldap-ng-dev@ow2.org"
    },
-   "version" : "v2.0.1",
-   "x_serialization_backend" : "JSON::PP version 2.27400_02"
+   "version" : "v2.0.2",
+   "x_serialization_backend" : "JSON::PP version 2.97001"
 }
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/META.yml 2.0.2+ds-1/lemonldap-ng-manager/META.yml
--- 2.0.1+ds-2/lemonldap-ng-manager/META.yml	2018-12-21 14:18:19.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/META.yml	2019-02-12 17:23:23.000000000 +0000
@@ -9,7 +9,7 @@ build_requires:
 configure_requires:
   ExtUtils::MakeMaker: '0'
 dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter version 2.150010'
+generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010'
 license: open_source
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -25,12 +25,12 @@ requires:
   Convert::PEM: '0'
   Crypt::OpenSSL::RSA: '0'
   LWP::UserAgent: '0'
-  Lemonldap::NG::Common: v2.0.1
-  Lemonldap::NG::Handler: v2.0.1
+  Lemonldap::NG::Common: v2.0.2
+  Lemonldap::NG::Handler: v2.0.2
 resources:
   MailingList: mailto:lemonldap-ng-dev@ow2.org
   X_twitter: https://twitter.com/lemonldapng
   homepage: http://lemonldap-ng.org/
   license: http://opensource.org/licenses/GPL-2.0
-version: v2.0.1
+version: v2.0.2
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/scripts/lmConfigEditor 2.0.2+ds-1/lemonldap-ng-manager/scripts/lmConfigEditor
--- 2.0.1+ds-2/lemonldap-ng-manager/scripts/lmConfigEditor	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/scripts/lmConfigEditor	2019-02-04 09:52:16.000000000 +0000
@@ -7,6 +7,7 @@ use Data::Dumper;
 use English qw(-no_match_vars);
 use File::Temp;
 use POSIX qw(setuid setgid);
+use Safe;
 use strict;
 
 eval {
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/scripts/testConfBackend.pl 2.0.2+ds-1/lemonldap-ng-manager/scripts/testConfBackend.pl
--- 2.0.1+ds-2/lemonldap-ng-manager/scripts/testConfBackend.pl	2018-10-25 16:47:11.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/scripts/testConfBackend.pl	2019-02-07 08:33:15.000000000 +0000
@@ -30,8 +30,7 @@ my $currentConf;
 
 # 1
 ok(
-    $currentConf = Lemonldap::NG::Common::Conf->new(
-        {
+    $currentConf = Lemonldap::NG::Common::Conf->new( {
             confFile => 'test/lemonldap-ng.ini',
             noCache  => 1,
         }
@@ -43,8 +42,7 @@ $Lemonldap::NG::Common::Conf::msg = '';
 # 2
 my $new;
 ok(
-    $new = Lemonldap::NG::Common::Conf->new(
-        {
+    $new = Lemonldap::NG::Common::Conf->new( {
             type => $module,
             %$args,
             force       => 1,
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/coffee/2ndfa.coffee 2.0.2+ds-1/lemonldap-ng-manager/site/coffee/2ndfa.coffee
--- 2.0.1+ds-2/lemonldap-ng-manager/site/coffee/2ndfa.coffee	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/coffee/2ndfa.coffee	2019-02-07 08:33:15.000000000 +0000
@@ -32,7 +32,7 @@ schemes =
 
 overScheme =
 	_whatToTrace: (t,v,level,over) ->
-		if level == 1
+		if level == 1 and v.length > over
 			"#{t}=#{v}*&groupBy=substr(#{t},#{(level+over+1)})"
 		else
 			null
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/coffee/filterFunctions.coffee 2.0.2+ds-1/lemonldap-ng-manager/site/coffee/filterFunctions.coffee
--- 2.0.1+ds-2/lemonldap-ng-manager/site/coffee/filterFunctions.coffee	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/coffee/filterFunctions.coffee	2019-02-04 09:52:16.000000000 +0000
@@ -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
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/coffee/llApp.coffee 2.0.2+ds-1/lemonldap-ng-manager/site/coffee/llApp.coffee
--- 2.0.1+ds-2/lemonldap-ng-manager/site/coffee/llApp.coffee	2018-12-17 09:04:12.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/coffee/llApp.coffee	2019-02-06 17:01:17.000000000 +0000
@@ -139,7 +139,7 @@ llapp.directive 'script', ['$htmlParams'
 	restrict: 'E'
 	terminal: true
 	compile: (element, attr) ->
-		if t = attr.type.match /text\/(menu|parameters)/
+		if attr.type and t = attr.type.match /text\/(menu|parameters)/
 			try
 				return $htmlParams.set t[1], JSON.parse(element[0].text)
 			catch e
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/coffee/manager.coffee 2.0.2+ds-1/lemonldap-ng-manager/site/coffee/manager.coffee
--- 2.0.1+ds-2/lemonldap-ng-manager/site/coffee/manager.coffee	2018-12-17 09:04:12.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/coffee/manager.coffee	2019-02-04 09:52:16.000000000 +0000
@@ -144,13 +144,18 @@ llapp.controller 'TreeCtrl', [
 				title: ''
 				message: ''
 				items: []
-			$scope.confirmNeeded = true if data.message == '__needConfirmation__'
+			$scope.confirmNeeded = true if data.needConfirm
 			$scope.message.message = data.message if data.message
 			if data.details
 				for m of data.details when m != '__changes__'
-					$scope.message.items.push
-						message: m
-						items: data.details[m]
+					if m == '__needConfirmation__'
+						$scope.message.items.unshift
+							message: m
+							items: data.details[m]
+					else
+						$scope.message.items.push
+							message: m
+							items: data.details[m]
 			$scope.waiting = false
 			if data.result == 1
 				# Force reloading page
@@ -337,7 +342,7 @@ llapp.controller 'TreeCtrl', [
 				id: "#{node.id}/n#{id++}"
 				title: 'new'
 				type: 'samlAttribute'
-				data: [0, 'New', '', '']
+				data: ['0', 'New', '', '']
 
 		# Nodes with template
 		$scope.addVhost = ->
@@ -673,9 +678,7 @@ llapp.controller 'TreeCtrl', [
 						else
 							node.data = data.value
 						# Cast int as int (remember that booleans are int for Perl)
-						if node.type and node.type.match /^(bool|trool|boolOrExpr)$/
-							node.data = node.data.toString()
-						else if node.type and node.type.match /^int$/
+						if node.type and node.type.match /^int$/
 							node.data = parseInt(node.data, 10)				
 						# Split SAML types
 						else if node.type and node.type.match(/^(saml(Service|Assertion)|blackWhiteList)$/) and not (typeof node.data == 'object')
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/coffee/sessions.coffee 2.0.2+ds-1/lemonldap-ng-manager/site/coffee/sessions.coffee
--- 2.0.1+ds-2/lemonldap-ng-manager/site/coffee/sessions.coffee	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/coffee/sessions.coffee	2019-02-07 08:33:15.000000000 +0000
@@ -61,7 +61,7 @@ schemes =
 
 overScheme =
 	_whatToTrace: (t,v,level,over) ->
-		if level == 1
+		if level == 1 and v.length > over
 			"#{t}=#{v}*&groupBy=substr(#{t},#{(level+over+1)})"
 		else
 			null
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/bwr/angular-aria/angular-aria.js 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/bwr/angular-aria/angular-aria.js
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/bwr/angular-aria/angular-aria.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/bwr/angular-aria/angular-aria.js	2019-02-04 09:52:16.000000000 +0000
@@ -1,5 +1,5 @@
 /**
- * @license AngularJS v1.7.2
+ * @license AngularJS v1.7.5
  * (c) 2010-2018 Google, Inc. http://angularjs.org
  * License: MIT
  */
@@ -63,7 +63,7 @@
 var ARIA_DISABLE_ATTR = 'ngAriaDisable';
 
 var ngAriaModule = angular.module('ngAria', ['ng']).
-                        info({ angularVersion: '1.7.2' }).
+                        info({ angularVersion: '1.7.5' }).
                         provider('$aria', $AriaProvider);
 
 /**
@@ -392,7 +392,14 @@ ngAriaModule.directive('ngShow', ['$aria
           if ($aria.config('bindKeydown') && !attr.ngKeydown && !attr.ngKeypress && !attr.ngKeyup) {
             elem.on('keydown', function(event) {
               var keyCode = event.which || event.keyCode;
-              if (keyCode === 32 || keyCode === 13) {
+
+              if (keyCode === 13 || keyCode === 32) {
+                // If the event is triggered on a non-interactive element ...
+                if (nodeBlackList.indexOf(event.target.nodeName) === -1) {
+                  // ... prevent the default browser behavior (e.g. scrolling when pressing spacebar)
+                  // See https://github.com/angular/angular.js/issues/16664
+                  event.preventDefault();
+                }
                 scope.$apply(callback);
               }
 
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/forms/bool.html 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/forms/bool.html
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/forms/bool.html	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/forms/bool.html	2019-02-04 09:52:17.000000000 +0000
@@ -5,11 +5,11 @@
   <div class="panel-body">
     <div class="input-group-solid" role="radiogroup">
       <label class="radio-inline">
-        <input id="bopeOn" type="radio" value="1" name="bope" ng-model="currentNode.data" aria-labelledby="onl" role="radio"/>
+        <input id="bopeOn" type="radio" ng-value="1" name="bope" ng-model="currentNode.data" ng-checked="currentNode.data==1 || currentNode.data=='1'" aria-labelledby="onl" role="radio"/>
         <label id="onl" for="bopeOn" trspan="on"></label>
       </label>
       <label class="radio-inline">
-        <input id="bopeOff" type="radio" value="0" name="bope" ng-model="currentNode.data" ng-checked="currentNode.data!==1&&currentNode.data!=='1'" aria-labelledby="offl" role="radio"/>
+        <input id="bopeOff" type="radio" ng-value="0" name="bope" ng-model="currentNode.data" ng-checked="currentNode.data!==1&&currentNode.data!=='1'" aria-labelledby="offl" role="radio"/>
         <label id="offl" for="bopeOff" trspan="off"></label>
       </label>
     </div>
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/forms/boolOrExpr.html 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/forms/boolOrExpr.html
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/forms/boolOrExpr.html	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/forms/boolOrExpr.html	2019-02-04 09:52:17.000000000 +0000
@@ -5,15 +5,15 @@
   <div class="panel-body">
     <div class="input-group-solid" role="radiogroup">
       <label class="radio-inline">
-        <input id="bopeOn" type="radio" value="1" name="bope" ng-model="currentNode.data" aria-labelledby="onl" role="radio"/>
+        <input id="bopeOn" type="radio" ng-value="1" name="bope" ng-model="currentNode.data" aria-labelledby="onl" role="radio"/>
         <label id="onl" for="bopeOn" trspan="on"></label>
       </label>
       <label class="radio-inline">
-        <input id="bopeOff" type="radio" value="0" name="bope" ng-model="currentNode.data" aria-labelledby="offl" role="radio"/>
+        <input id="bopeOff" type="radio" ng-value="0" name="bope" ng-model="currentNode.data" aria-labelledby="offl" role="radio"/>
         <label id="offl" for="bopeOff" trspan="off"></label>
       </label>
       <label class="radio-inline">
-        <input id="bopeExpr" type="radio" value="-1" name="bope" ng-click="currentNode.data=''" ng-checked="currentNode.data!==0&&currentNode.data!=='0'&&currentNode.data!==1&&currentNode.data!=='1'" aria-labelledby="rulel" role="radio"/>
+        <input id="bopeExpr" type="radio" ng-value="-1" name="bope" ng-click="currentNode.data=''" ng-checked="currentNode.data!==0&&currentNode.data!=='0'&&currentNode.data!=1&&currentNode.data!=='1'" aria-labelledby="rulel" role="radio"/>
         <label id="rulel" for="bopeExpr" trspan="specialRule"></label>
       </label>
     </div>
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/forms/grant.html 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/forms/grant.html
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/forms/grant.html	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/forms/grant.html	2019-02-05 09:43:10.000000000 +0000
@@ -9,11 +9,11 @@
     </tr>
     <tr>
       <th><span trspan="rule"></span></th>
-      <td><input id="rule" class="form-control" ng-model="currentNode.re" ng-change="changeRuleTitle(currentNode)"/></td>
+      <td><input id="rule" class="form-control" ng-model="currentNode.data" ng-change="changeRuleTitle(currentNode)"/></td>
     </tr>
     <tr>
       <th><span trspan="message"></span></th>
-      <td><textarea rows="3" id="rulemessage" class="form-control" ng-model="currentNode.data"/></td>
+      <td><textarea rows="3" id="rulemessage" class="form-control" ng-model="currentNode.re"/></td>
     </tr>
   </table>
 </div>
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/forms/menuCat.html 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/forms/menuCat.html
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/forms/menuCat.html	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/forms/menuCat.html	2019-02-04 09:52:17.000000000 +0000
@@ -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
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/forms/simpleInputContainer.html 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/forms/simpleInputContainer.html
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/forms/simpleInputContainer.html	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/forms/simpleInputContainer.html	2019-02-04 09:52:17.000000000 +0000
@@ -28,11 +28,11 @@
         <td ng-if="n.type=='bool'">
           <div class="input-group-solid" role="radiogroup">
             <label class="radio-inline">
-              <input id="bopeOn/{{n.title}}" type="radio" value="1" ng-model="n.data" role="radio" aria-labelledby="lbopeOn{{n.title}}"/>
+              <input id="bopeOn/{{n.title}}" type="radio" ng-value="1" ng-model="n.data" role="radio" aria-labelledby="lbopeOn{{n.title}}"/>
               <span id="lbopeOn{{n.title}}" for="bopeOn/{{n.title}}" trspan="on"></span>
             </label>
             <label class="radio-inline">
-              <input id="bopeOff/{{n.title}}" type="radio" value="0" ng-model="n.data" ng-checked="n.data!==1&&n.data!=='1'" role="radio" aria-labelledby="lbopeOff{{n.title}}"/>
+              <input id="bopeOff/{{n.title}}" type="radio" ng-value="0" ng-model="n.data" ng-checked="n.data!==1&&n.data!=='1'" role="radio" aria-labelledby="lbopeOff{{n.title}}"/>
               <span id="lbopeOff{{n.title}}" for="bopeOff/{{n.title}}" trspan="off"></span>
             </label>
           </div>
@@ -41,15 +41,15 @@
         <td ng-if="n.type=='trool'">
           <div class="input-group-solid" role="radiogroup">
             <label class="radio-inline">
-              <input id="trOn/{{n.title}}" type="radio" value="1" ng-model="n.data" role="radio" aria-labelledby="ltrOn{{n.title}}">
+              <input id="trOn/{{n.title}}" type="radio" ng-value="1" ng-model="n.data" role="radio" aria-labelledby="ltrOn{{n.title}}">
               <span id="ltrOn{{n.title}}" for="trOn/{{n.title}}" trspan="on"></span>
             </label>
             <label class="radio-inline">
-              <input id="trOff/{{n.title}}" type="radio" value="0" ng-model="n.data" role="radio" aria-labelledby="ltrOff{{n.title}}">
+              <input id="trOff/{{n.title}}" type="radio" ng-value="0" ng-model="n.data" role="radio" aria-labelledby="ltrOff{{n.title}}">
               <span id="ltrOff{{n.title}}" for="trOff/{{n.title}}" trspan="off"></span>
             </label>
             <label class="radio-inline">
-              <input id="trDefault/{{n.title}}" type="radio" value="-1" ng-model="n.data" ng-checked="n.data!==1&&n.data!=='1'&&n.data!==0&&n.data!=='0'" role="radio" aria-labelledby="ltrDefault{{n.title}}">
+              <input id="trDefault/{{n.title}}" type="radio" ng-value="-1" ng-model="n.data" ng-checked="n.data!==1&&n.data!=='1'&&n.data!==0&&n.data!=='0'" role="radio" aria-labelledby="ltrDefault{{n.title}}">
               <span id="ltrDefault{{n.title}}" for="trDefault/{{n.title}}" trspan="default"></span>
             </label>
           </div>
@@ -58,15 +58,15 @@
         <td ng-if="n.type=='boolOrExpr'">
           <div class="input-group-solid" role="radiogroup">
             <label class="radio-inline">
-              <input id="boeOn/{{n.title}}" type="radio" value="1" ng-model="n.data" role="radio" aria-labelledby="lboeOn{{n.title}}">
+              <input id="boeOn/{{n.title}}" type="radio" ng-value="1" ng-model="n.data" role="radio" aria-labelledby="lboeOn{{n.title}}">
               <span id="lboeOn{{n.title}}" for="boeOn/{{n.title}}" trspan="on"></span>
             </label>
             <label class="radio-inline">
-              <input id="boeOff/{{n.title}}" type="radio" value="0" ng-model="n.data" role="radio" aria-labelledby="lboeOff{{n.title}}">
+              <input id="boeOff/{{n.title}}" type="radio" ng-value="0" ng-model="n.data" role="radio" aria-labelledby="lboeOff{{n.title}}">
               <span id="lboeOff{{n.title}}" for="boeOff/{{n.title}}" trspan="off"></span>
             </label>
             <label class="radio-inline">
-              <input id="boeExpr/{{n.title}}" type="radio" value="-1" ng-click="n.data=''" ng-checked="n.data!==0&&n.data!=='0'&&n.data!==1&&n.data!=='1'" role="radio" aria-labelledby="lboeExpr{{n.title}}">
+              <input id="boeExpr/{{n.title}}" type="radio" ng-value="-1" ng-click="n.data=''" ng-checked="n.data!==0&&n.data!=='0'&&n.data!==1&&n.data!=='1'" role="radio" aria-labelledby="lboeExpr{{n.title}}">
               <span id="lboeExpr{{n.title}}" for="boeExpr/{{n.title}}" trspan="specialRule"></span>
             </label>
           </div>
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/forms/trool.html 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/forms/trool.html
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/forms/trool.html	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/forms/trool.html	2019-02-04 09:52:17.000000000 +0000
@@ -5,15 +5,15 @@
   <div class="panel-body">
     <div class="input-group-solid" role="radiogroup">
       <label class="radio-inline">
-        <input id="trOn" type="radio" value="1" ng-model="currentNode.data" role="radio" aria-labelledby="ltrOn">
+        <input id="trOn" type="radio" ng-value="1" ng-model="currentNode.data" role="radio" aria-labelledby="ltrOn">
         <span id="ltrOn" for="trOn" trspan="on"></span>
       </label>
       <label class="radio-inline">
-        <input id="trOff" type="radio" value="0" ng-model="currentNode.data" role="radio" aria-labelledby="ltrOff">
+        <input id="trOff" type="radio" ng-value="0" ng-model="currentNode.data" role="radio" aria-labelledby="ltrOff">
         <span id="ltrOff" for="trOff" trspan="off"></span>
       </label>
       <label class="radio-inline">
-        <input id="trDefault" type="radio" value="-1" ng-model="currentNode.data" ng-checked="currentNode.data!==1&&currentNode.data!=='1'&&currentNode.data!==0&&currentNode.data!=='0'" role="radio" aria-labelledby="ltrDefault">
+        <input id="trDefault" type="radio" ng-value="-1" ng-model="currentNode.data" ng-checked="currentNode.data!==1&&currentNode.data!=='1'&&currentNode.data!==0&&currentNode.data!=='0'" role="radio" aria-labelledby="ltrDefault">
         <span id="ltrDefault" for="trDefault" trspan="default"></span>
       </label>
     </div>
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/js/2ndfa.js 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/js/2ndfa.js
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/js/2ndfa.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/js/2ndfa.js	2019-02-07 08:33:15.000000000 +0000
@@ -42,7 +42,7 @@
 
   overScheme = {
     _whatToTrace: function(t, v, level, over) {
-      if (level === 1) {
+      if (level === 1 && v.length > over) {
         return t + "=" + v + "*&groupBy=substr(" + t + "," + (level + over + 1) + ")";
       } else {
         return null;
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/js/conftree.js 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/js/conftree.js
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/js/conftree.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/js/conftree.js	2019-02-08 10:14:37.000000000 +0000
@@ -58,6 +58,38 @@ function templates(tpl,key) {
   case 'casSrvMetaDataNode':
     return [
    {
+      "cnodes" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars",
+      "default" : [
+         {
+            "data" : "cn",
+            "id" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars/cn",
+            "title" : "cn",
+            "type" : "keyText"
+         },
+         {
+            "data" : "mail",
+            "id" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars/mail",
+            "title" : "mail",
+            "type" : "keyText"
+         },
+         {
+            "data" : "uid",
+            "id" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars/uid",
+            "title" : "uid",
+            "type" : "keyText"
+         }
+      ],
+      "id" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars",
+      "title" : "casSrvMetaDataExportedVars",
+      "type" : "keyTextContainer"
+   },
+   {
+      "cnodes" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsProxiedServices",
+      "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsProxiedServices",
+      "title" : "casSrvMetaDataOptionsProxiedServices",
+      "type" : "keyTextContainer"
+   },
+   {
       "_nodes" : [
          {
             "get" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsUrl",
@@ -77,16 +109,6 @@ function templates(tpl,key) {
             "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsGateway",
             "title" : "casSrvMetaDataOptionsGateway",
             "type" : "bool"
-         },
-         {
-            "get" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsDisplayName",
-            "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsDisplayName",
-            "title" : "casSrvMetaDataOptionsDisplayName"
-         },
-         {
-            "get" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsIcon",
-            "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsIcon",
-            "title" : "casSrvMetaDataOptionsIcon"
          }
       ],
       "id" : "casSrvMetaDataOptions",
@@ -94,36 +116,21 @@ function templates(tpl,key) {
       "type" : "simpleInputContainer"
    },
    {
-      "cnodes" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars",
-      "default" : [
-         {
-            "data" : "cn",
-            "id" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars/cn",
-            "title" : "cn",
-            "type" : "keyText"
-         },
+      "_nodes" : [
          {
-            "data" : "mail",
-            "id" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars/mail",
-            "title" : "mail",
-            "type" : "keyText"
+            "get" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsDisplayName",
+            "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsDisplayName",
+            "title" : "casSrvMetaDataOptionsDisplayName"
          },
          {
-            "data" : "uid",
-            "id" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars/uid",
-            "title" : "uid",
-            "type" : "keyText"
+            "get" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsIcon",
+            "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsIcon",
+            "title" : "casSrvMetaDataOptionsIcon"
          }
       ],
-      "id" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars",
-      "title" : "casSrvMetaDataExportedVars",
-      "type" : "keyTextContainer"
-   },
-   {
-      "cnodes" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsProxiedServices",
-      "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsProxiedServices",
-      "title" : "casSrvMetaDataOptionsProxiedServices",
-      "type" : "keyTextContainer"
+      "id" : "casSrvMetaDataOptionsDisplay",
+      "title" : "casSrvMetaDataOptionsDisplay",
+      "type" : "simpleInputContainer"
    }
 ]
 ;
@@ -313,27 +320,27 @@ function templates(tpl,key) {
             "id" : "oidcOPMetaDataOptionsProtocol",
             "title" : "oidcOPMetaDataOptionsProtocol",
             "type" : "simpleInputContainer"
-         },
-         {
-            "_nodes" : [
-               {
-                  "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsDisplayName",
-                  "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsDisplayName",
-                  "title" : "oidcOPMetaDataOptionsDisplayName"
-               },
-               {
-                  "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsIcon",
-                  "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsIcon",
-                  "title" : "oidcOPMetaDataOptionsIcon"
-               }
-            ],
-            "id" : "oidcOPMetaDataOptionsDisplayParams",
-            "title" : "oidcOPMetaDataOptionsDisplayParams",
-            "type" : "simpleInputContainer"
          }
       ],
       "id" : "oidcOPMetaDataOptions",
       "title" : "oidcOPMetaDataOptions"
+   },
+   {
+      "_nodes" : [
+         {
+            "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsDisplayName",
+            "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsDisplayName",
+            "title" : "oidcOPMetaDataOptionsDisplayName"
+         },
+         {
+            "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsIcon",
+            "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsIcon",
+            "title" : "oidcOPMetaDataOptionsIcon"
+         }
+      ],
+      "id" : "oidcOPMetaDataOptionsDisplayParams",
+      "title" : "oidcOPMetaDataOptionsDisplayParams",
+      "type" : "simpleInputContainer"
    }
 ]
 ;
@@ -366,6 +373,13 @@ function templates(tpl,key) {
       "type" : "keyTextContainer"
    },
    {
+      "cnodes" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsExtraClaims",
+      "default" : [],
+      "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsExtraClaims",
+      "title" : "oidcRPMetaDataOptionsExtraClaims",
+      "type" : "keyTextContainer"
+   },
+   {
       "_nodes" : [
          {
             "_nodes" : [
@@ -386,23 +400,6 @@ function templates(tpl,key) {
             "type" : "simpleInputContainer"
          },
          {
-            "_nodes" : [
-               {
-                  "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsDisplayName",
-                  "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsDisplayName",
-                  "title" : "oidcRPMetaDataOptionsDisplayName"
-               },
-               {
-                  "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsIcon",
-                  "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsIcon",
-                  "title" : "oidcRPMetaDataOptionsIcon"
-               }
-            ],
-            "id" : "oidcRPMetaDataOptionsDisplay",
-            "title" : "oidcRPMetaDataOptionsDisplay",
-            "type" : "simpleInputContainer"
-         },
-         {
             "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsUserIDAttr",
             "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsUserIDAttr",
             "title" : "oidcRPMetaDataOptionsUserIDAttr"
@@ -522,11 +519,21 @@ function templates(tpl,key) {
       "title" : "oidcRPMetaDataOptions"
    },
    {
-      "cnodes" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsExtraClaims",
-      "default" : [],
-      "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsExtraClaims",
-      "title" : "oidcRPMetaDataOptionsExtraClaims",
-      "type" : "keyTextContainer"
+      "_nodes" : [
+         {
+            "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsDisplayName",
+            "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsDisplayName",
+            "title" : "oidcRPMetaDataOptionsDisplayName"
+         },
+         {
+            "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsIcon",
+            "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsIcon",
+            "title" : "oidcRPMetaDataOptionsIcon"
+         }
+      ],
+      "id" : "oidcRPMetaDataOptionsDisplay",
+      "title" : "oidcRPMetaDataOptionsDisplay",
+      "type" : "simpleInputContainer"
    }
 ]
 ;
@@ -549,134 +556,6 @@ function templates(tpl,key) {
    {
       "_nodes" : [
          {
-            "default" : "",
-            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsResolutionRule",
-            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsResolutionRule",
-            "title" : "samlIDPMetaDataOptionsResolutionRule",
-            "type" : "longtext"
-         },
-         {
-            "default" : "",
-            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsNameIDFormat",
-            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsNameIDFormat",
-            "select" : [
-               {
-                  "k" : "",
-                  "v" : ""
-               },
-               {
-                  "k" : "unspecified",
-                  "v" : "Unspecified"
-               },
-               {
-                  "k" : "email",
-                  "v" : "Email"
-               },
-               {
-                  "k" : "x509",
-                  "v" : "X509 certificate"
-               },
-               {
-                  "k" : "windows",
-                  "v" : "Windows"
-               },
-               {
-                  "k" : "kerberos",
-                  "v" : "Kerberos"
-               },
-               {
-                  "k" : "entity",
-                  "v" : "Entity"
-               },
-               {
-                  "k" : "persistent",
-                  "v" : "Persistent"
-               },
-               {
-                  "k" : "transient",
-                  "v" : "Transient"
-               },
-               {
-                  "k" : "encrypted",
-                  "v" : "Encrypted"
-               }
-            ],
-            "title" : "samlIDPMetaDataOptionsNameIDFormat",
-            "type" : "select"
-         },
-         {
-            "default" : 0,
-            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsForceAuthn",
-            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsForceAuthn",
-            "title" : "samlIDPMetaDataOptionsForceAuthn",
-            "type" : "bool"
-         },
-         {
-            "default" : 0,
-            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsIsPassive",
-            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsIsPassive",
-            "title" : "samlIDPMetaDataOptionsIsPassive",
-            "type" : "bool"
-         },
-         {
-            "default" : 0,
-            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAllowProxiedAuthn",
-            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAllowProxiedAuthn",
-            "title" : "samlIDPMetaDataOptionsAllowProxiedAuthn",
-            "type" : "bool"
-         },
-         {
-            "default" : 0,
-            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAllowLoginFromIDP",
-            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAllowLoginFromIDP",
-            "title" : "samlIDPMetaDataOptionsAllowLoginFromIDP",
-            "type" : "bool"
-         },
-         {
-            "default" : "",
-            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsRequestedAuthnContext",
-            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsRequestedAuthnContext",
-            "select" : [
-               {
-                  "k" : "",
-                  "v" : ""
-               },
-               {
-                  "k" : "kerberos",
-                  "v" : "Kerberos"
-               },
-               {
-                  "k" : "password-protected-transport",
-                  "v" : "Password protected transport"
-               },
-               {
-                  "k" : "password",
-                  "v" : "Password"
-               },
-               {
-                  "k" : "tls-client",
-                  "v" : "TLS client certificate"
-               }
-            ],
-            "title" : "samlIDPMetaDataOptionsRequestedAuthnContext",
-            "type" : "select"
-         },
-         {
-            "default" : 0,
-            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsRelayStateURL",
-            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsRelayStateURL",
-            "title" : "samlIDPMetaDataOptionsRelayStateURL",
-            "type" : "bool"
-         }
-      ],
-      "help" : "authsaml.html#options",
-      "id" : "samlIDPMetaDataOptions",
-      "title" : "samlIDPMetaDataOptions",
-      "type" : "simpleInputContainer"
-   },
-   {
-      "_nodes" : [
-         {
             "default" : 0,
             "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAdaptSessionUtime",
             "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAdaptSessionUtime",
@@ -840,6 +719,151 @@ function templates(tpl,key) {
       "id" : "samlIDPMetaDataOptionsSecurity",
       "title" : "samlIDPMetaDataOptionsSecurity",
       "type" : "simpleInputContainer"
+   },
+   {
+      "_nodes" : [
+         {
+            "default" : "",
+            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsResolutionRule",
+            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsResolutionRule",
+            "title" : "samlIDPMetaDataOptionsResolutionRule",
+            "type" : "longtext"
+         },
+         {
+            "default" : "",
+            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsNameIDFormat",
+            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsNameIDFormat",
+            "select" : [
+               {
+                  "k" : "",
+                  "v" : ""
+               },
+               {
+                  "k" : "unspecified",
+                  "v" : "Unspecified"
+               },
+               {
+                  "k" : "email",
+                  "v" : "Email"
+               },
+               {
+                  "k" : "x509",
+                  "v" : "X509 certificate"
+               },
+               {
+                  "k" : "windows",
+                  "v" : "Windows"
+               },
+               {
+                  "k" : "kerberos",
+                  "v" : "Kerberos"
+               },
+               {
+                  "k" : "entity",
+                  "v" : "Entity"
+               },
+               {
+                  "k" : "persistent",
+                  "v" : "Persistent"
+               },
+               {
+                  "k" : "transient",
+                  "v" : "Transient"
+               },
+               {
+                  "k" : "encrypted",
+                  "v" : "Encrypted"
+               }
+            ],
+            "title" : "samlIDPMetaDataOptionsNameIDFormat",
+            "type" : "select"
+         },
+         {
+            "default" : 0,
+            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsForceAuthn",
+            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsForceAuthn",
+            "title" : "samlIDPMetaDataOptionsForceAuthn",
+            "type" : "bool"
+         },
+         {
+            "default" : 0,
+            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsIsPassive",
+            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsIsPassive",
+            "title" : "samlIDPMetaDataOptionsIsPassive",
+            "type" : "bool"
+         },
+         {
+            "default" : 0,
+            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAllowProxiedAuthn",
+            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAllowProxiedAuthn",
+            "title" : "samlIDPMetaDataOptionsAllowProxiedAuthn",
+            "type" : "bool"
+         },
+         {
+            "default" : 0,
+            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAllowLoginFromIDP",
+            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAllowLoginFromIDP",
+            "title" : "samlIDPMetaDataOptionsAllowLoginFromIDP",
+            "type" : "bool"
+         },
+         {
+            "default" : "",
+            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsRequestedAuthnContext",
+            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsRequestedAuthnContext",
+            "select" : [
+               {
+                  "k" : "",
+                  "v" : ""
+               },
+               {
+                  "k" : "kerberos",
+                  "v" : "Kerberos"
+               },
+               {
+                  "k" : "password-protected-transport",
+                  "v" : "Password protected transport"
+               },
+               {
+                  "k" : "password",
+                  "v" : "Password"
+               },
+               {
+                  "k" : "tls-client",
+                  "v" : "TLS client certificate"
+               }
+            ],
+            "title" : "samlIDPMetaDataOptionsRequestedAuthnContext",
+            "type" : "select"
+         },
+         {
+            "default" : 0,
+            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsRelayStateURL",
+            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsRelayStateURL",
+            "title" : "samlIDPMetaDataOptionsRelayStateURL",
+            "type" : "bool"
+         }
+      ],
+      "help" : "authsaml.html#options",
+      "id" : "samlIDPMetaDataOptions",
+      "title" : "samlIDPMetaDataOptions",
+      "type" : "simpleInputContainer"
+   },
+   {
+      "_nodes" : [
+         {
+            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsDisplayName",
+            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsDisplayName",
+            "title" : "samlIDPMetaDataOptionsDisplayName"
+         },
+         {
+            "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsIcon",
+            "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsIcon",
+            "title" : "samlIDPMetaDataOptionsIcon"
+         }
+      ],
+      "id" : "samlIDPMetaDataOptionsDisplay",
+      "title" : "samlIDPMetaDataOptionsDisplay",
+      "type" : "simpleInputContainer"
    }
 ]
 ;
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/js/filterFunctions.js 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/js/filterFunctions.js
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/js/filterFunctions.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/js/filterFunctions.js	2019-02-04 09:52:17.000000000 +0000
@@ -1,4 +1,4 @@
-// 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++) {
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/js/llApp.js 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/js/llApp.js
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/js/llApp.js	2018-12-17 09:04:12.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/js/llApp.js	2019-02-06 17:01:17.000000000 +0000
@@ -1,4 +1,4 @@
-// Generated by CoffeeScript 1.12.7
+// Generated by CoffeeScript 1.12.8
 
 /*
 LemonLDAP::NG base app module
@@ -159,7 +159,7 @@ LemonLDAP::NG base app module
         terminal: true,
         compile: function(element, attr) {
           var e, t;
-          if (t = attr.type.match(/text\/(menu|parameters)/)) {
+          if (attr.type && (t = attr.type.match(/text\/(menu|parameters)/))) {
             try {
               return $htmlParams.set(t[1], JSON.parse(element[0].text));
             } catch (error) {
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/js/manager.js 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/js/manager.js
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/js/manager.js	2018-12-17 09:04:12.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/js/manager.js	2019-02-05 09:43:10.000000000 +0000
@@ -1,4 +1,4 @@
-// Generated by CoffeeScript 1.12.7
+// Generated by CoffeeScript 1.12.8
 
 /*
 LemonLDAP::NG Manager client
@@ -170,7 +170,7 @@ This file contains:
           message: '',
           items: []
         };
-        if (data.message === '__needConfirmation__') {
+        if (data.needConfirm) {
           $scope.confirmNeeded = true;
         }
         if (data.message) {
@@ -179,10 +179,17 @@ This file contains:
         if (data.details) {
           for (m in data.details) {
             if (m !== '__changes__') {
-              $scope.message.items.push({
-                message: m,
-                items: data.details[m]
-              });
+              if (m === '__needConfirmation__') {
+                $scope.message.items.unshift({
+                  message: m,
+                  items: data.details[m]
+                });
+              } else {
+                $scope.message.items.push({
+                  message: m,
+                  items: data.details[m]
+                });
+              }
             }
           }
         }
@@ -403,7 +410,7 @@ This file contains:
           id: node.id + "/n" + (id++),
           title: 'new',
           type: 'samlAttribute',
-          data: [0, 'New', '', '']
+          data: ['0', 'New', '', '']
         });
       };
       $scope.addVhost = function() {
@@ -816,9 +823,7 @@ This file contains:
               } else {
                 node.data = data.value;
               }
-              if (node.type && node.type.match(/^(bool|trool|boolOrExpr)$/)) {
-                node.data = node.data.toString();
-              } else if (node.type && node.type.match(/^int$/)) {
+              if (node.type && node.type.match(/^int$/)) {
                 node.data = parseInt(node.data, 10);
               } else if (node.type && node.type.match(/^(saml(Service|Assertion)|blackWhiteList)$/) && !(typeof node.data === 'object')) {
                 node.data = node.data.split(';');
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/js/sessions.js 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/js/sessions.js
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/js/sessions.js	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/js/sessions.js	2019-02-07 08:33:15.000000000 +0000
@@ -1,4 +1,4 @@
-// Generated by CoffeeScript 1.12.7
+// Generated by CoffeeScript 1.12.8
 
 /*
  * Sessions explorer
@@ -74,7 +74,7 @@
 
   overScheme = {
     _whatToTrace: function(t, v, level, over) {
-      if (level === 1) {
+      if (level === 1 && v.length > over) {
         return t + "=" + v + "*&groupBy=substr(" + t + "," + (level + over + 1) + ")";
       } else {
         return null;
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/ar.json 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/ar.json
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/ar.json	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/ar.json	2019-02-08 10:14:37.000000000 +0000
@@ -124,6 +124,7 @@
 "casSrv":"خادم كاس",
 "casSrvMetaDataExportedVars":"السمات المصدرة",
 "casSrvMetaDataOptions":"الخيارات",
+"casSrvMetaDataOptionsDisplay":"عرض",
 "casSrvMetaDataOptionsDisplayName":"الاسم المطلوب عرضه",
 "casSrvMetaDataOptionsGateway":"بوابة إثبات الهوية",
 "casSrvMetaDataOptionsIcon":"مسارالأيقونة",
@@ -236,6 +237,7 @@
 "enabled":"مفعلة",
 "enterPassword":"أدخل كلمة المرور (اختياري)",
 "error":"خطأ",
+"errors":"ERRORS",
 "exportedAttr":"SOAP/REST السمات المصدرة",
 "exportedHeaders":"الهيدر المصدرة",
 "exportedVars":"المتغيرات المصدرة",
@@ -263,9 +265,8 @@
 "generalParameters":"المعاييرالعامة",
 "globalStorage":"أباتشي :: وحدة الجلسة",
 "globalStorageOptions":"أباتشي :: معايير وحدة الجلسة",
-"googleAuthnLevel":"مستوى إثبات الهوية",
-"googleExportedVars":"المتغيرات المصدرة",
-"googleParams":"معاييرغوغل",
+"gpgDb":"GPG database",
+"gpgParams":"GPG parameters",
 "grantSessionRules":"ظروف الافتتاح",
 "groups":"المجموعات",
 "hashkey":"المفتاح",
@@ -339,6 +340,7 @@
 "ldapGroupAttributeNameSearch":"السمات التي تم البحث عنها",
 "ldapGroupAttributeNameUser":"سمة مصدر المستخدم",
 "ldapGroupBase":"قاعدة البحث",
+"ldapGroupDecodeSearchedValue":"Decode searched value",
 "ldapGroupObjectClass":"أوبجكت كلاس",
 "ldapGroupRecursive":"تكراري",
 "ldapGroups":"المجموعات",
@@ -378,11 +380,19 @@
 "lwpOpts":"خيارات لطلبات الخادم",
 "lwpSslOpts":"خيارات سسل لطلبات الخادم",
 "macros":"ماكرو",
+"mail2f":"Mail second factor",
+"mail2fActivation":"Activation",
+"mail2fCodeRegex":"Code regex",
+"mail2fTimeout":"Code timeout",
+"mail2fSubject":"Mail subject",
+"mail2fBody":"Mail body",
+"mail2fAuthnLevel":"Authentication level",
+"mail2fLogo":"Logo",
 "mailBody":"محتوى البريد الناجح",
 "mailCharset":"charset",
 "mailConfirmBody":"تأكيد محتوى البريد",
 "mailConfirmSubject":"تأكيد عنوان بريد",
-"mailContent":"محتوى البريد",
+"mailContent":"Password reset mail content",
 "mailFrom":"مرسل البريد",
 "mailHeaders":"هيدر البريد",
 "mailLDAPFilter":"فلتر البريد",
@@ -390,9 +400,9 @@
 "mailOther":"آخر",
 "mailReplyTo":"عنوان الجواب",
 "mailSessionKey":"مفتاح الجلسة الذي يحتوي على عنوان البريد الإلكتروني",
-"mailSubject":"نجاح عنوان البريد",
+"mailSubject":"Success mail subject",
 "mailTimeout":"عدم تطابق كلمت المرور",
-"mailUrl":"صفحة اليو آر إل",
+"mailUrl":"Reset page URL",
 "maintenance":"وضع الصيانة",
 "malformedValue":"قيمة سيئة التصميم",
 "managerDn":"حساب",
@@ -634,7 +644,7 @@
 "registerDB":"Register module",
 "registerDoneSubject":"عنوان البريد الذي تم القيام به",
 "registerTimeout":"مدة صلاحية طلب التسجيل",
-"registerUrl":"Page URL",
+"registerUrl":"Register page URL",
 "reloadParams":"Configuration reload",
 "reloadTimeout":"Reload timeout",
 "reloadUrls":"Reload URLs",
@@ -861,6 +871,10 @@
 "samlIDPMetaDataOptionsSession":"جلسة",
 "samlIDPMetaDataOptionsSignature":"توقيع",
 "samlIDPMetaDataOptionsBinding":"ربط",
+"samlIDPMetaDataOptionsDisplay":"Display",
+"samlIDPMetaDataOptionsDisplayName":"Display name",
+"samlIDPMetaDataOptionsDisplayParams":"Display",
+"samlIDPMetaDataOptionsIcon":"Logo",
 "samlIDPMetaDataOptionsSecurity":"الحماية",
 "samlIDPMetaDataOptionsStoreSAMLToken":"حفظ SAML توكن",
 "samlIDPMetaDataOptionsRelayStateURL":"السماح بعنوان اليو آر إل ك RelayState",
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/de.json 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/de.json
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/de.json	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/de.json	2019-02-08 10:14:37.000000000 +0000
@@ -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",
@@ -124,6 +124,7 @@
 "casSrv":"CAS Server",
 "casSrvMetaDataExportedVars":"Exported attributes",
 "casSrvMetaDataOptions":"Optionen",
+"casSrvMetaDataOptionsDisplay":"Display",
 "casSrvMetaDataOptionsDisplayName":"Angezeigter Name",
 "casSrvMetaDataOptionsGateway":"Gateway authentication",
 "casSrvMetaDataOptionsIcon":"Icon path",
@@ -236,6 +237,7 @@
 "enabled":"Aktiviert",
 "enterPassword":"Enter password (optional)",
 "error":"Error",
+"errors":"ERRORS",
 "exportedAttr":"SOAP/REST exported attributes",
 "exportedHeaders":"Exported headers",
 "exportedVars":"Exported Variables",
@@ -263,9 +265,8 @@
 "generalParameters":"General Parameters",
 "globalStorage":"Apache::Session module",
 "globalStorageOptions":"Apache::Session module parameters",
-"googleAuthnLevel":"Authentication level",
-"googleExportedVars":"Exported variables",
-"googleParams":"Google parameters",
+"gpgDb":"GPG database",
+"gpgParams":"GPG parameters",
 "grantSessionRules":"Opening conditions",
 "groups":"Groups",
 "hashkey":"Key",
@@ -339,6 +340,7 @@
 "ldapGroupAttributeNameSearch":"Searched attributes",
 "ldapGroupAttributeNameUser":"User source attribute",
 "ldapGroupBase":"Search base",
+"ldapGroupDecodeSearchedValue":"Decode searched value",
 "ldapGroupObjectClass":"Object class",
 "ldapGroupRecursive":"Recursive",
 "ldapGroups":"Groups",
@@ -378,11 +380,19 @@
 "lwpOpts":"Options for server requests",
 "lwpSslOpts":"SSL options for server requests",
 "macros":"Macros",
+"mail2f":"Mail second factor",
+"mail2fActivation":"Activation",
+"mail2fCodeRegex":"Code regex",
+"mail2fTimeout":"Code timeout",
+"mail2fSubject":"Mail subject",
+"mail2fBody":"Mail body",
+"mail2fAuthnLevel":"Authentication level",
+"mail2fLogo":"Logo",
 "mailBody":"Success mail content",
 "mailCharset":"Charset",
 "mailConfirmBody":"Confirmation mail content",
 "mailConfirmSubject":"Confirmation mail subject",
-"mailContent":"Mail content",
+"mailContent":"Password reset mail content",
 "mailFrom":"Mail sender",
 "mailHeaders":"Mail headers",
 "mailLDAPFilter":"Mail filter",
@@ -392,7 +402,7 @@
 "mailSessionKey":"Session key containing mail address",
 "mailSubject":"Success mail subject",
 "mailTimeout":"Validity time of a password reset request",
-"mailUrl":"Page URL",
+"mailUrl":"Reset page URL",
 "maintenance":"Maintenance mode",
 "malformedValue":"Malformed value",
 "managerDn":"Account",
@@ -634,7 +644,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",
 "reloadTimeout":"Reload timeout",
 "reloadUrls":"Reload URLs",
@@ -861,6 +871,10 @@
 "samlIDPMetaDataOptionsSession":"Session",
 "samlIDPMetaDataOptionsSignature":"Signature",
 "samlIDPMetaDataOptionsBinding":"Binding",
+"samlIDPMetaDataOptionsDisplay":"Display",
+"samlIDPMetaDataOptionsDisplayName":"Display name",
+"samlIDPMetaDataOptionsDisplayParams":"Display",
+"samlIDPMetaDataOptionsIcon":"Logo",
 "samlIDPMetaDataOptionsSecurity":"Security",
 "samlIDPMetaDataOptionsStoreSAMLToken":"Store SAML Token",
 "samlIDPMetaDataOptionsRelayStateURL":"Allow URL as RelayState",
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/en.json 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/en.json
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/en.json	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/en.json	2019-02-08 10:14:37.000000000 +0000
@@ -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",
@@ -124,6 +124,7 @@
 "casSrv":"CAS Server",
 "casSrvMetaDataExportedVars":"Exported attributes",
 "casSrvMetaDataOptions":"Options",
+"casSrvMetaDataOptionsDisplay":"Display",
 "casSrvMetaDataOptionsDisplayName":"Name to display",
 "casSrvMetaDataOptionsGateway":"Gateway authentication",
 "casSrvMetaDataOptionsIcon":"Icon path",
@@ -236,6 +237,7 @@
 "enabled":"Enabled",
 "enterPassword":"Enter password (optional)",
 "error":"Error",
+"errors":"ERRORS",
 "exportedAttr":"SOAP/REST exported attributes",
 "exportedHeaders":"Exported headers",
 "exportedVars":"Exported Variables",
@@ -263,9 +265,8 @@
 "generalParameters":"General Parameters",
 "globalStorage":"Apache::Session module",
 "globalStorageOptions":"Apache::Session module parameters",
-"googleAuthnLevel":"Authentication level",
-"googleExportedVars":"Exported variables",
-"googleParams":"Google parameters",
+"gpgDb":"GPG database",
+"gpgParams":"GPG parameters",
 "grantSessionRules":"Opening conditions",
 "groups":"Groups",
 "hashkey":"Key",
@@ -339,6 +340,7 @@
 "ldapGroupAttributeNameSearch":"Searched attributes",
 "ldapGroupAttributeNameUser":"User source attribute",
 "ldapGroupBase":"Search base",
+"ldapGroupDecodeSearchedValue":"Decode searched value",
 "ldapGroupObjectClass":"Object class",
 "ldapGroupRecursive":"Recursive",
 "ldapGroups":"Groups",
@@ -378,11 +380,19 @@
 "lwpOpts":"Options for server requests",
 "lwpSslOpts":"SSL options for server requests",
 "macros":"Macros",
+"mail2f":"Mail second factor",
+"mail2fActivation":"Activation",
+"mail2fCodeRegex":"Code regex",
+"mail2fTimeout":"Code timeout",
+"mail2fSubject":"Mail subject",
+"mail2fBody":"Mail body",
+"mail2fAuthnLevel":"Authentication level",
+"mail2fLogo":"Logo",
 "mailBody":"Success mail content",
 "mailCharset":"Charset",
 "mailConfirmBody":"Confirmation mail content",
 "mailConfirmSubject":"Confirmation mail subject",
-"mailContent":"Mail content",
+"mailContent":"Password reset mail content",
 "mailFrom":"Mail sender",
 "mailHeaders":"Mail headers",
 "mailLDAPFilter":"Mail filter",
@@ -392,7 +402,7 @@
 "mailSessionKey":"Session key containing mail address",
 "mailSubject":"Success mail subject",
 "mailTimeout":"Validity time of a password reset request",
-"mailUrl":"Page URL",
+"mailUrl":"Reset page URL",
 "maintenance":"Maintenance mode",
 "malformedValue":"Malformed value",
 "managerDn":"Account",
@@ -634,7 +644,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",
 "reloadTimeout":"Reload timeout",
 "reloadUrls":"Reload URLs",
@@ -861,6 +871,10 @@
 "samlIDPMetaDataOptionsSession":"Session",
 "samlIDPMetaDataOptionsSignature":"Signature",
 "samlIDPMetaDataOptionsBinding":"Binding",
+"samlIDPMetaDataOptionsDisplay":"Display",
+"samlIDPMetaDataOptionsDisplayName":"Display name",
+"samlIDPMetaDataOptionsDisplayParams":"Display",
+"samlIDPMetaDataOptionsIcon":"Logo",
 "samlIDPMetaDataOptionsSecurity":"Security",
 "samlIDPMetaDataOptionsStoreSAMLToken":"Store SAML Token",
 "samlIDPMetaDataOptionsRelayStateURL":"Allow URL as RelayState",
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/fr.json 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/fr.json
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/fr.json	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/fr.json	2019-02-08 10:14:37.000000000 +0000
@@ -124,6 +124,7 @@
 "casSrv":"Serveur CAS",
 "casSrvMetaDataExportedVars":"Attributs exportés",
 "casSrvMetaDataOptions":"Options",
+"casSrvMetaDataOptionsDisplay":"Affichage",
 "casSrvMetaDataOptionsDisplayName":"Nom à afficher",
 "casSrvMetaDataOptionsGateway":"Authentification transparente",
 "casSrvMetaDataOptionsIcon":"Chemin de l'icône",
@@ -236,6 +237,7 @@
 "enabled":"Activé",
 "enterPassword":"Entrer le mot de passe (optionnel)",
 "error":"Erreur",
+"errors":"ERREURS",
 "exportedAttr":"Attributs exportés par le portail (SOAP/REST)",
 "exportedHeaders":"En-têtes exportés",
 "exportedVars":"Attributs à exporter",
@@ -263,9 +265,8 @@
 "generalParameters":"Paramètres généraux",
 "globalStorage":"Module Apache::Session",
 "globalStorageOptions":"Paramètres du module Apache::Session",
-"googleAuthnLevel":"Niveau d'authentification",
-"googleExportedVars":"Variables exportées",
-"googleParams":"Paramètres Google",
+"gpgDb":"Base de données GPG",
+"gpgParams":"Paramètres GPG",
 "grantSessionRules":"Conditions d'ouverture",
 "groups":"Groupes",
 "hashkey":"Clef",
@@ -308,7 +309,7 @@
 "issuerDBOpenIDConnect":"OpenID Connect",
 "issuerDBOpenIDConnectActivation":"Activation",
 "issuerDBOpenIDConnectPath":"Chemin",
-"issuerDBOpenIDConnectRule":"Utiliser la règle",
+"issuerDBOpenIDConnectRule":"Règle d'utilisation",
 "issuerParams":"Modules fournisseur",
 "jsRedirect":"Message de redirection",
 "jqueryButtonSelector":"Selecteur jQuery du bouton (optionnel)",
@@ -339,6 +340,7 @@
 "ldapGroupAttributeNameSearch":"Attributs recherchés",
 "ldapGroupAttributeNameUser":"Attribut source utilisateur",
 "ldapGroupBase":"Base de recherche",
+"ldapGroupDecodeSearchedValue":"Décoder la valeur recherchée",
 "ldapGroupObjectClass":"Classe d'objet",
 "ldapGroupRecursive":"Récursif",
 "ldapGroups":"Groupes",
@@ -378,11 +380,19 @@
 "lwpOpts":"Options pour les requêtes serveur",
 "lwpSslOpts":"Options SSL pour les requêtes serveur",
 "macros":"Macros",
+"mail2f":"Second facteur par mail",
+"mail2fActivation":"Activation",
+"mail2fCodeRegex":"Expression régulière pour la génération du code",
+"mail2fTimeout":"Délai d'expiration du code",
+"mail2fSubject":"Sujet du message d'envoi du code",
+"mail2fBody":"Contenu du message d'envoi du code",
+"mail2fAuthnLevel":"Niveau de l'authentification",
+"mail2fLogo":"Logo",
 "mailBody":"Contenu du message de succès",
 "mailCharset":"Charset",
 "mailConfirmBody":"Contenu du message de confirmation",
 "mailConfirmSubject":"Sujet du message de confirmation",
-"mailContent":"Contenu du mail",
+"mailContent":"Contenu du mail de réinitialisation",
 "mailFrom":"Expéditeur du message",
 "mailHeaders":"En-têtes du mail",
 "mailLDAPFilter":"Filtre mail",
@@ -391,8 +401,8 @@
 "mailReplyTo":"Adresse de réponse",
 "mailSessionKey":"Clef de session contenant l'adresse email",
 "mailSubject":"Sujet du message de succès",
-"mailTimeout":"Durée de validité d'une demande de réinitialisation",
-"mailUrl":"URL de la page",
+"mailTimeout":"Durée de validité d'une requête de réinitialisation",
+"mailUrl":"URL de la page de réinitialisation",
 "maintenance":"Mode maintenance",
 "malformedValue":"Valeur mal formée",
 "managerDn":"Compte de connexion LDAP",
@@ -633,8 +643,8 @@
 "registerConfirmSubject":"Sujet du mail de confirmation",
 "registerDB":"Module d'auto-enregistrement",
 "registerDoneSubject":"Sujet du mail de prise en compte",
-"registerTimeout":"Durée de validité de la requête",
-"registerUrl":"URL de la page",
+"registerTimeout":"Durée de validité d'une requête de création",
+"registerUrl":"URL de la page de création",
 "reloadParams":"Mise à jour de la configuration",
 "reloadTimeout":"Délai de mise à jour",
 "reloadUrls":"URLs de mise à jour",
@@ -861,6 +871,10 @@
 "samlIDPMetaDataOptionsSession":"Session",
 "samlIDPMetaDataOptionsSignature":"Signature",
 "samlIDPMetaDataOptionsBinding":"Méthode",
+"samlIDPMetaDataOptionsDisplay":"Affichage",
+"samlIDPMetaDataOptionsDisplayName":"Nom d'affichage",
+"samlIDPMetaDataOptionsDisplayParams":"Affichage",
+"samlIDPMetaDataOptionsIcon":"Logo",
 "samlIDPMetaDataOptionsSecurity":"Sécurité",
 "samlIDPMetaDataOptionsStoreSAMLToken":"Conserver le jeton SAML",
 "samlIDPMetaDataOptionsRelayStateURL":"Pemettre une URL dans le RelayState",
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/it.json 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/it.json
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/it.json	2018-12-20 13:33:54.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/it.json	2019-02-08 10:14:37.000000000 +0000
@@ -124,6 +124,7 @@
 "casSrv":"Server CAS ",
 "casSrvMetaDataExportedVars":"Attributi esportati",
 "casSrvMetaDataOptions":"Opzioni",
+"casSrvMetaDataOptionsDisplay":"Display",
 "casSrvMetaDataOptionsDisplayName":"Nome da visualizzare",
 "casSrvMetaDataOptionsGateway":"Autenticazione gateway",
 "casSrvMetaDataOptionsIcon":"Path icona",
@@ -236,6 +237,7 @@
 "enabled":"Abilitato",
 "enterPassword":"Inserisci password (opzionale)",
 "error":"Errore",
+"errors":"ERRORS",
 "exportedAttr":"Attributi di SOAP/REST esportati",
 "exportedHeaders":"Intestazioni esportate",
 "exportedVars":"Variabili esportate",
@@ -263,9 +265,8 @@
 "generalParameters":"Parametri generali",
 "globalStorage":"Modulo Apache::Session",
 "globalStorageOptions":"Parametri di modulo Apache::Session",
-"googleAuthnLevel":"Livello di autenticazione",
-"googleExportedVars":"Variabili esportate",
-"googleParams":"Parametri Google",
+"gpgDb":"GPG database",
+"gpgParams":"GPG parameters",
 "grantSessionRules":"Condizioni di apertura",
 "groups":"Gruppi",
 "hashkey":"Chiave",
@@ -339,6 +340,7 @@
 "ldapGroupAttributeNameSearch":"Attributi ricercati",
 "ldapGroupAttributeNameUser":"Attributo origine utente",
 "ldapGroupBase":"Base di ricerca",
+"ldapGroupDecodeSearchedValue":"Decode searched value",
 "ldapGroupObjectClass":"Classe oggetto",
 "ldapGroupRecursive":"Ricorsivo",
 "ldapGroups":"Gruppi",
@@ -378,11 +380,19 @@
 "lwpOpts":"Opzioni per le richieste del server",
 "lwpSslOpts":"Opzioni SSL per le richieste del server",
 "macros":"Macro",
+"mail2f":"Mail second factor",
+"mail2fActivation":"Activation",
+"mail2fCodeRegex":"Code regex",
+"mail2fTimeout":"Code timeout",
+"mail2fSubject":"Mail subject",
+"mail2fBody":"Mail body",
+"mail2fAuthnLevel":"Authentication level",
+"mail2fLogo":"Logo",
 "mailBody":"Successo contenuto di posta",
 "mailCharset":"Charset",
 "mailConfirmBody":"Contenuto della mail di conferma",
 "mailConfirmSubject":"Soggetto della mail di conferma",
-"mailContent":"Contenuto della mail",
+"mailContent":"Contenuto della mail di ripristino della password",
 "mailFrom":"Mittente",
 "mailHeaders":"Intestazioni di posta",
 "mailLDAPFilter":"Filtro mail",
@@ -634,7 +644,7 @@
 "registerDB":"Modulo di autoregistrazione",
 "registerDoneSubject":"Oggetto per la mail inviata",
 "registerTimeout":"Tempo di validità di una richiesta di registrazione",
-"registerUrl":"URL della pagina",
+"registerUrl":"URL della pagina di registrazione",
 "reloadParams":"Ricarica di configurazione",
 "reloadTimeout":"Ricarica il timeout",
 "reloadUrls":"Ricarica gli URL",
@@ -861,6 +871,10 @@
 "samlIDPMetaDataOptionsSession":"Sessioni",
 "samlIDPMetaDataOptionsSignature":"Firma",
 "samlIDPMetaDataOptionsBinding":"Vincolante",
+"samlIDPMetaDataOptionsDisplay":"Display",
+"samlIDPMetaDataOptionsDisplayName":"Display name",
+"samlIDPMetaDataOptionsDisplayParams":"Display",
+"samlIDPMetaDataOptionsIcon":"Logo",
 "samlIDPMetaDataOptionsSecurity":"Sicurezza",
 "samlIDPMetaDataOptionsStoreSAMLToken":"Store SAML Token",
 "samlIDPMetaDataOptionsRelayStateURL":"Consenti l'URL come RelayState",
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/vi.json 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/vi.json
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/vi.json	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/vi.json	2019-02-08 10:14:37.000000000 +0000
@@ -124,6 +124,7 @@
 "casSrv":"CAS Server",
 "casSrvMetaDataExportedVars":"Thuộc tính xuất",
 "casSrvMetaDataOptions":"Tùy chọn",
+"casSrvMetaDataOptionsDisplay":"Hiển thị",
 "casSrvMetaDataOptionsDisplayName":"Tên để hiển thị",
 "casSrvMetaDataOptionsGateway":"Xác thực Gateway",
 "casSrvMetaDataOptionsIcon":"Đường dẫn Icon",
@@ -236,6 +237,7 @@
 "enabled":"Đã bật",
 "enterPassword":"Nhập mật khẩu (tùy chọn)",
 "error":"Lỗi",
+"errors":"ERRORS",
 "exportedAttr":"Biến SOAP/REST đã được xuất",
 "exportedHeaders":"Tiêu đề đã được xuất",
 "exportedVars":"Biến đã được xuất",
@@ -263,9 +265,8 @@
 "generalParameters":"Thông số chung",
 "globalStorage":"Mô đun Apache :: Session",
 "globalStorageOptions":"Tham số mô đun Apache :: Session ",
-"googleAuthnLevel":"Mức xác thực",
-"googleExportedVars":"Xuất khẩu biến",
-"googleParams":"Tham số của Google",
+"gpgDb":"GPG database",
+"gpgParams":"GPG parameters",
 "grantSessionRules":"Điều kiện mở",
 "groups":"Nhóm",
 "hashkey":"Khóa",
@@ -339,6 +340,7 @@
 "ldapGroupAttributeNameSearch":"Thuộc tính đã tìm kiếm",
 "ldapGroupAttributeNameUser":"Thuộc tính nguồn của người dùng",
 "ldapGroupBase":"Cơ sở tìm kiếm",
+"ldapGroupDecodeSearchedValue":"Decode searched value",
 "ldapGroupObjectClass":"Lớp đối tượng",
 "ldapGroupRecursive":"Đệ quy",
 "ldapGroups":"Nhóm",
@@ -378,11 +380,19 @@
 "lwpOpts":"Tùy chọn cho yêu cầu máy chủ",
 "lwpSslOpts":"Tùy chọn SSL cho yêu cầu máy chủ",
 "macros":"Macros",
-"mailBody":"Nội dung thư thành công",
+"mail2f":"Mail second factor",
+"mail2fActivation":"Activation",
+"mail2fCodeRegex":"Code regex",
+"mail2fTimeout":"Code timeout",
+"mail2fSubject":"Mail subject",
+"mail2fBody":"Mail body",
+"mail2fAuthnLevel":"Authentication level",
+"mail2fLogo":"Logo",
+"mailBody":"Success mail content",
 "mailCharset":"Charset",
 "mailConfirmBody":"Xác nhận nội dung thư",
 "mailConfirmSubject":"Xác nhận chủ đề thư",
-"mailContent":"Nội dung thư",
+"mailContent":"Password reset mail content",
 "mailFrom":"Người gửi thư",
 "mailHeaders":"Tiêu đề thư",
 "mailLDAPFilter":"Bộ lọc thư",
@@ -392,7 +402,7 @@
 "mailSessionKey":"Khóa phiên chứa địa chỉ thư",
 "mailSubject":"Chủ đề thư thành công",
 "mailTimeout":"Thời hạn hợp lệ của yêu cầu đặt lại mật khẩu",
-"mailUrl":"URL trang",
+"mailUrl":"Reset page URL",
 "maintenance":"Chế độ bảo trì",
 "malformedValue":"Giá trị không hợp lệ",
 "managerDn":"Tài khoản",
@@ -634,7 +644,7 @@
 "registerDB":"Register module",
 "registerDoneSubject":"Tiêu đề cho thư đã hoàn tất",
 "registerTimeout":"Thời hạn hiệu lực của yêu cầu đăng ký",
-"registerUrl":"Page URL",
+"registerUrl":"Register page URL",
 "reloadParams":"Configuration reload",
 "reloadTimeout":"Reload timeout",
 "reloadUrls":"Reload URLs",
@@ -861,6 +871,10 @@
 "samlIDPMetaDataOptionsSession":"Phiên",
 "samlIDPMetaDataOptionsSignature":"Chữ ký",
 "samlIDPMetaDataOptionsBinding":"Liên kết",
+"samlIDPMetaDataOptionsDisplay":"Display",
+"samlIDPMetaDataOptionsDisplayName":"Display name",
+"samlIDPMetaDataOptionsDisplayParams":"Display",
+"samlIDPMetaDataOptionsIcon":"Logo",
 "samlIDPMetaDataOptionsSecurity":"Bảo mật",
 "samlIDPMetaDataOptionsStoreSAMLToken":"Lưu trữ token SAML",
 "samlIDPMetaDataOptionsRelayStateURL":"Cho phép URL như RelayState",
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/zh.json 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/zh.json
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/languages/zh.json	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/languages/zh.json	2019-02-08 10:14:37.000000000 +0000
@@ -38,7 +38,7 @@
 "addU2FKey":"Add U2F key",
 "addTOTPKey":"Add TOTP key",
 "addVhost":"增加virtualhost",
-"adParams":"Active Directory参数",
+"adParams":"Active Directory parameters",
 "ADPwdExpireWarning":"密码过期警告",
 "ADPwdMaxAge":"密码最长有效期",
 "advancedParams":"高级参数",
@@ -124,6 +124,7 @@
 "casSrv":"CAS 服务器",
 "casSrvMetaDataExportedVars":"声明的attributes",
 "casSrvMetaDataOptions":"选项",
+"casSrvMetaDataOptionsDisplay":"Display",
 "casSrvMetaDataOptionsDisplayName":"显示名称",
 "casSrvMetaDataOptionsGateway":"网关认证",
 "casSrvMetaDataOptionsIcon":"图标路径",
@@ -236,6 +237,7 @@
 "enabled":"开启",
 "enterPassword":"输入密码（可选）",
 "error":"错误",
+"errors":"ERRORS",
 "exportedAttr":"SOAP/REST exported attributes",
 "exportedHeaders":"Exported headers",
 "exportedVars":"Exported Variables",
@@ -263,9 +265,8 @@
 "generalParameters":"通用参数",
 "globalStorage":"Apache::Session 模块",
 "globalStorageOptions":"Apache::Session module parameters",
-"googleAuthnLevel":"认证等级",
-"googleExportedVars":"导出的参数",
-"googleParams":"Google 参数",
+"gpgDb":"GPG database",
+"gpgParams":"GPG parameters",
 "grantSessionRules":"Opening conditions",
 "groups":"Groups",
 "hashkey":"Key",
@@ -339,6 +340,7 @@
 "ldapGroupAttributeNameSearch":"Searched attributes",
 "ldapGroupAttributeNameUser":"User source attribute",
 "ldapGroupBase":"Search base",
+"ldapGroupDecodeSearchedValue":"Decode searched value",
 "ldapGroupObjectClass":"Object class",
 "ldapGroupRecursive":"Recursive",
 "ldapGroups":"Groups",
@@ -378,11 +380,19 @@
 "lwpOpts":"Options for server requests",
 "lwpSslOpts":"SSL options for server requests",
 "macros":"Macros",
+"mail2f":"Mail second factor",
+"mail2fActivation":"Activation",
+"mail2fCodeRegex":"Code regex",
+"mail2fTimeout":"Code timeout",
+"mail2fSubject":"Mail subject",
+"mail2fBody":"Mail body",
+"mail2fAuthnLevel":"Authentication level",
+"mail2fLogo":"Logo",
 "mailBody":"Success mail content",
 "mailCharset":"Charset",
 "mailConfirmBody":"Confirmation mail content",
 "mailConfirmSubject":"Confirmation mail subject",
-"mailContent":"邮件内容",
+"mailContent":"Password reset mail content",
 "mailFrom":"邮件发送者",
 "mailHeaders":"邮件头",
 "mailLDAPFilter":"邮件过滤器",
@@ -392,7 +402,7 @@
 "mailSessionKey":"Session key containing mail address",
 "mailSubject":"Success mail subject",
 "mailTimeout":"Validity time of a password reset request",
-"mailUrl":"Page URL",
+"mailUrl":"Reset page URL",
 "maintenance":"Maintenance mode",
 "malformedValue":"Malformed value",
 "managerDn":"账户",
@@ -634,7 +644,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",
 "reloadTimeout":"Reload timeout",
 "reloadUrls":"Reload URLs",
@@ -861,6 +871,10 @@
 "samlIDPMetaDataOptionsSession":"Session",
 "samlIDPMetaDataOptionsSignature":"Signature",
 "samlIDPMetaDataOptionsBinding":"Binding",
+"samlIDPMetaDataOptionsDisplay":"Display",
+"samlIDPMetaDataOptionsDisplayName":"Display name",
+"samlIDPMetaDataOptionsDisplayParams":"Display",
+"samlIDPMetaDataOptionsIcon":"Logo",
 "samlIDPMetaDataOptionsSecurity":"Security",
 "samlIDPMetaDataOptionsStoreSAMLToken":"Store SAML Token",
 "samlIDPMetaDataOptionsRelayStateURL":"Allow URL as RelayState",
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/reverseTree.json 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/reverseTree.json
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/reverseTree.json	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/reverseTree.json	2019-02-08 10:14:42.000000000 +0000
@@ -1 +1 @@
-{"ADPwdExpireWarning":"generalParameters/authParams/adParams","ADPwdMaxAge":"generalParameters/authParams/adParams","AuthLDAPFilter":"generalParameters/authParams/ldapParams/ldapFilters","LDAPFilter":"generalParameters/authParams/ldapParams/ldapFilters","SMTPAuthPass":"generalParameters/plugins/passwordManagement/SMTP","SMTPAuthUser":"generalParameters/plugins/passwordManagement/SMTP","SMTPPort":"generalParameters/plugins/passwordManagement/SMTP","SMTPServer":"generalParameters/plugins/passwordManagement/SMTP","SMTPTLS":"generalParameters/plugins/passwordManagement/SMTP","SMTPTLSOpts":"generalParameters/plugins/passwordManagement/SMTP","SSLAuthnLevel":"generalParameters/authParams/sslParams","SSLVar":"generalParameters/authParams/sslParams","SSLVarIf":"generalParameters/authParams/sslParams","activeTimer":"generalParameters/advancedParams/forms","apacheAuthnLevel":"generalParameters/authParams/apacheParams","applicationList":"generalParameters/portalParams/portalMenu","authChoiceModules":"generalParameters/authParams/choiceParams","authChoiceParam":"generalParameters/authParams/choiceParams","authentication":"generalParameters/authParams","autoSigninRules":"generalParameters/plugins/autoSignin","bruteForceProtection":"generalParameters/advancedParams/security","captcha_login_enabled":"generalParameters/portalParams/portalCaptcha","captcha_mail_enabled":"generalParameters/portalParams/portalCaptcha","captcha_register_enabled":"generalParameters/portalParams/portalCaptcha","captcha_size":"generalParameters/portalParams/portalCaptcha","casAccessControlPolicy":"casServiceMetadata","casAppMetaDataNodes":"","casAttr":"casServiceMetadata","casAttributes":"casServiceMetadata","casAuthnLevel":"generalParameters/authParams/casParams","casSrvMetaDataNodes":"","casStorage":"casServiceMetadata","casStorageOptions":"casServiceMetadata","cda":"generalParameters/cookieParams","checkState":"generalParameters/plugins/stateCheck","checkStateSecret":"generalParameters/plugins/stateCheck","checkXSS":"generalParameters/advancedParams/security","combModules":"generalParameters/authParams/combinationParams","combination":"generalParameters/authParams/combinationParams","confirmFormMethod":"generalParameters/advancedParams/forms","cookieExpiration":"generalParameters/cookieParams","cookieName":"generalParameters/cookieParams","cspConnect":"generalParameters/advancedParams/security/contentSecurityPolicy","cspDefault":"generalParameters/advancedParams/security/contentSecurityPolicy","cspFont":"generalParameters/advancedParams/security/contentSecurityPolicy","cspFormAction":"generalParameters/advancedParams/security/contentSecurityPolicy","cspImg":"generalParameters/advancedParams/security/contentSecurityPolicy","cspScript":"generalParameters/advancedParams/security/contentSecurityPolicy","cspStyle":"generalParameters/advancedParams/security/contentSecurityPolicy","customAddParams":"generalParameters/authParams/customParams","customAuth":"generalParameters/authParams/customParams","customFunctions":"generalParameters/advancedParams","customPassword":"generalParameters/authParams/customParams","customRegister":"generalParameters/authParams/customParams","customUserDB":"generalParameters/authParams/customParams","dbiAuthChain":"generalParameters/authParams/dbiParams/dbiConnection/dbiConnectionAuth","dbiAuthLoginCol":"generalParameters/authParams/dbiParams/dbiSchema","dbiAuthPassword":"generalParameters/authParams/dbiParams/dbiConnection/dbiConnectionAuth","dbiAuthPasswordCol":"generalParameters/authParams/dbiParams/dbiSchema","dbiAuthPasswordHash":"generalParameters/authParams/dbiParams/dbiPassword","dbiAuthTable":"generalParameters/authParams/dbiParams/dbiSchema","dbiAuthUser":"generalParameters/authParams/dbiParams/dbiConnection/dbiConnectionAuth","dbiAuthnLevel":"generalParameters/authParams/dbiParams","dbiDynamicHashEnabled":"generalParameters/authParams/dbiParams/dbiPassword/dbiDynamicHash","dbiDynamicHashNewPasswordScheme":"generalParameters/authParams/dbiParams/dbiPassword/dbiDynamicHash","dbiDynamicHashValidSaltedSchemes":"generalParameters/authParams/dbiParams/dbiPassword/dbiDynamicHash","dbiDynamicHashValidSchemes":"generalParameters/authParams/dbiParams/dbiPassword/dbiDynamicHash","dbiExportedVars":"generalParameters/authParams/dbiParams","dbiPasswordMailCol":"generalParameters/authParams/dbiParams/dbiSchema","dbiUserChain":"generalParameters/authParams/dbiParams/dbiConnection/dbiConnectionUser","dbiUserPassword":"generalParameters/authParams/dbiParams/dbiConnection/dbiConnectionUser","dbiUserTable":"generalParameters/authParams/dbiParams/dbiSchema","dbiUserUser":"generalParameters/authParams/dbiParams/dbiConnection/dbiConnectionUser","demoExportedVars":"generalParameters/authParams/demoParams","domain":"generalParameters/cookieParams","exportedAttr":"generalParameters/plugins/portalServers","exportedVars":"variables","ext2FSendCommand":"generalParameters/secondFactors/external2f","ext2FValidateCommand":"generalParameters/secondFactors/external2f","ext2fActivation":"generalParameters/secondFactors/external2f","ext2fAuthnLevel":"generalParameters/secondFactors/external2f","ext2fLogo":"generalParameters/secondFactors/external2f","facebookAppId":"generalParameters/authParams/facebookParams","facebookAppSecret":"generalParameters/authParams/facebookParams","facebookAuthnLevel":"generalParameters/authParams/facebookParams","facebookExportedVars":"generalParameters/authParams/facebookParams","facebookUserField":"generalParameters/authParams/facebookParams","failedLoginNumber":"generalParameters/plugins/loginHistory","formTimeout":"generalParameters/advancedParams/security","globalStorage":"generalParameters/sessionParams/sessionStorage","globalStorageOptions":"generalParameters/sessionParams/sessionStorage","grantSessionRules":"generalParameters/sessionParams","groups":"variables","hiddenAttributes":"generalParameters/logParams","hideOldPassword":"generalParameters/portalParams/portalCustomization/passwordManagement","httpOnly":"generalParameters/cookieParams","https":"generalParameters/advancedParams/redirection","infoFormMethod":"generalParameters/advancedParams/forms","issuerDBCASActivation":"generalParameters/issuerParams/issuerDBCAS","issuerDBCASPath":"generalParameters/issuerParams/issuerDBCAS","issuerDBCASRule":"generalParameters/issuerParams/issuerDBCAS","issuerDBGetActivation":"generalParameters/issuerParams/issuerDBGet","issuerDBGetParameters":"generalParameters/issuerParams/issuerDBGet","issuerDBGetPath":"generalParameters/issuerParams/issuerDBGet","issuerDBGetRule":"generalParameters/issuerParams/issuerDBGet","issuerDBOpenIDActivation":"generalParameters/issuerParams/issuerDBOpenID","issuerDBOpenIDConnectActivation":"generalParameters/issuerParams/issuerDBOpenIDConnect","issuerDBOpenIDConnectPath":"generalParameters/issuerParams/issuerDBOpenIDConnect","issuerDBOpenIDConnectRule":"generalParameters/issuerParams/issuerDBOpenIDConnect","issuerDBOpenIDPath":"generalParameters/issuerParams/issuerDBOpenID","issuerDBOpenIDRule":"generalParameters/issuerParams/issuerDBOpenID","issuerDBSAMLActivation":"generalParameters/issuerParams/issuerDBSAML","issuerDBSAMLPath":"generalParameters/issuerParams/issuerDBSAML","issuerDBSAMLRule":"generalParameters/issuerParams/issuerDBSAML","jsRedirect":"generalParameters/advancedParams/portalRedirection","key":"generalParameters/advancedParams/security","krbAuthnLevel":"generalParameters/authParams/kerberosParams","krbByJs":"generalParameters/authParams/kerberosParams","krbKeytab":"generalParameters/authParams/kerberosParams","krbRemoveDomain":"generalParameters/authParams/kerberosParams","ldapAllowResetExpiredPassword":"generalParameters/authParams/ldapParams/ldapPassword","ldapAuthnLevel":"generalParameters/authParams/ldapParams","ldapBase":"generalParameters/authParams/ldapParams/ldapConnection","ldapChangePasswordAsUser":"generalParameters/authParams/ldapParams/ldapPassword","ldapExportedVars":"generalParameters/authParams/ldapParams","ldapGroupAttributeName":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupAttributeNameGroup":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupAttributeNameSearch":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupAttributeNameUser":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupBase":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupObjectClass":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupRecursive":"generalParameters/authParams/ldapParams/ldapGroups","ldapPasswordResetAttribute":"generalParameters/authParams/ldapParams/ldapPassword","ldapPasswordResetAttributeValue":"generalParameters/authParams/ldapParams/ldapPassword","ldapPort":"generalParameters/authParams/ldapParams/ldapConnection","ldapPpolicyControl":"generalParameters/authParams/ldapParams/ldapPassword","ldapPwdEnc":"generalParameters/authParams/ldapParams/ldapPassword","ldapRaw":"generalParameters/authParams/ldapParams/ldapConnection","ldapSearchDeref":"generalParameters/authParams/ldapParams/ldapFilters","ldapServer":"generalParameters/authParams/ldapParams/ldapConnection","ldapSetPassword":"generalParameters/authParams/ldapParams/ldapPassword","ldapTimeout":"generalParameters/authParams/ldapParams/ldapConnection","ldapUsePasswordResetAttribute":"generalParameters/authParams/ldapParams/ldapPassword","ldapVersion":"generalParameters/authParams/ldapParams/ldapConnection","linkedInAuthnLevel":"generalParameters/authParams/linkedinParams","linkedInClientID":"generalParameters/authParams/linkedinParams","linkedInClientSecret":"generalParameters/authParams/linkedinParams","linkedInFields":"generalParameters/authParams/linkedinParams","linkedInScope":"generalParameters/authParams/linkedinParams","linkedInUserField":"generalParameters/authParams/linkedinParams","localSessionStorage":"generalParameters/sessionParams/sessionStorage","localSessionStorageOptions":"generalParameters/sessionParams/sessionStorage","loginHistoryEnabled":"generalParameters/plugins/loginHistory","logoutServices":"generalParameters/advancedParams","lwpOpts":"generalParameters/advancedParams/security","lwpSslOpts":"generalParameters/advancedParams/security","macros":"variables","mailBody":"generalParameters/plugins/passwordManagement/mailContent","mailCharset":"generalParameters/plugins/passwordManagement/mailHeaders","mailConfirmBody":"generalParameters/plugins/passwordManagement/mailContent","mailConfirmSubject":"generalParameters/plugins/passwordManagement/mailContent","mailFrom":"generalParameters/plugins/passwordManagement/mailHeaders","mailLDAPFilter":"generalParameters/authParams/ldapParams/ldapFilters","mailOnPasswordChange":"generalParameters/portalParams/portalCustomization/passwordManagement","mailReplyTo":"generalParameters/plugins/passwordManagement/mailHeaders","mailSessionKey":"generalParameters/plugins/passwordManagement/mailOther","mailSubject":"generalParameters/plugins/passwordManagement/mailContent","mailTimeout":"generalParameters/plugins/passwordManagement/mailOther","mailUrl":"generalParameters/plugins/passwordManagement/mailOther","maintenance":"generalParameters/advancedParams/redirection","managerDn":"generalParameters/authParams/ldapParams/ldapConnection","managerPassword":"generalParameters/authParams/ldapParams/ldapConnection","multiValuesSeparator":"generalParameters/advancedParams","nginxCustomHandlers":"generalParameters/advancedParams","noAjaxHook":"generalParameters/advancedParams/portalRedirection","notification":"generalParameters/plugins/notifications","notificationServer":"generalParameters/plugins/notifications","notificationStorage":"generalParameters/plugins/notifications","notificationStorageOptions":"generalParameters/plugins/notifications","notificationWildcard":"generalParameters/plugins/notifications","notificationXSLTfile":"generalParameters/plugins/notifications","notifyDeleted":"generalParameters/sessionParams/multipleSessions","notifyOther":"generalParameters/sessionParams/multipleSessions","nullAuthnLevel":"generalParameters/authParams/nullParams","oidcAuthnLevel":"generalParameters/authParams/oidcParams","oidcOPMetaDataNodes":"","oidcRPCallbackGetParam":"generalParameters/authParams/oidcParams","oidcRPMetaDataNodes":"","oidcRPStateTimeout":"generalParameters/authParams/oidcParams","oidcServiceAllowAuthorizationCodeFlow":"oidcServiceMetaData/oidcServiceMetaDataSecurity","oidcServiceAllowDynamicRegistration":"oidcServiceMetaData/oidcServiceMetaDataSecurity","oidcServiceAllowHybridFlow":"oidcServiceMetaData/oidcServiceMetaDataSecurity","oidcServiceAllowImplicitFlow":"oidcServiceMetaData/oidcServiceMetaDataSecurity","oidcServiceKeyIdSig":"oidcServiceMetaData/oidcServiceMetaDataSecurity","oidcServiceMetaDataAuthnContext":"oidcServiceMetaData","oidcServiceMetaDataAuthorizeURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataBackChannelURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataCheckSessionURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataEndSessionURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataFrontChannelURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataIssuer":"oidcServiceMetaData","oidcServiceMetaDataJWKSURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataRegistrationURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataTokenURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataUserInfoURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServicePrivateKeySig":"oidcServiceMetaData/oidcServiceMetaDataSecurity/oidcServiceMetaDataKeys","oidcServicePublicKeySig":"oidcServiceMetaData/oidcServiceMetaDataSecurity/oidcServiceMetaDataKeys","oidcStorage":"oidcServiceMetaData/oidcServiceMetaDataSessions","oidcStorageOptions":"oidcServiceMetaData/oidcServiceMetaDataSessions","oldNotifFormat":"generalParameters/plugins/notifications","openIdAttr":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions","openIdAuthnLevel":"generalParameters/authParams/openidParams","openIdExportedVars":"generalParameters/authParams/openidParams","openIdIDPList":"generalParameters/authParams/openidParams","openIdIssuerSecret":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions","openIdSPList":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions","openIdSecret":"generalParameters/authParams/openidParams","openIdSreg_country":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_dob":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_email":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_fullname":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_gender":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_language":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_nickname":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_postcode":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_timezone":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","pamAuthnLevel":"generalParameters/authParams/pamParams","pamService":"generalParameters/authParams/pamParams","passwordDB":"generalParameters/authParams","passwordResetAllowedRetries":"generalParameters/portalParams/portalCustomization/portalButtons","persistentStorage":"generalParameters/sessionParams/persistentSessions","persistentStorageOptions":"generalParameters/sessionParams/persistentSessions","port":"generalParameters/advancedParams/redirection","portal":"generalParameters/portalParams","portalAntiFrame":"generalParameters/portalParams/portalCustomization/portalOther","portalCheckLogins":"generalParameters/portalParams/portalCustomization/portalButtons","portalDisplayAppslist":"generalParameters/portalParams/portalMenu/portalModules","portalDisplayChangePassword":"generalParameters/portalParams/portalMenu/portalModules","portalDisplayLoginHistory":"generalParameters/portalParams/portalMenu/portalModules","portalDisplayLogout":"generalParameters/portalParams/portalMenu/portalModules","portalDisplayOidcConsents":"generalParameters/portalParams/portalMenu/portalModules","portalDisplayRegister":"generalParameters/portalParams/portalCustomization/portalButtons","portalDisplayResetPassword":"generalParameters/portalParams/portalCustomization/portalButtons","portalErrorOnExpiredSession":"generalParameters/portalParams/portalCustomization/portalOther","portalErrorOnMailNotFound":"generalParameters/portalParams/portalCustomization/portalOther","portalForceAuthn":"generalParameters/advancedParams/security","portalForceAuthnInterval":"generalParameters/advancedParams/security","portalMainLogo":"generalParameters/portalParams/portalCustomization","portalOpenLinkInNewWindow":"generalParameters/portalParams/portalCustomization/portalOther","portalPingInterval":"generalParameters/portalParams/portalCustomization/portalOther","portalRequireOldPassword":"generalParameters/portalParams/portalCustomization/passwordManagement","portalSkin":"generalParameters/portalParams/portalCustomization","portalSkinBackground":"generalParameters/portalParams/portalCustomization","portalSkinRules":"generalParameters/portalParams/portalCustomization","portalStatus":"generalParameters/plugins","portalUserAttr":"generalParameters/portalParams/portalCustomization/portalOther","proxyAuthService":"generalParameters/authParams/proxyParams","proxyAuthnLevel":"generalParameters/authParams/proxyParams","proxySessionService":"generalParameters/authParams/proxyParams","proxyUseSoap":"generalParameters/authParams/proxyParams","radiusAuthnLevel":"generalParameters/authParams/radiusParams","radiusSecret":"generalParameters/authParams/radiusParams","radiusServer":"generalParameters/authParams/radiusParams","randomPasswordRegexp":"generalParameters/plugins/passwordManagement/mailOther","redirectFormMethod":"generalParameters/advancedParams/forms","registerConfirmSubject":"generalParameters/plugins/register","registerDB":"generalParameters/authParams","registerDoneSubject":"generalParameters/plugins/register","registerTimeout":"generalParameters/plugins/register","registerUrl":"generalParameters/plugins/register","reloadTimeout":"generalParameters/reloadParams","reloadUrls":"generalParameters/reloadParams","remoteCookieName":"generalParameters/authParams/remoteParams","remoteGlobalStorage":"generalParameters/authParams/remoteParams","remoteGlobalStorageOptions":"generalParameters/authParams/remoteParams","remotePortal":"generalParameters/authParams/remoteParams","requireToken":"generalParameters/advancedParams/security","rest2fActivation":"generalParameters/secondFactors/rest2f","rest2fAuthnLevel":"generalParameters/secondFactors/rest2f","rest2fInitArgs":"generalParameters/secondFactors/rest2f","rest2fInitUrl":"generalParameters/secondFactors/rest2f","rest2fLogo":"generalParameters/secondFactors/rest2f","rest2fVerifyArgs":"generalParameters/secondFactors/rest2f","rest2fVerifyUrl":"generalParameters/secondFactors/rest2f","restAuthUrl":"generalParameters/authParams/restParams","restConfigServer":"generalParameters/plugins/portalServers","restPwdConfirmUrl":"generalParameters/authParams/restParams","restPwdModifyUrl":"generalParameters/authParams/restParams","restSessionServer":"generalParameters/plugins/portalServers","restUserDBUrl":"generalParameters/authParams/restParams","samlAttributeAuthorityDescriptorAttributeServiceSOAP":"samlServiceMetaData/samlAttributeAuthorityDescriptor/samlAttributeAuthorityDescriptorAttributeService","samlAuthnContextMapKerberos":"samlServiceMetaData/samlAuthnContextMap","samlAuthnContextMapPassword":"samlServiceMetaData/samlAuthnContextMap","samlAuthnContextMapPasswordProtectedTransport":"samlServiceMetaData/samlAuthnContextMap","samlAuthnContextMapTLSClient":"samlServiceMetaData/samlAuthnContextMap","samlCommonDomainCookieActivation":"samlServiceMetaData/samlAdvanced/samlCommonDomainCookie","samlCommonDomainCookieDomain":"samlServiceMetaData/samlAdvanced/samlCommonDomainCookie","samlCommonDomainCookieReader":"samlServiceMetaData/samlAdvanced/samlCommonDomainCookie","samlCommonDomainCookieWriter":"samlServiceMetaData/samlAdvanced/samlCommonDomainCookie","samlDiscoveryProtocolActivation":"samlServiceMetaData/samlAdvanced/samlDiscoveryProtocol","samlDiscoveryProtocolIsPassive":"samlServiceMetaData/samlAdvanced/samlDiscoveryProtocol","samlDiscoveryProtocolPolicy":"samlServiceMetaData/samlAdvanced/samlDiscoveryProtocol","samlDiscoveryProtocolURL":"samlServiceMetaData/samlAdvanced/samlDiscoveryProtocol","samlEntityID":"samlServiceMetaData","samlIDPMetaDataNodes":"","samlIDPSSODescriptorArtifactResolutionServiceArtifact":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorArtifactResolutionService","samlIDPSSODescriptorSingleLogoutServiceHTTPPost":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorSingleLogoutService","samlIDPSSODescriptorSingleLogoutServiceHTTPRedirect":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorSingleLogoutService","samlIDPSSODescriptorSingleLogoutServiceSOAP":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorSingleLogoutService","samlIDPSSODescriptorSingleSignOnServiceHTTPArtifact":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorSingleSignOnService","samlIDPSSODescriptorSingleSignOnServiceHTTPPost":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorSingleSignOnService","samlIDPSSODescriptorSingleSignOnServiceHTTPRedirect":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorSingleSignOnService","samlIDPSSODescriptorWantAuthnRequestsSigned":"samlServiceMetaData/samlIDPSSODescriptor","samlIdPResolveCookie":"samlServiceMetaData/samlAdvanced","samlMetadataForceUTF8":"samlServiceMetaData/samlAdvanced","samlNameIDFormatMapEmail":"samlServiceMetaData/samlNameIDFormatMap","samlNameIDFormatMapKerberos":"samlServiceMetaData/samlNameIDFormatMap","samlNameIDFormatMapWindows":"samlServiceMetaData/samlNameIDFormatMap","samlNameIDFormatMapX509":"samlServiceMetaData/samlNameIDFormatMap","samlOrganizationDisplayName":"samlServiceMetaData/samlOrganization","samlOrganizationName":"samlServiceMetaData/samlOrganization","samlOrganizationURL":"samlServiceMetaData/samlOrganization","samlRelayStateTimeout":"samlServiceMetaData/samlAdvanced","samlSPMetaDataNodes":"","samlSPSSODescriptorArtifactResolutionServiceArtifact":"samlServiceMetaData/samlSPSSODescriptor/samlSPSSODescriptorArtifactResolutionService","samlSPSSODescriptorAssertionConsumerServiceHTTPArtifact":"samlServiceMetaData/samlSPSSODescriptor/samlSPSSODescriptorAssertionConsumerService","samlSPSSODescriptorAssertionConsumerServiceHTTPPost":"samlServiceMetaData/samlSPSSODescriptor/samlSPSSODescriptorAssertionConsumerService","samlSPSSODescriptorAuthnRequestsSigned":"samlServiceMetaData/samlSPSSODescriptor","samlSPSSODescriptorSingleLogoutServiceHTTPPost":"samlServiceMetaData/samlSPSSODescriptor/samlSPSSODescriptorSingleLogoutService","samlSPSSODescriptorSingleLogoutServiceHTTPRedirect":"samlServiceMetaData/samlSPSSODescriptor/samlSPSSODescriptorSingleLogoutService","samlSPSSODescriptorSingleLogoutServiceSOAP":"samlServiceMetaData/samlSPSSODescriptor/samlSPSSODescriptorSingleLogoutService","samlSPSSODescriptorWantAssertionsSigned":"samlServiceMetaData/samlSPSSODescriptor","samlServicePrivateKeyEnc":"samlServiceMetaData/samlServiceSecurity/samlServiceSecurityEnc","samlServicePrivateKeyEncPwd":"samlServiceMetaData/samlServiceSecurity/samlServiceSecurityEnc","samlServicePrivateKeySig":"samlServiceMetaData/samlServiceSecurity/samlServiceSecuritySig","samlServicePrivateKeySigPwd":"samlServiceMetaData/samlServiceSecurity/samlServiceSecuritySig","samlServicePublicKeyEnc":"samlServiceMetaData/samlServiceSecurity/samlServiceSecurityEnc","samlServicePublicKeySig":"samlServiceMetaData/samlServiceSecurity/samlServiceSecuritySig","samlServiceSignatureMethod":"samlServiceMetaData/samlServiceSecurity","samlServiceUseCertificateInResponse":"samlServiceMetaData/samlServiceSecurity","samlStorage":"samlServiceMetaData/samlAdvanced","samlStorageOptions":"samlServiceMetaData/samlAdvanced","samlUseQueryStringSpecific":"samlServiceMetaData/samlAdvanced","securedCookie":"generalParameters/cookieParams","sessionDataToRemember":"generalParameters/plugins/loginHistory","sfRequired":"generalParameters/secondFactors","showLanguages":"generalParameters/portalParams/portalCustomization","singleIP":"generalParameters/sessionParams/multipleSessions","singleSession":"generalParameters/sessionParams/multipleSessions","singleSessionUserByIP":"generalParameters/sessionParams/multipleSessions","singleUserByIP":"generalParameters/sessionParams/multipleSessions","skipRenewConfirmation":"generalParameters/advancedParams/portalRedirection","slaveAuthnLevel":"generalParameters/authParams/slaveParams","slaveExportedVars":"generalParameters/authParams/slaveParams","slaveHeaderContent":"generalParameters/authParams/slaveParams","slaveHeaderName":"generalParameters/authParams/slaveParams","slaveMasterIP":"generalParameters/authParams/slaveParams","slaveUserHeader":"generalParameters/authParams/slaveParams","soapConfigServer":"generalParameters/plugins/portalServers","soapSessionServer":"generalParameters/plugins/portalServers","sslByAjax":"generalParameters/authParams/sslParams","sslHost":"generalParameters/authParams/sslParams","stayConnected":"generalParameters/plugins","storePassword":"generalParameters/sessionParams","successLoginNumber":"generalParameters/plugins/loginHistory","timeout":"generalParameters/sessionParams","timeoutActivity":"generalParameters/sessionParams","timeoutActivityInterval":"generalParameters/sessionParams","tokenUseGlobalStorage":"generalParameters/advancedParams/security","totp2fActivation":"generalParameters/secondFactors/totp","totp2fAuthnLevel":"generalParameters/secondFactors/totp","totp2fDigits":"generalParameters/secondFactors/totp","totp2fDisplayExistingSecret":"generalParameters/secondFactors/totp","totp2fInterval":"generalParameters/secondFactors/totp","totp2fIssuer":"generalParameters/secondFactors/totp","totp2fRange":"generalParameters/secondFactors/totp","totp2fSelfRegistration":"generalParameters/secondFactors/totp","totp2fUserCanChangeKey":"generalParameters/secondFactors/totp","totp2fUserCanRemoveKey":"generalParameters/secondFactors/totp","trustedDomains":"generalParameters/advancedParams/security","trustedProxies":"generalParameters/logParams","twitterAppName":"generalParameters/authParams/twitterParams","twitterAuthnLevel":"generalParameters/authParams/twitterParams","twitterKey":"generalParameters/authParams/twitterParams","twitterSecret":"generalParameters/authParams/twitterParams","twitterUserField":"generalParameters/authParams/twitterParams","u2fActivation":"generalParameters/secondFactors/u2f","u2fAuthnLevel":"generalParameters/secondFactors/u2f","u2fSelfRegistration":"generalParameters/secondFactors/u2f","u2fUserCanRemoveKey":"generalParameters/secondFactors/u2f","upgradeSession":"generalParameters/plugins","useRedirectOnError":"generalParameters/advancedParams/redirection","useRedirectOnForbidden":"generalParameters/advancedParams/redirection","useSafeJail":"generalParameters/advancedParams/security","userControl":"generalParameters/advancedParams/security","userDB":"generalParameters/authParams","userPivot":"generalParameters/authParams/dbiParams/dbiSchema","utotp2fActivation":"generalParameters/secondFactors/utotp2f","utotp2fAuthnLevel":"generalParameters/secondFactors/utotp2f","virtualHosts":"","webIDAuthnLevel":"generalParameters/authParams/webidParams","webIDExportedVars":"generalParameters/authParams/webidParams","webIDWhitelist":"generalParameters/authParams/webidParams","whatToTrace":"generalParameters/logParams","wsdlServer":"generalParameters/plugins/portalServers","yubikey2fActivation":"generalParameters/secondFactors/yubikey2f","yubikey2fAuthnLevel":"generalParameters/secondFactors/yubikey2f","yubikey2fClientID":"generalParameters/secondFactors/yubikey2f","yubikey2fNonce":"generalParameters/secondFactors/yubikey2f","yubikey2fPublicIDSize":"generalParameters/secondFactors/yubikey2f","yubikey2fSecretKey":"generalParameters/secondFactors/yubikey2f","yubikey2fSelfRegistration":"generalParameters/secondFactors/yubikey2f","yubikey2fUrl":"generalParameters/secondFactors/yubikey2f","yubikey2fUserCanRemoveKey":"generalParameters/secondFactors/yubikey2f"}
\ No newline at end of file
+{"ADPwdExpireWarning":"generalParameters/authParams/adParams","ADPwdMaxAge":"generalParameters/authParams/adParams","AuthLDAPFilter":"generalParameters/authParams/ldapParams/ldapFilters","LDAPFilter":"generalParameters/authParams/ldapParams/ldapFilters","SMTPAuthPass":"generalParameters/advancedParams/SMTP","SMTPAuthUser":"generalParameters/advancedParams/SMTP","SMTPPort":"generalParameters/advancedParams/SMTP","SMTPServer":"generalParameters/advancedParams/SMTP","SMTPTLS":"generalParameters/advancedParams/SMTP","SMTPTLSOpts":"generalParameters/advancedParams/SMTP","SSLAuthnLevel":"generalParameters/authParams/sslParams","SSLVar":"generalParameters/authParams/sslParams","SSLVarIf":"generalParameters/authParams/sslParams","activeTimer":"generalParameters/advancedParams/forms","apacheAuthnLevel":"generalParameters/authParams/apacheParams","applicationList":"generalParameters/portalParams/portalMenu","authChoiceModules":"generalParameters/authParams/choiceParams","authChoiceParam":"generalParameters/authParams/choiceParams","authentication":"generalParameters/authParams","autoSigninRules":"generalParameters/plugins/autoSignin","bruteForceProtection":"generalParameters/advancedParams/security","captcha_login_enabled":"generalParameters/portalParams/portalCaptcha","captcha_mail_enabled":"generalParameters/portalParams/portalCaptcha","captcha_register_enabled":"generalParameters/portalParams/portalCaptcha","captcha_size":"generalParameters/portalParams/portalCaptcha","casAccessControlPolicy":"casServiceMetadata","casAppMetaDataNodes":"","casAttr":"casServiceMetadata","casAttributes":"casServiceMetadata","casAuthnLevel":"generalParameters/authParams/casParams","casSrvMetaDataNodes":"","casStorage":"casServiceMetadata","casStorageOptions":"casServiceMetadata","cda":"generalParameters/cookieParams","checkState":"generalParameters/plugins/stateCheck","checkStateSecret":"generalParameters/plugins/stateCheck","checkXSS":"generalParameters/advancedParams/security","combModules":"generalParameters/authParams/combinationParams","combination":"generalParameters/authParams/combinationParams","confirmFormMethod":"generalParameters/advancedParams/forms","cookieExpiration":"generalParameters/cookieParams","cookieName":"generalParameters/cookieParams","cspConnect":"generalParameters/advancedParams/security/contentSecurityPolicy","cspDefault":"generalParameters/advancedParams/security/contentSecurityPolicy","cspFont":"generalParameters/advancedParams/security/contentSecurityPolicy","cspFormAction":"generalParameters/advancedParams/security/contentSecurityPolicy","cspImg":"generalParameters/advancedParams/security/contentSecurityPolicy","cspScript":"generalParameters/advancedParams/security/contentSecurityPolicy","cspStyle":"generalParameters/advancedParams/security/contentSecurityPolicy","customAddParams":"generalParameters/authParams/customParams","customAuth":"generalParameters/authParams/customParams","customFunctions":"generalParameters/advancedParams","customPassword":"generalParameters/authParams/customParams","customRegister":"generalParameters/authParams/customParams","customUserDB":"generalParameters/authParams/customParams","dbiAuthChain":"generalParameters/authParams/dbiParams/dbiConnection/dbiConnectionAuth","dbiAuthLoginCol":"generalParameters/authParams/dbiParams/dbiSchema","dbiAuthPassword":"generalParameters/authParams/dbiParams/dbiConnection/dbiConnectionAuth","dbiAuthPasswordCol":"generalParameters/authParams/dbiParams/dbiSchema","dbiAuthPasswordHash":"generalParameters/authParams/dbiParams/dbiPassword","dbiAuthTable":"generalParameters/authParams/dbiParams/dbiSchema","dbiAuthUser":"generalParameters/authParams/dbiParams/dbiConnection/dbiConnectionAuth","dbiAuthnLevel":"generalParameters/authParams/dbiParams","dbiDynamicHashEnabled":"generalParameters/authParams/dbiParams/dbiPassword/dbiDynamicHash","dbiDynamicHashNewPasswordScheme":"generalParameters/authParams/dbiParams/dbiPassword/dbiDynamicHash","dbiDynamicHashValidSaltedSchemes":"generalParameters/authParams/dbiParams/dbiPassword/dbiDynamicHash","dbiDynamicHashValidSchemes":"generalParameters/authParams/dbiParams/dbiPassword/dbiDynamicHash","dbiExportedVars":"generalParameters/authParams/dbiParams","dbiPasswordMailCol":"generalParameters/authParams/dbiParams/dbiSchema","dbiUserChain":"generalParameters/authParams/dbiParams/dbiConnection/dbiConnectionUser","dbiUserPassword":"generalParameters/authParams/dbiParams/dbiConnection/dbiConnectionUser","dbiUserTable":"generalParameters/authParams/dbiParams/dbiSchema","dbiUserUser":"generalParameters/authParams/dbiParams/dbiConnection/dbiConnectionUser","demoExportedVars":"generalParameters/authParams/demoParams","domain":"generalParameters/cookieParams","exportedAttr":"generalParameters/plugins/portalServers","exportedVars":"variables","ext2FSendCommand":"generalParameters/secondFactors/external2f","ext2FValidateCommand":"generalParameters/secondFactors/external2f","ext2fActivation":"generalParameters/secondFactors/external2f","ext2fAuthnLevel":"generalParameters/secondFactors/external2f","ext2fLogo":"generalParameters/secondFactors/external2f","facebookAppId":"generalParameters/authParams/facebookParams","facebookAppSecret":"generalParameters/authParams/facebookParams","facebookAuthnLevel":"generalParameters/authParams/facebookParams","facebookExportedVars":"generalParameters/authParams/facebookParams","facebookUserField":"generalParameters/authParams/facebookParams","failedLoginNumber":"generalParameters/plugins/loginHistory","formTimeout":"generalParameters/advancedParams/security","globalStorage":"generalParameters/sessionParams/sessionStorage","globalStorageOptions":"generalParameters/sessionParams/sessionStorage","gpgDb":"generalParameters/authParams/gpgParams","grantSessionRules":"generalParameters/sessionParams","groups":"variables","hiddenAttributes":"generalParameters/logParams","hideOldPassword":"generalParameters/portalParams/portalCustomization/passwordManagement","httpOnly":"generalParameters/cookieParams","https":"generalParameters/advancedParams/redirection","infoFormMethod":"generalParameters/advancedParams/forms","issuerDBCASActivation":"generalParameters/issuerParams/issuerDBCAS","issuerDBCASPath":"generalParameters/issuerParams/issuerDBCAS","issuerDBCASRule":"generalParameters/issuerParams/issuerDBCAS","issuerDBGetActivation":"generalParameters/issuerParams/issuerDBGet","issuerDBGetParameters":"generalParameters/issuerParams/issuerDBGet","issuerDBGetPath":"generalParameters/issuerParams/issuerDBGet","issuerDBGetRule":"generalParameters/issuerParams/issuerDBGet","issuerDBOpenIDActivation":"generalParameters/issuerParams/issuerDBOpenID","issuerDBOpenIDConnectActivation":"generalParameters/issuerParams/issuerDBOpenIDConnect","issuerDBOpenIDConnectPath":"generalParameters/issuerParams/issuerDBOpenIDConnect","issuerDBOpenIDConnectRule":"generalParameters/issuerParams/issuerDBOpenIDConnect","issuerDBOpenIDPath":"generalParameters/issuerParams/issuerDBOpenID","issuerDBOpenIDRule":"generalParameters/issuerParams/issuerDBOpenID","issuerDBSAMLActivation":"generalParameters/issuerParams/issuerDBSAML","issuerDBSAMLPath":"generalParameters/issuerParams/issuerDBSAML","issuerDBSAMLRule":"generalParameters/issuerParams/issuerDBSAML","jsRedirect":"generalParameters/advancedParams/portalRedirection","key":"generalParameters/advancedParams/security","krbAuthnLevel":"generalParameters/authParams/kerberosParams","krbByJs":"generalParameters/authParams/kerberosParams","krbKeytab":"generalParameters/authParams/kerberosParams","krbRemoveDomain":"generalParameters/authParams/kerberosParams","ldapAllowResetExpiredPassword":"generalParameters/authParams/ldapParams/ldapPassword","ldapAuthnLevel":"generalParameters/authParams/ldapParams","ldapBase":"generalParameters/authParams/ldapParams/ldapConnection","ldapChangePasswordAsUser":"generalParameters/authParams/ldapParams/ldapPassword","ldapExportedVars":"generalParameters/authParams/ldapParams","ldapGroupAttributeName":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupAttributeNameGroup":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupAttributeNameSearch":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupAttributeNameUser":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupBase":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupDecodeSearchedValue":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupObjectClass":"generalParameters/authParams/ldapParams/ldapGroups","ldapGroupRecursive":"generalParameters/authParams/ldapParams/ldapGroups","ldapPasswordResetAttribute":"generalParameters/authParams/ldapParams/ldapPassword","ldapPasswordResetAttributeValue":"generalParameters/authParams/ldapParams/ldapPassword","ldapPort":"generalParameters/authParams/ldapParams/ldapConnection","ldapPpolicyControl":"generalParameters/authParams/ldapParams/ldapPassword","ldapPwdEnc":"generalParameters/authParams/ldapParams/ldapPassword","ldapRaw":"generalParameters/authParams/ldapParams/ldapConnection","ldapSearchDeref":"generalParameters/authParams/ldapParams/ldapFilters","ldapServer":"generalParameters/authParams/ldapParams/ldapConnection","ldapSetPassword":"generalParameters/authParams/ldapParams/ldapPassword","ldapTimeout":"generalParameters/authParams/ldapParams/ldapConnection","ldapUsePasswordResetAttribute":"generalParameters/authParams/ldapParams/ldapPassword","ldapVersion":"generalParameters/authParams/ldapParams/ldapConnection","linkedInAuthnLevel":"generalParameters/authParams/linkedinParams","linkedInClientID":"generalParameters/authParams/linkedinParams","linkedInClientSecret":"generalParameters/authParams/linkedinParams","linkedInFields":"generalParameters/authParams/linkedinParams","linkedInScope":"generalParameters/authParams/linkedinParams","linkedInUserField":"generalParameters/authParams/linkedinParams","localSessionStorage":"generalParameters/sessionParams/sessionStorage","localSessionStorageOptions":"generalParameters/sessionParams/sessionStorage","loginHistoryEnabled":"generalParameters/plugins/loginHistory","logoutServices":"generalParameters/advancedParams","lwpOpts":"generalParameters/advancedParams/security","lwpSslOpts":"generalParameters/advancedParams/security","macros":"variables","mail2fActivation":"generalParameters/secondFactors/mail2f","mail2fAuthnLevel":"generalParameters/secondFactors/mail2f","mail2fBody":"generalParameters/secondFactors/mail2f","mail2fCodeRegex":"generalParameters/secondFactors/mail2f","mail2fLogo":"generalParameters/secondFactors/mail2f","mail2fSubject":"generalParameters/secondFactors/mail2f","mail2fTimeout":"generalParameters/secondFactors/mail2f","mailBody":"generalParameters/plugins/passwordManagement/mailContent","mailCharset":"generalParameters/advancedParams/SMTP/mailHeaders","mailConfirmBody":"generalParameters/plugins/passwordManagement/mailContent","mailConfirmSubject":"generalParameters/plugins/passwordManagement/mailContent","mailFrom":"generalParameters/advancedParams/SMTP/mailHeaders","mailLDAPFilter":"generalParameters/authParams/ldapParams/ldapFilters","mailOnPasswordChange":"generalParameters/portalParams/portalCustomization/passwordManagement","mailReplyTo":"generalParameters/advancedParams/SMTP/mailHeaders","mailSessionKey":"generalParameters/advancedParams/SMTP","mailSubject":"generalParameters/plugins/passwordManagement/mailContent","mailTimeout":"generalParameters/plugins/passwordManagement/mailOther","mailUrl":"generalParameters/plugins/passwordManagement/mailOther","maintenance":"generalParameters/advancedParams/redirection","managerDn":"generalParameters/authParams/ldapParams/ldapConnection","managerPassword":"generalParameters/authParams/ldapParams/ldapConnection","multiValuesSeparator":"generalParameters/advancedParams","nginxCustomHandlers":"generalParameters/advancedParams","noAjaxHook":"generalParameters/advancedParams/portalRedirection","notification":"generalParameters/plugins/notifications","notificationServer":"generalParameters/plugins/notifications","notificationStorage":"generalParameters/plugins/notifications","notificationStorageOptions":"generalParameters/plugins/notifications","notificationWildcard":"generalParameters/plugins/notifications","notificationXSLTfile":"generalParameters/plugins/notifications","notifyDeleted":"generalParameters/sessionParams/multipleSessions","notifyOther":"generalParameters/sessionParams/multipleSessions","nullAuthnLevel":"generalParameters/authParams/nullParams","oidcAuthnLevel":"generalParameters/authParams/oidcParams","oidcOPMetaDataNodes":"","oidcRPCallbackGetParam":"generalParameters/authParams/oidcParams","oidcRPMetaDataNodes":"","oidcRPStateTimeout":"generalParameters/authParams/oidcParams","oidcServiceAllowAuthorizationCodeFlow":"oidcServiceMetaData/oidcServiceMetaDataSecurity","oidcServiceAllowDynamicRegistration":"oidcServiceMetaData/oidcServiceMetaDataSecurity","oidcServiceAllowHybridFlow":"oidcServiceMetaData/oidcServiceMetaDataSecurity","oidcServiceAllowImplicitFlow":"oidcServiceMetaData/oidcServiceMetaDataSecurity","oidcServiceKeyIdSig":"oidcServiceMetaData/oidcServiceMetaDataSecurity","oidcServiceMetaDataAuthnContext":"oidcServiceMetaData","oidcServiceMetaDataAuthorizeURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataBackChannelURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataCheckSessionURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataEndSessionURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataFrontChannelURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataIssuer":"oidcServiceMetaData","oidcServiceMetaDataJWKSURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataRegistrationURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataTokenURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServiceMetaDataUserInfoURI":"oidcServiceMetaData/oidcServiceMetaDataEndPoints","oidcServicePrivateKeySig":"oidcServiceMetaData/oidcServiceMetaDataSecurity/oidcServiceMetaDataKeys","oidcServicePublicKeySig":"oidcServiceMetaData/oidcServiceMetaDataSecurity/oidcServiceMetaDataKeys","oidcStorage":"oidcServiceMetaData/oidcServiceMetaDataSessions","oidcStorageOptions":"oidcServiceMetaData/oidcServiceMetaDataSessions","oldNotifFormat":"generalParameters/plugins/notifications","openIdAttr":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions","openIdAuthnLevel":"generalParameters/authParams/openidParams","openIdExportedVars":"generalParameters/authParams/openidParams","openIdIDPList":"generalParameters/authParams/openidParams","openIdIssuerSecret":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions","openIdSPList":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions","openIdSecret":"generalParameters/authParams/openidParams","openIdSreg_country":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_dob":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_email":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_fullname":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_gender":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_language":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_nickname":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_postcode":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","openIdSreg_timezone":"generalParameters/issuerParams/issuerDBOpenID/issuerDBOpenIDOptions/openIdSreg","pamAuthnLevel":"generalParameters/authParams/pamParams","pamService":"generalParameters/authParams/pamParams","passwordDB":"generalParameters/authParams","passwordResetAllowedRetries":"generalParameters/portalParams/portalCustomization/portalButtons","persistentStorage":"generalParameters/sessionParams/persistentSessions","persistentStorageOptions":"generalParameters/sessionParams/persistentSessions","port":"generalParameters/advancedParams/redirection","portal":"generalParameters/portalParams","portalAntiFrame":"generalParameters/portalParams/portalCustomization/portalOther","portalCheckLogins":"generalParameters/portalParams/portalCustomization/portalButtons","portalDisplayAppslist":"generalParameters/portalParams/portalMenu/portalModules","portalDisplayChangePassword":"generalParameters/portalParams/portalMenu/portalModules","portalDisplayLoginHistory":"generalParameters/portalParams/portalMenu/portalModules","portalDisplayLogout":"generalParameters/portalParams/portalMenu/portalModules","portalDisplayOidcConsents":"generalParameters/portalParams/portalMenu/portalModules","portalDisplayRegister":"generalParameters/portalParams/portalCustomization/portalButtons","portalDisplayResetPassword":"generalParameters/portalParams/portalCustomization/portalButtons","portalErrorOnExpiredSession":"generalParameters/portalParams/portalCustomization/portalOther","portalErrorOnMailNotFound":"generalParameters/portalParams/portalCustomization/portalOther","portalForceAuthn":"generalParameters/advancedParams/security","portalForceAuthnInterval":"generalParameters/advancedParams/security","portalMainLogo":"generalParameters/portalParams/portalCustomization","portalOpenLinkInNewWindow":"generalParameters/portalParams/portalCustomization/portalOther","portalPingInterval":"generalParameters/portalParams/portalCustomization/portalOther","portalRequireOldPassword":"generalParameters/portalParams/portalCustomization/passwordManagement","portalSkin":"generalParameters/portalParams/portalCustomization","portalSkinBackground":"generalParameters/portalParams/portalCustomization","portalSkinRules":"generalParameters/portalParams/portalCustomization","portalStatus":"generalParameters/plugins","portalUserAttr":"generalParameters/portalParams/portalCustomization/portalOther","proxyAuthService":"generalParameters/authParams/proxyParams","proxyAuthnLevel":"generalParameters/authParams/proxyParams","proxySessionService":"generalParameters/authParams/proxyParams","proxyUseSoap":"generalParameters/authParams/proxyParams","radiusAuthnLevel":"generalParameters/authParams/radiusParams","radiusSecret":"generalParameters/authParams/radiusParams","radiusServer":"generalParameters/authParams/radiusParams","randomPasswordRegexp":"generalParameters/plugins/passwordManagement/mailOther","redirectFormMethod":"generalParameters/advancedParams/forms","registerConfirmSubject":"generalParameters/plugins/register","registerDB":"generalParameters/authParams","registerDoneSubject":"generalParameters/plugins/register","registerTimeout":"generalParameters/plugins/register","registerUrl":"generalParameters/plugins/register","reloadTimeout":"generalParameters/reloadParams","reloadUrls":"generalParameters/reloadParams","remoteCookieName":"generalParameters/authParams/remoteParams","remoteGlobalStorage":"generalParameters/authParams/remoteParams","remoteGlobalStorageOptions":"generalParameters/authParams/remoteParams","remotePortal":"generalParameters/authParams/remoteParams","requireToken":"generalParameters/advancedParams/security","rest2fActivation":"generalParameters/secondFactors/rest2f","rest2fAuthnLevel":"generalParameters/secondFactors/rest2f","rest2fInitArgs":"generalParameters/secondFactors/rest2f","rest2fInitUrl":"generalParameters/secondFactors/rest2f","rest2fLogo":"generalParameters/secondFactors/rest2f","rest2fVerifyArgs":"generalParameters/secondFactors/rest2f","rest2fVerifyUrl":"generalParameters/secondFactors/rest2f","restAuthUrl":"generalParameters/authParams/restParams","restConfigServer":"generalParameters/plugins/portalServers","restPwdConfirmUrl":"generalParameters/authParams/restParams","restPwdModifyUrl":"generalParameters/authParams/restParams","restSessionServer":"generalParameters/plugins/portalServers","restUserDBUrl":"generalParameters/authParams/restParams","samlAttributeAuthorityDescriptorAttributeServiceSOAP":"samlServiceMetaData/samlAttributeAuthorityDescriptor/samlAttributeAuthorityDescriptorAttributeService","samlAuthnContextMapKerberos":"samlServiceMetaData/samlAuthnContextMap","samlAuthnContextMapPassword":"samlServiceMetaData/samlAuthnContextMap","samlAuthnContextMapPasswordProtectedTransport":"samlServiceMetaData/samlAuthnContextMap","samlAuthnContextMapTLSClient":"samlServiceMetaData/samlAuthnContextMap","samlCommonDomainCookieActivation":"samlServiceMetaData/samlAdvanced/samlCommonDomainCookie","samlCommonDomainCookieDomain":"samlServiceMetaData/samlAdvanced/samlCommonDomainCookie","samlCommonDomainCookieReader":"samlServiceMetaData/samlAdvanced/samlCommonDomainCookie","samlCommonDomainCookieWriter":"samlServiceMetaData/samlAdvanced/samlCommonDomainCookie","samlDiscoveryProtocolActivation":"samlServiceMetaData/samlAdvanced/samlDiscoveryProtocol","samlDiscoveryProtocolIsPassive":"samlServiceMetaData/samlAdvanced/samlDiscoveryProtocol","samlDiscoveryProtocolPolicy":"samlServiceMetaData/samlAdvanced/samlDiscoveryProtocol","samlDiscoveryProtocolURL":"samlServiceMetaData/samlAdvanced/samlDiscoveryProtocol","samlEntityID":"samlServiceMetaData","samlIDPMetaDataNodes":"","samlIDPSSODescriptorArtifactResolutionServiceArtifact":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorArtifactResolutionService","samlIDPSSODescriptorSingleLogoutServiceHTTPPost":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorSingleLogoutService","samlIDPSSODescriptorSingleLogoutServiceHTTPRedirect":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorSingleLogoutService","samlIDPSSODescriptorSingleLogoutServiceSOAP":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorSingleLogoutService","samlIDPSSODescriptorSingleSignOnServiceHTTPArtifact":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorSingleSignOnService","samlIDPSSODescriptorSingleSignOnServiceHTTPPost":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorSingleSignOnService","samlIDPSSODescriptorSingleSignOnServiceHTTPRedirect":"samlServiceMetaData/samlIDPSSODescriptor/samlIDPSSODescriptorSingleSignOnService","samlIDPSSODescriptorWantAuthnRequestsSigned":"samlServiceMetaData/samlIDPSSODescriptor","samlIdPResolveCookie":"samlServiceMetaData/samlAdvanced","samlMetadataForceUTF8":"samlServiceMetaData/samlAdvanced","samlNameIDFormatMapEmail":"samlServiceMetaData/samlNameIDFormatMap","samlNameIDFormatMapKerberos":"samlServiceMetaData/samlNameIDFormatMap","samlNameIDFormatMapWindows":"samlServiceMetaData/samlNameIDFormatMap","samlNameIDFormatMapX509":"samlServiceMetaData/samlNameIDFormatMap","samlOrganizationDisplayName":"samlServiceMetaData/samlOrganization","samlOrganizationName":"samlServiceMetaData/samlOrganization","samlOrganizationURL":"samlServiceMetaData/samlOrganization","samlRelayStateTimeout":"samlServiceMetaData/samlAdvanced","samlSPMetaDataNodes":"","samlSPSSODescriptorArtifactResolutionServiceArtifact":"samlServiceMetaData/samlSPSSODescriptor/samlSPSSODescriptorArtifactResolutionService","samlSPSSODescriptorAssertionConsumerServiceHTTPArtifact":"samlServiceMetaData/samlSPSSODescriptor/samlSPSSODescriptorAssertionConsumerService","samlSPSSODescriptorAssertionConsumerServiceHTTPPost":"samlServiceMetaData/samlSPSSODescriptor/samlSPSSODescriptorAssertionConsumerService","samlSPSSODescriptorAuthnRequestsSigned":"samlServiceMetaData/samlSPSSODescriptor","samlSPSSODescriptorSingleLogoutServiceHTTPPost":"samlServiceMetaData/samlSPSSODescriptor/samlSPSSODescriptorSingleLogoutService","samlSPSSODescriptorSingleLogoutServiceHTTPRedirect":"samlServiceMetaData/samlSPSSODescriptor/samlSPSSODescriptorSingleLogoutService","samlSPSSODescriptorSingleLogoutServiceSOAP":"samlServiceMetaData/samlSPSSODescriptor/samlSPSSODescriptorSingleLogoutService","samlSPSSODescriptorWantAssertionsSigned":"samlServiceMetaData/samlSPSSODescriptor","samlServicePrivateKeyEnc":"samlServiceMetaData/samlServiceSecurity/samlServiceSecurityEnc","samlServicePrivateKeyEncPwd":"samlServiceMetaData/samlServiceSecurity/samlServiceSecurityEnc","samlServicePrivateKeySig":"samlServiceMetaData/samlServiceSecurity/samlServiceSecuritySig","samlServicePrivateKeySigPwd":"samlServiceMetaData/samlServiceSecurity/samlServiceSecuritySig","samlServicePublicKeyEnc":"samlServiceMetaData/samlServiceSecurity/samlServiceSecurityEnc","samlServicePublicKeySig":"samlServiceMetaData/samlServiceSecurity/samlServiceSecuritySig","samlServiceSignatureMethod":"samlServiceMetaData/samlServiceSecurity","samlServiceUseCertificateInResponse":"samlServiceMetaData/samlServiceSecurity","samlStorage":"samlServiceMetaData/samlAdvanced","samlStorageOptions":"samlServiceMetaData/samlAdvanced","samlUseQueryStringSpecific":"samlServiceMetaData/samlAdvanced","securedCookie":"generalParameters/cookieParams","sessionDataToRemember":"generalParameters/plugins/loginHistory","sfRequired":"generalParameters/secondFactors","showLanguages":"generalParameters/portalParams/portalCustomization","singleIP":"generalParameters/sessionParams/multipleSessions","singleSession":"generalParameters/sessionParams/multipleSessions","singleSessionUserByIP":"generalParameters/sessionParams/multipleSessions","singleUserByIP":"generalParameters/sessionParams/multipleSessions","skipRenewConfirmation":"generalParameters/advancedParams/portalRedirection","slaveAuthnLevel":"generalParameters/authParams/slaveParams","slaveExportedVars":"generalParameters/authParams/slaveParams","slaveHeaderContent":"generalParameters/authParams/slaveParams","slaveHeaderName":"generalParameters/authParams/slaveParams","slaveMasterIP":"generalParameters/authParams/slaveParams","slaveUserHeader":"generalParameters/authParams/slaveParams","soapConfigServer":"generalParameters/plugins/portalServers","soapSessionServer":"generalParameters/plugins/portalServers","sslByAjax":"generalParameters/authParams/sslParams","sslHost":"generalParameters/authParams/sslParams","stayConnected":"generalParameters/plugins","storePassword":"generalParameters/sessionParams","successLoginNumber":"generalParameters/plugins/loginHistory","timeout":"generalParameters/sessionParams","timeoutActivity":"generalParameters/sessionParams","timeoutActivityInterval":"generalParameters/sessionParams","tokenUseGlobalStorage":"generalParameters/advancedParams/security","totp2fActivation":"generalParameters/secondFactors/totp","totp2fAuthnLevel":"generalParameters/secondFactors/totp","totp2fDigits":"generalParameters/secondFactors/totp","totp2fDisplayExistingSecret":"generalParameters/secondFactors/totp","totp2fInterval":"generalParameters/secondFactors/totp","totp2fIssuer":"generalParameters/secondFactors/totp","totp2fRange":"generalParameters/secondFactors/totp","totp2fSelfRegistration":"generalParameters/secondFactors/totp","totp2fUserCanChangeKey":"generalParameters/secondFactors/totp","totp2fUserCanRemoveKey":"generalParameters/secondFactors/totp","trustedDomains":"generalParameters/advancedParams/security","twitterAppName":"generalParameters/authParams/twitterParams","twitterAuthnLevel":"generalParameters/authParams/twitterParams","twitterKey":"generalParameters/authParams/twitterParams","twitterSecret":"generalParameters/authParams/twitterParams","twitterUserField":"generalParameters/authParams/twitterParams","u2fActivation":"generalParameters/secondFactors/u2f","u2fAuthnLevel":"generalParameters/secondFactors/u2f","u2fSelfRegistration":"generalParameters/secondFactors/u2f","u2fUserCanRemoveKey":"generalParameters/secondFactors/u2f","upgradeSession":"generalParameters/plugins","useRedirectOnError":"generalParameters/advancedParams/redirection","useRedirectOnForbidden":"generalParameters/advancedParams/redirection","useSafeJail":"generalParameters/advancedParams/security","userControl":"generalParameters/advancedParams/security","userDB":"generalParameters/authParams","userPivot":"generalParameters/authParams/dbiParams/dbiSchema","utotp2fActivation":"generalParameters/secondFactors/utotp2f","utotp2fAuthnLevel":"generalParameters/secondFactors/utotp2f","virtualHosts":"","webIDAuthnLevel":"generalParameters/authParams/webidParams","webIDExportedVars":"generalParameters/authParams/webidParams","webIDWhitelist":"generalParameters/authParams/webidParams","whatToTrace":"generalParameters/logParams","wsdlServer":"generalParameters/plugins/portalServers","yubikey2fActivation":"generalParameters/secondFactors/yubikey2f","yubikey2fAuthnLevel":"generalParameters/secondFactors/yubikey2f","yubikey2fClientID":"generalParameters/secondFactors/yubikey2f","yubikey2fNonce":"generalParameters/secondFactors/yubikey2f","yubikey2fPublicIDSize":"generalParameters/secondFactors/yubikey2f","yubikey2fSecretKey":"generalParameters/secondFactors/yubikey2f","yubikey2fSelfRegistration":"generalParameters/secondFactors/yubikey2f","yubikey2fUrl":"generalParameters/secondFactors/yubikey2f","yubikey2fUserCanRemoveKey":"generalParameters/secondFactors/yubikey2f"}
\ No newline at end of file
diff -pruN 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/struct.json 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/struct.json
--- 2.0.1+ds-2/lemonldap-ng-manager/site/htdocs/static/struct.json	2018-12-17 09:02:43.000000000 +0000
+++ 2.0.2+ds-1/lemonldap-ng-manager/site/htdocs/static/struct.json	2019-02-08 10:14:42.000000000 +0000
@@ -1 +1 @@
-[{"_nodes":[{"_nodes":[{"default":"http://auth.example.com/","id":"portal","title":"portal"},{"_nodes":[{"_nodes":[{"default":1,"id":"portalDisplayLogout","title":"portalDisplayLogout","type":"boolOrExpr"},{"default":"$_auth =~ /^(LDAP|DBI|Demo)$/","id":"portalDisplayChangePassword","title":"portalDisplayChangePassword","type":"boolOrExpr"},{"default":1,"id":"portalDisplayAppslist","title":"portalDisplayAppslist","type":"boolOrExpr"},{"default":1,"id":"portalDisplayLoginHistory","title":"portalDisplayLoginHistory","type":"boolOrExpr"},{"default":"$_oidcConnectedRP","id":"portalDisplayOidcConsents","title":"portalDisplayOidcConsents","type":"boolOrExpr"}],"id":"portalModules","title":"portalModules","type":"simpleInputContainer"},{"cnodes":"applicationList","default":[{"data":{"catname":"Default category","type":"category"},"id":"applicationList/default","title":"default","type":"catAndAppList"}],"help":"portalmenu.html#categories_and_applications","id":"applicationList","title":"applicationList","type":"catAndAppList"}],"help":"portalmenu.html","id":"portalMenu","title":"portalMenu"},{"_nodes":[{"default":"common/logos/logo_llng_400px.png","id":"portalMainLogo","title":"portalMainLogo"},{"default":1,"id":"showLanguages","title":"showLanguages","type":"bool"},{"default":"bootstrap","id":"portalSkin","select":[{"k":"bootstrap","v":"Bootstrap"}],"title":"portalSkin","type":"portalskin"},{"id":"portalSkinBackground","select":[{"k":"","v":"None"},{"k":"1280px-Anse_Source_d'Argent_2-La_Digue.jpg","v":"Anse"},{"k":"1280px-Autumn-clear-water-waterfall-landscape_-_Virginia_-_ForestWander.jpg","v":"Waterfall"},{"k":"1280px-BrockenSnowedTrees.jpg","v":"Snowed Trees"},{"k":"1280px-Cedar_Breaks_National_Monument_partially.jpg","v":"National Monument"},{"k":"1280px-Parry_Peak_from_Winter_Park.jpg","v":"Winter"},{"k":"Aletschgletscher_mit_Pinus_cembra1.jpg","v":"Pinus"}],"title":"portalSkinBackground","type":"portalskinbackground"},{"cnodes":"portalSkinRules","help":"portalcustom.html","id":"portalSkinRules","title":"portalSkinRules","type":"keyTextContainer"},{"_nodes":[{"default":1,"id":"portalCheckLogins","title":"portalCheckLogins","type":"bool"},{"default":0,"id":"portalDisplayResetPassword","title":"portalDisplayResetPassword","type":"bool"},{"default":3,"id":"passwordResetAllowedRetries","title":"passwordResetAllowedRetries","type":"int"},{"default":1,"id":"portalDisplayRegister","title":"portalDisplayRegister","type":"bool"}],"help":"portalcustom.html#buttons","id":"portalButtons","title":"portalButtons","type":"simpleInputContainer"},{"_nodes":[{"default":1,"id":"portalRequireOldPassword","title":"portalRequireOldPassword","type":"bool"},{"default":0,"id":"hideOldPassword","title":"hideOldPassword","type":"bool"},{"default":0,"id":"mailOnPasswordChange","title":"mailOnPasswordChange","type":"bool"}],"help":"portalcustom.html#password_management","id":"passwordManagement","title":"passwordManagement","type":"simpleInputContainer"},{"_nodes":[{"default":"_user","id":"portalUserAttr","title":"portalUserAttr"},{"default":0,"id":"portalOpenLinkInNewWindow","title":"portalOpenLinkInNewWindow","type":"bool"},{"default":1,"id":"portalAntiFrame","title":"portalAntiFrame","type":"bool"},{"default":60000,"id":"portalPingInterval","title":"portalPingInterval","type":"int"},{"default":1,"id":"portalErrorOnExpiredSession","title":"portalErrorOnExpiredSession","type":"bool"},{"default":0,"id":"portalErrorOnMailNotFound","title":"portalErrorOnMailNotFound","type":"bool"}],"help":"portalcustom.html#other_parameters","id":"portalOther","title":"portalOther","type":"simpleInputContainer"}],"help":"portalcustom.html","id":"portalCustomization","title":"portalCustomization"},{"_nodes":[{"default":0,"id":"captcha_login_enabled","title":"captcha_login_enabled","type":"bool"},{"default":1,"id":"captcha_mail_enabled","title":"captcha_mail_enabled","type":"bool"},{"default":1,"id":"captcha_register_enabled","title":"captcha_register_enabled","type":"bool"},{"default":6,"id":"captcha_size","title":"captcha_size","type":"int"}],"help":"captcha.html","id":"portalCaptcha","title":"portalCaptcha","type":"simpleInputContainer"}],"help":"portal.html","id":"portalParams","title":"portalParams"},{"_nodes":[{"default":"Demo","id":"authentication","select":[{"k":"Apache","v":"Apache"},{"k":"AD","v":"Active Directory"},{"k":"DBI","v":"Database (DBI)"},{"k":"Facebook","v":"Facebook"},{"k":"Google","v":"Google"},{"k":"Kerberos","v":"Kerberos"},{"k":"LDAP","v":"LDAP"},{"k":"LinkedIn","v":"LinkedIn"},{"k":"PAM","v":"PAM"},{"k":"Radius","v":"Radius"},{"k":"REST","v":"REST"},{"k":"SSL","v":"SSL"},{"k":"Twitter","v":"Twitter"},{"k":"WebID","v":"WebID"},{"k":"Demo","v":"Demonstration"},{"k":"Choice","v":"authChoice"},{"k":"Combination","v":"combineMods"},{"k":"CAS","v":"Central Authentication Service (CAS)"},{"k":"OpenID","v":"OpenID"},{"k":"OpenIDConnect","v":"OpenID Connect"},{"k":"SAML","v":"SAML v2"},{"k":"Proxy","v":"Proxy"},{"k":"Remote","v":"Remote"},{"k":"Slave","v":"Slave"},{"k":"Null","v":"None"},{"k":"Custom","v":"customModule"}],"title":"authentication","type":"select"},{"default":"Same","id":"userDB","select":[{"k":"Same","v":"Same"},{"k":"AD","v":"Active Directory"},{"k":"DBI","v":"Database (DBI)"},{"k":"LDAP","v":"LDAP"},{"k":"REST","v":"REST"},{"k":"Null","v":"None"},{"k":"Custom","v":"customModule"}],"title":"userDB","type":"select"},{"default":"Demo","id":"passwordDB","select":[{"k":"AD","v":"Active Directory"},{"k":"Choice","v":"authChoice"},{"k":"DBI","v":"Database (DBI)"},{"k":"Demo","v":"Demonstration"},{"k":"LDAP","v":"LDAP"},{"k":"REST","v":"REST"},{"k":"Null","v":"None"},{"k":"Custom","v":"customModule"}],"title":"passwordDB","type":"select"},{"default":"Null","id":"registerDB","select":[{"k":"AD","v":"Active Directory"},{"k":"Demo","v":"Demonstration"},{"k":"LDAP","v":"LDAP"},{"k":"Null","v":"None"},{"k":"Custom","v":"customModule"}],"title":"registerDB","type":"select"}],"_nodes_cond":[{"_nodes":[{"default":0,"id":"ADPwdMaxAge","title":"ADPwdMaxAge","type":"int"},{"default":0,"id":"ADPwdExpireWarning","title":"ADPwdExpireWarning","type":"int"}],"help":"authad.html","id":"adParams","show":false,"title":"adParams"},{"_nodes":[{"default":"lmAuth","id":"authChoiceParam","title":"authChoiceParam"},{"cnodes":"authChoiceModules","id":"authChoiceModules","select":[[{"k":"Apache","v":"Apache"},{"k":"AD","v":"Active Directory"},{"k":"CAS","v":"Central Authentication Service (CAS)"},{"k":"DBI","v":"Database (DBI)"},{"k":"Demo","v":"Demo"},{"k":"Facebook","v":"Facebook"},{"k":"Google","v":"Google"},{"k":"Kerberos","v":"Kerberos"},{"k":"LDAP","v":"LDAP"},{"k":"LinkedIn","v":"LinkedIn"},{"k":"PAM","v":"PAM"},{"k":"Null","v":"None"},{"k":"OpenID","v":"OpenID"},{"k":"OpenIDConnect","v":"OpenID Connect"},{"k":"Proxy","v":"Proxy"},{"k":"Radius","v":"Radius"},{"k":"REST","v":"REST"},{"k":"Remote","v":"Remote"},{"k":"SAML","v":"SAML v2"},{"k":"Slave","v":"Slave"},{"k":"SSL","v":"SSL"},{"k":"Twitter","v":"Twitter"},{"k":"WebID","v":"WebID"},{"k":"Custom","v":"customModule"}],[{"k":"AD","v":"Active Directory"},{"k":"CAS","v":"Central Authentication Service (CAS)"},{"k":"DBI","v":"Database (DBI)"},{"k":"Demo","v":"Demo"},{"k":"Facebook","v":"Facebook"},{"k":"Google","v":"Google"},{"k":"LDAP","v":"LDAP"},{"k":"Null","v":"None"},{"k":"OpenID","v":"OpenID"},{"k":"OpenIDConnect","v":"OpenID Connect"},{"k":"Proxy","v":"Proxy"},{"k":"REST","v":"REST"},{"k":"Remote","v":"Remote"},{"k":"SAML","v":"SAML v2"},{"k":"Slave","v":"Slave"},{"k":"WebID","v":"WebID"},{"k":"Custom","v":"customModule"}],[{"k":"AD","v":"Active Directory"},{"k":"DBI","v":"Database (DBI)"},{"k":"Demo","v":"Demo"},{"k":"LDAP","v":"LDAP"},{"k":"REST","v":"REST"},{"k":"Null","v":"None"},{"k":"Custom","v":"customModule"}]],"title":"authChoiceModules","type":"authChoiceContainer"}],"help":"authchoice.html","id":"choiceParams","show":false,"title":"choiceParams"},{"_nodes":[{"default":4,"id":"apacheAuthnLevel","title":"apacheAuthnLevel","type":"int"}],"help":"authapache.html","id":"apacheParams","show":false,"title":"apacheParams","type":"simpleInputContainer"},{"_nodes":[{"default":1,"id":"casAuthnLevel","title":"casAuthnLevel","type":"int"}],"help":"authcas.html","id":"casParams","show":false,"title":"casParams","type":"simpleInputContainer"},{"_nodes":[{"default":2,"id":"dbiAuthnLevel","title":"dbiAuthnLevel","type":"int"},{"cnodes":"dbiExportedVars","default":[],"id":"dbiExportedVars","title":"dbiExportedVars","type":"keyTextContainer"},{"_nodes":[{"_nodes":[{"id":"dbiAuthChain","title":"dbiAuthChain"},{"id":"dbiAuthUser","title":"dbiAuthUser"},{"id":"dbiAuthPassword","title":"dbiAuthPassword","type":"password"}],"id":"dbiConnectionAuth","title":"dbiConnectionAuth","type":"simpleInputContainer"},{"_nodes":[{"id":"dbiUserChain","title":"dbiUserChain"},{"id":"dbiUserUser","title":"dbiUserUser"},{"id":"dbiUserPassword","title":"dbiUserPassword","type":"password"}],"id":"dbiConnectionUser","title":"dbiConnectionUser","type":"simpleInputContainer"}],"help":"authdbi.html#connection","id":"dbiConnection","title":"dbiConnection"},{"_nodes":[{"id":"dbiAuthTable","title":"dbiAuthTable"},{"id":"dbiUserTable","title":"dbiUserTable"},{"id":"dbiAuthLoginCol","title":"dbiAuthLoginCol"},{"id":"dbiAuthPasswordCol","title":"dbiAuthPasswordCol"},{"id":"dbiPasswordMailCol","title":"dbiPasswordMailCol"},{"id":"userPivot","title":"userPivot"}],"help":"authdbi.html#schema","id":"dbiSchema","title":"dbiSchema","type":"simpleInputContainer"},{"_nodes":[{"help":"authdbi.html#password","id":"dbiAuthPasswordHash","title":"dbiAuthPasswordHash"},{"_nodes":[{"help":"authdbi.html#password","id":"dbiDynamicHashEnabled","title":"dbiDynamicHashEnabled","type":"bool"},{"help":"authdbi.html#password","id":"dbiDynamicHashValidSchemes","title":"dbiDynamicHashValidSchemes"},{"help":"authdbi.html#password","id":"dbiDynamicHashValidSaltedSchemes","title":"dbiDynamicHashValidSaltedSchemes"},{"help":"authdbi.html#password","id":"dbiDynamicHashNewPasswordScheme","title":"dbiDynamicHashNewPasswordScheme"}],"help":"authdbi.html#password","id":"dbiDynamicHash","title":"dbiDynamicHash","type":"simpleInputContainer"}],"help":"authdbi.html#password","id":"dbiPassword","title":"dbiPassword"}],"help":"authdbi.html","id":"dbiParams","show":false,"title":"dbiParams"},{"_nodes":[{"cnodes":"demoExportedVars","default":[{"data":"cn","id":"demoExportedVars/cn","title":"cn","type":"keyText"},{"data":"mail","id":"demoExportedVars/mail","title":"mail","type":"keyText"},{"data":"uid","id":"demoExportedVars/uid","title":"uid","type":"keyText"}],"id":"demoExportedVars","title":"demoExportedVars","type":"keyTextContainer"}],"help":"authdemo.html","id":"demoParams","show":false,"title":"demoParams"},{"_nodes":[{"default":1,"id":"facebookAuthnLevel","title":"facebookAuthnLevel","type":"int"},{"cnodes":"facebookExportedVars","default":[],"id":"facebookExportedVars","title":"facebookExportedVars","type":"keyTextContainer"},{"id":"facebookAppId","title":"facebookAppId"},{"id":"facebookAppSecret","title":"facebookAppSecret"},{"default":"id","id":"facebookUserField","title":"facebookUserField"}],"help":"authfacebook.html","id":"facebookParams","show":false,"title":"facebookParams"},{"_nodes":[{"id":"krbKeytab","title":"krbKeytab"},{"default":0,"id":"krbByJs","title":"krbByJs","type":"bool"},{"default":3,"id":"krbAuthnLevel","title":"krbAuthnLevel","type":"int"},{"default":1,"id":"krbRemoveDomain","title":"krbRemoveDomain","type":"bool"}],"help":"authkerberos.html","id":"kerberosParams","show":false,"title":"kerberosParams"},{"_nodes":[{"default":2,"id":"ldapAuthnLevel","title":"ldapAuthnLevel","type":"int"},{"cnodes":"ldapExportedVars","default":[{"data":"cn","id":"ldapExportedVars/cn","title":"cn","type":"keyText"},{"data":"mail","id":"ldapExportedVars/mail","title":"mail","type":"keyText"},{"data":"uid","id":"ldapExportedVars/uid","title":"uid","type":"keyText"}],"id":"ldapExportedVars","title":"ldapExportedVars","type":"keyTextContainer"},{"_nodes":[{"default":"ldap://localhost","id":"ldapServer","title":"ldapServer"},{"default":389,"id":"ldapPort","title":"ldapPort","type":"int"},{"default":"dc=example,dc=com","id":"ldapBase","title":"ldapBase"},{"default":"","id":"managerDn","title":"managerDn"},{"default":"","id":"managerPassword","title":"managerPassword","type":"password"},{"default":120,"id":"ldapTimeout","title":"ldapTimeout","type":"int"},{"default":3,"id":"ldapVersion","title":"ldapVersion","type":"int"},{"id":"ldapRaw","title":"ldapRaw"}],"help":"authldap.html#connection","id":"ldapConnection","title":"ldapConnection","type":"simpleInputContainer"},{"_nodes":[{"id":"LDAPFilter","title":"LDAPFilter"},{"id":"AuthLDAPFilter","title":"AuthLDAPFilter"},{"id":"mailLDAPFilter","title":"mailLDAPFilter"},{"default":"find","id":"ldapSearchDeref","select":[{"k":"never","v":"never"},{"k":"search","v":"search"},{"k":"find","v":"find"},{"k":"always","v":"always"}],"title":"ldapSearchDeref","type":"select"}],"help":"authldap.html#filters","id":"ldapFilters","title":"ldapFilters","type":"simpleInputContainer"},{"_nodes":[{"id":"ldapGroupBase","title":"ldapGroupBase"},{"default":"groupOfNames","id":"ldapGroupObjectClass","title":"ldapGroupObjectClass"},{"default":"member","id":"ldapGroupAttributeName","title":"ldapGroupAttributeName"},{"default":"dn","id":"ldapGroupAttributeNameUser","title":"ldapGroupAttributeNameUser"},{"default":"cn","id":"ldapGroupAttributeNameSearch","title":"ldapGroupAttributeNameSearch"},{"default":0,"id":"ldapGroupRecursive","title":"ldapGroupRecursive","type":"bool"},{"default":"dn","id":"ldapGroupAttributeNameGroup","title":"ldapGroupAttributeNameGroup"}],"help":"authldap.html#groups","id":"ldapGroups","title":"ldapGroups","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"ldapPpolicyControl","title":"ldapPpolicyControl","type":"bool"},{"default":0,"id":"ldapSetPassword","title":"ldapSetPassword","type":"bool"},{"default":0,"id":"ldapChangePasswordAsUser","title":"ldapChangePasswordAsUser","type":"bool"},{"default":"utf-8","id":"ldapPwdEnc","title":"ldapPwdEnc"},{"default":1,"id":"ldapUsePasswordResetAttribute","title":"ldapUsePasswordResetAttribute","type":"bool"},{"default":"pwdReset","id":"ldapPasswordResetAttribute","title":"ldapPasswordResetAttribute"},{"default":"TRUE","id":"ldapPasswordResetAttributeValue","title":"ldapPasswordResetAttributeValue"},{"default":0,"id":"ldapAllowResetExpiredPassword","title":"ldapAllowResetExpiredPassword","type":"bool"}],"help":"authldap.html#password","id":"ldapPassword","title":"ldapPassword","type":"simpleInputContainer"}],"help":"authldap.html","id":"ldapParams","show":false,"title":"ldapParams"},{"_nodes":[{"default":1,"id":"linkedInAuthnLevel","title":"linkedInAuthnLevel","type":"int"},{"id":"linkedInClientID","title":"linkedInClientID"},{"id":"linkedInClientSecret","title":"linkedInClientSecret","type":"password"},{"default":"id,first-name,last-name,email-address","id":"linkedInFields","title":"linkedInFields"},{"default":"emailAddress","id":"linkedInUserField","title":"linkedInUserField"},{"default":"r_basicprofile r_emailaddress","id":"linkedInScope","title":"linkedInScope"}],"help":"authlinkedin.html","id":"linkedinParams","show":false,"title":"linkedinParams","type":"simpleInputContainer"},{"_nodes":[{"id":"combination","title":"combination"},{"cnodes":"combModules","id":"combModules","select":[{"k":"Apache","v":"Apache"},{"k":"AD","v":"Active Directory"},{"k":"DBI","v":"Database (DBI)"},{"k":"Facebook","v":"Facebook"},{"k":"Google","v":"Google"},{"k":"Kerberos","v":"Kerberos"},{"k":"LDAP","v":"LDAP"},{"k":"PAM","v":"PAM"},{"k":"Radius","v":"Radius"},{"k":"REST","v":"REST"},{"k":"SSL","v":"SSL"},{"k":"Twitter","v":"Twitter"},{"k":"WebID","v":"WebID"},{"k":"Demo","v":"Demonstration"},{"k":"CAS","v":"Central Authentication Service (CAS)"},{"k":"OpenID","v":"OpenID"},{"k":"OpenIDConnect","v":"OpenID Connect"},{"k":"SAML","v":"SAML v2"},{"k":"Proxy","v":"Proxy"},{"k":"Remote","v":"Remote"},{"k":"Slave","v":"Slave"},{"k":"Null","v":"None"},{"k":"Custom","v":"customModule"}],"title":"combModules","type":"cmbModuleContainer"}],"help":"authcombination.html","id":"combinationParams","show":false,"title":"combinationParams"},{"_nodes":[{"default":0,"id":"nullAuthnLevel","title":"nullAuthnLevel","type":"int"}],"help":"authnull.html","id":"nullParams","show":false,"title":"nullParams","type":"simpleInputContainer"},{"_nodes":[{"default":1,"id":"openIdAuthnLevel","title":"openIdAuthnLevel","type":"int"},{"cnodes":"openIdExportedVars","default":[],"id":"openIdExportedVars","title":"openIdExportedVars","type":"keyTextContainer"},{"id":"openIdSecret","title":"openIdSecret"},{"default":"0;","id":"openIdIDPList","title":"openIdIDPList","type":"blackWhiteList"}],"help":"authopenid.html","id":"openidParams","show":false,"title":"openidParams"},{"_nodes":[{"default":1,"id":"oidcAuthnLevel","title":"oidcAuthnLevel","type":"int"},{"default":"openidconnectcallback","id":"oidcRPCallbackGetParam","title":"oidcRPCallbackGetParam"},{"default":600,"id":"oidcRPStateTimeout","title":"oidcRPStateTimeout","type":"int"}],"help":"authopenidconnect.html","id":"oidcParams","show":false,"title":"oidcParams","type":"simpleInputContainer"},{"_nodes":[{"id":"proxyAuthService","title":"proxyAuthService"},{"id":"proxySessionService","title":"proxySessionService"},{"id":"remoteCookieName","title":"remoteCookieName"},{"default":2,"id":"proxyAuthnLevel","title":"proxyAuthnLevel","type":"int"},{"default":0,"id":"proxyUseSoap","title":"proxyUseSoap","type":"bool"}],"help":"authproxy.html","id":"proxyParams","show":false,"title":"proxyParams","type":"simpleInputContainer"},{"_nodes":[{"default":"login","id":"pamService","title":"pamService"},{"default":2,"id":"pamAuthnLevel","title":"pamAuthnLevel","type":"int"}],"help":"authpam.html","id":"pamParams","show":false,"title":"pamParams","type":"simpleInputContainer"},{"_nodes":[{"default":3,"id":"radiusAuthnLevel","title":"radiusAuthnLevel","type":"int"},{"id":"radiusSecret","title":"radiusSecret"},{"id":"radiusServer","title":"radiusServer"}],"help":"authradius.html","id":"radiusParams","show":false,"title":"radiusParams","type":"simpleInputContainer"},{"_nodes":[{"id":"restAuthUrl","title":"restAuthUrl"},{"id":"restUserDBUrl","title":"restUserDBUrl"},{"id":"restPwdConfirmUrl","title":"restPwdConfirmUrl"},{"id":"restPwdModifyUrl","title":"restPwdModifyUrl"}],"help":"authrest.html","id":"restParams","show":false,"title":"restParams","type":"simpleInputContainer"},{"_nodes":[{"id":"remotePortal","title":"remotePortal"},{"id":"remoteCookieName","title":"remoteCookieName"},{"default":"Lemonldap::NG::Common::Apache::Session::SOAP","id":"remoteGlobalStorage","title":"remoteGlobalStorage"},{"cnodes":"remoteGlobalStorageOptions","default":[{"data":"http://auth.example.com/Lemonldap/NG/Common/PSGI/SOAPService","id":"remoteGlobalStorageOptions/ns","title":"ns","type":"keyText"},{"data":"http://auth.example.com/sessions","id":"remoteGlobalStorageOptions/proxy","title":"proxy","type":"keyText"}],"id":"remoteGlobalStorageOptions","title":"remoteGlobalStorageOptions","type":"keyTextContainer"}],"help":"authremote.html","id":"remoteParams","show":false,"title":"remoteParams"},{"_nodes":[{"default":2,"id":"slaveAuthnLevel","title":"slaveAuthnLevel","type":"int"},{"cnodes":"slaveExportedVars","default":[],"id":"slaveExportedVars","title":"slaveExportedVars","type":"keyTextContainer"},{"id":"slaveUserHeader","title":"slaveUserHeader"},{"id":"slaveMasterIP","title":"slaveMasterIP"},{"id":"slaveHeaderName","title":"slaveHeaderName"},{"id":"slaveHeaderContent","title":"slaveHeaderContent"}],"help":"authslave.html","id":"slaveParams","show":false,"title":"slaveParams"},{"_nodes":[{"default":5,"id":"SSLAuthnLevel","title":"SSLAuthnLevel","type":"int"},{"default":"SSL_CLIENT_S_DN_Email","id":"SSLVar","title":"SSLVar"},{"cnodes":"SSLVarIf","default":[],"id":"SSLVarIf","title":"SSLVarIf","type":"keyTextContainer"},{"default":0,"id":"sslByAjax","title":"sslByAjax","type":"bool"},{"id":"sslHost","title":"sslHost"}],"help":"authssl.html","id":"sslParams","show":false,"title":"sslParams"},{"_nodes":[{"default":1,"id":"twitterAuthnLevel","title":"twitterAuthnLevel","type":"int"},{"id":"twitterKey","title":"twitterKey"},{"id":"twitterSecret","title":"twitterSecret"},{"id":"twitterAppName","title":"twitterAppName"},{"default":"screen_name","id":"twitterUserField","title":"twitterUserField"}],"help":"authtwitter.html","id":"twitterParams","show":false,"title":"twitterParams","type":"simpleInputContainer"},{"_nodes":[{"default":1,"id":"webIDAuthnLevel","title":"webIDAuthnLevel","type":"int"},{"cnodes":"webIDExportedVars","default":[],"id":"webIDExportedVars","title":"webIDExportedVars","type":"keyTextContainer"},{"id":"webIDWhitelist","title":"webIDWhitelist"}],"help":"authwebid.html","id":"webidParams","show":false,"title":"webidParams"},{"_nodes":[{"id":"customAuth","title":"customAuth"},{"id":"customUserDB","title":"customUserDB"},{"id":"customPassword","title":"customPassword"},{"id":"customRegister","title":"customRegister"},{"cnodes":"customAddParams","id":"customAddParams","title":"customAddParams","type":"keyTextContainer"}],"help":"authcustom.html","id":"customParams","show":false,"title":"customParams"}],"_nodes_filter":"authParams","help":"start.html#authentication_users_and_password_databases","id":"authParams","title":"authParams","type":"authParams"},{"_nodes":[{"_nodes":[{"default":0,"id":"issuerDBSAMLActivation","title":"issuerDBSAMLActivation","type":"bool"},{"default":"^/saml/","id":"issuerDBSAMLPath","title":"issuerDBSAMLPath"},{"default":1,"id":"issuerDBSAMLRule","title":"issuerDBSAMLRule","type":"boolOrExpr"}],"help":"idpsaml.html","id":"issuerDBSAML","title":"issuerDBSAML","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"issuerDBCASActivation","title":"issuerDBCASActivation","type":"bool"},{"default":"^/cas/","id":"issuerDBCASPath","title":"issuerDBCASPath"},{"default":1,"id":"issuerDBCASRule","title":"issuerDBCASRule","type":"boolOrExpr"}],"help":"idpcas.html","id":"issuerDBCAS","title":"issuerDBCAS","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"issuerDBOpenIDActivation","title":"issuerDBOpenIDActivation","type":"bool"},{"default":"^/openidserver/","id":"issuerDBOpenIDPath","title":"issuerDBOpenIDPath"},{"default":1,"id":"issuerDBOpenIDRule","title":"issuerDBOpenIDRule","type":"boolOrExpr"},{"_nodes":[{"id":"openIdIssuerSecret","title":"openIdIssuerSecret"},{"id":"openIdAttr","title":"openIdAttr"},{"default":"0;","id":"openIdSPList","title":"openIdSPList","type":"blackWhiteList"},{"_nodes":[{"default":"cn","id":"openIdSreg_fullname","title":"openIdSreg_fullname"},{"default":"uid","id":"openIdSreg_nickname","title":"openIdSreg_nickname"},{"id":"openIdSreg_language","title":"openIdSreg_language"},{"id":"openIdSreg_postcode","title":"openIdSreg_postcode"},{"default":"_timezone","id":"openIdSreg_timezone","title":"openIdSreg_timezone"},{"id":"openIdSreg_country","title":"openIdSreg_country"},{"id":"openIdSreg_gender","title":"openIdSreg_gender"},{"default":"mail","id":"openIdSreg_email","title":"openIdSreg_email"},{"id":"openIdSreg_dob","title":"openIdSreg_dob"}],"id":"openIdSreg","title":"openIdSreg","type":"simpleInputContainer"}],"id":"issuerDBOpenIDOptions","title":"issuerDBOpenIDOptions"}],"help":"idpopenid.html","id":"issuerDBOpenID","title":"issuerDBOpenID"},{"_nodes":[{"default":0,"id":"issuerDBOpenIDConnectActivation","title":"issuerDBOpenIDConnectActivation","type":"bool"},{"default":"^/oauth2/","id":"issuerDBOpenIDConnectPath","title":"issuerDBOpenIDConnectPath"},{"default":1,"id":"issuerDBOpenIDConnectRule","title":"issuerDBOpenIDConnectRule","type":"boolOrExpr"}],"help":"idpopenidconnect.html","id":"issuerDBOpenIDConnect","title":"issuerDBOpenIDConnect","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"issuerDBGetActivation","title":"issuerDBGetActivation","type":"bool"},{"default":"^/get/","id":"issuerDBGetPath","title":"issuerDBGetPath"},{"default":1,"id":"issuerDBGetRule","title":"issuerDBGetRule","type":"boolOrExpr"},{"default":[],"id":"issuerDBGetParameters","title":"issuerDBGetParameters","type":"doubleHash"}],"help":"issuerdbget.html","id":"issuerDBGet","title":"issuerDBGet"}],"help":"start.html#identity_provider","id":"issuerParams","title":"issuerParams"},{"_nodes":[{"default":"","id":"trustedProxies","title":"trustedProxies"},{"default":"uid","id":"whatToTrace","title":"whatToTrace"},{"default":"_password","id":"hiddenAttributes","title":"hiddenAttributes"}],"help":"logs.html","id":"logParams","title":"logParams","type":"simpleInputContainer"},{"_nodes":[{"default":"lemonldap","id":"cookieName","title":"cookieName"},{"default":"example.com","id":"domain","title":"domain"},{"default":0,"id":"cda","title":"cda","type":"bool"},{"default":0,"id":"securedCookie","select":[{"k":"0","v":"unsecuredCookie"},{"k":"1","v":"securedCookie"},{"k":"2","v":"doubleCookie"},{"k":"3","v":"doubleCookieForSingleSession"}],"title":"securedCookie","type":"select"},{"default":1,"id":"httpOnly","title":"httpOnly","type":"bool"},{"id":"cookieExpiration","title":"cookieExpiration","type":"int"}],"help":"ssocookie.html","id":"cookieParams","title":"cookieParams","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"storePassword","title":"storePassword","type":"bool"},{"default":72000,"id":"timeout","title":"timeout","type":"int"},{"default":0,"id":"timeoutActivity","title":"timeoutActivity","type":"int"},{"default":60,"id":"timeoutActivityInterval","title":"timeoutActivityInterval","type":"int"},{"cnodes":"grantSessionRules","id":"grantSessionRules","title":"grantSessionRules","type":"grantContainer"},{"_nodes":[{"default":"Apache::Session::File","id":"globalStorage","title":"globalStorage"},{"cnodes":"globalStorageOptions","default":[{"data":"/var/lib/lemonldap-ng/sessions/","id":"globalStorageOptions/Directory","title":"Directory","type":"keyText"},{"data":"/var/lib/lemonldap-ng/sessions/lock/","id":"globalStorageOptions/LockDirectory","title":"LockDirectory","type":"keyText"},{"data":"Lemonldap::NG::Common::Apache::Session::Generate::SHA256","id":"globalStorageOptions/generateModule","title":"generateModule","type":"keyText"}],"id":"globalStorageOptions","title":"globalStorageOptions","type":"keyTextContainer"},{"default":"Cache::FileCache","id":"localSessionStorage","title":"localSessionStorage"},{"cnodes":"localSessionStorageOptions","default":[{"data":3,"id":"localSessionStorageOptions/cache_depth","title":"cache_depth","type":"keyText"},{"data":"/tmp","id":"localSessionStorageOptions/cache_root","title":"cache_root","type":"keyText"},{"data":600,"id":"localSessionStorageOptions/default_expires_in","title":"default_expires_in","type":"keyText"},{"data":"007","id":"localSessionStorageOptions/directory_umask","title":"directory_umask","type":"keyText"},{"data":"lemonldap-ng-sessions","id":"localSessionStorageOptions/namespace","title":"namespace","type":"keyText"}],"id":"localSessionStorageOptions","title":"localSessionStorageOptions","type":"keyTextContainer"}],"help":"start.html#sessions_database","id":"sessionStorage","title":"sessionStorage"},{"_nodes":[{"default":0,"id":"singleSession","title":"singleSession","type":"bool"},{"default":0,"id":"singleIP","title":"singleIP","type":"bool"},{"default":0,"id":"singleUserByIP","title":"singleUserByIP","type":"bool"},{"default":0,"id":"singleSessionUserByIP","title":"singleSessionUserByIP","type":"bool"},{"default":1,"id":"notifyDeleted","title":"notifyDeleted","type":"bool"},{"default":0,"id":"notifyOther","title":"notifyOther","type":"bool"}],"id":"multipleSessions","title":"multipleSessions","type":"simpleInputContainer"},{"_nodes":[{"id":"persistentStorage","title":"persistentStorage"},{"cnodes":"persistentStorageOptions","id":"persistentStorageOptions","title":"persistentStorageOptions","type":"keyTextContainer"}],"id":"persistentSessions","title":"persistentSessions"}],"help":"sessions.html","id":"sessionParams","title":"sessionParams"},{"_nodes":[{"cnodes":"reloadUrls","help":"configlocation.html#configuration_reload","id":"reloadUrls","title":"reloadUrls","type":"keyTextContainer"},{"default":5,"id":"reloadTimeout","title":"reloadTimeout","type":"int"}],"help":"configlocation.html#configuration_reload","id":"reloadParams","title":"reloadParams"},{"_nodes":[{"default":0,"id":"stayConnected","title":"stayConnected","type":"bool"},{"default":0,"help":"status.html","id":"portalStatus","title":"portalStatus","type":"bool"},{"default":1,"id":"upgradeSession","title":"upgradeSession","type":"bool"},{"_nodes":[{"default":0,"id":"wsdlServer","title":"wsdlServer","type":"bool"},{"default":0,"id":"restSessionServer","title":"restSessionServer","type":"bool"},{"default":0,"id":"restConfigServer","title":"restConfigServer","type":"bool"},{"default":0,"help":"soapservices.html","id":"soapSessionServer","title":"soapSessionServer","type":"bool"},{"default":0,"help":"soapservices.html","id":"soapConfigServer","title":"soapConfigServer","type":"bool"},{"id":"exportedAttr","title":"exportedAttr"}],"help":"portalservers.html","id":"portalServers","title":"portalServers","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"loginHistoryEnabled","title":"loginHistoryEnabled","type":"bool"},{"default":5,"id":"successLoginNumber","title":"successLoginNumber","type":"int"},{"default":5,"id":"failedLoginNumber","title":"failedLoginNumber","type":"int"},{"cnodes":"sessionDataToRemember","id":"sessionDataToRemember","title":"sessionDataToRemember","type":"keyTextContainer"}],"help":"loginhistory.html","id":"loginHistory","title":"loginHistory"},{"_nodes":[{"default":0,"id":"notification","title":"notification","type":"bool"},{"default":0,"id":"notificationServer","title":"notificationServer","type":"bool"},{"default":0,"id":"oldNotifFormat","title":"oldNotifFormat","type":"bool"},{"default":"File","id":"notificationStorage","title":"notificationStorage"},{"cnodes":"notificationStorageOptions","default":[{"data":"/var/lib/lemonldap-ng/notifications","id":"notificationStorageOptions/dirName","title":"dirName","type":"keyText"}],"id":"notificationStorageOptions","title":"notificationStorageOptions","type":"keyTextContainer"},{"default":"allusers","id":"notificationWildcard","title":"notificationWildcard"},{"id":"notificationXSLTfile","title":"notificationXSLTfile"}],"help":"notifications.html","id":"notifications","title":"notifications"},{"_nodes":[{"_nodes":[{"default":"","id":"SMTPServer","title":"SMTPServer"},{"id":"SMTPPort","title":"SMTPPort","type":"int"},{"id":"SMTPAuthUser","title":"SMTPAuthUser"},{"id":"SMTPAuthPass","title":"SMTPAuthPass","type":"password"},{"default":"","id":"SMTPTLS","select":[{"k":"","v":"none"},{"k":"starttls","v":"SMTP + STARTTLS"},{"k":"ssl","v":"SMTPS"}],"title":"SMTPTLS","type":"select"},{"cnodes":"SMTPTLSOpts","id":"SMTPTLSOpts","title":"SMTPTLSOpts","type":"keyTextContainer"}],"id":"SMTP","title":"SMTP"},{"_nodes":[{"default":"noreply@example.com","id":"mailFrom","title":"mailFrom"},{"id":"mailReplyTo","title":"mailReplyTo"},{"default":"utf-8","id":"mailCharset","title":"mailCharset"}],"id":"mailHeaders","title":"mailHeaders","type":"simpleInputContainer"},{"_nodes":[{"id":"mailSubject","title":"mailSubject"},{"id":"mailBody","title":"mailBody","type":"longtext"},{"id":"mailConfirmSubject","title":"mailConfirmSubject"},{"id":"mailConfirmBody","title":"mailConfirmBody","type":"longtext"}],"id":"mailContent","title":"mailContent","type":"simpleInputContainer"},{"_nodes":[{"default":"http://auth.example.com/resetpwd","id":"mailUrl","title":"mailUrl"},{"default":"[A-Z]{3}[a-z]{5}.\\d{2}","id":"randomPasswordRegexp","title":"randomPasswordRegexp"},{"default":0,"id":"mailTimeout","title":"mailTimeout","type":"int"},{"default":"mail","id":"mailSessionKey","title":"mailSessionKey"}],"id":"mailOther","title":"mailOther","type":"simpleInputContainer"}],"help":"resetpassword.html","id":"passwordManagement","title":"passwordManagement"},{"_nodes":[{"default":"http://auth.example.com/register","id":"registerUrl","title":"registerUrl"},{"default":0,"id":"registerTimeout","title":"registerTimeout","type":"int"},{"id":"registerConfirmSubject","title":"registerConfirmSubject"},{"id":"registerDoneSubject","title":"registerDoneSubject"}],"help":"register.html","id":"register","title":"register","type":"simpleInputContainer"},{"_nodes":[{"cnodes":"autoSigninRules","id":"autoSigninRules","title":"autoSigninRules","type":"keyTextContainer"}],"help":"autosignin.html","id":"autoSignin","title":"autoSignin"},{"_nodes":[{"default":0,"id":"checkState","title":"checkState","type":"bool"},{"id":"checkStateSecret","title":"checkStateSecret"}],"help":"checkstate.html","id":"stateCheck","title":"stateCheck","type":"simpleInputContainer"}],"help":"start.html#plugins","id":"plugins","title":"plugins"},{"_nodes":[{"_nodes":[{"default":0,"id":"utotp2fActivation","title":"utotp2fActivation","type":"boolOrExpr"},{"id":"utotp2fAuthnLevel","title":"utotp2fAuthnLevel","type":"int"}],"help":"utotp2f.html","id":"utotp2f","title":"utotp2f","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"totp2fActivation","title":"totp2fActivation","type":"boolOrExpr"},{"default":0,"id":"totp2fSelfRegistration","title":"totp2fSelfRegistration","type":"boolOrExpr"},{"id":"totp2fAuthnLevel","title":"totp2fAuthnLevel","type":"int"},{"id":"totp2fIssuer","title":"totp2fIssuer"},{"default":30,"id":"totp2fInterval","title":"totp2fInterval","type":"int"},{"default":1,"id":"totp2fRange","title":"totp2fRange","type":"int"},{"default":6,"id":"totp2fDigits","title":"totp2fDigits","type":"int"},{"default":0,"id":"totp2fDisplayExistingSecret","title":"totp2fDisplayExistingSecret","type":"bool"},{"default":0,"id":"totp2fUserCanChangeKey","title":"totp2fUserCanChangeKey","type":"bool"},{"default":1,"id":"totp2fUserCanRemoveKey","title":"totp2fUserCanRemoveKey","type":"bool"}],"help":"totp2f.html","id":"totp","title":"totp","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"u2fActivation","title":"u2fActivation","type":"boolOrExpr"},{"default":0,"id":"u2fSelfRegistration","title":"u2fSelfRegistration","type":"boolOrExpr"},{"id":"u2fAuthnLevel","title":"u2fAuthnLevel","type":"int"},{"default":1,"id":"u2fUserCanRemoveKey","title":"u2fUserCanRemoveKey","type":"bool"}],"help":"u2f.html","id":"u2f","title":"u2f","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"ext2fActivation","title":"ext2fActivation","type":"boolOrExpr"},{"id":"ext2FSendCommand","title":"ext2FSendCommand"},{"id":"ext2FValidateCommand","title":"ext2FValidateCommand"},{"id":"ext2fAuthnLevel","title":"ext2fAuthnLevel","type":"int"},{"id":"ext2fLogo","title":"ext2fLogo"}],"help":"external2f.html","id":"external2f","title":"external2f","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"rest2fActivation","title":"rest2fActivation","type":"boolOrExpr"},{"id":"rest2fInitUrl","title":"rest2fInitUrl"},{"cnodes":"rest2fInitArgs","id":"rest2fInitArgs","title":"rest2fInitArgs","type":"keyTextContainer"},{"id":"rest2fVerifyUrl","title":"rest2fVerifyUrl"},{"cnodes":"rest2fVerifyArgs","id":"rest2fVerifyArgs","title":"rest2fVerifyArgs","type":"keyTextContainer"},{"id":"rest2fAuthnLevel","title":"rest2fAuthnLevel","type":"int"},{"id":"rest2fLogo","title":"rest2fLogo"}],"help":"rest2f.html","id":"rest2f","title":"rest2f"},{"_nodes":[{"default":0,"id":"yubikey2fActivation","title":"yubikey2fActivation","type":"boolOrExpr"},{"default":0,"id":"yubikey2fSelfRegistration","title":"yubikey2fSelfRegistration","type":"boolOrExpr"},{"id":"yubikey2fAuthnLevel","title":"yubikey2fAuthnLevel","type":"int"},{"id":"yubikey2fClientID","title":"yubikey2fClientID"},{"id":"yubikey2fSecretKey","title":"yubikey2fSecretKey"},{"id":"yubikey2fNonce","title":"yubikey2fNonce"},{"id":"yubikey2fUrl","title":"yubikey2fUrl"},{"default":12,"id":"yubikey2fPublicIDSize","title":"yubikey2fPublicIDSize","type":"int"},{"default":1,"id":"yubikey2fUserCanRemoveKey","title":"yubikey2fUserCanRemoveKey","type":"bool"}],"help":"yubikey2f.html","id":"yubikey2f","title":"yubikey2f","type":"simpleInputContainer"},{"default":0,"help":"secondfactor.html","id":"sfRequired","title":"sfRequired","type":"boolOrExpr"}],"help":"secondfactor.html","id":"secondFactors","title":"secondFactors"},{"_nodes":[{"help":"customfunctions.html","id":"customFunctions","title":"customFunctions"},{"default":"; ","id":"multiValuesSeparator","title":"multiValuesSeparator","type":"authParamsText"},{"_nodes":[{"default":"^[\\w\\.\\-@]+$","id":"userControl","title":"userControl"},{"default":0,"help":"forcereauthn.html","id":"portalForceAuthn","title":"portalForceAuthn","type":"bool"},{"default":5,"id":"portalForceAuthnInterval","title":"portalForceAuthnInterval","type":"int"},{"id":"key","title":"key","type":"password"},{"id":"trustedDomains","title":"trustedDomains"},{"default":1,"help":"safejail.html","id":"useSafeJail","title":"useSafeJail","type":"bool"},{"default":1,"id":"checkXSS","title":"checkXSS","type":"bool"},{"default":0,"help":"bruteforceprotection.html","id":"bruteForceProtection","title":"bruteForceProtection","type":"bool"},{"default":1,"id":"requireToken","title":"requireToken","type":"bool"},{"default":120,"id":"formTimeout","title":"formTimeout","type":"int"},{"default":0,"id":"tokenUseGlobalStorage","title":"tokenUseGlobalStorage","type":"bool"},{"cnodes":"lwpOpts","id":"lwpOpts","title":"lwpOpts","type":"keyTextContainer"},{"cnodes":"lwpSslOpts","id":"lwpSslOpts","title":"lwpSslOpts","type":"keyTextContainer"},{"_nodes":[{"default":"'self'","id":"cspDefault","title":"cspDefault"},{"default":"'self' data:","id":"cspImg","title":"cspImg"},{"default":"'self'","id":"cspScript","title":"cspScript"},{"default":"'self'","id":"cspStyle","title":"cspStyle"},{"default":"'self'","id":"cspFont","title":"cspFont"},{"default":"'self'","id":"cspFormAction","title":"cspFormAction"},{"default":"'self'","id":"cspConnect","title":"cspConnect"}],"help":"security.html#portal","id":"contentSecurityPolicy","title":"contentSecurityPolicy","type":"simpleInputContainer"}],"help":"security.html#configure_security_settings","id":"security","title":"security"},{"_nodes":[{"default":0,"id":"https","title":"https","type":"bool"},{"id":"port","title":"port","type":"int"},{"default":0,"id":"useRedirectOnForbidden","title":"useRedirectOnForbidden","type":"bool"},{"default":1,"id":"useRedirectOnError","title":"useRedirectOnError","type":"bool"},{"default":0,"id":"maintenance","title":"maintenance","type":"bool"}],"help":"redirections.html","id":"redirection","title":"redirection","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"jsRedirect","title":"jsRedirect","type":"boolOrExpr"},{"default":0,"id":"noAjaxHook","title":"noAjaxHook","type":"bool"},{"default":0,"id":"skipRenewConfirmation","title":"skipRenewConfirmation","type":"bool"}],"help":"redirections.html#portal_redirections","id":"portalRedirection","title":"portalRedirection","type":"simpleInputContainer"},{"cnodes":"nginxCustomHandlers","help":"handlerarch.html","id":"nginxCustomHandlers","title":"nginxCustomHandlers","type":"keyTextContainer"},{"cnodes":"logoutServices","default":[],"help":"logoutforward.html","id":"logoutServices","title":"logoutServices","type":"keyTextContainer"},{"_nodes":[{"default":"get","id":"infoFormMethod","select":[{"k":"get","v":"GET"},{"k":"post","v":"POST"}],"title":"infoFormMethod","type":"select"},{"default":"post","id":"confirmFormMethod","select":[{"k":"get","v":"GET"},{"k":"post","v":"POST"}],"title":"confirmFormMethod","type":"select"},{"default":"get","id":"redirectFormMethod","select":[{"k":"get","v":"GET"},{"k":"post","v":"POST"}],"title":"redirectFormMethod","type":"select"},{"default":1,"id":"activeTimer","title":"activeTimer","type":"bool"}],"id":"forms","title":"forms","type":"simpleInputContainer"}],"help":"start.html#advanced_features","id":"advancedParams","title":"advancedParams"}],"id":"generalParameters","title":"generalParameters"},{"_nodes":[{"cnodes":"exportedVars","default":[{"data":"HTTP_USER_AGENT","id":"exportedVars/UA","title":"UA","type":"keyText"}],"help":"exportedvars.html","id":"exportedVars","title":"exportedVars","type":"keyTextContainer"},{"cnodes":"macros","default":[],"help":"exportedvars.html#extend_variables_using_macros_and_groups","id":"macros","title":"macros","type":"keyTextContainer"},{"cnodes":"groups","default":[],"help":"exportedvars.html#extend_variables_using_macros_and_groups","id":"groups","title":"groups","type":"keyTextContainer"}],"help":"variables.html","id":"variables","title":"variables"},{"cnodes":"virtualHosts","help":"configvhost.html","id":"virtualHosts","template":"virtualHost","title":"virtualHosts","type":"virtualHostContainer"},{"_nodes":[{"default":"#PORTAL#/saml/metadata","id":"samlEntityID","title":"samlEntityID"},{"_nodes":[{"get":["samlServicePrivateKeySig","samlServicePrivateKeySigPwd","samlServicePublicKeySig"],"id":"samlServiceSecuritySig","title":"samlServiceSecuritySig","type":"RSAKey"},{"get":["samlServicePrivateKeyEnc","samlServicePrivateKeyEncPwd","samlServicePublicKeyEnc"],"id":"samlServiceSecurityEnc","title":"samlServiceSecurityEnc","type":"RSAKey"},{"default":0,"id":"samlServiceUseCertificateInResponse","title":"samlServiceUseCertificateInResponse","type":"bool"},{"default":"RSA_SHA1","id":"samlServiceSignatureMethod","select":[{"k":"RSA_SHA1","v":"RSA SHA1"},{"k":"RSA_SHA256","v":"RSA SHA256"}],"title":"samlServiceSignatureMethod","type":"select"}],"help":"samlservice.html#security_parameters","id":"samlServiceSecurity","title":"samlServiceSecurity"},{"_nodes":[{"default":"mail","id":"samlNameIDFormatMapEmail","title":"samlNameIDFormatMapEmail"},{"default":"mail","id":"samlNameIDFormatMapX509","title":"samlNameIDFormatMapX509"},{"default":"uid","id":"samlNameIDFormatMapWindows","title":"samlNameIDFormatMapWindows"},{"default":"uid","id":"samlNameIDFormatMapKerberos","title":"samlNameIDFormatMapKerberos"}],"help":"samlservice.html#nameid_formats","id":"samlNameIDFormatMap","title":"samlNameIDFormatMap","type":"simpleInputContainer"},{"_nodes":[{"default":2,"id":"samlAuthnContextMapPassword","title":"samlAuthnContextMapPassword","type":"int"},{"default":3,"id":"samlAuthnContextMapPasswordProtectedTransport","title":"samlAuthnContextMapPasswordProtectedTransport","type":"int"},{"default":5,"id":"samlAuthnContextMapTLSClient","title":"samlAuthnContextMapTLSClient","type":"int"},{"default":4,"id":"samlAuthnContextMapKerberos","title":"samlAuthnContextMapKerberos","type":"int"}],"help":"samlservice.html#authentication_contexts","id":"samlAuthnContextMap","title":"samlAuthnContextMap","type":"simpleInputContainer"},{"_nodes":[{"default":"Example","id":"samlOrganizationDisplayName","title":"samlOrganizationDisplayName"},{"default":"Example","id":"samlOrganizationName","title":"samlOrganizationName"},{"default":"http://www.example.com","id":"samlOrganizationURL","title":"samlOrganizationURL"}],"help":"samlservice.html#organization","id":"samlOrganization","title":"samlOrganization","type":"simpleInputContainer"},{"_nodes":[{"default":1,"id":"samlSPSSODescriptorAuthnRequestsSigned","title":"samlSPSSODescriptorAuthnRequestsSigned","type":"bool"},{"default":1,"id":"samlSPSSODescriptorWantAssertionsSigned","title":"samlSPSSODescriptorWantAssertionsSigned","type":"bool"},{"_nodes":[{"default":"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect;#PORTAL#/saml/proxySingleLogout;#PORTAL#/saml/proxySingleLogoutReturn","id":"samlSPSSODescriptorSingleLogoutServiceHTTPRedirect","title":"samlSPSSODescriptorSingleLogoutServiceHTTPRedirect","type":"samlService"},{"default":"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/proxySingleLogout;#PORTAL#/saml/proxySingleLogoutReturn","id":"samlSPSSODescriptorSingleLogoutServiceHTTPPost","title":"samlSPSSODescriptorSingleLogoutServiceHTTPPost","type":"samlService"},{"default":"urn:oasis:names:tc:SAML:2.0:bindings:SOAP;#PORTAL#/saml/proxySingleLogoutSOAP;","id":"samlSPSSODescriptorSingleLogoutServiceSOAP","title":"samlSPSSODescriptorSingleLogoutServiceSOAP","type":"samlService"}],"id":"samlSPSSODescriptorSingleLogoutService","title":"samlSPSSODescriptorSingleLogoutService"},{"_nodes":[{"default":"1;0;urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact;#PORTAL#/saml/proxySingleSignOnArtifact","id":"samlSPSSODescriptorAssertionConsumerServiceHTTPArtifact","title":"samlSPSSODescriptorAssertionConsumerServiceHTTPArtifact","type":"samlAssertion"},{"default":"0;1;urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/proxySingleSignOnPost","id":"samlSPSSODescriptorAssertionConsumerServiceHTTPPost","title":"samlSPSSODescriptorAssertionConsumerServiceHTTPPost","type":"samlAssertion"}],"id":"samlSPSSODescriptorAssertionConsumerService","title":"samlSPSSODescriptorAssertionConsumerService"},{"_nodes":[{"default":"1;0;urn:oasis:names:tc:SAML:2.0:bindings:SOAP;#PORTAL#/saml/artifact","id":"samlSPSSODescriptorArtifactResolutionServiceArtifact","title":"samlSPSSODescriptorArtifactResolutionServiceArtifact","type":"samlAssertion"}],"id":"samlSPSSODescriptorArtifactResolutionService","title":"samlSPSSODescriptorArtifactResolutionService"}],"help":"samlservice.html#service_provider","id":"samlSPSSODescriptor","title":"samlSPSSODescriptor"},{"_nodes":[{"default":1,"id":"samlIDPSSODescriptorWantAuthnRequestsSigned","title":"samlIDPSSODescriptorWantAuthnRequestsSigned","type":"bool"},{"_nodes":[{"default":"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect;#PORTAL#/saml/singleSignOn;","id":"samlIDPSSODescriptorSingleSignOnServiceHTTPRedirect","title":"samlIDPSSODescriptorSingleSignOnServiceHTTPRedirect","type":"samlService"},{"default":"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleSignOn;","id":"samlIDPSSODescriptorSingleSignOnServiceHTTPPost","title":"samlIDPSSODescriptorSingleSignOnServiceHTTPPost","type":"samlService"},{"default":"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact;#PORTAL#/saml/singleSignOnArtifact;","id":"samlIDPSSODescriptorSingleSignOnServiceHTTPArtifact","title":"samlIDPSSODescriptorSingleSignOnServiceHTTPArtifact","type":"samlService"}],"id":"samlIDPSSODescriptorSingleSignOnService","title":"samlIDPSSODescriptorSingleSignOnService"},{"_nodes":[{"default":"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect;#PORTAL#/saml/singleLogout;#PORTAL#/saml/singleLogoutReturn","id":"samlIDPSSODescriptorSingleLogoutServiceHTTPRedirect","title":"samlIDPSSODescriptorSingleLogoutServiceHTTPRedirect","type":"samlService"},{"default":"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleLogout;#PORTAL#/saml/singleLogoutReturn","id":"samlIDPSSODescriptorSingleLogoutServiceHTTPPost","title":"samlIDPSSODescriptorSingleLogoutServiceHTTPPost","type":"samlService"},{"default":"urn:oasis:names:tc:SAML:2.0:bindings:SOAP;#PORTAL#/saml/singleLogoutSOAP;","id":"samlIDPSSODescriptorSingleLogoutServiceSOAP","title":"samlIDPSSODescriptorSingleLogoutServiceSOAP","type":"samlService"}],"id":"samlIDPSSODescriptorSingleLogoutService","title":"samlIDPSSODescriptorSingleLogoutService"},{"_nodes":[{"default":"1;0;urn:oasis:names:tc:SAML:2.0:bindings:SOAP;#PORTAL#/saml/artifact","id":"samlIDPSSODescriptorArtifactResolutionServiceArtifact","title":"samlIDPSSODescriptorArtifactResolutionServiceArtifact","type":"samlAssertion"}],"id":"samlIDPSSODescriptorArtifactResolutionService","title":"samlIDPSSODescriptorArtifactResolutionService"}],"help":"samlservice.html#identity_provider","id":"samlIDPSSODescriptor","title":"samlIDPSSODescriptor"},{"_nodes":[{"_nodes":[{"default":"urn:oasis:names:tc:SAML:2.0:bindings:SOAP;#PORTAL#/saml/AA/SOAP;","id":"samlAttributeAuthorityDescriptorAttributeServiceSOAP","title":"samlAttributeAuthorityDescriptorAttributeServiceSOAP","type":"samlService"}],"id":"samlAttributeAuthorityDescriptorAttributeService","title":"samlAttributeAuthorityDescriptorAttributeService"}],"help":"samlservice.html#attribute_authority","id":"samlAttributeAuthorityDescriptor","title":"samlAttributeAuthorityDescriptor"},{"_nodes":[{"default":"lemonldapidp","id":"samlIdPResolveCookie","title":"samlIdPResolveCookie"},{"default":1,"id":"samlMetadataForceUTF8","title":"samlMetadataForceUTF8","type":"bool"},{"id":"samlStorage","title":"samlStorage"},{"cnodes":"samlStorageOptions","id":"samlStorageOptions","title":"samlStorageOptions","type":"keyTextContainer"},{"default":600,"id":"samlRelayStateTimeout","title":"samlRelayStateTimeout","type":"int"},{"default":0,"id":"samlUseQueryStringSpecific","title":"samlUseQueryStringSpecific","type":"bool"},{"_nodes":[{"default":0,"id":"samlCommonDomainCookieActivation","title":"samlCommonDomainCookieActivation","type":"bool"},{"id":"samlCommonDomainCookieDomain","title":"samlCommonDomainCookieDomain"},{"id":"samlCommonDomainCookieReader","title":"samlCommonDomainCookieReader"},{"id":"samlCommonDomainCookieWriter","title":"samlCommonDomainCookieWriter"}],"id":"samlCommonDomainCookie","title":"samlCommonDomainCookie","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"samlDiscoveryProtocolActivation","title":"samlDiscoveryProtocolActivation","type":"bool"},{"id":"samlDiscoveryProtocolURL","title":"samlDiscoveryProtocolURL"},{"id":"samlDiscoveryProtocolPolicy","title":"samlDiscoveryProtocolPolicy"},{"default":0,"id":"samlDiscoveryProtocolIsPassive","title":"samlDiscoveryProtocolIsPassive","type":"bool"}],"id":"samlDiscoveryProtocol","title":"samlDiscoveryProtocol","type":"simpleInputContainer"}],"help":"samlservice.html#advanced","id":"samlAdvanced","title":"samlAdvanced"}],"help":"samlservice.html","id":"samlServiceMetaData","title":"samlServiceMetaData"},{"cnodes":"samlIDPMetaDataNodes","help":"authsaml.html","id":"samlIDPMetaDataNodes","template":"samlIDPMetaDataNode","title":"samlIDPMetaDataNodes","type":"samlIDPMetaDataNodeContainer"},{"cnodes":"samlSPMetaDataNodes","help":"idpsaml.html","id":"samlSPMetaDataNodes","template":"samlSPMetaDataNode","title":"samlSPMetaDataNodes","type":"samlSPMetaDataNodeContainer"},{"_nodes":[{"default":"http://auth.example.com","id":"oidcServiceMetaDataIssuer","title":"oidcServiceMetaDataIssuer"},{"_nodes":[{"default":"authorize","id":"oidcServiceMetaDataAuthorizeURI","title":"oidcServiceMetaDataAuthorizeURI"},{"default":"token","id":"oidcServiceMetaDataTokenURI","title":"oidcServiceMetaDataTokenURI"},{"default":"userinfo","id":"oidcServiceMetaDataUserInfoURI","title":"oidcServiceMetaDataUserInfoURI"},{"default":"jwks","id":"oidcServiceMetaDataJWKSURI","title":"oidcServiceMetaDataJWKSURI"},{"default":"register","id":"oidcServiceMetaDataRegistrationURI","title":"oidcServiceMetaDataRegistrationURI"},{"default":"logout","id":"oidcServiceMetaDataEndSessionURI","title":"oidcServiceMetaDataEndSessionURI"},{"default":"checksession.html","id":"oidcServiceMetaDataCheckSessionURI","title":"oidcServiceMetaDataCheckSessionURI"},{"default":"flogout","id":"oidcServiceMetaDataFrontChannelURI","title":"oidcServiceMetaDataFrontChannelURI"},{"default":"blogout","id":"oidcServiceMetaDataBackChannelURI","title":"oidcServiceMetaDataBackChannelURI"}],"id":"oidcServiceMetaDataEndPoints","title":"oidcServiceMetaDataEndPoints","type":"simpleInputContainer"},{"cnodes":"oidcServiceMetaDataAuthnContext","default":[{"data":1,"id":"oidcServiceMetaDataAuthnContext/loa-1","title":"loa-1","type":"keyText"},{"data":2,"id":"oidcServiceMetaDataAuthnContext/loa-2","title":"loa-2","type":"keyText"},{"data":3,"id":"oidcServiceMetaDataAuthnContext/loa-3","title":"loa-3","type":"keyText"},{"data":4,"id":"oidcServiceMetaDataAuthnContext/loa-4","title":"loa-4","type":"keyText"},{"data":5,"id":"oidcServiceMetaDataAuthnContext/loa-5","title":"loa-5","type":"keyText"}],"id":"oidcServiceMetaDataAuthnContext","title":"oidcServiceMetaDataAuthnContext","type":"keyTextContainer"},{"_nodes":[{"get":["oidcServicePrivateKeySig","oidcServicePublicKeySig"],"id":"oidcServiceMetaDataKeys","title":"oidcServiceMetaDataKeys","type":"RSAKeyNoPassword"},{"id":"oidcServiceKeyIdSig","title":"oidcServiceKeyIdSig"},{"default":0,"id":"oidcServiceAllowDynamicRegistration","title":"oidcServiceAllowDynamicRegistration","type":"bool"},{"default":1,"id":"oidcServiceAllowAuthorizationCodeFlow","title":"oidcServiceAllowAuthorizationCodeFlow","type":"bool"},{"default":0,"id":"oidcServiceAllowImplicitFlow","title":"oidcServiceAllowImplicitFlow","type":"bool"},{"default":0,"id":"oidcServiceAllowHybridFlow","title":"oidcServiceAllowHybridFlow","type":"bool"}],"id":"oidcServiceMetaDataSecurity","title":"oidcServiceMetaDataSecurity"},{"_nodes":[{"id":"oidcStorage","title":"oidcStorage"},{"cnodes":"oidcStorageOptions","id":"oidcStorageOptions","title":"oidcStorageOptions","type":"keyTextContainer"}],"id":"oidcServiceMetaDataSessions","title":"oidcServiceMetaDataSessions"}],"help":"openidconnectservice.html#service_configuration","id":"oidcServiceMetaData","title":"oidcServiceMetaData"},{"cnodes":"oidcOPMetaDataNodes","help":"authopenidconnect.html#declare_the_openid_connect_provider_in_llng","id":"oidcOPMetaDataNodes","title":"oidcOPMetaDataNodes","type":"oidcOPMetaDataNodeContainer"},{"cnodes":"oidcRPMetaDataNodes","help":"idpopenidconnect.html#configuration_of_relying_party_in_llng","id":"oidcRPMetaDataNodes","title":"oidcRPMetaDataNodes","type":"oidcRPMetaDataNodeContainer"},{"_nodes":[{"id":"casAttr","title":"casAttr"},{"default":"none","id":"casAccessControlPolicy","select":[{"k":"none","v":"None"},{"k":"error","v":"Display error on portal"},{"k":"faketicket","v":"Send a fake service ticket"}],"title":"casAccessControlPolicy","type":"select"},{"id":"casStorage","title":"casStorage"},{"cnodes":"casStorageOptions","id":"casStorageOptions","title":"casStorageOptions","type":"keyTextContainer"},{"cnodes":"casAttributes","id":"casAttributes","title":"casAttributes","type":"keyTextContainer"}],"id":"casServiceMetadata","title":"casServiceMetadata"},{"cnodes":"casSrvMetaDataNodes","help":"authcas.html","id":"casSrvMetaDataNodes","template":"casSrvMetaDataNode","title":"casSrvMetaDataNodes","type":"casSrvMetaDataNodeContainer"},{"cnodes":"casAppMetaDataNodes","help":"idpcas.html","id":"casAppMetaDataNodes","template":"casAppMetaDataNode","title":"casAppMetaDataNodes","type":"casAppMetaDataNodeContainer"}]
\ No newline at end of file
+[{"_nodes":[{"_nodes":[{"default":"http://auth.example.com/","id":"portal","title":"portal"},{"_nodes":[{"_nodes":[{"default":1,"id":"portalDisplayLogout","title":"portalDisplayLogout","type":"boolOrExpr"},{"default":"$_auth =~ /^(LDAP|DBI|Demo)$/","id":"portalDisplayChangePassword","title":"portalDisplayChangePassword","type":"boolOrExpr"},{"default":1,"id":"portalDisplayAppslist","title":"portalDisplayAppslist","type":"boolOrExpr"},{"default":1,"id":"portalDisplayLoginHistory","title":"portalDisplayLoginHistory","type":"boolOrExpr"},{"default":"$_oidcConnectedRP","id":"portalDisplayOidcConsents","title":"portalDisplayOidcConsents","type":"boolOrExpr"}],"id":"portalModules","title":"portalModules","type":"simpleInputContainer"},{"cnodes":"applicationList","default":[{"data":{"catname":"Default category","type":"category"},"id":"applicationList/default","title":"default","type":"catAndAppList"}],"help":"portalmenu.html#categories_and_applications","id":"applicationList","title":"applicationList","type":"catAndAppList"}],"help":"portalmenu.html","id":"portalMenu","title":"portalMenu"},{"_nodes":[{"default":"common/logos/logo_llng_400px.png","id":"portalMainLogo","title":"portalMainLogo"},{"default":1,"id":"showLanguages","title":"showLanguages","type":"bool"},{"default":"bootstrap","id":"portalSkin","select":[{"k":"bootstrap","v":"Bootstrap"}],"title":"portalSkin","type":"portalskin"},{"id":"portalSkinBackground","select":[{"k":"","v":"None"},{"k":"1280px-Anse_Source_d'Argent_2-La_Digue.jpg","v":"Anse"},{"k":"1280px-Autumn-clear-water-waterfall-landscape_-_Virginia_-_ForestWander.jpg","v":"Waterfall"},{"k":"1280px-BrockenSnowedTrees.jpg","v":"Snowed Trees"},{"k":"1280px-Cedar_Breaks_National_Monument_partially.jpg","v":"National Monument"},{"k":"1280px-Parry_Peak_from_Winter_Park.jpg","v":"Winter"},{"k":"Aletschgletscher_mit_Pinus_cembra1.jpg","v":"Pinus"}],"title":"portalSkinBackground","type":"portalskinbackground"},{"cnodes":"portalSkinRules","help":"portalcustom.html","id":"portalSkinRules","title":"portalSkinRules","type":"keyTextContainer"},{"_nodes":[{"default":1,"id":"portalCheckLogins","title":"portalCheckLogins","type":"bool"},{"default":0,"id":"portalDisplayResetPassword","title":"portalDisplayResetPassword","type":"bool"},{"default":3,"id":"passwordResetAllowedRetries","title":"passwordResetAllowedRetries","type":"int"},{"default":1,"id":"portalDisplayRegister","title":"portalDisplayRegister","type":"bool"}],"help":"portalcustom.html#buttons","id":"portalButtons","title":"portalButtons","type":"simpleInputContainer"},{"_nodes":[{"default":1,"id":"portalRequireOldPassword","title":"portalRequireOldPassword","type":"bool"},{"default":0,"id":"hideOldPassword","title":"hideOldPassword","type":"bool"},{"default":0,"id":"mailOnPasswordChange","title":"mailOnPasswordChange","type":"bool"}],"help":"portalcustom.html#password_management","id":"passwordManagement","title":"passwordManagement","type":"simpleInputContainer"},{"_nodes":[{"default":"_user","id":"portalUserAttr","title":"portalUserAttr"},{"default":0,"id":"portalOpenLinkInNewWindow","title":"portalOpenLinkInNewWindow","type":"bool"},{"default":1,"id":"portalAntiFrame","title":"portalAntiFrame","type":"bool"},{"default":60000,"id":"portalPingInterval","title":"portalPingInterval","type":"int"},{"default":1,"id":"portalErrorOnExpiredSession","title":"portalErrorOnExpiredSession","type":"bool"},{"default":0,"id":"portalErrorOnMailNotFound","title":"portalErrorOnMailNotFound","type":"bool"}],"help":"portalcustom.html#other_parameters","id":"portalOther","title":"portalOther","type":"simpleInputContainer"}],"help":"portalcustom.html","id":"portalCustomization","title":"portalCustomization"},{"_nodes":[{"default":0,"id":"captcha_login_enabled","title":"captcha_login_enabled","type":"bool"},{"default":1,"id":"captcha_mail_enabled","title":"captcha_mail_enabled","type":"bool"},{"default":1,"id":"captcha_register_enabled","title":"captcha_register_enabled","type":"bool"},{"default":6,"id":"captcha_size","title":"captcha_size","type":"int"}],"help":"captcha.html","id":"portalCaptcha","title":"portalCaptcha","type":"simpleInputContainer"}],"help":"portal.html","id":"portalParams","title":"portalParams"},{"_nodes":[{"default":"Demo","id":"authentication","select":[{"k":"Apache","v":"Apache"},{"k":"AD","v":"Active Directory"},{"k":"DBI","v":"Database (DBI)"},{"k":"Facebook","v":"Facebook"},{"k":"GPG","v":"GPG"},{"k":"Kerberos","v":"Kerberos"},{"k":"LDAP","v":"LDAP"},{"k":"LinkedIn","v":"LinkedIn"},{"k":"PAM","v":"PAM"},{"k":"Radius","v":"Radius"},{"k":"REST","v":"REST"},{"k":"SSL","v":"SSL"},{"k":"Twitter","v":"Twitter"},{"k":"WebID","v":"WebID"},{"k":"Demo","v":"Demonstration"},{"k":"Choice","v":"authChoice"},{"k":"Combination","v":"combineMods"},{"k":"CAS","v":"Central Authentication Service (CAS)"},{"k":"OpenID","v":"OpenID"},{"k":"OpenIDConnect","v":"OpenID Connect"},{"k":"SAML","v":"SAML v2"},{"k":"Proxy","v":"Proxy"},{"k":"Remote","v":"Remote"},{"k":"Slave","v":"Slave"},{"k":"Null","v":"None"},{"k":"Custom","v":"customModule"}],"title":"authentication","type":"select"},{"default":"Same","id":"userDB","select":[{"k":"Same","v":"Same"},{"k":"AD","v":"Active Directory"},{"k":"DBI","v":"Database (DBI)"},{"k":"LDAP","v":"LDAP"},{"k":"REST","v":"REST"},{"k":"Null","v":"None"},{"k":"Custom","v":"customModule"}],"title":"userDB","type":"select"},{"default":"Demo","id":"passwordDB","select":[{"k":"AD","v":"Active Directory"},{"k":"Choice","v":"authChoice"},{"k":"DBI","v":"Database (DBI)"},{"k":"Demo","v":"Demonstration"},{"k":"LDAP","v":"LDAP"},{"k":"REST","v":"REST"},{"k":"Null","v":"None"},{"k":"Custom","v":"customModule"}],"title":"passwordDB","type":"select"},{"default":"Null","id":"registerDB","select":[{"k":"AD","v":"Active Directory"},{"k":"Demo","v":"Demonstration"},{"k":"LDAP","v":"LDAP"},{"k":"Null","v":"None"},{"k":"Custom","v":"customModule"}],"title":"registerDB","type":"select"}],"_nodes_cond":[{"_nodes":[{"default":0,"id":"ADPwdMaxAge","title":"ADPwdMaxAge","type":"int"},{"default":0,"id":"ADPwdExpireWarning","title":"ADPwdExpireWarning","type":"int"}],"help":"authad.html","id":"adParams","show":false,"title":"adParams","type":"simpleInputContainer"},{"_nodes":[{"default":"lmAuth","id":"authChoiceParam","title":"authChoiceParam"},{"cnodes":"authChoiceModules","id":"authChoiceModules","select":[[{"k":"Apache","v":"Apache"},{"k":"AD","v":"Active Directory"},{"k":"CAS","v":"Central Authentication Service (CAS)"},{"k":"DBI","v":"Database (DBI)"},{"k":"Demo","v":"Demo"},{"k":"Facebook","v":"Facebook"},{"k":"GPG","v":"GPG"},{"k":"Kerberos","v":"Kerberos"},{"k":"LDAP","v":"LDAP"},{"k":"LinkedIn","v":"LinkedIn"},{"k":"PAM","v":"PAM"},{"k":"Null","v":"None"},{"k":"OpenID","v":"OpenID"},{"k":"OpenIDConnect","v":"OpenID Connect"},{"k":"Proxy","v":"Proxy"},{"k":"Radius","v":"Radius"},{"k":"REST","v":"REST"},{"k":"Remote","v":"Remote"},{"k":"SAML","v":"SAML v2"},{"k":"Slave","v":"Slave"},{"k":"SSL","v":"SSL"},{"k":"Twitter","v":"Twitter"},{"k":"WebID","v":"WebID"},{"k":"Custom","v":"customModule"}],[{"k":"AD","v":"Active Directory"},{"k":"CAS","v":"Central Authentication Service (CAS)"},{"k":"DBI","v":"Database (DBI)"},{"k":"Demo","v":"Demo"},{"k":"Facebook","v":"Facebook"},{"k":"LDAP","v":"LDAP"},{"k":"Null","v":"None"},{"k":"OpenID","v":"OpenID"},{"k":"OpenIDConnect","v":"OpenID Connect"},{"k":"Proxy","v":"Proxy"},{"k":"REST","v":"REST"},{"k":"Remote","v":"Remote"},{"k":"SAML","v":"SAML v2"},{"k":"Slave","v":"Slave"},{"k":"WebID","v":"WebID"},{"k":"Custom","v":"customModule"}],[{"k":"AD","v":"Active Directory"},{"k":"DBI","v":"Database (DBI)"},{"k":"Demo","v":"Demo"},{"k":"LDAP","v":"LDAP"},{"k":"REST","v":"REST"},{"k":"Null","v":"None"},{"k":"Custom","v":"customModule"}]],"title":"authChoiceModules","type":"authChoiceContainer"}],"help":"authchoice.html","id":"choiceParams","show":false,"title":"choiceParams"},{"_nodes":[{"default":4,"id":"apacheAuthnLevel","title":"apacheAuthnLevel","type":"int"}],"help":"authapache.html","id":"apacheParams","show":false,"title":"apacheParams","type":"simpleInputContainer"},{"_nodes":[{"default":1,"id":"casAuthnLevel","title":"casAuthnLevel","type":"int"}],"help":"authcas.html","id":"casParams","show":false,"title":"casParams","type":"simpleInputContainer"},{"_nodes":[{"default":2,"id":"dbiAuthnLevel","title":"dbiAuthnLevel","type":"int"},{"cnodes":"dbiExportedVars","default":[],"id":"dbiExportedVars","title":"dbiExportedVars","type":"keyTextContainer"},{"_nodes":[{"_nodes":[{"id":"dbiAuthChain","title":"dbiAuthChain"},{"id":"dbiAuthUser","title":"dbiAuthUser"},{"id":"dbiAuthPassword","title":"dbiAuthPassword","type":"password"}],"id":"dbiConnectionAuth","title":"dbiConnectionAuth","type":"simpleInputContainer"},{"_nodes":[{"id":"dbiUserChain","title":"dbiUserChain"},{"id":"dbiUserUser","title":"dbiUserUser"},{"id":"dbiUserPassword","title":"dbiUserPassword","type":"password"}],"id":"dbiConnectionUser","title":"dbiConnectionUser","type":"simpleInputContainer"}],"help":"authdbi.html#connection","id":"dbiConnection","title":"dbiConnection"},{"_nodes":[{"id":"dbiAuthTable","title":"dbiAuthTable"},{"id":"dbiUserTable","title":"dbiUserTable"},{"id":"dbiAuthLoginCol","title":"dbiAuthLoginCol"},{"id":"dbiAuthPasswordCol","title":"dbiAuthPasswordCol"},{"id":"dbiPasswordMailCol","title":"dbiPasswordMailCol"},{"id":"userPivot","title":"userPivot"}],"help":"authdbi.html#schema","id":"dbiSchema","title":"dbiSchema","type":"simpleInputContainer"},{"_nodes":[{"help":"authdbi.html#password","id":"dbiAuthPasswordHash","title":"dbiAuthPasswordHash"},{"_nodes":[{"help":"authdbi.html#password","id":"dbiDynamicHashEnabled","title":"dbiDynamicHashEnabled","type":"bool"},{"help":"authdbi.html#password","id":"dbiDynamicHashValidSchemes","title":"dbiDynamicHashValidSchemes"},{"help":"authdbi.html#password","id":"dbiDynamicHashValidSaltedSchemes","title":"dbiDynamicHashValidSaltedSchemes"},{"help":"authdbi.html#password","id":"dbiDynamicHashNewPasswordScheme","title":"dbiDynamicHashNewPasswordScheme"}],"help":"authdbi.html#password","id":"dbiDynamicHash","title":"dbiDynamicHash","type":"simpleInputContainer"}],"help":"authdbi.html#password","id":"dbiPassword","title":"dbiPassword"}],"help":"authdbi.html","id":"dbiParams","show":false,"title":"dbiParams"},{"_nodes":[{"cnodes":"demoExportedVars","default":[{"data":"cn","id":"demoExportedVars/cn","title":"cn","type":"keyText"},{"data":"mail","id":"demoExportedVars/mail","title":"mail","type":"keyText"},{"data":"uid","id":"demoExportedVars/uid","title":"uid","type":"keyText"}],"id":"demoExportedVars","title":"demoExportedVars","type":"keyTextContainer"}],"help":"authdemo.html","id":"demoParams","show":false,"title":"demoParams"},{"_nodes":[{"default":1,"id":"facebookAuthnLevel","title":"facebookAuthnLevel","type":"int"},{"cnodes":"facebookExportedVars","default":[],"id":"facebookExportedVars","title":"facebookExportedVars","type":"keyTextContainer"},{"id":"facebookAppId","title":"facebookAppId"},{"id":"facebookAppSecret","title":"facebookAppSecret"},{"default":"id","id":"facebookUserField","title":"facebookUserField"}],"help":"authfacebook.html","id":"facebookParams","show":false,"title":"facebookParams"},{"_nodes":[{"id":"krbKeytab","title":"krbKeytab"},{"default":0,"id":"krbByJs","title":"krbByJs","type":"bool"},{"default":3,"id":"krbAuthnLevel","title":"krbAuthnLevel","type":"int"},{"default":1,"id":"krbRemoveDomain","title":"krbRemoveDomain","type":"bool"}],"help":"authkerberos.html","id":"kerberosParams","show":false,"title":"kerberosParams","type":"simpleInputContainer"},{"_nodes":[{"default":2,"id":"ldapAuthnLevel","title":"ldapAuthnLevel","type":"int"},{"cnodes":"ldapExportedVars","default":[{"data":"cn","id":"ldapExportedVars/cn","title":"cn","type":"keyText"},{"data":"mail","id":"ldapExportedVars/mail","title":"mail","type":"keyText"},{"data":"uid","id":"ldapExportedVars/uid","title":"uid","type":"keyText"}],"id":"ldapExportedVars","title":"ldapExportedVars","type":"keyTextContainer"},{"_nodes":[{"default":"ldap://localhost","id":"ldapServer","title":"ldapServer"},{"default":389,"id":"ldapPort","title":"ldapPort","type":"int"},{"default":"dc=example,dc=com","id":"ldapBase","title":"ldapBase"},{"default":"","id":"managerDn","title":"managerDn"},{"default":"","id":"managerPassword","title":"managerPassword","type":"password"},{"default":120,"id":"ldapTimeout","title":"ldapTimeout","type":"int"},{"default":3,"id":"ldapVersion","title":"ldapVersion","type":"int"},{"id":"ldapRaw","title":"ldapRaw"}],"help":"authldap.html#connection","id":"ldapConnection","title":"ldapConnection","type":"simpleInputContainer"},{"_nodes":[{"id":"LDAPFilter","title":"LDAPFilter"},{"id":"AuthLDAPFilter","title":"AuthLDAPFilter"},{"id":"mailLDAPFilter","title":"mailLDAPFilter"},{"default":"find","id":"ldapSearchDeref","select":[{"k":"never","v":"never"},{"k":"search","v":"search"},{"k":"find","v":"find"},{"k":"always","v":"always"}],"title":"ldapSearchDeref","type":"select"}],"help":"authldap.html#filters","id":"ldapFilters","title":"ldapFilters","type":"simpleInputContainer"},{"_nodes":[{"id":"ldapGroupBase","title":"ldapGroupBase"},{"default":"groupOfNames","id":"ldapGroupObjectClass","title":"ldapGroupObjectClass"},{"default":"member","id":"ldapGroupAttributeName","title":"ldapGroupAttributeName"},{"default":"dn","id":"ldapGroupAttributeNameUser","title":"ldapGroupAttributeNameUser"},{"default":"cn","id":"ldapGroupAttributeNameSearch","title":"ldapGroupAttributeNameSearch"},{"default":0,"id":"ldapGroupDecodeSearchedValue","title":"ldapGroupDecodeSearchedValue","type":"bool"},{"default":0,"id":"ldapGroupRecursive","title":"ldapGroupRecursive","type":"bool"},{"default":"dn","id":"ldapGroupAttributeNameGroup","title":"ldapGroupAttributeNameGroup"}],"help":"authldap.html#groups","id":"ldapGroups","title":"ldapGroups","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"ldapPpolicyControl","title":"ldapPpolicyControl","type":"bool"},{"default":0,"id":"ldapSetPassword","title":"ldapSetPassword","type":"bool"},{"default":0,"id":"ldapChangePasswordAsUser","title":"ldapChangePasswordAsUser","type":"bool"},{"default":"utf-8","id":"ldapPwdEnc","title":"ldapPwdEnc"},{"default":1,"id":"ldapUsePasswordResetAttribute","title":"ldapUsePasswordResetAttribute","type":"bool"},{"default":"pwdReset","id":"ldapPasswordResetAttribute","title":"ldapPasswordResetAttribute"},{"default":"TRUE","id":"ldapPasswordResetAttributeValue","title":"ldapPasswordResetAttributeValue"},{"default":0,"id":"ldapAllowResetExpiredPassword","title":"ldapAllowResetExpiredPassword","type":"bool"}],"help":"authldap.html#password","id":"ldapPassword","title":"ldapPassword","type":"simpleInputContainer"}],"help":"authldap.html","id":"ldapParams","show":false,"title":"ldapParams"},{"_nodes":[{"default":1,"id":"linkedInAuthnLevel","title":"linkedInAuthnLevel","type":"int"},{"id":"linkedInClientID","title":"linkedInClientID"},{"id":"linkedInClientSecret","title":"linkedInClientSecret","type":"password"},{"default":"id,first-name,last-name,email-address","id":"linkedInFields","title":"linkedInFields"},{"default":"emailAddress","id":"linkedInUserField","title":"linkedInUserField"},{"default":"r_basicprofile r_emailaddress","id":"linkedInScope","title":"linkedInScope"}],"help":"authlinkedin.html","id":"linkedinParams","show":false,"title":"linkedinParams","type":"simpleInputContainer"},{"_nodes":[{"id":"combination","title":"combination"},{"cnodes":"combModules","id":"combModules","select":[{"k":"Apache","v":"Apache"},{"k":"AD","v":"Active Directory"},{"k":"DBI","v":"Database (DBI)"},{"k":"Facebook","v":"Facebook"},{"k":"GPG","v":"GPG"},{"k":"Kerberos","v":"Kerberos"},{"k":"LDAP","v":"LDAP"},{"k":"PAM","v":"PAM"},{"k":"Radius","v":"Radius"},{"k":"REST","v":"REST"},{"k":"SSL","v":"SSL"},{"k":"Twitter","v":"Twitter"},{"k":"WebID","v":"WebID"},{"k":"Demo","v":"Demonstration"},{"k":"CAS","v":"Central Authentication Service (CAS)"},{"k":"OpenID","v":"OpenID"},{"k":"OpenIDConnect","v":"OpenID Connect"},{"k":"SAML","v":"SAML v2"},{"k":"Proxy","v":"Proxy"},{"k":"Remote","v":"Remote"},{"k":"Slave","v":"Slave"},{"k":"Null","v":"None"},{"k":"Custom","v":"customModule"}],"title":"combModules","type":"cmbModuleContainer"}],"help":"authcombination.html","id":"combinationParams","show":false,"title":"combinationParams"},{"_nodes":[{"default":0,"id":"nullAuthnLevel","title":"nullAuthnLevel","type":"int"}],"help":"authnull.html","id":"nullParams","show":false,"title":"nullParams","type":"simpleInputContainer"},{"_nodes":[{"default":1,"id":"openIdAuthnLevel","title":"openIdAuthnLevel","type":"int"},{"cnodes":"openIdExportedVars","default":[],"id":"openIdExportedVars","title":"openIdExportedVars","type":"keyTextContainer"},{"id":"openIdSecret","title":"openIdSecret"},{"default":"0;","id":"openIdIDPList","title":"openIdIDPList","type":"blackWhiteList"}],"help":"authopenid.html","id":"openidParams","show":false,"title":"openidParams"},{"_nodes":[{"default":1,"id":"oidcAuthnLevel","title":"oidcAuthnLevel","type":"int"},{"default":"openidconnectcallback","id":"oidcRPCallbackGetParam","title":"oidcRPCallbackGetParam"},{"default":600,"id":"oidcRPStateTimeout","title":"oidcRPStateTimeout","type":"int"}],"help":"authopenidconnect.html","id":"oidcParams","show":false,"title":"oidcParams","type":"simpleInputContainer"},{"_nodes":[{"default":"","id":"gpgDb","title":"gpgDb"}],"help":"authgpg.html","id":"gpgParams","show":false,"title":"gpgParams","type":"simpleInputContainer"},{"_nodes":[{"id":"proxyAuthService","title":"proxyAuthService"},{"id":"proxySessionService","title":"proxySessionService"},{"id":"remoteCookieName","title":"remoteCookieName"},{"default":2,"id":"proxyAuthnLevel","title":"proxyAuthnLevel","type":"int"},{"default":0,"id":"proxyUseSoap","title":"proxyUseSoap","type":"bool"}],"help":"authproxy.html","id":"proxyParams","show":false,"title":"proxyParams","type":"simpleInputContainer"},{"_nodes":[{"default":"login","id":"pamService","title":"pamService"},{"default":2,"id":"pamAuthnLevel","title":"pamAuthnLevel","type":"int"}],"help":"authpam.html","id":"pamParams","show":false,"title":"pamParams","type":"simpleInputContainer"},{"_nodes":[{"default":3,"id":"radiusAuthnLevel","title":"radiusAuthnLevel","type":"int"},{"id":"radiusSecret","title":"radiusSecret"},{"id":"radiusServer","title":"radiusServer"}],"help":"authradius.html","id":"radiusParams","show":false,"title":"radiusParams","type":"simpleInputContainer"},{"_nodes":[{"id":"restAuthUrl","title":"restAuthUrl"},{"id":"restUserDBUrl","title":"restUserDBUrl"},{"id":"restPwdConfirmUrl","title":"restPwdConfirmUrl"},{"id":"restPwdModifyUrl","title":"restPwdModifyUrl"}],"help":"authrest.html","id":"restParams","show":false,"title":"restParams","type":"simpleInputContainer"},{"_nodes":[{"id":"remotePortal","title":"remotePortal"},{"id":"remoteCookieName","title":"remoteCookieName"},{"default":"Lemonldap::NG::Common::Apache::Session::SOAP","id":"remoteGlobalStorage","title":"remoteGlobalStorage"},{"cnodes":"remoteGlobalStorageOptions","default":[{"data":"http://auth.example.com/Lemonldap/NG/Common/PSGI/SOAPService","id":"remoteGlobalStorageOptions/ns","title":"ns","type":"keyText"},{"data":"http://auth.example.com/sessions","id":"remoteGlobalStorageOptions/proxy","title":"proxy","type":"keyText"}],"id":"remoteGlobalStorageOptions","title":"remoteGlobalStorageOptions","type":"keyTextContainer"}],"help":"authremote.html","id":"remoteParams","show":false,"title":"remoteParams"},{"_nodes":[{"default":2,"id":"slaveAuthnLevel","title":"slaveAuthnLevel","type":"int"},{"cnodes":"slaveExportedVars","default":[],"id":"slaveExportedVars","title":"slaveExportedVars","type":"keyTextContainer"},{"id":"slaveUserHeader","title":"slaveUserHeader"},{"id":"slaveMasterIP","title":"slaveMasterIP"},{"id":"slaveHeaderName","title":"slaveHeaderName"},{"id":"slaveHeaderContent","title":"slaveHeaderContent"}],"help":"authslave.html","id":"slaveParams","show":false,"title":"slaveParams"},{"_nodes":[{"default":5,"id":"SSLAuthnLevel","title":"SSLAuthnLevel","type":"int"},{"default":"SSL_CLIENT_S_DN_Email","id":"SSLVar","title":"SSLVar"},{"cnodes":"SSLVarIf","default":[],"id":"SSLVarIf","title":"SSLVarIf","type":"keyTextContainer"},{"default":0,"id":"sslByAjax","title":"sslByAjax","type":"bool"},{"id":"sslHost","title":"sslHost"}],"help":"authssl.html","id":"sslParams","show":false,"title":"sslParams"},{"_nodes":[{"default":1,"id":"twitterAuthnLevel","title":"twitterAuthnLevel","type":"int"},{"id":"twitterKey","title":"twitterKey"},{"id":"twitterSecret","title":"twitterSecret"},{"id":"twitterAppName","title":"twitterAppName"},{"default":"screen_name","id":"twitterUserField","title":"twitterUserField"}],"help":"authtwitter.html","id":"twitterParams","show":false,"title":"twitterParams","type":"simpleInputContainer"},{"_nodes":[{"default":1,"id":"webIDAuthnLevel","title":"webIDAuthnLevel","type":"int"},{"cnodes":"webIDExportedVars","default":[],"id":"webIDExportedVars","title":"webIDExportedVars","type":"keyTextContainer"},{"id":"webIDWhitelist","title":"webIDWhitelist"}],"help":"authwebid.html","id":"webidParams","show":false,"title":"webidParams"},{"_nodes":[{"id":"customAuth","title":"customAuth"},{"id":"customUserDB","title":"customUserDB"},{"id":"customPassword","title":"customPassword"},{"id":"customRegister","title":"customRegister"},{"cnodes":"customAddParams","id":"customAddParams","title":"customAddParams","type":"keyTextContainer"}],"help":"authcustom.html","id":"customParams","show":false,"title":"customParams"}],"_nodes_filter":"authParams","help":"start.html#authentication_users_and_password_databases","id":"authParams","title":"authParams","type":"authParams"},{"_nodes":[{"_nodes":[{"default":0,"id":"issuerDBSAMLActivation","title":"issuerDBSAMLActivation","type":"bool"},{"default":"^/saml/","id":"issuerDBSAMLPath","title":"issuerDBSAMLPath"},{"default":1,"id":"issuerDBSAMLRule","title":"issuerDBSAMLRule","type":"boolOrExpr"}],"help":"idpsaml.html","id":"issuerDBSAML","title":"issuerDBSAML","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"issuerDBCASActivation","title":"issuerDBCASActivation","type":"bool"},{"default":"^/cas/","id":"issuerDBCASPath","title":"issuerDBCASPath"},{"default":1,"id":"issuerDBCASRule","title":"issuerDBCASRule","type":"boolOrExpr"}],"help":"idpcas.html#enabling_cas","id":"issuerDBCAS","title":"issuerDBCAS","type":"simpleInputContainer"},{"_nodes":[{"default":0,"id":"issuerDBOpenIDActivation","title":"issuerDBOpenIDActivation","type":"bool"},{"default":