From a9941e043f26b1de9d7762bd6fa08e8811366acd Mon Sep 17 00:00:00 2001 From: Christophe Maudoux Date: Sat, 18 Jun 2022 18:48:37 +0200 Subject: [PATCH] Append an option to customize Manager CSS (#2761) --- e2e-tests/lemonldap-ng-ldap.ini | 1 + e2e-tests/lemonldap-ng-sql.ini | 1 + e2e-tests/lemonldap-ng.ini | 1 + lemonldap-ng-common/lemonldap-ng.ini | 5 ++++- lemonldap-ng-common/lib/Lemonldap/NG/Common/PSGI.pm | 4 +++- lemonldap-ng-manager/MANIFEST | 2 ++ lemonldap-ng-manager/lib/Lemonldap/NG/Manager.pm | 10 ++++------ lemonldap-ng-manager/site/htdocs/static/css/custom.css | 3 +++ .../site/htdocs/static/css/custom.min.css | 1 + lemonldap-ng-manager/site/templates/header.tpl | 3 +++ lemonldap-ng-portal/MANIFEST | 6 ++++-- .../lib/Lemonldap/NG/Portal/Plugins/DecryptValue.pm | 2 +- 12 files changed, 28 insertions(+), 11 deletions(-) create mode 100644 lemonldap-ng-manager/site/htdocs/static/css/custom.css create mode 100644 lemonldap-ng-manager/site/htdocs/static/css/custom.min.css 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; }