Skip to content

Commit

Permalink
[ADD] website_recaptcha_v2_login: Add reCAPTCHA v2 to the login form …
Browse files Browse the repository at this point in the history
…on the website
  • Loading branch information
edescalona committed Dec 2, 2024
1 parent 5a188cc commit c151e59
Show file tree
Hide file tree
Showing 12 changed files with 215 additions and 0 deletions.
6 changes: 6 additions & 0 deletions setup/website_recaptcha_v2_login/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
91 changes: 91 additions & 0 deletions website_recaptcha_v2_login/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
====================
Website reCAPTCHA v2
====================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:55856dbbdf9c9efc1b9b1ebbb33638a0018eda0d91bd6c8c9e30805aa8f2e5b0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fwebsite-lightgray.png?logo=github
:target: https://github.com/OCA/website/tree/16.0/website_recaptcha_v2
:alt: OCA/website
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/website-16-0/website-16-0-website_recaptcha_v2
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/website&target_branch=16.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows to use reCAPTCHA v2 on website forms.

It is a helper module that only provides the widget and the validation logic
which can be used by other modules to actually display it on website forms and
check whether the user entry is valid.

This module originally comes from ``website_recaptcha_reloaded`` from Tech
Receptives, which itself comes from ``website_recaptcha`` from Elico Corp.

**Table of contents**

.. contents::
:local:

Configuration
=============

reCAPTCHA is configured in Settings > Website. It can be enabled or disabled
using the checkbox, and the site and secret keys can be defined there when it
is enabled.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/website/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/website/issues/new?body=module:%20website_recaptcha_v2%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
~~~~~~~

* Binhex

Contributors
~~~~~~~~~~~~

* Edilio Escalona Almira
* `Binhex <https://www.binhex.cloud/>`_:

Maintainers
~~~~~~~~~~~

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/website <https://github.com/OCA/website/tree/16.0/website_recaptcha_v2_login>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
2 changes: 2 additions & 0 deletions website_recaptcha_v2_login/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import models
from . import controllers
17 changes: 17 additions & 0 deletions website_recaptcha_v2_login/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "BINHEX: Website reCAPTCHA v2",
"version": "16.0.1.0.0",
"category": "Website",
"depends": ["web", "website_recaptcha_v2"],
"author": """
Binhex,
Odoo Community Association (OCA)
""",
"license": "AGPL-3",
"website": "https://github.com/OCA/website",
"summary": "Module to add reCAPTCHA v2 to the login form on the website",
"data": [
"views/webclient_templates.xml",
],
"installable": True,
}
1 change: 1 addition & 0 deletions website_recaptcha_v2_login/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import main
39 changes: 39 additions & 0 deletions website_recaptcha_v2_login/controllers/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import logging

from odoo import _, http
from odoo.exceptions import AccessDenied
from odoo.http import request

from odoo.addons.web.controllers.home import SIGN_UP_REQUEST_PARAMS, Home

logger = logging.getLogger(__name__)


class BinhexHome(Home):
@http.route("/web/login", type="http", auth="none")
def web_login(self, redirect=None, **kw):
Website = request.env["website"].sudo()
values = {
k: v for k, v in request.params.items() if k in SIGN_UP_REQUEST_PARAMS
}
if request.httprequest.method == "POST":
request.env["ir.http"]._auth_method_public()
try:
valid = Website.get_current_website().valid_recaptcha(kw)
if valid:
return super().web_login(redirect, **kw)
except AccessDenied as e:
values.update(
{
"error": str(
e.args[0]
if len(e.args) > 0
else _("Recaptcha is not valid.")
)
}
)
response = request.render("web.login", values)
response.headers["X-Frame-Options"] = "SAMEORIGIN"
response.headers["Content-Security-Policy"] = "frame-ancestors 'self'"
return response
return super().web_login(redirect, **kw)
28 changes: 28 additions & 0 deletions website_recaptcha_v2_login/i18n/es.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * binhex_website_recaptcha_v2
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-12-02 16:23+0000\n"
"PO-Revision-Date: 2024-12-02 16:23+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: binhex_website_recaptcha_v2
#. odoo-python
#: code:addons/binhex_website_recaptcha_v2/controllers/main.py:0
#, python-format
msgid "Recaptcha is not valid."
msgstr "Recaptcha no es válido."

#. module: binhex_website_recaptcha_v2
#: model:ir.model,name:binhex_website_recaptcha_v2.model_website
msgid "Website"
msgstr "Sitio web"
1 change: 1 addition & 0 deletions website_recaptcha_v2_login/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import website
21 changes: 21 additions & 0 deletions website_recaptcha_v2_login/models/website.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from odoo import models
from odoo.exceptions import AccessDenied


class Website(models.Model):
_inherit = "website"

# --------------------------------------------------
# METHODS
# --------------------------------------------------
"""
Validating that the recaptcha sent is correct
@params:
kw: Data sent from the form
"""

def valid_recaptcha(self, kw):
valid, message = self.is_recaptcha_v2_valid(kw)
if not valid:
raise AccessDenied(message)
return True
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions website_recaptcha_v2_login/views/webclient_templates.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<template id="binhex_login" inherit_id="web.login">
<xpath expr="//p[hasclass('alert-danger')]" position="before">
<t t-call="website_recaptcha_v2.recaptcha_widget" />
</xpath>
</template>
</odoo>

0 comments on commit c151e59

Please sign in to comment.