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 z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N 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

+ + +

Beta License: LGPL-3 OCA/website Translate me on Weblate Try me on Runbot

+

This module allows to restrict access to specific website pages to logged users.

+

Table of contents

+ +
+

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
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+
+ + +Odoo Community Association + +
+

Website Login Required

-

Beta License: LGPL-3 OCA/website Translate me on Weblate Try me on Runboat

+

Beta License: LGPL-3 OCA/website Translate me on Weblate Try me on Runboat

This module allows to restrict access to specific website pages to logged users.

Table of contents

@@ -386,38 +391,38 @@

Website Login Required

-

Usage

+

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

+

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.

-

Credits

+

Credits

-

Authors

+

Authors

  • Advitus MB
  • Ooops
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -425,10 +430,11 @@

Maintainers

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/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 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: LGPL-3 OCA/website Translate me on Weblate Try me on Runboat

+

Beta License: LGPL-3 OCA/website Translate me on Weblate Try me on Runboat

This module allows to restrict access to specific website pages to logged users.

Table of contents

@@ -402,7 +402,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.

@@ -430,7 +430,7 @@

Maintainers

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 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: LGPL-3 OCA/website Translate me on Weblate Try me on Runboat

This module allows to restrict access to specific website pages to