From 64d55b6a936a4e584e22619a25305c4b35b12998 Mon Sep 17 00:00:00 2001 From: Christophe Maudoux Date: Sat, 2 Oct 2021 22:12:42 +0200 Subject: [PATCH] Mark mandatory fields & Improve unit test (#1976) --- .../lib/Lemonldap/NG/Portal/Main/Display.pm | 20 ++++++++++--------- .../Lemonldap/NG/Portal/Plugins/FindUser.pm | 20 +++++++++++-------- .../site/htdocs/static/languages/ar.json | 1 + .../site/htdocs/static/languages/de.json | 1 + .../site/htdocs/static/languages/en.json | 1 + .../site/htdocs/static/languages/es.json | 1 + .../site/htdocs/static/languages/fi.json | 1 + .../site/htdocs/static/languages/fr.json | 1 + .../site/htdocs/static/languages/it.json | 1 + .../site/htdocs/static/languages/nl.json | 1 + .../site/htdocs/static/languages/pl.json | 1 + .../site/htdocs/static/languages/pt.json | 1 + .../site/htdocs/static/languages/pt_BR.json | 1 + .../site/htdocs/static/languages/ro.json | 1 + .../site/htdocs/static/languages/tr.json | 1 + .../site/htdocs/static/languages/vi.json | 1 + .../site/htdocs/static/languages/zh.json | 1 + .../site/htdocs/static/languages/zh_TW.json | 1 + .../site/templates/bootstrap/finduser.tpl | 5 +++++ ...8-FindUser-with-Demo-and-required-params.t | 15 +++++++++++--- 20 files changed, 56 insertions(+), 20 deletions(-) diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm index d13573855..6058e3f05 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm @@ -501,15 +501,15 @@ sub display { my $plugin = $self->loadedModules->{ "Lemonldap::NG::Portal::Plugins::FindUser"}; - my $fields = []; - my $slogin; + my ( $fields, $slogin, $mandatory ) = ( [], '', 0 ); + if ( $plugin && $self->conf->{findUser} && $self->conf->{impersonationRule} && $self->conf->{findUserSearchingAttributes} ) { $slogin = $req->data->{findUser}; - $fields = $plugin->buildForm(); + ( $fields, $mandatory ) = $plugin->buildForm(); } # Authentication loop @@ -526,6 +526,7 @@ sub display { DISPLAY_OPENID_FORM => 0, DISPLAY_YUBIKEY_FORM => 0, DISPLAY_FINDUSER => scalar @$fields, + MANDATORY => $mandatory, FIELDS => $fields, SPOOFID => $slogin ); @@ -548,9 +549,9 @@ sub display { DISPLAY_YUBIKEY_FORM => $displayType =~ /\byubikeyform\b/ ? 1 : 0, - DISPLAY_SSL_FORM => $displayType =~ /sslform/ ? 1 : 0, - DISPLAY_GPG_FORM => $displayType =~ /gpgform/ ? 1 : 0, - DISPLAY_LOGO_FORM => $displayType eq "logo" ? 1 : 0, + DISPLAY_SSL_FORM => $displayType =~ /sslform/ ? 1 : 0, + DISPLAY_GPG_FORM => $displayType =~ /gpgform/ ? 1 : 0, + DISPLAY_LOGO_FORM => $displayType eq "logo" ? 1 : 0, DISPLAY_FINDUSER => scalar @$fields, module => $displayType eq "logo" ? $self->getModule( $req, 'auth' ) @@ -558,9 +559,10 @@ sub display { AUTH_LOOP => [], PORTAL_URL => ( $displayType eq "logo" ? $self->conf->{portal} : 0 ), - MSG => $req->info(), - FIELDS => $fields, - SPOOFID => $slogin + MSG => $req->info(), + MANDATORY => $mandatory, + FIELDS => $fields, + SPOOFID => $slogin ); } } diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/FindUser.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/FindUser.pm index fb8c558d2..c97413d4c 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/FindUser.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/FindUser.pm @@ -17,7 +17,7 @@ extends qw( ); # INITIALIZATION -has ott => ( +has ott => ( is => 'rw', lazy => 1, default => sub { @@ -82,8 +82,9 @@ sub retreiveFindUserParams { my ( $key, $value, $null ) = split '#', $_; $key =~ s/^(?:\d+_)?//; my $param = $req->params($key) // ''; - my @values = grep s/^(?:\d+_)?//, split ($self->conf->{multiValuesSeparator}, - $self->conf->{findUserSearchingAttributes}->{$_} || ''); + my @values = grep s/^(?:\d+_)?//, + split( $self->conf->{multiValuesSeparator}, + $self->conf->{findUserSearchingAttributes}->{$_} || '' ); my $select = scalar @values > 1 && not scalar @values % 2; my %values = @values if $select; my $defined = length $param; @@ -147,7 +148,7 @@ sub retreiveFindUserParams { sub buildForm { my $self = shift; - my $fields = []; + my ( $fields, @required ) = ( [], () ); $self->logger->debug('Building array ref with searching fields...'); @$fields = @@ -156,6 +157,7 @@ sub buildForm { my @values = split $self->conf->{multiValuesSeparator}, $self->conf->{findUserSearchingAttributes}->{$_} || $key; $key =~ s/^(?:\d+_)?//; + push @required, $key unless $null; my $nbr = scalar @values; if ( $nbr > 1 ) { if ( $nbr % 2 ) { () } @@ -173,9 +175,9 @@ sub buildForm { { select => 1, key => $key, - null => $null, value => $value ? $value : $key, - choices => $choices + choices => $choices, + null => $null }; } } @@ -183,12 +185,14 @@ sub buildForm { { select => 0, key => $key, - value => $values[0] + value => $values[0], + null => $null }; } } sort keys %{ $self->conf->{findUserSearchingAttributes} }; + $self->logger->debug('Mandatory field(s) required') if scalar @required; - return $fields; + return ( $fields, scalar @required ); } sub _sendResult { diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/ar.json b/lemonldap-ng-portal/site/htdocs/static/languages/ar.json index 283622304..bbf6595f5 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/ar.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/ar.json @@ -203,6 +203,7 @@ "mail2f":"Email code", "mailSent2":"تم إرسال رسالة إلى عنوان بريدك الإلكتروني.", "maintenanceMode":"هذا التطبيق في صيانة، يرجى محاولة الاتصال في وقت لاحق", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Maximum number of 2F devices reached!", "missingCode":"Code is missing", "myNotification":"My accepted notification", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/de.json b/lemonldap-ng-portal/site/htdocs/static/languages/de.json index fdcb83e8c..b59c3763b 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/de.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/de.json @@ -203,6 +203,7 @@ "mail2f":"Email code", "mailSent2":"Eine Nachricht wurde an deine E-Mail Adresse gesendet.", "maintenanceMode":"Diese Anwendung ist in Wartung, bitte versuche später eine Verbindung herzustellen", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Maximum number of 2F devices reached!", "missingCode":"Code fehlt", "myNotification":"My accepted notification", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/en.json b/lemonldap-ng-portal/site/htdocs/static/languages/en.json index 3ac76a935..bd822e6eb 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/en.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/en.json @@ -203,6 +203,7 @@ "mail2f":"Email code", "mailSent2":"A message has been sent to your mail address.", "maintenanceMode":"This application is in maintenance, please try to connect later", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Maximum number of 2F devices reached!", "missingCode":"Code is missing", "myNotification":"My accepted notification", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/es.json b/lemonldap-ng-portal/site/htdocs/static/languages/es.json index 243018157..53f10471b 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/es.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/es.json @@ -203,6 +203,7 @@ "mail2f":"Código de e-mail", "mailSent2":"Un mensaje ha sido enviado a su dirección de e-mail", "maintenanceMode":"Aplicación en mantenimiento, por favor intente conectarse luego", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"¡El límite de dispositivos 2F ha sido alcanzado!", "missingCode":"Código faltante", "myNotification":"My accepted notification", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/fi.json b/lemonldap-ng-portal/site/htdocs/static/languages/fi.json index 1a958f687..ea5373716 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/fi.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/fi.json @@ -203,6 +203,7 @@ "mail2f":"Email code", "mailSent2":"Viesti on lähetetty sähköpostiisi.", "maintenanceMode":"This application is in maintenance, please try to connect later", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Maximum number of 2F devices reached!", "missingCode":"Code is missing", "myNotification":"My accepted notification", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/fr.json b/lemonldap-ng-portal/site/htdocs/static/languages/fr.json index 128a2bf93..09fd131f4 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/fr.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/fr.json @@ -203,6 +203,7 @@ "mail2f":"Code par mail", "mailSent2":"Un message a été envoyé à votre adresse mail.", "maintenanceMode":"Cette application est en maintenance, merci de réessayer plus tard", +"mandatoryField":"* Champ obligatoire", "maxNumberof2FDevicesReached":"Nombre maximum de seconds facteurs atteint !", "missingCode":"Code manquant", "myNotification":"Ma notification acceptée", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/it.json b/lemonldap-ng-portal/site/htdocs/static/languages/it.json index 78e1e3bab..d7202eec3 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/it.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/it.json @@ -203,6 +203,7 @@ "mail2f":"Email code", "mailSent2":"Vi é stato inviato un messaggio via mail", "maintenanceMode":"Questa applicazione è in manutenzione, prova a connetterti più tardi", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Raggiunto il numero massimo di dispositivi 2F !", "missingCode":"Manca il codice", "myNotification":"My accepted notification", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/nl.json b/lemonldap-ng-portal/site/htdocs/static/languages/nl.json index 047e0ca00..a739485f9 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/nl.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/nl.json @@ -203,6 +203,7 @@ "mail2f":"Email code", "mailSent2":"A message has been sent to your mail address.", "maintenanceMode":"This application is in maintenance, please try to connect later", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Maximum number of 2F devices reached!", "missingCode":"Code is missing", "myNotification":"My accepted notification", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/pl.json b/lemonldap-ng-portal/site/htdocs/static/languages/pl.json index 758c1f2af..4b1c38214 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/pl.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/pl.json @@ -203,6 +203,7 @@ "mail2f":"Kod e-mail", "mailSent2":"Wiadomość została wysłana na Twój adres e-mail.", "maintenanceMode":"Ta aplikacja jest w trakcie prac serwisowych, spróbuj połączyć się później", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Osiągnięto maksymalną liczbę urządzeń 2F!", "missingCode":"Brakuje kodu", "myNotification":"Moje zaakceptowane powiadomienie", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/pt.json b/lemonldap-ng-portal/site/htdocs/static/languages/pt.json index a7c3fefe3..5b4f4433d 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/pt.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/pt.json @@ -203,6 +203,7 @@ "mail2f":"Email code", "mailSent2":"A message has been sent to your mail address.", "maintenanceMode":"This application is in maintenance, please try to connect later", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Maximum number of 2F devices reached!", "missingCode":"Code is missing", "myNotification":"My accepted notification", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/pt_BR.json b/lemonldap-ng-portal/site/htdocs/static/languages/pt_BR.json index 812d31f74..f2ac61447 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/pt_BR.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/pt_BR.json @@ -203,6 +203,7 @@ "mail2f":"Código do email", "mailSent2":"Uma mensagem foi enviada para o seu endereço de e-mail.", "maintenanceMode":"Este aplicativo está em manutenção. Por favor, tente conectar mais tarde", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Número máximo de dispositivos 2F atingido!", "missingCode":"Falta o código", "myNotification":"Minha notificação aceita", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/ro.json b/lemonldap-ng-portal/site/htdocs/static/languages/ro.json index 744471175..e945d6d77 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/ro.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/ro.json @@ -203,6 +203,7 @@ "mail2f":"Email code", "mailSent2":"A message has been sent to your mail address.", "maintenanceMode":"This application is in maintenance, please try to connect later", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Maximum number of 2F devices reached!", "missingCode":"Code is missing", "myNotification":"My accepted notification", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/tr.json b/lemonldap-ng-portal/site/htdocs/static/languages/tr.json index 8b9f181f7..0c364a4df 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/tr.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/tr.json @@ -203,6 +203,7 @@ "mail2f":"E-posta kodu", "mailSent2":"E-posta adresinize bir mesaj gönderildi.", "maintenanceMode":"Bu uygulama şuan bakımda, lütfen daha sonra bağlanmayı deneyin", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Maksimum 2F cihaz sayısına ulaşıldı!", "missingCode":"Kod eksik", "myNotification":"Kabul edilen bildirimim", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/vi.json b/lemonldap-ng-portal/site/htdocs/static/languages/vi.json index ec62c6d86..74c6e7eb6 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/vi.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/vi.json @@ -203,6 +203,7 @@ "mail2f":"Email code", "mailSent2":"Một tin nhắn đã được gửi đến địa chỉ thư của bạn.", "maintenanceMode":"Ứng dụng này đang trong quá trình bảo trì, hãy thử kết nối sau", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Maximum number of 2F devices reached!", "missingCode":"Code is missing", "myNotification":"My accepted notification", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/zh.json b/lemonldap-ng-portal/site/htdocs/static/languages/zh.json index a2cf62eac..7b8c4f1a1 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/zh.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/zh.json @@ -203,6 +203,7 @@ "mail2f":"Email code", "mailSent2":"已经发送一封邮件到您的邮箱", "maintenanceMode":"程序维护中,请稍后再尝试连接。", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"Maximum number of 2F devices reached!", "missingCode":"Code is missing", "myNotification":"My accepted notification", diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/zh_TW.json b/lemonldap-ng-portal/site/htdocs/static/languages/zh_TW.json index e7b00aff4..3d979a3e2 100644 --- a/lemonldap-ng-portal/site/htdocs/static/languages/zh_TW.json +++ b/lemonldap-ng-portal/site/htdocs/static/languages/zh_TW.json @@ -203,6 +203,7 @@ "mail2f":"電子郵件代碼", "mailSent2":"訊息已傳送到您的電子郵件地址。", "maintenanceMode":"此應用程式正在維護中,請稍後再嘗試連線", +"mandatoryField":"* Mandatory field", "maxNumberof2FDevicesReached":"已達到雙因素驗證裝置的最大數量了!", "missingCode":"代碼遺失", "myNotification":"我已接受的通知", diff --git a/lemonldap-ng-portal/site/templates/bootstrap/finduser.tpl b/lemonldap-ng-portal/site/templates/bootstrap/finduser.tpl index 3e2a544d8..6a44653ed 100644 --- a/lemonldap-ng-portal/site/templates/bootstrap/finduser.tpl +++ b/lemonldap-ng-portal/site/templates/bootstrap/finduser.tpl @@ -27,18 +27,23 @@ + *
" name="" type="text" autocomplete="off" class="form-control" placeholder="" /> + *

+ + * Mandatory field +