Merge branch 'v2.0' into findUser

This commit is contained in:
Christophe Maudoux 2021-01-18 12:05:04 +01:00
commit aad6244997
58 changed files with 400 additions and 29682 deletions

View File

@ -1,15 +1,25 @@
.build_job: &job_build
.build_job:
stage: build
script:
- apt-get update && apt-get -y dist-upgrade
# Workaround for bionic
- DEBIAN_FRONTEND=noninteractive apt-get -y install tzdata
- ci-build-pkg
artifacts:
expire_in: 1 hour
paths:
- result/*
except:
variables:
- $SONARJOB == "1"
.debian_build_job:
extends: .build_job
script:
- apt-get update && apt-get -y dist-upgrade
- DEBIAN_FRONTEND=noninteractive apt-get -y install tzdata
- ci-build-pkg
before_script:
- env | grep ^CI_
# Converting to native package...
- sed -i "1{s/-1) /$suffix) /}" debian/changelog
- sed -i "1{s/-2) /$suffix) /}" debian/changelog
- sed -i 's/3.0 (quilt)/3.0 (native)/' debian/source/format
stages:
- build
@ -18,53 +28,42 @@ stages:
before_script:
- env | grep ^CI_
# Converting to native package...
- sed -i "1{s/-1) /$suffix) /}" debian/changelog
- sed -i "1{s/-2) /$suffix) /}" debian/changelog
- sed -i 's/3.0 (quilt)/3.0 (native)/' debian/source/format
build_stretch:
extends: .debian_build_job
image: buildpkg/debian:stretch
<<: *job_build
build_buster:
extends: .debian_build_job
image: buildpkg/debian:buster
<<: *job_build
#build_xenial:
# extends: .debian_build_job
# image: buildpkg/ubuntu:xenial
# <<: *job_build
build_bionic:
extends: .debian_build_job
image: buildpkg/ubuntu:bionic
<<: *job_build
build_centos_7:
extends: .build_job
image: buildpkg/centos:7
stage: build
script:
- rm -f /etc/yum.repos.d/CentOS-Sources.repo
- yum -y install epel-release
- make rpm-dist
- ci-build-pkg
artifacts:
expire_in: 1 day
paths:
- result/*
build_centos_8:
extends: .build_job
image: buildpkg/centos:8
stage: build
script:
- yum-config-manager --enable PowerTools
- yum-config-manager --enable AppStream
- yum -y install epel-release
- make rpm-dist
- ci-build-pkg
artifacts:
expire_in: 1 day
paths:
- result/*
sign:
image: buildpkg/debian:stretch
@ -113,3 +112,25 @@ pages:
only:
- master
sonar-inspect:
image: buildpkg/debian:buster
stage: build
script:
- scripts/sonar
artifacts:
expire_in: 1 hour
paths:
- lemonldap-ng-*/cover_db/sonar_generic.xml
- lemonldap-ng-*/perlcritic_report.txt
only:
variables:
- $SONARJOB == "1"
sonar-upload:
stage: deploy
image: sonarsource/sonar-scanner-cli
script:
- sonar-scanner
only:
variables:
- $SONARJOB == "1"

23
RELEASE
View File

