From 5bf912272f509c445106d3c6175bad1c023c5d63 Mon Sep 17 00:00:00 2001 From: Soheil Jafari Date: Thu, 14 Aug 2025 01:33:32 +0330 Subject: [PATCH 1/4] fix(recaptcha): extract token from first list item in clean() --- snowpenguin/django/recaptcha3/fields.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/snowpenguin/django/recaptcha3/fields.py b/snowpenguin/django/recaptcha3/fields.py index 1641d89..a0be7be 100644 --- a/snowpenguin/django/recaptcha3/fields.py +++ b/snowpenguin/django/recaptcha3/fields.py @@ -34,7 +34,8 @@ def clean(self, values): except: return {} - response_token = super(ReCaptchaField, self).clean(values) + super(ReCaptchaField, self).clean(values[0]) + response_token = values[0] try: r = requests.post( From a554bb1443f47f0c1305870be95b9baaed37825a Mon Sep 17 00:00:00 2001 From: Soheil Jafari Date: Thu, 14 Aug 2025 02:19:15 +0330 Subject: [PATCH 2/4] fix: disable reCAPTCHA only when RECAPTCHA_DISABLE is set to true --- snowpenguin/django/recaptcha3/fields.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/snowpenguin/django/recaptcha3/fields.py b/snowpenguin/django/recaptcha3/fields.py index a0be7be..595dddb 100644 --- a/snowpenguin/django/recaptcha3/fields.py +++ b/snowpenguin/django/recaptcha3/fields.py @@ -28,9 +28,9 @@ def __init__(self, attrs=None, *args, **kwargs): def clean(self, values): # Disable the check (and allow empty field value) if we run in a unittest - if os.environ.get('RECAPTCHA_DISABLE', None) is not None: + if os.environ.get('RECAPTCHA_DISABLE', '').lower() == 'true': try: - return json.loads(os.environ.get('RECAPTCHA_DISABLE', None)) + return json.loads(os.environ.get('RECAPTCHA_DISABLE', 'true')) except: return {} From ffd632493022cc5e59818e9e19349d79bf031105 Mon Sep 17 00:00:00 2001 From: Soheil Jafari Date: Thu, 14 Aug 2025 02:38:13 +0330 Subject: [PATCH 3/4] fix: disable reCAPTCHA only when RECAPTCHA_DISABLE is set to true --- snowpenguin/django/recaptcha3/fields.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/snowpenguin/django/recaptcha3/fields.py b/snowpenguin/django/recaptcha3/fields.py index 595dddb..81ad864 100644 --- a/snowpenguin/django/recaptcha3/fields.py +++ b/snowpenguin/django/recaptcha3/fields.py @@ -17,7 +17,8 @@ class ReCaptchaField(forms.CharField): def __init__(self, attrs=None, *args, **kwargs): - if os.environ.get('RECAPTCHA_DISABLE', None) is None: + disable = os.environ.get('RECAPTCHA_DISABLE', '').lower() == 'true' + if not disable: self._private_key = kwargs.pop('private_key', settings.RECAPTCHA_PRIVATE_KEY) self._score_threshold = kwargs.pop('score_threshold', settings.RECAPTCHA_SCORE_THRESHOLD) @@ -30,7 +31,7 @@ def clean(self, values): # Disable the check (and allow empty field value) if we run in a unittest if os.environ.get('RECAPTCHA_DISABLE', '').lower() == 'true': try: - return json.loads(os.environ.get('RECAPTCHA_DISABLE', 'true')) + return {} except: return {} From 013077a67482b82551560f027a4a68a552dab1b0 Mon Sep 17 00:00:00 2001 From: Soheil Jafari Date: Thu, 14 Aug 2025 02:42:15 +0330 Subject: [PATCH 4/4] fix: disable reCAPTCHA only when RECAPTCHA_DISABLE is set to true --- snowpenguin/django/recaptcha3/templatetags/recaptcha3.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/snowpenguin/django/recaptcha3/templatetags/recaptcha3.py b/snowpenguin/django/recaptcha3/templatetags/recaptcha3.py index d398e91..cc51f90 100644 --- a/snowpenguin/django/recaptcha3/templatetags/recaptcha3.py +++ b/snowpenguin/django/recaptcha3/templatetags/recaptcha3.py @@ -41,8 +41,8 @@ def recaptcha_execute(public_key=None, action_name=None, custom_callback=None): def return_empty_context(*args, **kwargs): return '' - -if not os.environ.get('RECAPTCHA_DISABLE', None): +disable = os.environ.get('RECAPTCHA_DISABLE', '').lower() == 'true' +if not disable: register.inclusion_tag(get_template('snowpenguin/recaptcha/recaptcha_init.html'))(recaptcha_init) register.inclusion_tag(get_template('snowpenguin/recaptcha/recaptcha_ready.html'))(recaptcha_ready) register.inclusion_tag(get_template('snowpenguin/recaptcha/recaptcha_execute.html'))(recaptcha_execute)