Skip to content

Commit 8c34ad8

Browse files
committed
[17.0][FIX] auth_signup_verify_email: ignore captcha fields in passwordless signup
1 parent c229e2d commit 8c34ad8

File tree

2 files changed

+49
-3
lines changed

2 files changed

+49
-3
lines changed

auth_signup_verify_email/controllers/main.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from email_validator import EmailSyntaxError, EmailUndeliverableError, validate_email
77

88
from odoo import _
9+
from odoo.exceptions import UserError, ValidationError
910
from odoo.http import request, route
1011

1112
from odoo.addons.auth_signup.controllers.main import AuthSignupHome
@@ -21,9 +22,23 @@ def web_auth_signup(self, *args, **kw):
2122
return super().web_auth_signup(*args, **kw)
2223

2324
def passwordless_signup(self):
24-
values = request.params
25+
values = dict(request.params)
2526
qcontext = self.get_auth_signup_qcontext()
2627

28+
verify_captcha = getattr(
29+
request.env["ir.http"], "_verify_request_recaptcha_token", None
30+
)
31+
if verify_captcha:
32+
try:
33+
if not verify_captcha("signup"):
34+
qcontext["error"] = _(
35+
"Suspicious activity detected by human verification."
36+
)
37+
return request.render("auth_signup.signup", qcontext)
38+
except (UserError, ValidationError) as error:
39+
qcontext["error"] = str(error)
40+
return request.render("auth_signup.signup", qcontext)
41+
2742
# Check good format of e-mail
2843
try:
2944
validate_email(values.get("login", ""))
@@ -44,8 +59,16 @@ def passwordless_signup(self):
4459
values["email"] = values.get("login")
4560

4661
# remove values that could raise "Invalid field '*' on model 'res.users'"
47-
values.pop("redirect", "")
48-
values.pop("token", "")
62+
for key in (
63+
"redirect",
64+
"token",
65+
"csrf_token",
66+
"confirm_password",
67+
"turnstile_captcha",
68+
"recaptcha_token_response",
69+
"g-recaptcha-response",
70+
):
71+
values.pop(key, "")
4972

5073
# Remove password
5174
values["password"] = ""

auth_signup_verify_email/tests/test_verify_email.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
except ImportError:
99
from unittest.mock import patch
1010

11+
from odoo.exceptions import UserError
1112
from odoo.tests.common import HttpCase
1213
from odoo.tools.misc import mute_logger
1314

@@ -51,3 +52,25 @@ def test_good_email(self):
5152
self.data["login"] = "contributors@odoo-community.org"
5253
doc = self.html_doc(data=self.data)
5354
self.assertTrue(doc.xpath('//p[@class="alert alert-success"]'))
55+
56+
@mute_logger("odoo.addons.auth_signup_verify_email.controllers.main")
57+
def test_good_email_with_captcha_fields(self):
58+
"""Test acceptance when captcha fields are present in POST data."""
59+
self.data["login"] = "contributors@odoo-community.org"
60+
self.data["turnstile_captcha"] = "dummy-turnstile-token"
61+
self.data["recaptcha_token_response"] = "dummy-recaptcha-token"
62+
doc = self.html_doc(data=self.data)
63+
self.assertTrue(doc.xpath('//p[@class="alert alert-success"]'))
64+
65+
@mute_logger("odoo.addons.auth_signup_verify_email.controllers.main")
66+
def test_captcha_verification_error(self):
67+
"""Test rejection when captcha verification raises an error."""
68+
self.data["login"] = "contributors@odoo-community.org"
69+
with patch.object(
70+
type(self.env["ir.http"]),
71+
"_verify_request_recaptcha_token",
72+
side_effect=UserError("Captcha failed"),
73+
create=True,
74+
):
75+
doc = self.html_doc(data=self.data)
76+
self.assertTrue(doc.xpath('//p[@class="alert alert-danger"]'))

0 commit comments

Comments
 (0)