From 13f6c146ff5f165db156dcfecdba34e6d556da87 Mon Sep 17 00:00:00 2001
From: George Smirnov
Date: Tue, 17 Jan 2023 00:12:27 +0300
Subject: [PATCH 01/14] [ADD] website_require_login.
---
website_require_login/README.rst | 0
website_require_login/__init__.py | 4 ++
website_require_login/__manifest__.py | 21 ++++++++++
website_require_login/data/ir_actions.xml | 12 ++++++
website_require_login/data/ir_ui_menu.xml | 12 ++++++
website_require_login/models/__init__.py | 5 +++
website_require_login/models/ir_http.py | 36 +++++++++++++++++
.../models/website_auth_url.py | 30 ++++++++++++++
website_require_login/readme/CONTRIBUTORS.rst | 1 +
website_require_login/readme/DESCRIPTION.rst | 1 +
website_require_login/readme/USAGE.rst | 3 ++
.../security/ir.model.access.csv | 2 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
website_require_login/tests/__init__.py | 1 +
website_require_login/tests/test_ir_http.py | 37 ++++++++++++++++++
.../views/website_auth_url.xml | 15 +++++++
16 files changed, 180 insertions(+)
create mode 100644 website_require_login/README.rst
create mode 100644 website_require_login/__init__.py
create mode 100644 website_require_login/__manifest__.py
create mode 100644 website_require_login/data/ir_actions.xml
create mode 100644 website_require_login/data/ir_ui_menu.xml
create mode 100644 website_require_login/models/__init__.py
create mode 100644 website_require_login/models/ir_http.py
create mode 100644 website_require_login/models/website_auth_url.py
create mode 100644 website_require_login/readme/CONTRIBUTORS.rst
create mode 100644 website_require_login/readme/DESCRIPTION.rst
create mode 100644 website_require_login/readme/USAGE.rst
create mode 100644 website_require_login/security/ir.model.access.csv
create mode 100644 website_require_login/static/description/icon.png
create mode 100644 website_require_login/tests/__init__.py
create mode 100644 website_require_login/tests/test_ir_http.py
create mode 100644 website_require_login/views/website_auth_url.xml
diff --git a/website_require_login/README.rst b/website_require_login/README.rst
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/website_require_login/__init__.py b/website_require_login/__init__.py
new file mode 100644
index 0000000000..60cb7a94f1
--- /dev/null
+++ b/website_require_login/__init__.py
@@ -0,0 +1,4 @@
+# Copyright 2020 Advitus MB
+# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
+
+from . import models
diff --git a/website_require_login/__manifest__.py b/website_require_login/__manifest__.py
new file mode 100644
index 0000000000..7dc343fb3e
--- /dev/null
+++ b/website_require_login/__manifest__.py
@@ -0,0 +1,21 @@
+# Copyright 2020 Advitus MB
+# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
+
+{
+ "name": "Website Login Required",
+ "category": "Website",
+ "version": "14.0.1.0.0",
+ "author": "Advitus MB, Ooops, Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/website",
+ "license": "LGPL-3",
+ "depends": [
+ "website",
+ ],
+ "data": [
+ "security/ir.model.access.csv",
+ "views/website_auth_url.xml",
+ "data/ir_actions.xml",
+ "data/ir_ui_menu.xml",
+ ],
+ "installable": True,
+}
diff --git a/website_require_login/data/ir_actions.xml b/website_require_login/data/ir_actions.xml
new file mode 100644
index 0000000000..886a574c39
--- /dev/null
+++ b/website_require_login/data/ir_actions.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ Authorization required URLs
+ website.auth.url
+ tree
+
+ current
+
+
+
diff --git a/website_require_login/data/ir_ui_menu.xml b/website_require_login/data/ir_ui_menu.xml
new file mode 100644
index 0000000000..87d7d56be0
--- /dev/null
+++ b/website_require_login/data/ir_ui_menu.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
diff --git a/website_require_login/models/__init__.py b/website_require_login/models/__init__.py
new file mode 100644
index 0000000000..1705202e27
--- /dev/null
+++ b/website_require_login/models/__init__.py
@@ -0,0 +1,5 @@
+# Copyright 2020 Advitus MB
+# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
+
+from . import ir_http
+from . import website_auth_url
diff --git a/website_require_login/models/ir_http.py b/website_require_login/models/ir_http.py
new file mode 100644
index 0000000000..72ee73b57f
--- /dev/null
+++ b/website_require_login/models/ir_http.py
@@ -0,0 +1,36 @@
+# Copyright 2020 Advitus MB
+# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
+from pathlib import Path
+
+from odoo import models
+from odoo.http import request
+
+
+class IrHttp(models.AbstractModel):
+ _inherit = "ir.http"
+
+ @classmethod
+ def _dispatch(cls):
+ res = super(IrHttp, cls)._dispatch()
+
+ # if not website request - skip
+
+ website = request.env["website"].sudo().get_current_website()
+ if not website:
+ return res
+ if request.uid == website.user_id.id:
+ auth_paths = (
+ request.env["website.auth.url"]
+ .sudo()
+ .search(
+ [
+ ("website_id", "=", website.id),
+ ]
+ )
+ .mapped("path")
+ )
+ path = request.httprequest.path
+ for auth_path in auth_paths:
+ if auth_path == path or Path(auth_path) in Path(path).parents:
+ return request.redirect("/web/login?redirect=%s" % path)
+ return res
diff --git a/website_require_login/models/website_auth_url.py b/website_require_login/models/website_auth_url.py
new file mode 100644
index 0000000000..35a8a4ccd6
--- /dev/null
+++ b/website_require_login/models/website_auth_url.py
@@ -0,0 +1,30 @@
+# Copyright 2020 Advitus MB
+# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
+
+from odoo import fields, models
+
+
+class WebsiteAuthURL(models.Model):
+ _name = "website.auth.url"
+ _description = "Authorization required URLs"
+
+ website_id = fields.Many2one(
+ comodel_name="website",
+ required=True,
+ )
+
+ path = fields.Char(
+ required=True,
+ help=(
+ "Relative URL path and subpath. "
+ "Ex.: /shop will restrict /shop, /shop/product, etc."
+ ),
+ )
+
+ _sql_constraints = [
+ (
+ "path_unique",
+ "unique (website_id, path)",
+ "The path must be unique per website!",
+ )
+ ]
diff --git a/website_require_login/readme/CONTRIBUTORS.rst b/website_require_login/readme/CONTRIBUTORS.rst
new file mode 100644
index 0000000000..b5f195b844
--- /dev/null
+++ b/website_require_login/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Ooops404
diff --git a/website_require_login/readme/DESCRIPTION.rst b/website_require_login/readme/DESCRIPTION.rst
new file mode 100644
index 0000000000..ce26df0921
--- /dev/null
+++ b/website_require_login/readme/DESCRIPTION.rst
@@ -0,0 +1 @@
+This module allows to restrict access to specific website pages to logged users.
diff --git a/website_require_login/readme/USAGE.rst b/website_require_login/readme/USAGE.rst
new file mode 100644
index 0000000000..4c2b178cdf
--- /dev/null
+++ b/website_require_login/readme/USAGE.rst
@@ -0,0 +1,3 @@
+Website > Configuration > Authorization required URLs: select a website and enter a relative path, eg: /shop
+
+When public user will try to access mywebsite.com/shop or any of its child pages, they will be requested to login.
diff --git a/website_require_login/security/ir.model.access.csv b/website_require_login/security/ir.model.access.csv
new file mode 100644
index 0000000000..d4e9707222
--- /dev/null
+++ b/website_require_login/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_website_auth_url,access_website_auth_url,model_website_auth_url,website.group_website_designer,1,1,1,1
diff --git a/website_require_login/static/description/icon.png b/website_require_login/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/website_require_login/tests/__init__.py b/website_require_login/tests/__init__.py
new file mode 100644
index 0000000000..e2983aa2a4
--- /dev/null
+++ b/website_require_login/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_ir_http
diff --git a/website_require_login/tests/test_ir_http.py b/website_require_login/tests/test_ir_http.py
new file mode 100644
index 0000000000..23d31cf2ed
--- /dev/null
+++ b/website_require_login/tests/test_ir_http.py
@@ -0,0 +1,37 @@
+from odoo.tests import HttpCase
+
+
+class TestIrHttp(HttpCase):
+ def setUp(self):
+ super().setUp()
+ self.website = self.env["website"].sudo().get_current_website()
+ self.auth_url = self.env["website.auth.url"].create(
+ {"website_id": self.website.id, "path": "/contactus"}
+ )
+ self.user = self.env["res.users"].create(
+ {"name": "Test User", "login": "test_user", "password": "12345"}
+ )
+ self.path = "/contactus"
+ self.expected_path = "/web/login?redirect=%s" % self.path
+
+ def test_dispatch_unauthorized(self):
+ # Test that an unauthorized user cannot access "/auth_path
+ self.authenticate(None, None)
+ response = self.url_open(self.path, allow_redirects=False)
+ self.assertEqual(
+ response.status_code,
+ 302,
+ "Expected the response status code to be 302 indicating a redirect",
+ )
+
+ self.assertIn(self.expected_path, response.headers["Location"])
+
+ def test_dispatch_authorized(self):
+ # Test that an authorized user can access "/auth_path
+ self.authenticate(user="test_user", password="12345")
+ response = self.url_open(self.path)
+ self.assertEqual(
+ response.status_code,
+ 200,
+ "Expected the response status code to be 200 which means no redirection",
+ )
diff --git a/website_require_login/views/website_auth_url.xml b/website_require_login/views/website_auth_url.xml
new file mode 100644
index 0000000000..c60e9e218b
--- /dev/null
+++ b/website_require_login/views/website_auth_url.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ website.auth.url
+ website.auth.url
+
+
+
+
+
+
+
+
+
From 5bc482dcc6bb04c1990ae531cdfd16cd16548a1b Mon Sep 17 00:00:00 2001
From: oca-ci
Date: Tue, 7 Mar 2023 13:04:43 +0000
Subject: [PATCH 02/14] [UPD] Update website_require_login.pot
---
.../i18n/website_require_login.pot | 87 +++++++++++++++++++
1 file changed, 87 insertions(+)
create mode 100644 website_require_login/i18n/website_require_login.pot
diff --git a/website_require_login/i18n/website_require_login.pot b/website_require_login/i18n/website_require_login.pot
new file mode 100644
index 0000000000..d982b85332
--- /dev/null
+++ b/website_require_login/i18n/website_require_login.pot
@@ -0,0 +1,87 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * website_require_login
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \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: website_require_login
+#: model:ir.actions.act_window,name:website_require_login.action_website_auth_url
+#: model:ir.model,name:website_require_login.model_website_auth_url
+#: model:ir.ui.menu,name:website_require_login.menu_website_auth_url
+#: model_terms:ir.ui.view,arch_db:website_require_login.website_auth_url_tree_view
+msgid "Authorization required URLs"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_ir_http__display_name
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model,name:website_require_login.model_ir_http
+msgid "HTTP Routing"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_ir_http__id
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__id
+msgid "ID"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_ir_http____last_update
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__path
+msgid "Path"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,help:website_require_login.field_website_auth_url__path
+msgid ""
+"Relative URL path and subpath. Ex.: /shop will restrict /shop, "
+"/shop/product, etc."
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.constraint,message:website_require_login.constraint_website_auth_url_path_unique
+msgid "The path must be unique per website!"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__website_id
+msgid "Website"
+msgstr ""
From e75ce7a801612cf8a3da6a76eab7530df8b8d669 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Tue, 7 Mar 2023 13:07:24 +0000
Subject: [PATCH 03/14] [UPD] README.rst
---
website_require_login/README.rst | 81 ++++
.../static/description/index.html | 426 ++++++++++++++++++
2 files changed, 507 insertions(+)
create mode 100644 website_require_login/static/description/index.html
diff --git a/website_require_login/README.rst b/website_require_login/README.rst
index e69de29bb2..1c26eddb17 100644
--- a/website_require_login/README.rst
+++ b/website_require_login/README.rst
@@ -0,0 +1,81 @@
+======================
+Website Login Required
+======================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |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-LGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
+ :alt: License: LGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fwebsite-lightgray.png?logo=github
+ :target: https://github.com/OCA/website/tree/14.0/website_require_login
+ :alt: OCA/website
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/website-14-0/website-14-0-website_require_login
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/186/14.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module allows to restrict access to specific website pages to logged users.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+Website > Configuration > Authorization required URLs: select a website and enter a relative path, eg: /shop
+
+When public user will try to access mywebsite.com/shop or any of its child pages, they will be requested to login.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Advitus MB
+* Ooops
+
+Contributors
+~~~~~~~~~~~~
+
+* Ooops404
+
+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 `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/website_require_login/static/description/index.html b/website_require_login/static/description/index.html
new file mode 100644
index 0000000000..d2a75b8265
--- /dev/null
+++ b/website_require_login/static/description/index.html
@@ -0,0 +1,426 @@
+
+
+
+
+
+
+Website Login Required
+
+
+
+
+
Website Login Required
+
+
+

+
This module allows to restrict access to specific website pages to logged users.
+
Table of contents
+
+
+
+
Website > Configuration > Authorization required URLs: select a website and enter a relative path, eg: /shop
+
When public user will try to access mywebsite.com/shop or any of its child pages, they will be requested to login.
+
+
+
+
Bugs are tracked on GitHub Issues.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+

+
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 project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
From 7af9fc22e1110483a86a23b890e4dac879cf7e7c Mon Sep 17 00:00:00 2001
From: Francesco Foresti
Date: Tue, 7 Mar 2023 16:11:02 +0000
Subject: [PATCH 04/14] Added translation using Weblate (Italian)
---
website_require_login/i18n/it.po | 88 ++++++++++++++++++++++++++++++++
1 file changed, 88 insertions(+)
create mode 100644 website_require_login/i18n/it.po
diff --git a/website_require_login/i18n/it.po b/website_require_login/i18n/it.po
new file mode 100644
index 0000000000..49c33b0861
--- /dev/null
+++ b/website_require_login/i18n/it.po
@@ -0,0 +1,88 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * website_require_login
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. module: website_require_login
+#: model:ir.actions.act_window,name:website_require_login.action_website_auth_url
+#: model:ir.model,name:website_require_login.model_website_auth_url
+#: model:ir.ui.menu,name:website_require_login.menu_website_auth_url
+#: model_terms:ir.ui.view,arch_db:website_require_login.website_auth_url_tree_view
+msgid "Authorization required URLs"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_ir_http__display_name
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model,name:website_require_login.model_ir_http
+msgid "HTTP Routing"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_ir_http__id
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__id
+msgid "ID"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_ir_http____last_update
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__path
+msgid "Path"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,help:website_require_login.field_website_auth_url__path
+msgid ""
+"Relative URL path and subpath. Ex.: /shop will restrict /shop, "
+"/shop/product, etc."
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.constraint,message:website_require_login.constraint_website_auth_url_path_unique
+msgid "The path must be unique per website!"
+msgstr ""
+
+#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__website_id
+msgid "Website"
+msgstr ""
From 90ab3e3e3fc00ab5c9b5d81157926a28180c5a6d Mon Sep 17 00:00:00 2001
From: Francesco Foresti
Date: Tue, 7 Mar 2023 16:11:23 +0000
Subject: [PATCH 05/14] Translated using Weblate (Italian)
Currently translated at 100.0% (13 of 13 strings)
Translation: website-14.0/website-14.0-website_require_login
Translate-URL: https://translation.odoo-community.org/projects/website-14-0/website-14-0-website_require_login/it/
---
website_require_login/i18n/it.po | 30 +++++++++++++++++-------------
1 file changed, 17 insertions(+), 13 deletions(-)
diff --git a/website_require_login/i18n/it.po b/website_require_login/i18n/it.po
index 49c33b0861..2e30f88e06 100644
--- a/website_require_login/i18n/it.po
+++ b/website_require_login/i18n/it.po
@@ -6,13 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2023-03-07 19:22+0000\n"
+"Last-Translator: Francesco Foresti \n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.14.1\n"
#. module: website_require_login
#: model:ir.actions.act_window,name:website_require_login.action_website_auth_url
@@ -20,55 +22,55 @@ msgstr ""
#: model:ir.ui.menu,name:website_require_login.menu_website_auth_url
#: model_terms:ir.ui.view,arch_db:website_require_login.website_auth_url_tree_view
msgid "Authorization required URLs"
-msgstr ""
+msgstr "URL che richiedono il login"
#. module: website_require_login
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__create_uid
msgid "Created by"
-msgstr ""
+msgstr "Creato da"
#. module: website_require_login
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__create_date
msgid "Created on"
-msgstr ""
+msgstr "Creato il"
#. module: website_require_login
#: model:ir.model.fields,field_description:website_require_login.field_ir_http__display_name
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__display_name
msgid "Display Name"
-msgstr ""
+msgstr "Nome visualizzato"
#. module: website_require_login
#: model:ir.model,name:website_require_login.model_ir_http
msgid "HTTP Routing"
-msgstr ""
+msgstr "Instradamento HTTP"
#. module: website_require_login
#: model:ir.model.fields,field_description:website_require_login.field_ir_http__id
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__id
msgid "ID"
-msgstr ""
+msgstr "ID"
#. module: website_require_login
#: model:ir.model.fields,field_description:website_require_login.field_ir_http____last_update
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url____last_update
msgid "Last Modified on"
-msgstr ""
+msgstr "Ultima modifica il"
#. module: website_require_login
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__write_uid
msgid "Last Updated by"
-msgstr ""
+msgstr "Ultimo aggiornamento di"
#. module: website_require_login
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__write_date
msgid "Last Updated on"
-msgstr ""
+msgstr "Ultimo aggiornamento il"
#. module: website_require_login
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__path
msgid "Path"
-msgstr ""
+msgstr "Percorso"
#. module: website_require_login
#: model:ir.model.fields,help:website_require_login.field_website_auth_url__path
@@ -76,13 +78,15 @@ msgid ""
"Relative URL path and subpath. Ex.: /shop will restrict /shop, "
"/shop/product, etc."
msgstr ""
+"Percorso e sotto-percorso relativo all'URL, es: /shop limiterà l'accesso sia "
+"a /shop che a /shop/product, etc."
#. module: website_require_login
#: model:ir.model.constraint,message:website_require_login.constraint_website_auth_url_path_unique
msgid "The path must be unique per website!"
-msgstr ""
+msgstr "Il percorso deve essere univoco per sito web!"
#. module: website_require_login
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__website_id
msgid "Website"
-msgstr ""
+msgstr "Sito web"
From 3e5c4abdcd97d450469d198e7b8dc96a615cfb8e Mon Sep 17 00:00:00 2001
From: Hai Lang
Date: Tue, 27 Jun 2023 11:03:43 +0700
Subject: [PATCH 06/14] [MIG] website_require_login: Migration to 16.0
[UPD] Update website_require_login.pot
[UPD] README.rst
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.
Translation: website-16.0/website-16.0-website_require_login
Translate-URL: https://translation.odoo-community.org/projects/website-16-0/website-16-0-website_require_login/
[UPD] README.rst
---
website_require_login/README.rst | 23 +++++----
website_require_login/__manifest__.py | 2 +-
website_require_login/i18n/it.po | 8 +--
.../i18n/website_require_login.pot | 6 +--
website_require_login/models/ir_http.py | 50 ++++++++++++-------
.../static/description/index.html | 42 ++++++++--------
website_require_login/tests/test_ir_http.py | 2 +-
.../views/website_auth_url.xml | 2 +-
8 files changed, 72 insertions(+), 63 deletions(-)
diff --git a/website_require_login/README.rst b/website_require_login/README.rst
index 1c26eddb17..adcca320a6 100644
--- a/website_require_login/README.rst
+++ b/website_require_login/README.rst
@@ -2,10 +2,13 @@
Website Login Required
======================
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:a0f16f0655f6b5b9eec2c2e621f35dbcc40c69a3c5353dec8b07ddfab1874313
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
@@ -14,16 +17,16 @@ Website Login Required
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fwebsite-lightgray.png?logo=github
- :target: https://github.com/OCA/website/tree/14.0/website_require_login
+ :target: https://github.com/OCA/website/tree/16.0/website_require_login
:alt: OCA/website
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/website-14-0/website-14-0-website_require_login
+ :target: https://translation.odoo-community.org/projects/website-16-0/website-16-0-website_require_login
:alt: Translate me on Weblate
-.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/186/14.0
- :alt: Try me on Runbot
+.. |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|
+|badge1| |badge2| |badge3| |badge4| |badge5|
This module allows to restrict access to specific website pages to logged users.
@@ -44,8 +47,8 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
-If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -76,6 +79,6 @@ 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 `_ project on GitHub.
+This module is part of the `OCA/website `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/website_require_login/__manifest__.py b/website_require_login/__manifest__.py
index 7dc343fb3e..b93f320c18 100644
--- a/website_require_login/__manifest__.py
+++ b/website_require_login/__manifest__.py
@@ -4,7 +4,7 @@
{
"name": "Website Login Required",
"category": "Website",
- "version": "14.0.1.0.0",
+ "version": "16.0.1.0.0",
"author": "Advitus MB, Ooops, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/website",
"license": "LGPL-3",
diff --git a/website_require_login/i18n/it.po b/website_require_login/i18n/it.po
index 2e30f88e06..394662b018 100644
--- a/website_require_login/i18n/it.po
+++ b/website_require_login/i18n/it.po
@@ -20,7 +20,6 @@ msgstr ""
#: model:ir.actions.act_window,name:website_require_login.action_website_auth_url
#: model:ir.model,name:website_require_login.model_website_auth_url
#: model:ir.ui.menu,name:website_require_login.menu_website_auth_url
-#: model_terms:ir.ui.view,arch_db:website_require_login.website_auth_url_tree_view
msgid "Authorization required URLs"
msgstr "URL che richiedono il login"
@@ -35,7 +34,6 @@ msgid "Created on"
msgstr "Creato il"
#. module: website_require_login
-#: model:ir.model.fields,field_description:website_require_login.field_ir_http__display_name
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
@@ -46,13 +44,11 @@ msgid "HTTP Routing"
msgstr "Instradamento HTTP"
#. module: website_require_login
-#: model:ir.model.fields,field_description:website_require_login.field_ir_http__id
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__id
msgid "ID"
msgstr "ID"
#. module: website_require_login
-#: model:ir.model.fields,field_description:website_require_login.field_ir_http____last_update
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
@@ -75,8 +71,8 @@ msgstr "Percorso"
#. module: website_require_login
#: model:ir.model.fields,help:website_require_login.field_website_auth_url__path
msgid ""
-"Relative URL path and subpath. Ex.: /shop will restrict /shop, "
-"/shop/product, etc."
+"Relative URL path and subpath. Ex.: /shop will restrict /shop, /shop/"
+"product, etc."
msgstr ""
"Percorso e sotto-percorso relativo all'URL, es: /shop limiterà l'accesso sia "
"a /shop che a /shop/product, etc."
diff --git a/website_require_login/i18n/website_require_login.pot b/website_require_login/i18n/website_require_login.pot
index d982b85332..0986a2318d 100644
--- a/website_require_login/i18n/website_require_login.pot
+++ b/website_require_login/i18n/website_require_login.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 14.0\n"
+"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -17,7 +17,6 @@ msgstr ""
#: model:ir.actions.act_window,name:website_require_login.action_website_auth_url
#: model:ir.model,name:website_require_login.model_website_auth_url
#: model:ir.ui.menu,name:website_require_login.menu_website_auth_url
-#: model_terms:ir.ui.view,arch_db:website_require_login.website_auth_url_tree_view
msgid "Authorization required URLs"
msgstr ""
@@ -32,7 +31,6 @@ msgid "Created on"
msgstr ""
#. module: website_require_login
-#: model:ir.model.fields,field_description:website_require_login.field_ir_http__display_name
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__display_name
msgid "Display Name"
msgstr ""
@@ -43,13 +41,11 @@ msgid "HTTP Routing"
msgstr ""
#. module: website_require_login
-#: model:ir.model.fields,field_description:website_require_login.field_ir_http__id
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__id
msgid "ID"
msgstr ""
#. module: website_require_login
-#: model:ir.model.fields,field_description:website_require_login.field_ir_http____last_update
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url____last_update
msgid "Last Modified on"
msgstr ""
diff --git a/website_require_login/models/ir_http.py b/website_require_login/models/ir_http.py
index 72ee73b57f..bcfea63b96 100644
--- a/website_require_login/models/ir_http.py
+++ b/website_require_login/models/ir_http.py
@@ -10,27 +10,39 @@ class IrHttp(models.AbstractModel):
_inherit = "ir.http"
@classmethod
- def _dispatch(cls):
- res = super(IrHttp, cls)._dispatch()
+ def _dispatch(cls, endpoint):
+ res = cls._check_require_auth()
+ if res:
+ return res
+ return super()._dispatch(endpoint)
- # if not website request - skip
+ @classmethod
+ def _serve_fallback(cls):
+ res = cls._check_require_auth()
+ if res:
+ return res
+ return super()._serve_fallback()
+ @classmethod
+ def _check_require_auth(cls):
+ # if not website request - skip
website = request.env["website"].sudo().get_current_website()
if not website:
- return res
- if request.uid == website.user_id.id:
- auth_paths = (
- request.env["website.auth.url"]
- .sudo()
- .search(
- [
- ("website_id", "=", website.id),
- ]
- )
- .mapped("path")
+ return None
+ if request.uid and (request.uid != website.user_id.id):
+ return None
+ auth_paths = (
+ request.env["website.auth.url"]
+ .sudo()
+ .search(
+ [
+ ("website_id", "=", website.id),
+ ]
)
- path = request.httprequest.path
- for auth_path in auth_paths:
- if auth_path == path or Path(auth_path) in Path(path).parents:
- return request.redirect("/web/login?redirect=%s" % path)
- return res
+ .mapped("path")
+ )
+ path = request.httprequest.path
+ for auth_path in auth_paths:
+ if auth_path == path or Path(auth_path) in Path(path).parents:
+ redirect_path = "/web/login?redirect=%s" % path
+ return request.redirect(redirect_path, code=302)
diff --git a/website_require_login/static/description/index.html b/website_require_login/static/description/index.html
index d2a75b8265..3d6268bacf 100644
--- a/website_require_login/static/description/index.html
+++ b/website_require_login/static/description/index.html
@@ -1,20 +1,20 @@
-
+
-
+
Website Login Required
-
-
Website Login Required
+
+
+
+
+
+
+
Website Login Required
-

+

This module allows to restrict access to specific website pages to
logged users.
Table of contents
@@ -386,38 +391,38 @@
Website Login Required
-
+
Website > Configuration > Authorization required URLs: select a website
and enter a relative path, eg: /shop
When public user will try to access mywebsite.com/shop or any of its
child pages, they will be requested to login.
-
+
Bugs are tracked on GitHub 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.
+
feedback.
Do not contact contributors directly about support or help with technical issues.
+
diff --git a/website_require_login/tests/test_ir_http.py b/website_require_login/tests/test_ir_http.py
index b599e46b32..6782fa377b 100644
--- a/website_require_login/tests/test_ir_http.py
+++ b/website_require_login/tests/test_ir_http.py
@@ -13,7 +13,7 @@ def setUpClass(cls):
{"name": "Test User", "login": "test_user", "password": "12345"}
)
cls.path = "/contactus"
- cls.expected_path = "/web/login?redirect=%s" % cls.path
+ cls.expected_path = f"/web/login?redirect={cls.path}"
def test_dispatch_unauthorized(self):
# Test that a public user cannot access "/auth_path
diff --git a/website_require_login/views/website_auth_url.xml b/website_require_login/views/website_auth_url.xml
index c6842ca7aa..21344ecd50 100644
--- a/website_require_login/views/website_auth_url.xml
+++ b/website_require_login/views/website_auth_url.xml
@@ -1,13 +1,13 @@
-
+
website.auth.url
website.auth.url
-
+
-
+
From 8c39efad171f5359c9d4b28fd180163788f3bc28 Mon Sep 17 00:00:00 2001
From: Nils Coenen
Date: Fri, 9 Jan 2026 12:06:49 +0100
Subject: [PATCH 12/14] [MIG] website_require_login: Migration to 19.0
---
website_require_login/README.rst | 14 +++++++-------
website_require_login/__manifest__.py | 2 +-
website_require_login/models/ir_http.py | 2 +-
website_require_login/models/website_auth_url.py | 11 ++++-------
.../static/description/index.html | 6 +++---
5 files changed, 16 insertions(+), 19 deletions(-)
diff --git a/website_require_login/README.rst b/website_require_login/README.rst
index f2ccdc2c1e..fe3906f105 100644
--- a/website_require_login/README.rst
+++ b/website_require_login/README.rst
@@ -21,13 +21,13 @@ Website Login Required
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fwebsite-lightgray.png?logo=github
- :target: https://github.com/OCA/website/tree/18.0/website_require_login
+ :target: https://github.com/OCA/website/tree/19.0/website_require_login
:alt: OCA/website
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/website-18-0/website-18-0-website_require_login
+ :target: https://translation.odoo-community.org/projects/website-19-0/website-19-0-website_require_login
: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=18.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/website&target_branch=19.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -55,7 +55,7 @@ Bug Tracker
Bugs are tracked on `GitHub 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 `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -71,8 +71,8 @@ Authors
Contributors
------------
-- Ooops404
-- Nils Coenen
+- Ooops404
+- Nils Coenen
Maintainers
-----------
@@ -87,6 +87,6 @@ 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 `_ project on GitHub.
+This module is part of the `OCA/website `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/website_require_login/__manifest__.py b/website_require_login/__manifest__.py
index 16e072f320..10406e64be 100644
--- a/website_require_login/__manifest__.py
+++ b/website_require_login/__manifest__.py
@@ -4,7 +4,7 @@
{
"name": "Website Login Required",
"category": "Website",
- "version": "18.0.1.0.0",
+ "version": "19.0.1.0.0",
"author": "Advitus MB, Ooops, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/website",
"license": "LGPL-3",
diff --git a/website_require_login/models/ir_http.py b/website_require_login/models/ir_http.py
index b8271a1517..73ca15e164 100644
--- a/website_require_login/models/ir_http.py
+++ b/website_require_login/models/ir_http.py
@@ -29,7 +29,7 @@ def _check_require_auth(cls):
website = request.env["website"].sudo().get_current_website()
if not website:
return None
- if request.uid and (request.uid != website.user_id.id):
+ if request.env.uid and (request.env.uid != website.user_id.id):
return None
auth_paths = (
request.env["website.auth.url"]
diff --git a/website_require_login/models/website_auth_url.py b/website_require_login/models/website_auth_url.py
index 35a8a4ccd6..9bcae445c2 100644
--- a/website_require_login/models/website_auth_url.py
+++ b/website_require_login/models/website_auth_url.py
@@ -21,10 +21,7 @@ class WebsiteAuthURL(models.Model):
),
)
- _sql_constraints = [
- (
- "path_unique",
- "unique (website_id, path)",
- "The path must be unique per website!",
- )
- ]
+ _path_uniq = models.Constraint(
+ "unique (website_id, path)",
+ "The path must be unique per website.",
+ )
diff --git a/website_require_login/static/description/index.html b/website_require_login/static/description/index.html
index 1941e68b0d..c6c7300fdb 100644
--- a/website_require_login/static/description/index.html
+++ b/website_require_login/static/description/index.html
@@ -374,7 +374,7 @@ Website Login Required
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:aefefd8993c49416829512028bcf037dd60007a024fe96d8ca97961f58a27887
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module allows to restrict access to specific website pages to
logged users.
Table of contents
@@ -402,7 +402,7 @@
Bugs are tracked on GitHub 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.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -430,7 +430,7 @@
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 project on GitHub.
+
This module is part of the OCA/website project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
From 3a29ef7abf1d44eec28eb53bf8abba47e72e9e32 Mon Sep 17 00:00:00 2001
From: oca-ci
Date: Mon, 31 Aug 2026 09:31:16 +0000
Subject: [PATCH 13/14] [UPD] Update website_require_login.pot
---
website_require_login/i18n/website_require_login.pot | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/website_require_login/i18n/website_require_login.pot b/website_require_login/i18n/website_require_login.pot
index ff7290f11a..f1abeda9b6 100644
--- a/website_require_login/i18n/website_require_login.pot
+++ b/website_require_login/i18n/website_require_login.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 18.0\n"
+"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -31,6 +31,7 @@ msgid "Created on"
msgstr ""
#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_ir_http__display_name
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__display_name
msgid "Display Name"
msgstr ""
@@ -41,6 +42,7 @@ msgid "HTTP Routing"
msgstr ""
#. module: website_require_login
+#: model:ir.model.fields,field_description:website_require_login.field_ir_http__id
#: model:ir.model.fields,field_description:website_require_login.field_website_auth_url__id
msgid "ID"
msgstr ""
@@ -68,8 +70,8 @@ msgid ""
msgstr ""
#. module: website_require_login
-#: model:ir.model.constraint,message:website_require_login.constraint_website_auth_url_path_unique
-msgid "The path must be unique per website!"
+#: model:ir.model.constraint,message:website_require_login.constraint_website_auth_url_path_uniq
+msgid "The path must be unique per website."
msgstr ""
#. module: website_require_login
From acde08a315fcccd128d4040cfac0136056f4c73d Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Mon, 31 Aug 2026 09:34:24 +0000
Subject: [PATCH 14/14] [BOT] post-merge updates
---
README.md | 1 +
setup/_metapackage/pyproject.toml | 3 ++-
website_require_login/README.rst | 6 +++---
website_require_login/static/description/index.html | 2 +-
4 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index f7e87c5703..ab2f9a25c9 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,7 @@ addon | version | maintainers | summary
[website_form_require_legal](website_form_require_legal/) | 19.0.1.0.1 | | Add possibility to require confirm legal terms.
[website_forum_subscription](website_forum_subscription/) | 19.0.1.0.0 | | Adds a button to allow subscription from the website
[website_google_tag_manager](website_google_tag_manager/) | 19.0.1.0.0 | | Add support for Google Tag Manager
+[website_require_login](website_require_login/) | 19.0.1.0.0 | | Website Login Required
[website_snippet_big_button](website_snippet_big_button/) | 19.0.1.0.0 | | A snippet that adds two big buttons
[website_snippet_marginless_gallery](website_snippet_marginless_gallery/) | 19.0.1.0.0 | | Add a snippet to have a marginless image gallery
diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml
index cf64438735..53ab8db5b6 100644
--- a/setup/_metapackage/pyproject.toml
+++ b/setup/_metapackage/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "odoo-addons-oca-website"
-version = "19.0.20260824.0"
+version = "19.0.20260831.0"
dependencies = [
"odoo-addon-portal_invitation_by_website==19.0.*",
"odoo-addon-website_conditional_visibility_user_group==19.0.*",
@@ -8,6 +8,7 @@ dependencies = [
"odoo-addon-website_form_require_legal==19.0.*",
"odoo-addon-website_forum_subscription==19.0.*",
"odoo-addon-website_google_tag_manager==19.0.*",
+ "odoo-addon-website_require_login==19.0.*",
"odoo-addon-website_snippet_big_button==19.0.*",
"odoo-addon-website_snippet_marginless_gallery==19.0.*",
]
diff --git a/website_require_login/README.rst b/website_require_login/README.rst
index fe3906f105..866e0f087d 100644
--- a/website_require_login/README.rst
+++ b/website_require_login/README.rst
@@ -11,7 +11,7 @@ Website Login Required
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:aefefd8993c49416829512028bcf037dd60007a024fe96d8ca97961f58a27887
+ !! source digest: sha256:1977675e38dcfbf56e161a253498d982a9ad896d5eddc7c124c274e64f243f84
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -71,8 +71,8 @@ Authors
Contributors
------------
-- Ooops404
-- Nils Coenen
+- Ooops404
+- Nils Coenen
Maintainers
-----------
diff --git a/website_require_login/static/description/index.html b/website_require_login/static/description/index.html
index c6c7300fdb..8fc73a5967 100644
--- a/website_require_login/static/description/index.html
+++ b/website_require_login/static/description/index.html
@@ -372,7 +372,7 @@ Website Login Required
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:aefefd8993c49416829512028bcf037dd60007a024fe96d8ca97961f58a27887
+!! source digest: sha256:1977675e38dcfbf56e161a253498d982a9ad896d5eddc7c124c274e64f243f84
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

This module allows to restrict access to specific website pages to