diff --git a/e2e-tests/lemonldap-ng-ldap.ini b/e2e-tests/lemonldap-ng-ldap.ini
index 9f2460e06..c46776ddb 100644
--- a/e2e-tests/lemonldap-ng-ldap.ini
+++ b/e2e-tests/lemonldap-ng-ldap.ini
@@ -40,6 +40,7 @@ viewerAllowDiff = 1
staticPrefix = /static
instanceName = Demo
+;customCSS = css/custom.css
languages = fr, en, vi, ar, it, zh, tr, zh_TW, es
templateDir = __pwd__/lemonldap-ng-manager/site/templates
diff --git a/e2e-tests/lemonldap-ng-sql.ini b/e2e-tests/lemonldap-ng-sql.ini
index 17d87ca70..6a0e15903 100644
--- a/e2e-tests/lemonldap-ng-sql.ini
+++ b/e2e-tests/lemonldap-ng-sql.ini
@@ -37,6 +37,7 @@ viewerAllowDiff = 1
staticPrefix = /static
instanceName = Demo
+;customCSS = css/custom.css
languages = fr, en, vi, ar, it, zh, tr, zh_TW, es
templateDir = __pwd__/lemonldap-ng-manager/site/templates
diff --git a/e2e-tests/lemonldap-ng.ini b/e2e-tests/lemonldap-ng.ini
index 59e5bda61..1bd9eaa28 100644
--- a/e2e-tests/lemonldap-ng.ini
+++ b/e2e-tests/lemonldap-ng.ini
@@ -48,6 +48,7 @@ viewerAllowBrowser = 1
viewerAllowDiff = 1
staticPrefix = /static
+;customCSS = css/custom.css
instanceName = Demo
languages = fr, en, vi, ar, it, zh, tr, zh_TW, es
templateDir = __pwd__/lemonldap-ng-manager/site/templates
diff --git a/lemonldap-ng-common/lemonldap-ng.ini b/lemonldap-ng-common/lemonldap-ng.ini
index 43eac464c..96dd33103 100644
--- a/lemonldap-ng-common/lemonldap-ng.ini
+++ b/lemonldap-ng-common/lemonldap-ng.ini
@@ -376,9 +376,12 @@ protection = manager
; staticPrefix: relative (or URL) location of static HTML components
staticPrefix = __MANAGERSTATICDIR__
-;
+
; instanceName: Display current LLNG instance into Manager
;instanceName = Demo
+; customCSS: CSS file to customize Manager
+;customCSS = css/custom.css
+
; location of HTML templates directory
templateDir = __MANAGERTEMPLATESDIR__
diff --git a/lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI.pm b/lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI.pm
index bd5e2226e..5b7aa1d81 100644
--- a/lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI.pm
+++ b/lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI.pm
@@ -6,7 +6,7 @@ use JSON;
use Lemonldap::NG::Common::PSGI::Constants;
use Lemonldap::NG::Common::PSGI::Request;
-our $VERSION = '2.0.10';
+our $VERSION = '2.0.15';
our $_json = JSON->new->allow_nonref;
@@ -18,6 +18,7 @@ has logLevel => ( is => 'rw', isa => 'Str', default => 'info' );
has portal => ( is => 'rw', isa => 'Str' );
has staticPrefix => ( is => 'rw', isa => 'Str' );
has instanceName => ( is => 'rw', isa => 'Str', default => '' );
+has customCSS => ( is => 'rw', isa => 'Str', default => '' );
has templateDir => ( is => 'rw', isa => 'Str|ArrayRef' );
has links => ( is => 'rw', isa => 'ArrayRef' );
has menuLinks => ( is => 'rw', isa => 'ArrayRef' );
@@ -308,6 +309,7 @@ sub sendHtml {
$htpl->param(
STATIC_PREFIX => $sp,
INSTANCE_NAME => $self->instanceName,
+ CUSTOM_CSS => $self->customCSS,
SCRIPTNAME => $sc,
( $self->can('tplParams') ? ( $self->tplParams($req) ) : () ),
(
diff --git a/lemonldap-ng-manager/MANIFEST b/lemonldap-ng-manager/MANIFEST
index 3d9351d24..e1b7ec3f9 100644
--- a/lemonldap-ng-manager/MANIFEST
+++ b/lemonldap-ng-manager/MANIFEST
@@ -93,6 +93,8 @@ 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/css/custom.css
+site/htdocs/static/css/custom.min.css
site/htdocs/static/css/manager.css
site/htdocs/static/css/manager.min.css
site/htdocs/static/forms/authChoice.html
diff --git a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager.pm b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager.pm
index f10d95ca5..44c2f9168 100644
--- a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager.pm
+++ b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager.pm
@@ -183,14 +183,12 @@ sub javascript {
return
'var formPrefix=staticPrefix+"forms/";var confPrefix=scriptname+"confs/";var viewPrefix=scriptname+"view/";'
- . 'var allowDiff=' . "$res;"
- . 'var impPrefix=' . "'"
- . $impPrefix . "'" . ';'
- . 'var sessionTTL=' . "$ttl;"
+ . "var allowDiff=$res;"
+ . "var sessionTTL=$ttl;"
+ . "var impPrefix='$impPrefix';"
. ( $self->links ? 'var links=' . to_json( $self->links ) . ';' : '' )
. (
- $self->menuLinks
- ? 'var menulinks=' . to_json( $self->menuLinks ) . ';'
+ $self->menuLinks ? 'var menulinks=' . to_json( $self->menuLinks ) . ';'
: ''
);
}
diff --git a/lemonldap-ng-manager/site/htdocs/static/css/custom.css b/lemonldap-ng-manager/site/htdocs/static/css/custom.css
new file mode 100644
index 000000000..18ded24c8
--- /dev/null
+++ b/lemonldap-ng-manager/site/htdocs/static/css/custom.css
@@ -0,0 +1,3 @@
+#navbar {
+ background-color: #ffb84d;
+}
\ No newline at end of file
diff --git a/lemonldap-ng-manager/site/htdocs/static/css/custom.min.css b/lemonldap-ng-manager/site/htdocs/static/css/custom.min.css
new file mode 100644
index 000000000..bdd351e68
--- /dev/null
+++ b/lemonldap-ng-manager/site/htdocs/static/css/custom.min.css
@@ -0,0 +1 @@
+#navbar{background-color:#ffb84d}
\ No newline at end of file
diff --git a/lemonldap-ng-manager/site/templates/header.tpl b/lemonldap-ng-manager/site/templates/header.tpl
index 37c14ddb5..e34289584 100644
--- a/lemonldap-ng-manager/site/templates/header.tpl
+++ b/lemonldap-ng-manager/site/templates/header.tpl
@@ -35,4 +35,7 @@
bwr/bootstrap/dist/css/bootstrap-theme.css" />
bwr/angular-bootstrap/ui-bootstrap-csp.css" />
css/manager.css" />
+
+ " />
+
diff --git a/lemonldap-ng-portal/MANIFEST b/lemonldap-ng-portal/MANIFEST
index b98e66b0c..0e8916607 100644
--- a/lemonldap-ng-portal/MANIFEST
+++ b/lemonldap-ng-portal/MANIFEST
@@ -59,8 +59,8 @@ lib/Lemonldap/NG/Portal/Issuer/Get.pm
lib/Lemonldap/NG/Portal/Issuer/OpenID.pm
lib/Lemonldap/NG/Portal/Issuer/OpenIDConnect.pm
lib/Lemonldap/NG/Portal/Issuer/SAML.pm
-lib/Lemonldap/NG/Portal/Lib/_tokenRule.pm
lib/Lemonldap/NG/Portal/Lib/2fDevices.pm
+lib/Lemonldap/NG/Portal/Lib/_tokenRule.pm
lib/Lemonldap/NG/Portal/Lib/Captcha.pm
lib/Lemonldap/NG/Portal/Lib/CAS.pm
lib/Lemonldap/NG/Portal/Lib/Choice.pm
@@ -564,8 +564,8 @@ t/30-Auth-and-issuer-SAML-POST.t
t/30-Auth-and-issuer-SAML-Redirect-IdP-initiated.t
t/30-Auth-and-issuer-SAML-Redirect-MultipleSP-Missing-SLO.t
t/30-Auth-and-issuer-SAML-Redirect-MultipleSP.t
-t/30-Auth-and-issuer-SAML-Redirect.t
t/30-Auth-and-issuer-SAML-Redirect-With-Info.t
+t/30-Auth-and-issuer-SAML-Redirect.t
t/30-Auth-ResolutionRule.t
t/30-Auth-SAML-with-choice.t
t/30-CDC.t
@@ -671,6 +671,7 @@ t/40-Notifications-JSON-Server.t
t/40-Notifications-XML-DBI.t
t/40-Notifications-XML-File.t
t/40-Notifications-XML-Server.t
+t/41-Captcha-old-api.t
t/41-Captcha.t
t/41-Token-with-global-storage.t
t/41-Token.t
@@ -820,6 +821,7 @@ t/99-Bad-logLevel.t
t/99-Dont-load-Dumper.t
t/99-pod.t
t/AfterDataCustomPlugin.pm
+t/CaptchaOldApi.pm
t/CasHookPlugin.pm
t/Custom.pm
t/gpghome/key.asc
diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/DecryptValue.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/DecryptValue.pm
index 84381f7e3..1d4885221 100644
--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/DecryptValue.pm
+++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/DecryptValue.pm
@@ -101,7 +101,7 @@ sub run {
TOKEN => $token,
};
return $self->p->sendJSONresponse( $req, $params )
- if ( $req->wantJSON );
+ if $req->wantJSON;
return $self->p->sendHtml( $req, 'decryptvalue', params => $params )
if $msg;
}