# HG changeset patch # User Thierry Florac # Date 1564161113 -7200 # Node ID 90b0f5d3f2df4e4777ae3b1c52ef807abfd90f39 # Parent d5f2be8c16ad3bd78aef8f7caeaf513a5aa42c3c Updated recaptcha error handling diff -r d5f2be8c16ad -r 90b0f5d3f2df src/pyams_default_theme/shared/form/__init__.py --- a/src/pyams_default_theme/shared/form/__init__.py Fri Jul 26 15:39:58 2019 +0200 +++ b/src/pyams_default_theme/shared/form/__init__.py Fri Jul 26 19:11:53 2019 +0200 @@ -14,7 +14,7 @@ from pyramid.csrf import get_csrf_token from z3c.form import button, field from z3c.form.interfaces import HIDDEN_MODE -from zope.interface import Interface +from zope.interface import Interface, Invalid from zope.schema import TextLine from pyams_content.features.renderer.interfaces import ISharedContentRenderer @@ -44,6 +44,9 @@ CSRF_FIELD_NAME = 'csrf_token' RECAPTCHA_FIELD_NAME = 'g-recaptcha-response' +MISSING_TOKEN_ERROR = _("Missing recaptcha token!") +INVALID_TOKEN_ERROR = _("Can't verify recaptcha token! Are you a robot?") + class FormFieldContainerInputForm(AddForm): """Form fields container display form""" @@ -112,7 +115,7 @@ del data[CSRF_FIELD_NAME] if self.context.use_captcha: if RECAPTCHA_FIELD_NAME not in data: - self.status = self.request.localizer.translate(_("Missing recaptcha token!")) + self.add_error(Invalid(MISSING_TOKEN_ERROR), RECAPTCHA_FIELD_NAME) return proxies = {'https': self.context.captcha_proxy} if self.context.captcha_proxy else {} recaptcha_verify_api = self.request.registry.settings.get('pyams.recaptcha.verify') @@ -123,8 +126,7 @@ 'response': data[RECAPTCHA_FIELD_NAME] }, proxies=proxies).json() if not verify['success']: - self.status = self.request.localizer.translate( - _("Can't verify recaptcha token! Are you a robot?")) + self.add_error(INVALID_TOKEN_ERROR, RECAPTCHA_FIELD_NAME) return del data[RECAPTCHA_FIELD_NAME] handler.handle(form, data) @@ -200,7 +202,7 @@ class FormSubmitPortletRenderer(ViewContentProvider): """Form submit message portlet renderer""" - use_portlets_cache = True + use_portlets_cache = False def render(self): form = self.view.input_form