From ef134f8ce1495eb00e2870fb15512b91608ff884 Mon Sep 17 00:00:00 2001 From: Maxime Besson Date: Tue, 19 Apr 2022 16:45:11 +0200 Subject: [PATCH] Implement new Captcha API in portal (#2692) --- .../lib/Lemonldap/NG/Portal/Main/Display.pm | 12 +++++++++--- .../lib/Lemonldap/NG/Portal/Main/Init.pm | 9 +++++++++ .../lib/Lemonldap/NG/Portal/Main/Request.pm | 6 ++++-- 3 files changed, 22 insertions(+), 5 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 4e2dec592..7244de077 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm @@ -446,6 +446,15 @@ sub display { } # Display captcha if it's enabled + if ( $req->captchaHtml ) { + %templateParams = + ( %templateParams, CAPTCHA_HTML => $req->captchaHtml, ); + } + if ( $req->token ) { + %templateParams = ( %templateParams, TOKEN => $req->token, ); + } + + # DEPRECATED: This is only used for compatibility with existing templates if ( $req->captcha ) { %templateParams = ( %templateParams, @@ -453,9 +462,6 @@ sub display { CAPTCHA_SIZE => $self->{conf}->{captcha_size} || 6 ); } - if ( $req->token ) { - %templateParams = ( %templateParams, TOKEN => $req->token, ); - } # Show password form if password policy error if ( diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm index 372e2fe41..cd07ea86a 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm @@ -30,6 +30,7 @@ has _authentication => ( is => 'rw' ); has _userDB => ( is => 'rw' ); has _passwordDB => ( is => 'rw' ); has _sfEngine => ( is => 'rw' ); +has _captcha => ( is => 'rw' ); has loadedModules => ( is => 'rw' ); @@ -336,6 +337,14 @@ sub reloadConf { unless $self->{_sfEngine} = $self->loadPlugin( $self->conf->{'sfEngine'} ); + # Load Captcha module + return $self->fail + unless $self->_captcha( + $self->loadPlugin( + $self->conf->{'captcha'} || '::Captcha::SecurityImage' + ) + ); + # Compile macros in _macros, groups in _groups foreach my $type (qw(macros groups)) { $self->{"_$type"} = {}; diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Request.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Request.pm index 7d97bfc25..b2d61823e 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Request.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Request.pm @@ -74,8 +74,10 @@ has lockTime => ( is => 'rw' ); # Security # -# Captcha -has captcha => ( is => 'rw' ); +# Captcha HTML code to display in forms +has captchaHtml => ( is => 'rw' ); +# DEPRECATED: 2.0 captcha compatibility +has captcha => ( is => 'rw' ); # Token has token => ( is => 'rw' );