@ -5,7 +5,7 @@ The version
-----------
- The release version should be updated in the following location:
* changelog (add a changelog from GitLab for the target version)
* changelog: change version in scripts/generate-changelog.pl and run it
* Main modules (Common.pm/Handler.pm/Portal.pm/Manager.pm)
* Makefile.PL for cross-dependencies
@ -90,18 +90,21 @@ Upload dist and bundles on sftp://release-up.ow2.org/projects/lemonldap
- RPM: see rpm/REDAME
- DEB:
The DEB repository is hosted on http://lemonldap-ng.org/deb
The DEB repository is hosted on https://lemonldap-ng.org/deb
Copy all generated files (*.deb):
$ scp *.deb lemonldapng@lemonldap-ng.org:incoming/
$ scp *.deb lemonldap-ng@lemonldap-ng.org:incoming/
Then connect on the server and launch reprepro:
$ ssh lemonldapng@lemonldap-ng.org
lemonldapng@lemonldap-ng.org$ cd deb/
lemonldapng@sd-22107:~/deb$ reprepro --ask-passphrase -Vb . includedeb stable ../incoming/*VERSION*deb
lemonldapng@sd-22107:~/deb$ reprepro --ask-passphrase -Vb . includedeb 2.0 ../incoming/*VERSION*deb
On the server, add packages is the appropriate repository, for example:
$ aptly repo add 2.0 incoming/*
$ aptly repo add stable incoming/*
See also reprepro configuration file: 'distributions'
Publish repositories:
$ aptly publish update -gpg-key="57144D2148DD706967DBFF7C548B17BF81F18E7A" 2.0
$ aptly publish update -gpg-key="57144D2148DD706967DBFF7C548B17BF81F18E7A" stable
Remove files from incoming directory:
$ rm incoming/*
- Docker:
Build a new image from https://github.com/LemonLDAPNG/lemonldap-ng-docker
@ -120,7 +123,7 @@ Spread the word
- News on OW2 projects page: https://projects.ow2.org/bin/view/lemonldap-ng/
- Twitter account / Facebook page
- IRC channel subject and Mattermost
- IRC channel subject and OW2 Rocket.Chat channel
- Mailing lists: lemonldap-ng-users / lemonldap-ng-announces
- Optional: blogs and news sites (LinuxFR, etc.)

111
changelog
View File

@ -1,3 +1,114 @@
lemonldap-ng (2.0.10) stable; urgency=medium
* Bugs:
* #1978: can't configure variables to post in virtual host's form replay with lemonldap-cli
* #2245: Manager API does not call reloadUrls
* #2262: SAML: SP-initiated logout does not propagate to external authentication modules
* #2267: LDAP timeout does not apply to search/bind/etc
* #2293: LL:NG 2.0.8 Manager test for external/working SMTP fails @ SSL handshake, terminates connections
* #2304: Error when using SMTP over SSL in CentOS 7
* #2310: Misspelled parameter in call to ldap->search()
* #2315: CheckUser plugin: option rules rely on checked user rather than connected user
* #2318: Manager API: translate JSON booleans to int
* #2332: [security:low] removal of registrable 2F does not test the current authn level
* #2340: lemonldap-ng-cli restore does not work if the config backend is empty
* #2342: Calling logout page for unauthenticated user forces login
* #2344: Enable keepalive on LDAP connections
* #2347: [Manager API] postLogoutRedirectUris should be an array
* #2348: [Manager API] Bad URL in documentation
* #2352: skipRenewConfirmation and skipUpgradeConfirmation options do not work
* #2354: Lemonldap::NG::Common::Conf::msg is never reset and grows indefinitely
* #2355: Password policy checker broken in password reset by mail template
* #2357: CDA query parameter not parsed when query params are reordered
* #2361: Cannot remove OIDC consent from session explorer
* #2364: llngconnexion cookie in the StayConnected-Plugin rejected
* #2365: Check my last logins option does not work with StayConnected plugin
* #2366: StayConnected plugin does not work with 2FA
* #2367: skip rule doesn't work with DevOps handler
* #2369: Memory leak in Issuer::_redirect
* #2373: Remove spaces from generated login when user register account
* #2374: Missing form-check-input class in form groups
* #2375: Refresh session plugin: refresh result is not checked before returning JSON answer
* #2377: Reset expired password process does not work without _whatToTrace macro or if old password is not required
* #2378: Error in inGroup expansion
* #2383: Vhost with wildcard with % sign, configuration not loaded in manager
* #2387: logout does not clear handler cache
* #2399: Local password policy check should be disabled when clicking on "generate password" checkbox
* #2401: Selinux policy blocks cache after restorecon
* #2403: Missing Ldap attribute in CAS ticket if equals 0
* #2410: LDAP connectivity issues on startup cause fatal initialization error when passwordDB=LDAP
* #2411: Javascript error when local password policy configured and password tab disabled in menu
* #2413: checkstate returns error 500 with user parameter
* #2417: Error in cookie name used by lemonldap regexp
* #2420: Auth::SAML should handle missing NameID
* #2425: "Configuration error: xxx SAML metadata has no EntityID" when updating SAML sp in manager API
* #2426: twitter auth fails when coming from oidc/saml/cas service
* #2429: SAML sessions fill up with logout sessions that do not expire
* #2430: Password not updated in session after password change
* #2440: OIDC api: redirect URI not handled at top level during get/update operations
* New features:
* #2336: Adaptative Authentication Plugin
* #2391: Add extended function to test for registered second factor
* #2408: Add Chinese (Taiwan) translation
* Improvements:
* #714: Make password change compatible with Combination
* #716: Make password reset work with Combination
* #2232: lmAttrOrMacro test in Manager is too restrictive
* #2266: local password policy conflicts with LDAP password policy
* #2301: password reset page(s) CSS issues
* #2309: Unintialized $app in CAS Issuer during test
* #2314: CheckUser plugin: Append an option to display computed sessions data
* #2316: "New keys" in saml security configuration should generate a certificate
* #2317: Combination and fail2ban logs
* #2319: Allow the SAML signature alg to be set per-provider
* #2321: Can't save configuration with 2 CAS applications sharing the same hostname
* #2322: Support for SHA384 and SHA512 saml signatures
* #2329: Display a warning if password module is enabled without password backend
* #2330: Allow to configure OIDC claims type
* #2331: Warning in default Nginx configuration
* #2334: GlobalLogout plugin can sometimes found some non-SSO or corrupted sessions
* #2335: apache handler: allow users to override the port/scheme for redirections
* #2339: Plugins refactoring
* #2341: Make SHA256 the default signature method for SAML
* #2345: RGAA recommand alt tags to be empty for decoration images
* #2350: [security:low] Hiding session ids from the manager
* #2356: RGAA 5.4 requires arrays to have defined captions
* #2359: plugin engine for issuers
* #2360: Avoid assignment in expressions
* #2368: StayConnected-Plugin: when user-agent changes login is only possible after deleting cookies
* #2372: Add a domain whitelist to Auth::Kerberos
* #2380: CORS headers not sent by sendError
* #2381: Append a hook to be able to overwrite access log
* #2386: CheckUser does not resolve vhost aliases
* #2388: Allow custom SSL logos when using choice
* #2393: All messages printed in userLogger should use whatToTrace value to log user name
* #2398: CheckUser: Append an option to hide specific headers value depending on tested VHost
* #2404: Force deletion of corrupted sessions in DBI and LDAP backends
* #2406: Possibility to use a different mail for 2FA and password reset
* #2409: Update Spanish translation
* #2414: Manager evaluates macros with Safe Jail whereas useSafeJail has been disabled
* #2422: Missing alt attributes in mail HTML templates
* #2427: Make AssertionConsumerServiceURL available to SAML rules
* #2438: Add a confirmation when deleting second factor
* Templates:
* #2301: password reset page(s) CSS issues
* #2355: Password policy checker broken in password reset by mail template
* #2356: RGAA 5.4 requires arrays to have defined captions
* #2365: Check my last logins option does not work with StayConnected plugin
* #2366: StayConnected plugin does not work with 2FA
* #2374: Missing form-check-input class in form groups
* #2422: Missing alt attributes in mail HTML templates
* #2438: Add a confirmation when deleting second factor
* WebServer Confs:
* #2331: Warning in default Nginx configuration
* #2434: [security:medium] Headers are not deleted for unprotected or skip locations with nginx handler
-- Clément <clem.oudot@gmail.com> Sun, 17 Jan 2021 16:52:38 +0100
lemonldap-ng (2.0.9) stable; urgency=medium
* Bugs:

7
debian/changelog vendored
View File

@ -1,3 +1,10 @@
lemonldap-ng (2.0.10-1) unstable; urgency=medium
* New release. See changes on our website:
https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng
-- Clement OUDOT <clement@oodo.net> Sun, 17 Jan 2021 22:00:00 +0100
lemonldap-ng (2.0.9-1) unstable; urgency=medium
* New release. See changes on our website:

2
debian/control vendored
View File

@ -29,6 +29,7 @@ Build-Depends-Indep: libapache-session-perl <!nocheck>,
libio-string-perl <!nocheck>,
libipc-run-perl <!nocheck>,
libjson-perl <!nocheck>,
libjson-xs-perl <!nocheck>,
liblasso-perl <!nocheck>,
libmime-tools-perl <!nocheck>,
libmouse-perl <!nocheck>,
@ -209,6 +210,7 @@ Depends: ${misc:Depends},
libcrypt-rijndael-perl,
libhtml-template-perl,
libjson-perl,
libjson-xs-perl,
libmouse-perl,
libplack-perl,
liburi-perl,

11
debian/tests/control vendored
View File

@ -1,32 +1,40 @@
# debian/tests/runner launch pkg-perl-autopkgtest tests for each library
Test-Command: ./debian/tests/runner build-deps lemonldap-ng-common
Depends: liblemonldap-ng-common-perl, @builddeps@, pkg-perl-autopkgtest
Features: test-name=common-test
Test-Command: ./debian/tests/runner build-deps lemonldap-ng-handler
Depends: liblemonldap-ng-handler-perl, @builddeps@, pkg-perl-autopkgtest
Features: test-name=handler-test
Test-Command: ./debian/tests/runner build-deps lemonldap-ng-portal
Depends: liblemonldap-ng-portal-perl, @builddeps@, pkg-perl-autopkgtest
Features: test-name=portal-test
Test-Command: ./debian/tests/runner build-deps lemonldap-ng-manager
Depends: liblemonldap-ng-manager-perl, @builddeps@, pkg-perl-autopkgtest
Features: test-name=manager-test
Test-Command: ./debian/tests/runner runtime-deps lemonldap-ng-common
Depends: liblemonldap-ng-common-perl, pkg-perl-autopkgtest, libmouse-perl
Restrictions: superficial, skippable
Features: test-name=runtime-deps-common
# Disable this one: skipped
#Test-Command: ./debian/tests/runner runtime-deps lemonldap-ng-handler
#Depends: liblemonldap-ng-handler-perl, pkg-perl-autopkgtest, libmouse-perl
#Restrictions: superficial, skippable
#Features: test-name=runtime-deps-handler
Test-Command: ./debian/tests/runner runtime-deps lemonldap-ng-portal
Depends: liblemonldap-ng-portal-perl, pkg-perl-autopkgtest, libmouse-perl
Restrictions: superficial, skippable
Features: test-name=runtime-deps-portal
Test-Command: ./debian/tests/runner runtime-deps lemonldap-ng-manager
Depends: liblemonldap-ng-manager-perl, pkg-perl-autopkgtest, libmouse-perl
Restrictions: superficial, skippable
Features: test-name=runtime-deps-manager
# Use pkg-perl-autopkgtest test for runtime-deps-and-recommends
# Some portal suggested dependencies are added here
@ -35,7 +43,10 @@ Depends: @, @builddeps@, pkg-perl-autopkgtest
, libyaml-perl, liblog-log4perl-perl
, libauthen-pam-perl, libauthen-radius-perl
, libweb-id-perl, libio-socket-timeout-perl
, libdatetime-format-rfc3339-perl
Restrictions: superficial
Features: test-name=runtime-deps-and-recommends
#Test-Command: ./debian/tests/runner heavy-deps
#Depends: @, pkg-perl-autopkgtest, pkg-perl-autopkgtest-heavy, libmouse-perl
#Features: test-name=heavy-deps

View File

@ -50,7 +50,7 @@ master_doc = 'start'
# General information about the project.
project = u'LemonLDAP::NG'
copyright = u'2020, LemonLDAP::NG'
copyright = u'2021, LemonLDAP::NG'
author = u'LemonLDAP::NG'
# The version info for the project you're documenting, acts as replacement for

View File

@ -29,6 +29,7 @@ SSLAuthnLevel SSL authentication level
SSLVar ✔
SSLVarIf ✔
activeTimer Enable timers on portal pages ✔
adaptativeAuthenticationLevelRules Adaptative authentication level rules ✔
apacheAuthnLevel Apache authentication level ✔
applicationList Applications list ✔
authChoiceAuthBasic Auth module used by AuthBasic handler ✔
@ -38,14 +39,15 @@ authentication Authentication module
autoSigninRules List of auto signin rules ✔
available2F Available second factor modules ✔ ✔
available2FSelfRegistration Available self-registration modules for second factor ✔ ✔
avoidAssignment Avoid assignment in expressions ✔ ✔
browsersDontStorePassword Avoid browsers to store users password ✔
bruteForceProtection Enable brute force attack protection ✔
bruteForceProtectionIncrementalTempo Enable incremental lock time for brute force attack protection ✔
bruteForceProtectionLockTimes Incremental lock time values for brute force attack protection ✔
bruteForceProtectionMaxAge Brute force attack protection -> Max age between last and first allowed failed login ✔ ✔
bruteForceProtectionMaxFailed Brute force attack protection -> Max allowed failed login ✔
bruteForceProtectionMaxLockTime Brute force attack protection -> Max lock time ✔ ✔
bruteForceProtectionTempo Brute force attack protection -> Tempo before try again
bruteForceProtectionMaxAge Max age between current and first failed login ✔ ✔
bruteForceProtectionMaxFailed Max allowed failed login
bruteForceProtectionMaxLockTime Max lock time ✔ ✔
bruteForceProtectionTempo Lock time
captcha_login_enabled Captcha on login page ✔
captcha_mail_enabled Captcha on password reset page ✔
captcha_register_enabled Captcha on account creation page ✔
@ -77,10 +79,12 @@ checkState Enable CheckState plugin
checkStateSecret Secret token for CheckState plugin ✔
checkTime Timeout to check new configuration in local cache ✔ ✔ ✔
checkUser Enable check user ✔
checkUserDisplayComputedSession Display empty headers rule ✔
checkUserDisplayEmptyHeaders Display empty headers rule ✔
checkUserDisplayEmptyValues Display session empty values rule ✔
checkUserDisplayPersistentInfo Display persistent session info rule ✔
checkUserHiddenAttributes Attributes to hide in CheckUser plugin ✔
checkUserHiddenHeaders Header values to hide if not empty ✔
checkUserIdRule checkUser identities rule ✔
checkUserSearchAttributes Attributes used for retrieving sessions in user DataBase ✔
checkUserUnrestrictedUsersRule checkUser unrestricted users rule ✔
@ -90,6 +94,7 @@ combination Combination rule
compactConf Compact configuration ✔
configStorage Configuration storage ✔ ✔ ✔ ✔
confirmFormMethod HTTP method for confirm page form ✔
contextSwitchingAllowed2fModifications Allowed SFA modifications ✔
contextSwitchingIdRule Context switching identities rule ✔
contextSwitchingPrefix Prefix to store real session Id ✔ ✔
contextSwitchingRule Context switching activation rule ✔
@ -144,6 +149,7 @@ decryptValueFunctions Custom function used for
decryptValueRule Decrypt value activation rule ✔
demoExportedVars Demo exported variables ✔
disablePersistentStorage Enabled persistent storage ✔
displaySessionId Display _session_id with sessions explorer ✔
domain DNS domain ✔ ✔
exportedAttr List of attributes to export by SOAP or REST servers ✔
exportedVars Main exported variables ✔
@ -211,6 +217,7 @@ issuerDBSAMLRule SAML IDP rule
issuersTimeout Token timeout for issuers ✔
jsRedirect Use javascript for redirections ✔
key Secret key ✔
krbAllowedDomains Allowed domains ✔
krbAuthnLevel Null authentication level ✔
krbByJs Launch Kerberos authentication by Ajax ✔
krbKeytab Kerberos keytab ✔
@ -222,6 +229,7 @@ ldapCAFile Location of the certific
ldapCAPath Location of the CA directory for LDAP connections ✔
ldapChangePasswordAsUser ✔
ldapExportedVars LDAP exported variables ✔
ldapGetUserBeforePasswordChange ✔
ldapGroupAttributeName LDAP attribute name for member in groups ✔
ldapGroupAttributeNameGroup LDAP attribute name in group entry referenced as member in groups ✔
ldapGroupAttributeNameSearch LDAP attributes to search in groups ✔
@ -230,6 +238,7 @@ ldapGroupBase
ldapGroupDecodeSearchedValue Decode value before searching it in LDAP groups ✔
ldapGroupObjectClass LDAP object class of groups ✔
ldapGroupRecursive LDAP recursive search in groups ✔
ldapIOTimeout LDAP operation timeout ✔
ldapITDS Support for IBM Tivoli Directory Server ✔
ldapPasswordResetAttribute LDAP password reset attribute ✔
ldapPasswordResetAttributeValue LDAP password reset value ✔
@ -241,7 +250,6 @@ ldapSearchDeref "deref" param of Net::LD
ldapServer LDAP server (host or URI) ✔
ldapSetPassword ✔
ldapTimeout LDAP connection timeout ✔
ldapIOTimeout LDAP operation timeout ✔
ldapUsePasswordResetAttribute LDAP store reset flag in an attribute ✔
ldapVerify Whether to validate LDAP certificates ✔
ldapVersion LDAP protocol version ✔
@ -269,6 +277,7 @@ mail2fBody Mail body for second fac
mail2fCodeRegex Regular expression to create a mail OTP code ✔
mail2fLabel Portal label for Mail second factor ✔
mail2fLogo Custom logo for Mail 2F ✔
mail2fSessionKey Session parameter where mail is stored ✔
mail2fSubject Mail subject for second factor authentication ✔
mail2fTimeout Second factor code timeout ✔
mailBody Custom password reset mail body ✔
@ -360,6 +369,7 @@ openIdSreg_timezone OpenID SREG timezone ses
pamAuthnLevel PAM authentication level ✔
pamService PAM service ✔
passwordDB Password module ✔
passwordPolicyActivation Enable password policy ✔
passwordPolicyMinDigit Password policy: minimal digit characters ✔
passwordPolicyMinLower Password policy: minimal lower characters ✔
passwordPolicyMinSize Password policy: minimal size ✔
@ -377,14 +387,14 @@ portalAntiFrame Avoid portal to be displ
portalCheckLogins Display login history checkbox in portal ✔
portalCustomCss Path to custom CSS file ✔
portalDisplayAppslist Display applications tab in portal ✔
portalDisplayCertificateResetByMail Display Certificate Reset by mail tab in portal
portalDisplayCertificateResetByMail Display certificate reset by mail button in portal
portalDisplayChangePassword Display password tab in portal ✔
portalDisplayGeneratePassword Display password generate box in reset password form ✔
portalDisplayLoginHistory Display login history tab in portal ✔
portalDisplayLogout Display logout tab in portal ✔
portalDisplayOidcConsents Display OIDC consent tab in portal ✔
portalDisplayPasswordPolicy Display policy in password form ✔
portalDisplayRefreshMyRights Displays the link to refresh the user session ✔
portalDisplayRefreshMyRights Display link to refresh the user session
portalDisplayRegister Display register button in portal ✔
portalDisplayResetPassword Display reset password button in portal ✔
portalErrorOnExpiredSession Show error if session is expired ✔
@ -544,6 +554,8 @@ sslHost URL for SSL Ajax request
staticPrefix Prefix of static files for HTML templates ✔ ✔
status Status daemon activation ✔ ✔
stayConnected Enable StayConnected plugin ✔
stayConnectedCookieName Name of the stayConnected plugin cookie ✔
stayConnectedTimeout StayConnected persistent connexion session timeout ✔
storePassword Store password in session ✔
successLoginNumber Number of success stored in login history ✔
syslogFacility Syslog logger technical facility ✔ ✔ ✔ ✔

View File

@ -20,12 +20,23 @@ backups and a rollback plan ready!
2.0.10
------
Security
~~~~~~~~
A vulnerability affecting LemonLDAP::NG installations has been found out when ALL following criteria apply:
* Your handler server uses Nginx
* Your virtual host configuration contains per-URL 'skip' or 'unprotect' access rule
* Your virtual host configuration contains per-URL ``skip`` or ``unprotect`` access rule
In this situation, you have to update your LUA configuration file like ``/etc/nginx/nginx-lua-headers.conf``
In this situation, you have to update your LUA configuration file like ``/etc/nginx/nginx-lua-headers.conf``. See also `issue 2434 <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2434>`__.
Other minor security fixes:
* It is now possible to hide sessions identifier in Manager (parameter ``displaySessionId``). See also `issue 2350 <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2350>`__.
* Second factor management by end user now requires safer conditions. See also `issue 2332 <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2332>`__, `issue 2337 <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2337>`__ and `issue 2338 <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2338>`__.
Main changes
~~~~~~~~~~~~
- New dependency: IO::Socket::Timeout
- TOTP check tolerates forward AND backward clock drift (totp2fRange)
@ -36,6 +47,54 @@ In this situation, you have to update your LUA configuration file like ``/etc/ng
- In the Manager API, postLogoutRedirectUri is now `returned and consumed as an array <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2347>`__
- We fixed a bug that caused SAML sessions to be created and never deleted, you should check your session databases for sessions that have ``"_session_kind": "ISAML"`` but no ``_utime``. You can safely delete SAML sessions with no ``_utime`` during the upgrade.
Portal templates changes
~~~~~~~~~~~~~~~~~~~~~~~~
If you created your own skin and modified some template files, you may need to update them, see below if they have been modified.
No change is required if you are using the default ``bootstrap`` theme.
2FA manager
^^^^^^^^^^^
In ``2fregisters.tpl`` you need to add the ``remove2f`` class to the button that triggers second factor removal:
.. code-block:: diff
- <span device='<TMPL_VAR NAME="type">' epoch='<TMPL_VAR NAME="epoch">' class="btn btn-danger" role="button">
+ <span device='<TMPL_VAR NAME="type">' epoch='<TMPL_VAR NAME="epoch">' class="btn btn-danger remove2f" role="button">
Or, better yet, integrate the changes in ``2fregisters.tpl`` and ``skin.min.js`` into your custom theme to benefit from the `new 2F removal confirmation dialog <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2438>`__
Checkboxes
^^^^^^^^^^
A CSS change has been done in ``styles.css`` to avoid checkbox labels overflow. See `issue 2301 <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2301>`__.
The ``form-check-input`` class is missing in ``register.tpl`` and ``notifinclude.tpl``. See `issue 2374 <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2374>`__.
Password checker
^^^^^^^^^^^^^^^^
Input id values have been modified in ``mail.tpl`` to work with password checker. See `issue 2355 <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2355>`__.
Tables caption
^^^^^^^^^^^^^^
Tables captions have been added in ``sessionArray.tpl``. See `issue 2356 <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2356>`__.
Stay connected
^^^^^^^^^^^^^^
A small change is required in ``checklogins.tpl`` for `issue 2365 <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2365>`__.
Other changes needed in ``2fchoice.tpl``, ``ext2check.tpl``, ``totp2fcheck.tpl``, ``u2fcheck.tpl`` and ``utotp2fcheck.tpl`` for `issue 2366 <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2366>`__.
Mails
^^^^^
The HTML ``alt`` attribute has been added on ``img`` in all ``mail_*.tpl``. See `issue 2422 <https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2422>`__.
2.0.9
-----

View File

@ -76,6 +76,6 @@
],
"x_MailingList" : "mailto:lemonldap-ng-dev@ow2.org"
},
"version" : "v2.0.9",
"x_serialization_backend" : "JSON::PP version 4.02"
"version" : "v2.0.10",
"x_serialization_backend" : "JSON::PP version 4.04"
}

View File

@ -52,5 +52,5 @@ resources:
bugtracker: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/issues
homepage: http://lemonldap-ng.org/
license: http://opensource.org/licenses/GPL-2.0
version: v2.0.9
version: v2.0.10
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'

View File

@ -1,6 +1,6 @@
package Lemonldap::NG::Common;
our $VERSION = '2.0.9';
our $VERSION = '2.0.10';
1;
__END__

View File

@ -45,7 +45,7 @@
},
"requires" : {
"LWP::UserAgent" : "0",
"Lemonldap::NG::Common" : "v2.0.9",
"Lemonldap::NG::Common" : "v2.0.10",
"Mouse" : "0",
"URI" : "0"
}
@ -63,6 +63,6 @@
],
"x_MailingList" : "mailto:lemonldap-ng-dev@ow2.org"
},
"version" : "v2.0.9",
"x_serialization_backend" : "JSON::PP version 4.02"
"version" : "v2.0.10",
"x_serialization_backend" : "JSON::PP version 4.04"
}

View File

@ -30,7 +30,7 @@ recommends:
SOAP::Lite: '0'
requires:
LWP::UserAgent: '0'
Lemonldap::NG::Common: v2.0.9
Lemonldap::NG::Common: v2.0.10
Mouse: '0'
URI: '0'
resources:
@ -39,5 +39,5 @@ resources:
bugtracker: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/issues
homepage: http://lemonldap-ng.org/
license: http://opensource.org/licenses/GPL-2.0
version: v2.0.9
version: v2.0.10
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'

View File

@ -39,7 +39,7 @@ WriteMakefile(
},
},
PREREQ_PM => {
'Lemonldap::NG::Common' => '2.0.9',
'Lemonldap::NG::Common' => '2.0.10',
'LWP::UserAgent' => 0,
'Mouse' => 0,
'URI' => 0,

View File

@ -3,7 +3,7 @@ package Lemonldap::NG::Handler;
# Use the appropriate handler
# For Apache, use Lemonldap::NG::Handler::ApacheMP2
our $VERSION = '2.0.9';
our $VERSION = '2.0.10';
1;

View File

@ -93,11 +93,6 @@ site/htdocs/static/bwr/es5-shim/es5-shim.min.js
site/htdocs/static/bwr/file-saver.js/FileSaver.js
site/htdocs/static/bwr/file-saver.js/FileSaver.min.js
site/htdocs/static/bwr/file-saver.js/FileSaver.min.js.map
site/htdocs/static/bwr/jquery-ui/jquery-ui.js
site/htdocs/static/bwr/jquery-ui/jquery-ui.min.js
site/htdocs/static/bwr/jquery/dist/jquery.js
site/htdocs/static/bwr/jquery/dist/jquery.min.js
site/htdocs/static/bwr/jquery/dist/jquery.min.map
site/htdocs/static/css/manager.css
site/htdocs/static/css/manager.min.css
site/htdocs/static/forms/authChoice.html

View File

@ -40,8 +40,8 @@
"Convert::PEM" : "0",
"Crypt::OpenSSL::RSA" : "0",
"LWP::UserAgent" : "0",
"Lemonldap::NG::Common" : "v2.0.9",
"Lemonldap::NG::Handler" : "v2.0.9"
"Lemonldap::NG::Common" : "v2.0.10",
"Lemonldap::NG::Handler" : "v2.0.10"
}
}
},
@ -57,6 +57,6 @@
],
"x_MailingList" : "mailto:lemonldap-ng-dev@ow2.org"
},
"version" : "v2.0.9",
"x_serialization_backend" : "JSON::PP version 4.02"
"version" : "v2.0.10",
"x_serialization_backend" : "JSON::PP version 4.04"
}

View File

@ -25,13 +25,13 @@ requires:
Convert::PEM: '0'
Crypt::OpenSSL::RSA: '0'
LWP::UserAgent: '0'
Lemonldap::NG::Common: v2.0.9
Lemonldap::NG::Handler: v2.0.9
Lemonldap::NG::Common: v2.0.10
Lemonldap::NG::Handler: v2.0.10
resources:
MailingList: mailto:lemonldap-ng-dev@ow2.org
X_twitter: https://twitter.com/lemonldapng
bugtracker: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/issues
homepage: http://lemonldap-ng.org/
license: http://opensource.org/licenses/GPL-2.0
version: v2.0.9
version: v2.0.10
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'

View File

@ -33,8 +33,8 @@ WriteMakefile(
PREREQ_PM => {
'Convert::PEM' => 0,
'Crypt::OpenSSL::RSA' => 0,
'Lemonldap::NG::Common' => '2.0.9',
'Lemonldap::NG::Handler' => '2.0.9',
'Lemonldap::NG::Common' => '2.0.10',
'Lemonldap::NG::Handler' => '2.0.10',
'LWP::UserAgent' => 0,
}, # e.g., Module::Name => 1.1
(

View File

@ -14,9 +14,7 @@
"angular-ui-tree": "x",
"bootstrap": "3.x",
"es5-shim": "x",
"file-saver.js": "x",
"jquery": "x",
"jquery-ui": "x"
"file-saver.js": "x"
},
"resolutions": {
"angular": "1.7.x"

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -442,8 +442,8 @@
"ldapExportedVars":"المتغيرات المصدرة",
"ldapFilters":"فلتر",
"LDAPFilter":"فلتر الاعْتيادي",
"ldapGroupAttributeName":"السمات المستهدف",
"ldapGetUserBeforePasswordChange":"Search for user before password change",
"ldapGroupAttributeName":"السمات المستهدف",
"ldapGroupAttributeNameGroup":"سمات مصدر المجموعة",
"ldapGroupAttributeNameSearch":"السمات التي تم البحث عنها",
"ldapGroupAttributeNameUser":"سمة مصدر المستخدم",

View File

@ -67,7 +67,7 @@
},
"requires" : {
"Clone" : "0",
"Lemonldap::NG::Handler" : "v2.0.9",
"Lemonldap::NG::Handler" : "v2.0.10",
"Regexp::Assemble" : "0"
}
}
@ -84,6 +84,6 @@
],
"x_MailingList" : "mailto:lemonldap-ng-dev@ow2.org"
},
"version" : "v2.0.9",
"x_serialization_backend" : "JSON::PP version 4.02"
"version" : "v2.0.10",
"x_serialization_backend" : "JSON::PP version 4.04"
}

View File

@ -52,7 +52,7 @@ recommends:
Web::ID: '0'
requires:
Clone: '0'
Lemonldap::NG::Handler: v2.0.9
Lemonldap::NG::Handler: v2.0.10
Regexp::Assemble: '0'
resources:
MailingList: mailto:lemonldap-ng-dev@ow2.org
@ -60,5 +60,5 @@ resources:
bugtracker: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/issues
homepage: http://lemonldap-ng.org/
license: http://opensource.org/licenses/GPL-2.0
version: v2.0.9
version: v2.0.10
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'

View File

@ -61,7 +61,7 @@ WriteMakefile(
},
PREREQ_PM => {
'Clone' => 0,
'Lemonldap::NG::Handler' => '2.0.9',
'Lemonldap::NG::Handler' => '2.0.10',
'Regexp::Assemble' => 0,
},
(

View File

@ -1,7 +1,7 @@
# Alias for Lemonldap::NG::Portal::Main
package Lemonldap::NG::Portal;
our $VERSION = '2.0.9';
our $VERSION = '2.0.10';
use Lemonldap::NG::Portal::Main;
use base 'Lemonldap::NG::Portal::Main';

View File

@ -48,7 +48,7 @@ delete2F = (device, epoch) ->
# Register "click" events
$(document).ready ->
$('body').on 'click', '.btn-danger', () -> delete2F ( $(this).attr 'device' ), ( $(this).attr 'epoch' )
$('body').on 'click', '.remove2f', () -> delete2F ( $(this).attr 'device' ), ( $(this).attr 'epoch' )
$('#goback').attr 'href', portal
$(".data-epoch").each ->
myDate = new Date($(this).text() * 1000)

View File

@ -21,4 +21,17 @@ $(window).on("load", function() {
window.datas.choicetab = e.target.hash.substr(1)
});
// Transmit attributes to remove2f modal
$('#remove2fModal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget) // Button that triggered the modal
var device = button.attr('device') // Extract device/epoch from button
var epoch = button.attr('epoch')
var modal = $(this)
// Set device/epoch on modal remove2f button so that the portal JS code can find it
modal.find('.remove2f').attr('device', device)
modal.find('.remove2f').attr('epoch', epoch)
})
});

View File

@ -1 +1 @@
$(window).on("load",function(){$("div.message-positive").addClass("alert-success"),$("div.message-warning").addClass("alert-warning"),$("div.message-negative").addClass("alert-danger"),$("table.info").addClass("table"),$(".notifCheck").addClass("checkbox"),$('.collapse li[class!="dropdown"]').on("click",function(){$(".navbar-toggler").hasClass("collapsed")||$(".navbar-toggler").trigger("click")}),$("#authMenu .nav-link").on("click",function(a){window.datas.choicetab=a.target.hash.substr(1)})});
$(window).on("load",function(){$("div.message-positive").addClass("alert-success"),$("div.message-warning").addClass("alert-warning"),$("div.message-negative").addClass("alert-danger"),$("table.info").addClass("table"),$(".notifCheck").addClass("checkbox"),$('.collapse li[class!="dropdown"]').on("click",function(){$(".navbar-toggler").hasClass("collapsed")||$(".navbar-toggler").trigger("click")}),$("#authMenu .nav-link").on("click",function(a){window.datas.choicetab=a.target.hash.substr(1)}),$("#remove2fModal").on("show.bs.modal",function(a){var e=$(a.relatedTarget),s=e.attr("device"),t=e.attr("epoch"),n=$(this);n.find(".remove2f").attr("device",s),n.find(".remove2f").attr("epoch",t)})});

View File

@ -1 +1 @@
{"version":3,"sources":["skin.js"],"names":["$","window","on","addClass","hasClass","trigger","e","datas","choicetab","target","hash","substr"],"mappings":"AAAAA,EAAEC,QAAQC,GAAG,OAAQ,WAGnBF,EAAE,wBAAwBG,SAAS,iBACnCH,EAAE,uBAAuBG,SAAS,iBAClCH,EAAE,wBAAwBG,SAAS,gBAEnCH,EAAE,cAAcG,SAAS,SAEzBH,EAAE,eAAeG,SAAS,YAG1BH,EAAE,mCAAmCE,GAAG,QAAS,WAC1CF,EAAE,mBAAmBI,SAAS,cACjCJ,EAAE,mBAAmBK,QAAQ,WAKjCL,EAAE,uBAAuBE,GAAG,QAAS,SAAUI,GAC3CL,OAAOM,MAAMC,UAAYF,EAAEG,OAAOC,KAAKC,OAAO"}
{"version":3,"sources":["skin.js"],"names":["$","window","on","addClass","hasClass","trigger","e","datas","choicetab","target","hash","substr","event","button","relatedTarget","device","attr","epoch","modal","this","find"],"mappings":"AAAAA,EAAEC,QAAQC,GAAG,OAAQ,WAGnBF,EAAE,wBAAwBG,SAAS,iBACnCH,EAAE,uBAAuBG,SAAS,iBAClCH,EAAE,wBAAwBG,SAAS,gBAEnCH,EAAE,cAAcG,SAAS,SAEzBH,EAAE,eAAeG,SAAS,YAG1BH,EAAE,mCAAmCE,GAAG,QAAS,WAC1CF,EAAE,mBAAmBI,SAAS,cACjCJ,EAAE,mBAAmBK,QAAQ,WAKjCL,EAAE,uBAAuBE,GAAG,QAAS,SAAUI,GAC3CL,OAAOM,MAAMC,UAAYF,EAAEG,OAAOC,KAAKC,OAAO,KAIlDX,EAAE,kBAAkBE,GAAG,gBAAiB,SAAUU,GAClD,IAAIC,EAASb,EAAEY,EAAME,eACjBC,EAASF,EAAOG,KAAK,UACrBC,EAAQJ,EAAOG,KAAK,SACpBE,EAAQlB,EAAEmB,MAGdD,EAAME,KAAK,aAAaJ,KAAK,SAAUD,GACvCG,EAAME,KAAK,aAAaJ,KAAK,QAASC"}

View File

@ -67,7 +67,7 @@ LemonLDAP::NG 2F registration script
};
$(document).ready(function() {
$('body').on('click', '.btn-danger', function() {
$('body').on('click', '.remove2f', function() {
return delete2F($(this).attr('device'), $(this).attr('epoch'));
});
$('#goback').attr('href', portal);

View File

@ -1 +1 @@
(function(){var e,t,o;o=function(e,r){return $("#msg").html(window.translate(e)),$("#color").removeClass("message-positive message-warning alert-success alert-warning"),$("#color").addClass("message-"+r),"positive"===r&&(r="success"),$("#color").addClass("alert-"+r)},t=function(e,r,t){var n;if(console.log("Error",t),(n=JSON.parse(e.responseText))&&n.error)return n=n.error.replace(/.* /,""),console.log("Returned error",n),n.match(/module/)?o("notAuthorized","warning"):o(n,"warning")},e=function(e,r){return"U2F"===e?e="u":"UBK"===e?e="yubikey":"TOTP"===e?e="totp":o("u2fFailed","warning"),$.ajax({type:"POST",url:portal+"2fregisters/"+e+"/delete",data:{epoch:r},dataType:"json",error:t,success:function(e){return e.error?e.error.match(/notAuthorized/)?o("notAuthorized","warning"):o("unknownAction","warning"):e.result?($("#delete-"+r).hide(),o("yourKeyIsUnregistered","positive")):void 0},error:t})},$(document).ready(function(){return $("body").on("click",".btn-danger",function(){return e($(this).attr("device"),$(this).attr("epoch"))}),$("#goback").attr("href",portal),$(".data-epoch").each(function(){var e;return e=new Date(1e3*$(this).text()),$(this).text(e.toLocaleString())})})}).call(this);
(function(){var e,t,n;n=function(e,r){return $("#msg").html(window.translate(e)),$("#color").removeClass("message-positive message-warning alert-success alert-warning"),$("#color").addClass("message-"+r),"positive"===r&&(r="success"),$("#color").addClass("alert-"+r)},t=function(e,r,t){var o;if(console.log("Error",t),(o=JSON.parse(e.responseText))&&o.error)return o=o.error.replace(/.* /,""),console.log("Returned error",o),o.match(/module/)?n("notAuthorized","warning"):n(o,"warning")},e=function(e,r){return"U2F"===e?e="u":"UBK"===e?e="yubikey":"TOTP"===e?e="totp":n("u2fFailed","warning"),$.ajax({type:"POST",url:portal+"2fregisters/"+e+"/delete",data:{epoch:r},dataType:"json",error:t,success:function(e){return e.error?e.error.match(/notAuthorized/)?n("notAuthorized","warning"):n("unknownAction","warning"):e.result?($("#delete-"+r).hide(),n("yourKeyIsUnregistered","positive")):void 0},error:t})},$(document).ready(function(){return $("body").on("click",".remove2f",function(){return e($(this).attr("device"),$(this).attr("epoch"))}),$("#goback").attr("href",portal),$(".data-epoch").each(function(){var e;return e=new Date(1e3*$(this).text()),$(this).text(e.toLocaleString())})})}).call(this);

View File

@ -1 +1 @@
{"version":3,"sources":["2fregistration.js"],"names":["delete2F","displayError","setMsg","msg","level","$","html","window","translate","removeClass","addClass","j","status","err","res","console","log","JSON","parse","responseText","error","replace","match","device","epoch","ajax","type","url","portal","data","dataType","success","resp","result","hide","document","ready","on","this","attr","each","myDate","Date","text","toLocaleString","call"],"mappings":"CAMA,WACE,IAAIA,EAAUC,EAAcC,EAE5BA,EAAS,SAASC,EAAKC,GAOrB,OANAC,EAAE,QAAQC,KAAKC,OAAOC,UAAUL,IAChCE,EAAE,UAAUI,YAAY,gEACxBJ,EAAE,UAAUK,SAAS,WAAaN,GACpB,aAAVA,IACFA,EAAQ,WAEHC,EAAE,UAAUK,SAAS,SAAWN,IAGzCH,EAAe,SAASU,EAAGC,EAAQC,GACjC,IAAIC,EAGJ,GAFAC,QAAQC,IAAI,QAASH,IACrBC,EAAMG,KAAKC,MAAMP,EAAEQ,gBACRL,EAAIM,MAGb,OAFAN,EAAMA,EAAIM,MAAMC,QAAQ,MAAO,IAC/BN,QAAQC,IAAI,iBAAkBF,GAC1BA,EAAIQ,MAAM,UACLpB,EAAO,gBAAiB,WAExBA,EAAOY,EAAK,YAKzBd,EAAW,SAASuB,EAAQC,GAU1B,MATe,QAAXD,EACFA,EAAS,IACW,QAAXA,EACTA,EAAS,UACW,SAAXA,EACTA,EAAS,OAETrB,EAAO,YAAa,WAEfG,EAAEoB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,eAAiBL,EAAS,UACxCM,KAAM,CACJL,MAAOA,GAETM,SAAU,OACVV,MAAOnB,EACP8B,QAAS,SAASC,GAChB,OAAIA,EAAKZ,MACHY,EAAKZ,MAAME,MAAM,iBACZpB,EAAO,gBAAiB,WAExBA,EAAO,gBAAiB,WAExB8B,EAAKC,QACd5B,EAAE,WAAamB,GAAOU,OACfhC,EAAO,wBAAyB,kBAFlC,GAKTkB,MAAOnB,KAIXI,EAAE8B,UAAUC,MAAM,WAKhB,OAJA/B,EAAE,QAAQgC,GAAG,QAAS,cAAe,WACnC,OAAOrC,EAASK,EAAEiC,MAAMC,KAAK,UAAWlC,EAAEiC,MAAMC,KAAK,YAEvDlC,EAAE,WAAWkC,KAAK,OAAQX,QACnBvB,EAAE,eAAemC,KAAK,WAC3B,IAAIC,EAEJ,OADAA,EAAS,IAAIC,KAAsB,IAAjBrC,EAAEiC,MAAMK,QACnBtC,EAAEiC,MAAMK,KAAKF,EAAOG,wBAI9BC,KAAKP"}
{"version":3,"sources":["2fregistration.js"],"names":["delete2F","displayError","setMsg","msg","level","$","html","window","translate","removeClass","addClass","j","status","err","res","console","log","JSON","parse","responseText","error","replace","match","device","epoch","ajax","type","url","portal","data","dataType","success","resp","result","hide","document","ready","on","this","attr","each","myDate","Date","text","toLocaleString","call"],"mappings":"CAMA,WACE,IAAIA,EAAUC,EAAcC,EAE5BA,EAAS,SAASC,EAAKC,GAOrB,OANAC,EAAE,QAAQC,KAAKC,OAAOC,UAAUL,IAChCE,EAAE,UAAUI,YAAY,gEACxBJ,EAAE,UAAUK,SAAS,WAAaN,GACpB,aAAVA,IACFA,EAAQ,WAEHC,EAAE,UAAUK,SAAS,SAAWN,IAGzCH,EAAe,SAASU,EAAGC,EAAQC,GACjC,IAAIC,EAGJ,GAFAC,QAAQC,IAAI,QAASH,IACrBC,EAAMG,KAAKC,MAAMP,EAAEQ,gBACRL,EAAIM,MAGb,OAFAN,EAAMA,EAAIM,MAAMC,QAAQ,MAAO,IAC/BN,QAAQC,IAAI,iBAAkBF,GAC1BA,EAAIQ,MAAM,UACLpB,EAAO,gBAAiB,WAExBA,EAAOY,EAAK,YAKzBd,EAAW,SAASuB,EAAQC,GAU1B,MATe,QAAXD,EACFA,EAAS,IACW,QAAXA,EACTA,EAAS,UACW,SAAXA,EACTA,EAAS,OAETrB,EAAO,YAAa,WAEfG,EAAEoB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,eAAiBL,EAAS,UACxCM,KAAM,CACJL,MAAOA,GAETM,SAAU,OACVV,MAAOnB,EACP8B,QAAS,SAASC,GAChB,OAAIA,EAAKZ,MACHY,EAAKZ,MAAME,MAAM,iBACZpB,EAAO,gBAAiB,WAExBA,EAAO,gBAAiB,WAExB8B,EAAKC,QACd5B,EAAE,WAAamB,GAAOU,OACfhC,EAAO,wBAAyB,kBAFlC,GAKTkB,MAAOnB,KAIXI,EAAE8B,UAAUC,MAAM,WAKhB,OAJA/B,EAAE,QAAQgC,GAAG,QAAS,YAAa,WACjC,OAAOrC,EAASK,EAAEiC,MAAMC,KAAK,UAAWlC,EAAEiC,MAAMC,KAAK,YAEvDlC,EAAE,WAAWkC,KAAK,OAAQX,QACnBvB,EAAE,eAAemC,KAAK,WAC3B,IAAIC,EAEJ,OADAA,EAAS,IAAIC,KAAsB,IAAjBrC,EAAEiC,MAAMK,QACnBtC,EAAEiC,MAAMK,KAAKF,EAAOG,wBAI9BC,KAAKP"}

View File

@ -255,6 +255,7 @@
"register":"Register",
"registerRequestAlreadyIssued":"تم إصدار طلب تسجيل لهذا الحساب من قبل",
"rememberChoice":"تذكر اختياري",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"إزالة الجلسات الأخرى",
"renewSession":"Renew session",
"resendConfirmMail":"هل تريد إعادة إرسال رسالة التأكيد؟",

View File

@ -255,6 +255,7 @@
"register":"Registrieren",
"registerRequestAlreadyIssued":"Eine Registrierungsanforderung für dieses Konto wurde bereits gestellt am",
"rememberChoice":"Meine Auswahl merken",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"Andere Sitzungen löschen",
"renewSession":"Renew session",
"resendConfirmMail":"Bestätigungsmail erneuert senden ?",

View File

@ -255,6 +255,7 @@
"register":"Register",
"registerRequestAlreadyIssued":"A register request for this account was already issued on ",
"rememberChoice":"Remember my choice",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"Remove other sessions",
"renewSession":"Renew session",
"resendConfirmMail":"Resend confirmation mail?",

View File

@ -255,6 +255,7 @@
"register":"Registrar",
"registerRequestAlreadyIssued":"Ya fue expedida una solicitud de registro para esta cuenta",
"rememberChoice":"Recordar mi elección",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"Suprimir las otras sesiones",
"renewSession":"Renew session",
"resendConfirmMail":"¿Reenviar e-mail de confirmación?",

View File

@ -255,6 +255,7 @@
"register":"Rekisteröidy",
"registerRequestAlreadyIssued":"A register request for this account was already issued on ",
"rememberChoice":"Muista valintani",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"Remove other sessions",
"renewSession":"Renew session",
"resendConfirmMail":"Uudelleen lähetä vahvistus sähköposti?",

View File

@ -255,6 +255,7 @@
"register": "Enregistrer",
"registerRequestAlreadyIssued":"Une demande de création pour ce compte a déjà été faite le ",
"rememberChoice":"Se souvenir de mon choix",
"remove2fWarning":"Cette action est définitive",
"removeOtherSessions":"Fermer les autres sessions",
"renewSession":"Renouveller la session",
"resendConfirmMail":"Renvoyer le mail de confirmation ?",

View File

@ -255,6 +255,7 @@
"register":"Registra",
"registerRequestAlreadyIssued":"Una richiesta di registrazione per questo conto é già stata rilasciata il",
"rememberChoice":"Ricordarsi della mia scelta",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"Rimuovere altre sessioni",
"renewSession":"Renew session",
"resendConfirmMail":"Inviare nuovamente mail di conferma?",

View File

@ -255,6 +255,7 @@
"register":"Register",
"registerRequestAlreadyIssued":"A register request for this account was already issued on ",
"rememberChoice":"Remember my choice",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"Remove other sessions",
"renewSession":"Renew session",
"resendConfirmMail":"Resend confirmation mail?",

View File

@ -255,6 +255,7 @@
"register":"Zarejestruj",
"registerRequestAlreadyIssued":"Wniosek o rejestrację tego konta został już złożony w dniu ",
"rememberChoice":"Zapamiętaj mój wybór",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"Usuń inne sesje",
"renewSession":"Renew session",
"resendConfirmMail":"Czy wysłać ponownie wiadomość z potwierdzeniem?",

View File

@ -255,6 +255,7 @@
"register":"Register",
"registerRequestAlreadyIssued":"A register request for this account was already issued on ",
"rememberChoice":"Remember my choice",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"Remove other sessions",
"renewSession":"Renew session",
"resendConfirmMail":"Resend confirmation mail?",

View File

@ -255,6 +255,7 @@
"register":"Register",
"registerRequestAlreadyIssued":"A register request for this account was already issued on ",
"rememberChoice":"Remember my choice",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"Remove other sessions",
"renewSession":"Renew session",
"resendConfirmMail":"Resend confirmation mail?",

View File

@ -255,6 +255,7 @@
"register":"Kaydol",
"registerRequestAlreadyIssued":"Bu hesap için kayıt olma isteği zaten şu tarihte alındı:",
"rememberChoice":"Seçimimi hatırla",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"Diğer oturumları sil",
"renewSession":"Oturumu yenile",
"resendConfirmMail":"Doğrulama e-postasını tekrar gönder?",

View File

@ -255,6 +255,7 @@
"register":"Đăng ký",
"registerRequestAlreadyIssued":"Yêu cầu đăng ký cho tài khoản này đã được cấp phát",
"rememberChoice":"Hãy nhớ sự lựa chọn của tôi",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"Xóa các phiên khác",
"renewSession":"Renew session",
"resendConfirmMail":"Gửi lại thư xác nhận?",

View File

@ -255,6 +255,7 @@
"register":"注册",
"registerRequestAlreadyIssued":"此账户已存在一个注册请求",
"rememberChoice":"记住我的选择",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"移除其他会话",
"renewSession":"Renew session",
"resendConfirmMail":"重新发送确认邮件?",

View File

@ -255,6 +255,7 @@
"register":"註冊",
"registerRequestAlreadyIssued":"此帳號的註冊請求已發出",
"rememberChoice":"記住我的選擇",
"remove2fWarning":"This operation cannot be undone",
"removeOtherSessions":"移除其他工作階段",
"renewSession":"更新工作階段",
"resendConfirmMail":"重新傳送確認電子郵件?",

View File

@ -32,7 +32,7 @@
<td class="data-epoch"><TMPL_VAR NAME="epoch"></td>
<td>
<TMPL_IF NAME="delAllowed">
<span device='<TMPL_VAR NAME="type">' epoch='<TMPL_VAR NAME="epoch">' class="btn btn-danger" role="button">
<span device='<TMPL_VAR NAME="type">' epoch='<TMPL_VAR NAME="epoch">' class="btn btn-danger" role="button" data-toggle="modal" data-target="#remove2fModal">
<span class="fa fa-minus-circle"></span>
<span trspan="unregister">Unregister</span>
</span>
@ -46,6 +46,31 @@
</div>
</TMPL_IF>
<div class="modal fade" id="remove2fModal" tabindex="-1" role="dialog" aria-labelledby="remove2fModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="remove2fModalLabel"><span trspan="areYouSure">Are you sure ?</span></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<span trspan="remove2fWarning">This operation cannot be undone</span>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">
<span trspan="cancel">Cancel</span>
</button>
<button type="button" class="btn btn-danger remove2f" data-dismiss="modal">
<span class="fa fa-minus-circle"></span>
<span trspan="unregister">Unregister</span>
</button>
</div>
</div>
</div>
</div>
<div class="text-center mb-3 row">
<TMPL_LOOP NAME="MODULES">
<div class="col">

View File

@ -34,7 +34,7 @@
# Main package
#==============================================================================
Name: lemonldap-ng
Version: 2.0.9
Version: 2.0.10
Release: %{?pre_release:0.}1%{?pre_release:.%{pre_release}}%{?dist}
Summary: LemonLDAP-NG WebSSO
License: GPLv2+
@ -744,6 +744,9 @@ fi
# Changelog
#==============================================================================
%changelog
* Sun Jan 17 2021 Clement Oudot <clem.oudot@gmail.com> - 2.0.10-1
- Update to 2.0.10
* Sun Sep 06 2020 Clement Oudot <clem.oudot@gmail.com> - 2.0.9-1
- Update to 2.0.9

View File

@ -12,7 +12,7 @@
use LWP::UserAgent;
use JSON;
my $milestone = '2.0.9';
my $milestone = '2.0.10';
my @cat = ( 'Bug', 'New feature', 'Improvement', 'Template', 'WebServer Conf' );
open F, "$ENV{HOME}/.ow2-token" or die "Unable to get OW2 token ($!)";

18
scripts/sonar Executable file
View File

@ -0,0 +1,18 @@
#!/bin/sh
mk-build-deps --install --remove \
--tool "apt-get -o Debug::pkgProblemResolver=yes -q -y" \
debian/control
apt -y install libperl-critic-perl libdevel-cover-perl cpanminus
cpanm install Devel::Cover::Report::SonarGeneric
make SKIP_DOCUMENTATION=1
for module in common handler portal manager; do
cd lemonldap-ng-$module
perlcritic --cruel --quiet --verbose "%f~|~%s~|~%l~|~%c~|~%m~|~%e~|~%p~||~%n" lib t > perlcritic_report.txt
cover -delete
HARNESS_PERL_SWITCHES=-MDevel::Cover prove
cover -report SonarGeneric
sed -i "s,path=\"blib,path=\"lemonldap-ng-$module,g" cover_db/sonar_generic.xml
cd ..
done

19
sonar-project.properties Normal file
View File

@ -0,0 +1,19 @@
# must be unique in a given SonarQube instance
# this is the name displayed in the SonarQube UI
sonar.projectName=LemonLDAP::NG
sonar.projectKey=lemonldap-ng
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
sonar.sources=lib
sonar.tests=t
sonar.modules=lemonldap-ng-common,lemonldap-ng-handler,lemonldap-ng-portal,lemonldap-ng-manager
lemonldap-ng-common.sonar.perlcritic.reportPath=lemonldap-ng-common/perlcritic_report.txt
lemonldap-ng-handler.sonar.perlcritic.reportPath=lemonldap-ng-handler/perlcritic_report.txt
lemonldap-ng-portal.sonar.perlcritic.reportPath=lemonldap-ng-portal/perlcritic_report.txt
lemonldap-ng-manager.sonar.perlcritic.reportPath=lemonldap-ng-manager/perlcritic_report.txt
# requires manually fixing file paths in each coverage file
sonar.coverageReportPaths=lemonldap-ng-common/cover_db/sonar_generic.xml,lemonldap-ng-handler/cover_db/sonar_generic.xml,lemonldap-ng-portal/cover_db/sonar_generic.xml,lemonldap-ng-manager/cover_db/sonar_generic.xml