From 633e30ae47af81d87fe6b42e4f36aa88497523d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Gaud=C3=A9?= Date: Fri, 28 May 2021 08:08:42 +0200 Subject: [PATCH] Add flow registration validation support --- Type/CaptchaType.php | 4 +++- Validator/CaptchaValidator.php | 20 +++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Type/CaptchaType.php b/Type/CaptchaType.php index 8e659ea..f1667f7 100644 --- a/Type/CaptchaType.php +++ b/Type/CaptchaType.php @@ -62,7 +62,8 @@ class CaptchaType extends AbstractType sprintf('%s%s', self::SESSION_KEY_PREFIX, $options['session_key']), $options['invalid_message'], $options['bypass_code'], - $options['humanity'] + $options['humanity'], + $options['request'] ); $builder->addEventListener(FormEvents::POST_SUBMIT, array($validator, 'validate')); @@ -121,6 +122,7 @@ class CaptchaType extends AbstractType public function configureOptions(OptionsResolver $resolver) { $this->options['mapped'] = false; + $this->options['request'] = null; $resolver->setDefaults($this->options); } diff --git a/Validator/CaptchaValidator.php b/Validator/CaptchaValidator.php index cdabc8e..6eafe70 100644 --- a/Validator/CaptchaValidator.php +++ b/Validator/CaptchaValidator.php @@ -8,6 +8,7 @@ use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormEvent; use Symfony\Contracts\Translation\TranslatorInterface; +use Symfony\Component\HttpFoundation\Request; /** * Captcha validator. @@ -54,13 +55,21 @@ class CaptchaValidator */ private $translator; + /** + * Request + * + * @var Request + */ + private $req; + public function __construct( TranslatorInterface $translator, SessionInterface $session, string $key, string $invalidMessage, ?string $bypassCode, - int $humanity + int $humanity, + ?Request $req ) { $this->translator = $translator; $this->session = $session; @@ -94,10 +103,11 @@ class CaptchaValidator } } - $this->session->remove($this->key); - - if ($this->session->has($this->key.'_fingerprint')) { - $this->session->remove($this->key.'_fingerprint'); + if (null == $this->req || 1 < $this->req->get('flow_registration_step')) { + $this->session->remove($this->key); + if ($this->session->has($this->key.'_fingerprint')) { + $this->session->remove($this->key.'_fingerprint'); + } } }