[ADD] signup_recaptcha

This commit is contained in:
Boris Gallet
2025-01-02 11:25:09 +01:00
parent d63ebe22b6
commit 7951cd7d9a
18 changed files with 1031 additions and 0 deletions

View File

@@ -0,0 +1,4 @@
# Copyright 2004 Tech-Receptives Solutions Pvt. Ltd.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import res_config
from . import portal_mixin

View File

@@ -0,0 +1,44 @@
# Copyright 2019 Simone Orsi - Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import requests
from odoo import _, api, models
from odoo.exceptions import ValidationError
URL = "https://www.google.com/recaptcha/api/siteverify"
class PortalMixin(models.AbstractModel):
_inherit = "portal.mixin"
@api.model
def _get_error_message(self, errorcode=None):
mapping = {
"missing-input-secret": _("The secret parameter is missing."),
"invalid-input-secret": _("The secret parameter is invalid or malformed."),
"missing-input-response": _("The response parameter is missing."),
"invalid-input-response": _(
"The response parameter is invalid or malformed."
),
}
return mapping.get(errorcode, _("There was a problem with the captcha entry."))
def is_captcha_valid(self, response):
recaptcha_key_secret = (
self.env["ir.config_parameter"]
.sudo()
.get_param("signup_recaptcha.recaptcha_key_secret")
)
get_res = {"secret": recaptcha_key_secret, "response": response}
res = requests.post(URL, data=get_res).json()
error_msg = "\n".join(
self._get_error_message(error) for error in res.get("error-codes", [])
)
if error_msg:
raise ValidationError(error_msg)
if not res.get("success"):
raise ValidationError(self._get_error_message())
return True

View File

@@ -0,0 +1,12 @@
from odoo import fields, models
class PortalConfigSettings(models.TransientModel):
_inherit = "res.config.settings"
recaptcha_key_site = fields.Char(
config_parameter="signup_recaptcha.recaptcha_key_site"
)
recaptcha_key_secret = fields.Char(
config_parameter="signup_recaptcha.recaptcha_key_secret"
)