From c9d147f7a2a3176f31d4b515d7d96d457cbc9ccc Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Fri, 18 Feb 2022 16:16:59 +0100 Subject: [PATCH 01/22] Add rpc_helper --- rpc_helper/README.rst | 1 + rpc_helper/__init__.py | 1 + rpc_helper/__manifest__.py | 15 +++++++++ rpc_helper/decorator.py | 19 +++++++++++ rpc_helper/hooks.py | 22 +++++++++++++ rpc_helper/patch.py | 26 +++++++++++++++ rpc_helper/readme/CONTRIBUTORS.rst | 1 + rpc_helper/readme/DESCRIPTION.rst | 1 + rpc_helper/readme/USAGE.rst | 15 +++++++++ rpc_helper/rpc_test_example.py | 15 +++++++++ rpc_helper/tests/__init__.py | 2 ++ rpc_helper/tests/test_decorator.py | 34 +++++++++++++++++++ rpc_helper/tests/test_xmlrpc.py | 53 ++++++++++++++++++++++++++++++ 13 files changed, 205 insertions(+) create mode 100644 rpc_helper/README.rst create mode 100644 rpc_helper/__init__.py create mode 100644 rpc_helper/__manifest__.py create mode 100644 rpc_helper/decorator.py create mode 100644 rpc_helper/hooks.py create mode 100644 rpc_helper/patch.py create mode 100644 rpc_helper/readme/CONTRIBUTORS.rst create mode 100644 rpc_helper/readme/DESCRIPTION.rst create mode 100644 rpc_helper/readme/USAGE.rst create mode 100644 rpc_helper/rpc_test_example.py create mode 100644 rpc_helper/tests/__init__.py create mode 100644 rpc_helper/tests/test_decorator.py create mode 100644 rpc_helper/tests/test_xmlrpc.py diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst new file mode 100644 index 00000000000..89bcd6c21c3 --- /dev/null +++ b/rpc_helper/README.rst @@ -0,0 +1 @@ +wait for the bot ;) diff --git a/rpc_helper/__init__.py b/rpc_helper/__init__.py new file mode 100644 index 00000000000..99ac2b54fa9 --- /dev/null +++ b/rpc_helper/__init__.py @@ -0,0 +1 @@ +from .hooks import post_load_hook diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py new file mode 100644 index 00000000000..f5b774941b7 --- /dev/null +++ b/rpc_helper/__manifest__.py @@ -0,0 +1,15 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + "name": "Disable RPC", + "summary": """Helpers for disabling RPC calls""", + "version": "14.0.1.0.0", + "development_status": "Alpha", + "license": "LGPL-3", + "website": "https://github.com/OCA/server-tools", + "author": "Camptocamp, Odoo Community Association (OCA)", + "maintainers": ["simahawk"], + "post_load": "post_load_hook", +} diff --git a/rpc_helper/decorator.py b/rpc_helper/decorator.py new file mode 100644 index 00000000000..99c875c90a9 --- /dev/null +++ b/rpc_helper/decorator.py @@ -0,0 +1,19 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +def disable_rpc(*config): + """Decorate classes to disable RPC calls. + + Possible values: + + * none, block all methods + * *("$method_name1", "$method_name2"), blocks calls to specific methods + """ + + def _decorator(target): + target._disable_rpc = ("all",) if len(config) == 0 else config + return target + + return _decorator diff --git a/rpc_helper/hooks.py b/rpc_helper/hooks.py new file mode 100644 index 00000000000..e6dbad6dac6 --- /dev/null +++ b/rpc_helper/hooks.py @@ -0,0 +1,22 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import logging + +from odoo.service import model + +from .patch import protected__execute_cr + +_logger = logging.getLogger(__name__) + + +def patch__model_execute_cr(): + """Patch rpc model handler.""" + protected__execute_cr._orig__execute_cr = model.execute_cr + model.execute_cr = protected__execute_cr + _logger.info("PATCHED odoo.service.model.execute") + + +def post_load_hook(): + patch__model_execute_cr() diff --git a/rpc_helper/patch.py b/rpc_helper/patch.py new file mode 100644 index 00000000000..b939b06c782 --- /dev/null +++ b/rpc_helper/patch.py @@ -0,0 +1,26 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import odoo +from odoo.exceptions import UserError +from odoo.tools.translate import _ + + +def protected__execute_cr(cr, uid, obj, method, *args, **kw): + # Same as original func in odoo.service.model.execute_cr + odoo.api.Environment.reset() # clean cache etc if we retry the same transaction + recs = odoo.api.Environment(cr, uid, {}).get(obj) + if recs is None: + raise UserError(_("Object %s doesn't exist", obj)) + # custom code starts here + if not _rpc_allowed(recs, method): + raise UserError(_("RPC call on %s is not allowed", obj)) + return protected__execute_cr._orig__execute_cr(cr, uid, obj, method, *args, **kw) + + +def _rpc_allowed(recordset, method): + config = getattr(recordset, "_disable_rpc", None) + if config is None: + return True + return "all" not in config and method not in config diff --git a/rpc_helper/readme/CONTRIBUTORS.rst b/rpc_helper/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..f1c71bce186 --- /dev/null +++ b/rpc_helper/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Simone Orsi diff --git a/rpc_helper/readme/DESCRIPTION.rst b/rpc_helper/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..e5078d95216 --- /dev/null +++ b/rpc_helper/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Provide helpers to authorize RPC calls. diff --git a/rpc_helper/readme/USAGE.rst b/rpc_helper/readme/USAGE.rst new file mode 100644 index 00000000000..56cfd7de27e --- /dev/null +++ b/rpc_helper/readme/USAGE.rst @@ -0,0 +1,15 @@ +Decorate an Odoo model class like this:: + + from odoo.addons.rpc_helper.decorator import disable_rpc + + @disable_rpc() + class AverageModel(models.Model): + _inherit = "avg.model" + +This will disable ALL calls. + +To selectively disable only some methods:: + + @disable_rpc("create", "write", "any_method") + class AverageModel(models.Model): + _inherit = "avg.model" diff --git a/rpc_helper/rpc_test_example.py b/rpc_helper/rpc_test_example.py new file mode 100644 index 00000000000..35680bd0b7b --- /dev/null +++ b/rpc_helper/rpc_test_example.py @@ -0,0 +1,15 @@ +"""Basic example script you can use to test your own models for real. +""" +from xmlrpc import client + +HOST = "127.0.0.1" +PORT = 8069 +DB_NAME = "ododdb" + +url = "http://%s:%d/xmlrpc/2/" % (HOST, PORT) +xmlrpc_common = client.ServerProxy(url + "common") +xmlrpc_db = client.ServerProxy(url + "db") +xmlrpc_object = client.ServerProxy(url + "object") + +uid = xmlrpc_common.login(DB_NAME, "admin", "admin") +res = xmlrpc_object.execute(DB_NAME, uid, "admin", "res.partner", "search", []) diff --git a/rpc_helper/tests/__init__.py b/rpc_helper/tests/__init__.py new file mode 100644 index 00000000000..c60563b6ab5 --- /dev/null +++ b/rpc_helper/tests/__init__.py @@ -0,0 +1,2 @@ +from . import test_xmlrpc +from . import test_decorator diff --git a/rpc_helper/tests/test_decorator.py b/rpc_helper/tests/test_decorator.py new file mode 100644 index 00000000000..1ee3ee54f68 --- /dev/null +++ b/rpc_helper/tests/test_decorator.py @@ -0,0 +1,34 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +import unittest + +from ..decorator import disable_rpc + + +@disable_rpc() +class All: + pass + + +@disable_rpc("create") +class One: + pass + + +@disable_rpc("create", "write") +class Multi: + pass + + +class TestDecorator(unittest.TestCase): + def test_all(self): + self.assertEqual(All._disable_rpc, ("all",)) + + def test_one(self): + self.assertEqual(One._disable_rpc, ("create",)) + + def test_multi(self): + self.assertEqual(Multi._disable_rpc, ("create", "write")) diff --git a/rpc_helper/tests/test_xmlrpc.py b/rpc_helper/tests/test_xmlrpc.py new file mode 100644 index 00000000000..bc51f52ca07 --- /dev/null +++ b/rpc_helper/tests/test_xmlrpc.py @@ -0,0 +1,53 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +import xmlrpc + +from odoo.tests import common + + +@common.tagged("post_install", "-at_install") +class TestXMLRPC(common.HttpSavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.admin_uid = cls.env.ref("base.user_admin").id + + def _set_disable(self, val): + type(self.env["res.partner"])._disable_rpc = val + + def tearDown(self): + klass = type(self.env["res.partner"]) + if hasattr(klass, "_disable_rpc"): + delattr(klass, "_disable_rpc") + super().tearDown() + + def _rpc_call(self, method, vals=None): + o = self.xmlrpc_object + db_name = common.get_db_name() + return o.execute( + db_name, self.admin_uid, "admin", "res.partner", method, vals or [] + ) + + def test_xmlrpc_search_normal(self): + res = self._rpc_call("search") + self.assertTrue(isinstance(res, list)) + + def test_xmlrpc_all_blocked(self): + self._set_disable(("all",)) + msg = "RPC call on res.partner is not allowed" + with self.assertRaisesRegex(xmlrpc.client.Fault, msg): + self._rpc_call("search") + + with self.assertRaisesRegex(xmlrpc.client.Fault, msg): + self._rpc_call("create", vals=[{"name": "Foo"}]) + + def test_xmlrpc_can_search_create_blocked(self): + self._set_disable(("create",)) + self._rpc_call("search") + + msg = "RPC call on res.partner is not allowed" + with self.assertRaisesRegex(xmlrpc.client.Fault, msg): + self._rpc_call("create", vals=[{"name": "Foo"}]) From 5ac1f09f60d5b7fd3f1001a3360e48c602702460 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Fri, 18 Feb 2022 16:58:32 +0000 Subject: [PATCH 02/22] [UPD] Update rpc_helper.pot --- rpc_helper/i18n/rpc_helper.pot | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 rpc_helper/i18n/rpc_helper.pot diff --git a/rpc_helper/i18n/rpc_helper.pot b/rpc_helper/i18n/rpc_helper.pot new file mode 100644 index 00000000000..da30b640b8d --- /dev/null +++ b/rpc_helper/i18n/rpc_helper.pot @@ -0,0 +1,26 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * rpc_helper +# +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: rpc_helper +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "Object %s doesn't exist" +msgstr "" + +#. module: rpc_helper +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "RPC call on %s is not allowed" +msgstr "" From 7761f555a8432e0733d2ea4f604be5273fcf19e2 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 18 Feb 2022 17:18:12 +0000 Subject: [PATCH 03/22] [UPD] README.rst --- rpc_helper/README.rst | 106 +++++- rpc_helper/static/description/index.html | 446 +++++++++++++++++++++++ 2 files changed, 551 insertions(+), 1 deletion(-) create mode 100644 rpc_helper/static/description/index.html diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index 89bcd6c21c3..8e3d321a272 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -1 +1,105 @@ -wait for the bot ;) +=========== +Disable RPC +=========== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png + :target: https://odoo-community.org/page/development-status + :alt: Alpha +.. |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%2Fserver--tools-lightgray.png?logo=github + :target: https://github.com/OCA/server-tools/tree/14.0/rpc_helper + :alt: OCA/server-tools +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/server-tools-14-0/server-tools-14-0-rpc_helper + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/149/14.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Provide helpers to authorize RPC calls. + +.. IMPORTANT:: + This is an alpha version, the data model and design can change at any time without warning. + Only for development or testing purpose, do not use in production. + `More details on development status `_ + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Decorate an Odoo model class like this:: + + from odoo.addons.rpc_helper.decorator import disable_rpc + + @disable_rpc() + class AverageModel(models.Model): + _inherit = "avg.model" + +This will disable ALL calls. + +To selectively disable only some methods:: + + @disable_rpc("create", "write", "any_method") + class AverageModel(models.Model): + _inherit = "avg.model" + +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 +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Simone Orsi + +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. + +.. |maintainer-simahawk| image:: https://github.com/simahawk.png?size=40px + :target: https://github.com/simahawk + :alt: simahawk + +Current `maintainer `__: + +|maintainer-simahawk| + +This module is part of the `OCA/server-tools `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html new file mode 100644 index 00000000000..b15c5ee0171 --- /dev/null +++ b/rpc_helper/static/description/index.html @@ -0,0 +1,446 @@ + + + + + + +Disable RPC + + + +
+

Disable RPC

+ + +

Alpha License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runbot

+

Provide helpers to authorize RPC calls.

+
+

Important

+

This is an alpha version, the data model and design can change at any time without warning. +Only for development or testing purpose, do not use in production. +More details on development status

+
+

Table of contents

+ +
+

Usage

+

Decorate an Odoo model class like this:

+
+from odoo.addons.rpc_helper.decorator import disable_rpc
+
+@disable_rpc()
+class AverageModel(models.Model):
+    _inherit = "avg.model"
+
+

This will disable ALL calls.

+

To selectively disable only some methods:

+
+@disable_rpc("create", "write", "any_method")
+class AverageModel(models.Model):
+    _inherit = "avg.model"
+
+
+
+

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

+
    +
  • Camptocamp
  • +
+
+ +
+

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.

+

Current maintainer:

+

simahawk

+

This module is part of the OCA/server-tools project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + From 78e381229ed78b70091fe4fccca7f8846a201322 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 18 Feb 2022 17:18:13 +0000 Subject: [PATCH 04/22] [ADD] icon.png --- rpc_helper/static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 rpc_helper/static/description/icon.png diff --git a/rpc_helper/static/description/icon.png b/rpc_helper/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 From 575cb25533493f603c7c1e3c1f14739a8869c39e Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Mon, 21 Feb 2022 09:52:51 +0100 Subject: [PATCH 05/22] rpc_helper: add config via UI --- rpc_helper/__init__.py | 1 + rpc_helper/__manifest__.py | 2 ++ rpc_helper/models/__init__.py | 1 + rpc_helper/models/ir_model.py | 44 +++++++++++++++++++++++++++++ rpc_helper/patch.py | 4 +++ rpc_helper/readme/CONFIGURATION.rst | 23 +++++++++++++++ rpc_helper/readme/USAGE.rst | 9 ++++++ rpc_helper/rpc_test_example.py | 2 +- rpc_helper/tests/test_xmlrpc.py | 24 ++++++++++++++++ rpc_helper/views/ir_model_views.xml | 23 +++++++++++++++ 10 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 rpc_helper/models/__init__.py create mode 100644 rpc_helper/models/ir_model.py create mode 100644 rpc_helper/readme/CONFIGURATION.rst create mode 100644 rpc_helper/views/ir_model_views.xml diff --git a/rpc_helper/__init__.py b/rpc_helper/__init__.py index 99ac2b54fa9..5bf67492bc8 100644 --- a/rpc_helper/__init__.py +++ b/rpc_helper/__init__.py @@ -1 +1,2 @@ +from . import models from .hooks import post_load_hook diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index f5b774941b7..f2d6ec4278b 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -11,5 +11,7 @@ "website": "https://github.com/OCA/server-tools", "author": "Camptocamp, Odoo Community Association (OCA)", "maintainers": ["simahawk"], + "depends": ["base_sparse_field"], + "data": ["views/ir_model_views.xml"], "post_load": "post_load_hook", } diff --git a/rpc_helper/models/__init__.py b/rpc_helper/models/__init__.py new file mode 100644 index 00000000000..413bb238014 --- /dev/null +++ b/rpc_helper/models/__init__.py @@ -0,0 +1 @@ +from . import ir_model diff --git a/rpc_helper/models/ir_model.py b/rpc_helper/models/ir_model.py new file mode 100644 index 00000000000..6913b33bc1f --- /dev/null +++ b/rpc_helper/models/ir_model.py @@ -0,0 +1,44 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import json + +from odoo import api, fields, models, tools + +from odoo.addons.base_sparse_field.models.fields import Serialized + + +class IrModel(models.Model): + _inherit = "ir.model" + + rpc_config = Serialized(compute="_compute_rpc_config", default={}) + # Allow editing via UI + rpc_config_edit = fields.Text( + help="Configure RPC config via JSON. " + "Value must be a list of methods to disable " + "wrapped by a dict with key `disable`. " + "Eg: {'disable': ['search', 'do_this']}" + "To disable all methods, use `{'disable: ['all']}`", + inverse="_inverse_rpc_config_edit", + ) + + @api.depends("rpc_config_edit") + def _compute_rpc_config(self): + for rec in self: + rec.rpc_config = rec._load_rpc_config() + + def _inverse_rpc_config_edit(self): + for rec in self: + # Make sure options_edit is always readable + rec.rpc_config_edit = json.dumps( + rec.rpc_config or {}, indent=4, sort_keys=True + ) + + def _load_rpc_config(self): + return json.loads(self.rpc_config_edit or "{}") + + @tools.ormcache("model") + def _get_rpc_config(self, model): + rec = self._get(model) + return rec.rpc_config or {} diff --git a/rpc_helper/patch.py b/rpc_helper/patch.py index b939b06c782..3eb987da891 100644 --- a/rpc_helper/patch.py +++ b/rpc_helper/patch.py @@ -21,6 +21,10 @@ def protected__execute_cr(cr, uid, obj, method, *args, **kw): def _rpc_allowed(recordset, method): config = getattr(recordset, "_disable_rpc", None) + if config is None: + config = ( + recordset.env["ir.model"]._get_rpc_config(recordset._name).get("disable") + ) if config is None: return True return "all" not in config and method not in config diff --git a/rpc_helper/readme/CONFIGURATION.rst b/rpc_helper/readme/CONFIGURATION.rst new file mode 100644 index 00000000000..84347b529f3 --- /dev/null +++ b/rpc_helper/readme/CONFIGURATION.rst @@ -0,0 +1,23 @@ +Enable debug mode and go to "Technical -> Database Structure -> Models". + +Open the model that you like to configure and go to the tab "RPC config". + +There you see a text field which supports JSON configuration. + +The configuration is the same you can pass via decorator. +The only difference is that you have to wrap values in a dictionary +like `{"disable": [...values...]}`. + +To disable all calls:: + + { + "disable": ["all"], + } + +To disable only some methods:: + + { + "disable": ["create", "write", "another_method"], + } + +NOTE: on the resulting JSON will be automatically formatted on save for better readability. diff --git a/rpc_helper/readme/USAGE.rst b/rpc_helper/readme/USAGE.rst index 56cfd7de27e..ff675247629 100644 --- a/rpc_helper/readme/USAGE.rst +++ b/rpc_helper/readme/USAGE.rst @@ -1,3 +1,6 @@ +Via code +~~~~~~~~ + Decorate an Odoo model class like this:: from odoo.addons.rpc_helper.decorator import disable_rpc @@ -13,3 +16,9 @@ To selectively disable only some methods:: @disable_rpc("create", "write", "any_method") class AverageModel(models.Model): _inherit = "avg.model" + + +Via `ir.model` configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See "Configuration" section. diff --git a/rpc_helper/rpc_test_example.py b/rpc_helper/rpc_test_example.py index 35680bd0b7b..d48b9a73da3 100644 --- a/rpc_helper/rpc_test_example.py +++ b/rpc_helper/rpc_test_example.py @@ -4,7 +4,7 @@ HOST = "127.0.0.1" PORT = 8069 -DB_NAME = "ododdb" +DB_NAME = "odoodb" url = "http://%s:%d/xmlrpc/2/" % (HOST, PORT) xmlrpc_common = client.ServerProxy(url + "common") diff --git a/rpc_helper/tests/test_xmlrpc.py b/rpc_helper/tests/test_xmlrpc.py index bc51f52ca07..e442fbe2a44 100644 --- a/rpc_helper/tests/test_xmlrpc.py +++ b/rpc_helper/tests/test_xmlrpc.py @@ -3,6 +3,7 @@ # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +import json import xmlrpc from odoo.tests import common @@ -18,6 +19,12 @@ def setUpClass(cls): def _set_disable(self, val): type(self.env["res.partner"])._disable_rpc = val + def _set_disable_on_model(self, val): + self.env["ir.model"]._get("res.partner").rpc_config_edit = json.dumps( + {"disable": val} + ) + self.env["ir.model"].flush() + def tearDown(self): klass = type(self.env["res.partner"]) if hasattr(klass, "_disable_rpc"): @@ -51,3 +58,20 @@ def test_xmlrpc_can_search_create_blocked(self): msg = "RPC call on res.partner is not allowed" with self.assertRaisesRegex(xmlrpc.client.Fault, msg): self._rpc_call("create", vals=[{"name": "Foo"}]) + + def test_xmlrpc_all_blocked__ir_model(self): + self._set_disable_on_model(("all",)) + msg = "RPC call on res.partner is not allowed" + with self.assertRaisesRegex(xmlrpc.client.Fault, msg): + self._rpc_call("search") + + with self.assertRaisesRegex(xmlrpc.client.Fault, msg): + self._rpc_call("create", vals=[{"name": "Foo"}]) + + def test_xmlrpc_can_search_create_blocked__ir_model(self): + self._set_disable_on_model(("create",)) + self._rpc_call("search") + + msg = "RPC call on res.partner is not allowed" + with self.assertRaisesRegex(xmlrpc.client.Fault, msg): + self._rpc_call("create", vals=[{"name": "Foo"}]) diff --git a/rpc_helper/views/ir_model_views.xml b/rpc_helper/views/ir_model_views.xml new file mode 100644 index 00000000000..d98b45c82e2 --- /dev/null +++ b/rpc_helper/views/ir_model_views.xml @@ -0,0 +1,23 @@ + + + + + rpc_helper view_model_form + ir.model + + + + + + + + + + From ac452adc0464f35d90a75bb98a97954d0ebfce9d Mon Sep 17 00:00:00 2001 From: oca-ci Date: Fri, 4 Mar 2022 17:12:09 +0000 Subject: [PATCH 06/22] [UPD] Update rpc_helper.pot --- rpc_helper/i18n/rpc_helper.pot | 73 ++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/rpc_helper/i18n/rpc_helper.pot b/rpc_helper/i18n/rpc_helper.pot index da30b640b8d..060291fa582 100644 --- a/rpc_helper/i18n/rpc_helper.pot +++ b/rpc_helper/i18n/rpc_helper.pot @@ -13,6 +13,54 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids +msgid "Changeset Changes" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_ids +msgid "Changesets" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit +msgid "" +"Configure RPC config via JSON. Value must be a list of methods to disable " +"wrapped by a dict with key `disable`. Eg: {'disable': ['search', " +"'do_this']}To disable all methods, use `{'disable: ['all']}`" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes +msgid "Count Pending Changeset Changes" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changesets +msgid "Count Pending Changesets" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__display_name +msgid "Display Name" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__id +msgid "ID" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model____last_update +msgid "Last Modified on" +msgstr "" + +#. module: rpc_helper +#: model:ir.model,name:rpc_helper.model_ir_model +msgid "Models" +msgstr "" + #. module: rpc_helper #: code:addons/rpc_helper/patch.py:0 #, python-format @@ -24,3 +72,28 @@ msgstr "" #, python-format msgid "RPC call on %s is not allowed" msgstr "" + +#. module: rpc_helper +#: model_terms:ir.ui.view,arch_db:rpc_helper.view_model_form +msgid "RPC config" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config +msgid "Rpc Config" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config_edit +msgid "Rpc Config Edit" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search +msgid "Smart Search" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset +msgid "User Can See Changeset" +msgstr "" From 630e29dd29e18bcc41cb40086523439bab066e05 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 4 Mar 2022 17:18:37 +0000 Subject: [PATCH 07/22] [UPD] README.rst --- rpc_helper/README.rst | 9 +++++++ rpc_helper/static/description/index.html | 33 ++++++++++++++++-------- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index 8e3d321a272..d2aba0e21a1 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -40,6 +40,9 @@ Provide helpers to authorize RPC calls. Usage ===== +Via code +~~~~~~~~ + Decorate an Odoo model class like this:: from odoo.addons.rpc_helper.decorator import disable_rpc @@ -56,6 +59,12 @@ To selectively disable only some methods:: class AverageModel(models.Model): _inherit = "avg.model" + +Via `ir.model` configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See "Configuration" section. + Bug Tracker =========== diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index b15c5ee0171..b288563f22c 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -378,18 +378,24 @@

Disable RPC

Table of contents

Usage

+
+

Via code

Decorate an Odoo model class like this:

 from odoo.addons.rpc_helper.decorator import disable_rpc
@@ -406,8 +412,13 @@ 

Usage

_inherit = "avg.model"
+
+

Via ir.model configuration

+

See “Configuration” section.

+
+
-

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 smashing it by providing a detailed and welcomed @@ -415,21 +426,21 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Camptocamp
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose From bd85a85c5ecddc89098459aab7506f7e59722dd7 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 4 Mar 2022 17:18:38 +0000 Subject: [PATCH 08/22] rpc_helper 14.0.1.1.0 --- rpc_helper/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index f2d6ec4278b..2896e40a9ac 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Disable RPC", "summary": """Helpers for disabling RPC calls""", - "version": "14.0.1.0.0", + "version": "14.0.1.1.0", "development_status": "Alpha", "license": "LGPL-3", "website": "https://github.com/OCA/server-tools", From dd0e9987bfd2e6ccaa70933f0c4d8328912ca258 Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Fri, 2 Sep 2022 13:40:07 +0000 Subject: [PATCH 09/22] Added translation using Weblate (Spanish (Argentina)) --- rpc_helper/i18n/es_AR.po | 100 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 rpc_helper/i18n/es_AR.po diff --git a/rpc_helper/i18n/es_AR.po b/rpc_helper/i18n/es_AR.po new file mode 100644 index 00000000000..1029a4c14a6 --- /dev/null +++ b/rpc_helper/i18n/es_AR.po @@ -0,0 +1,100 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * rpc_helper +# +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: es_AR\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: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids +msgid "Changeset Changes" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_ids +msgid "Changesets" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit +msgid "" +"Configure RPC config via JSON. Value must be a list of methods to disable " +"wrapped by a dict with key `disable`. Eg: {'disable': ['search', " +"'do_this']}To disable all methods, use `{'disable: ['all']}`" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes +msgid "Count Pending Changeset Changes" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changesets +msgid "Count Pending Changesets" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__display_name +msgid "Display Name" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__id +msgid "ID" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model____last_update +msgid "Last Modified on" +msgstr "" + +#. module: rpc_helper +#: model:ir.model,name:rpc_helper.model_ir_model +msgid "Models" +msgstr "" + +#. module: rpc_helper +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "Object %s doesn't exist" +msgstr "" + +#. module: rpc_helper +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "RPC call on %s is not allowed" +msgstr "" + +#. module: rpc_helper +#: model_terms:ir.ui.view,arch_db:rpc_helper.view_model_form +msgid "RPC config" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config +msgid "Rpc Config" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config_edit +msgid "Rpc Config Edit" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search +msgid "Smart Search" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset +msgid "User Can See Changeset" +msgstr "" From 6da92dd9edcdc8c5381b4d12e1e60b15cc35fdae Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Fri, 2 Sep 2022 13:41:58 +0000 Subject: [PATCH 10/22] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (16 of 16 strings) Translation: server-tools-14.0/server-tools-14.0-rpc_helper Translate-URL: https://translation.odoo-community.org/projects/server-tools-14-0/server-tools-14-0-rpc_helper/es_AR/ --- rpc_helper/i18n/es_AR.po | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/rpc_helper/i18n/es_AR.po b/rpc_helper/i18n/es_AR.po index 1029a4c14a6..edbd12f852b 100644 --- a/rpc_helper/i18n/es_AR.po +++ b/rpc_helper/i18n/es_AR.po @@ -6,23 +6,25 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2022-09-02 16:07+0000\n" +"Last-Translator: Ignacio Buioli \n" "Language-Team: none\n" "Language: es_AR\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.3.2\n" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids msgid "Changeset Changes" -msgstr "" +msgstr "Cambios del Conjunto de Cambios" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_ids msgid "Changesets" -msgstr "" +msgstr "Conjunto de Cambios" #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit @@ -31,70 +33,74 @@ msgid "" "wrapped by a dict with key `disable`. Eg: {'disable': ['search', " "'do_this']}To disable all methods, use `{'disable: ['all']}`" msgstr "" +"Configure los ajustes de RPC a través de JSON. El valor debe ser una lista " +"de métodos para deshabilitar envueltos por un dict con la clave " +"`deshabilitar`. Por ejemplo: {'disable': ['search', 'do_this']} Para " +"deshabilitar todos los métodos, use `{'disable: ['all']}`" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes msgid "Count Pending Changeset Changes" -msgstr "" +msgstr "Cuenta de los Cambios Pendientes de los Conjuntos de Cambios" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changesets msgid "Count Pending Changesets" -msgstr "" +msgstr "Cuenta de los Conjuntos de Cambios Pendientes" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__display_name msgid "Display Name" -msgstr "" +msgstr "Mostrar Nombre" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__id msgid "ID" -msgstr "" +msgstr "ID" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model____last_update msgid "Last Modified on" -msgstr "" +msgstr "Última modificación en" #. module: rpc_helper #: model:ir.model,name:rpc_helper.model_ir_model msgid "Models" -msgstr "" +msgstr "Modelos" #. module: rpc_helper #: code:addons/rpc_helper/patch.py:0 #, python-format msgid "Object %s doesn't exist" -msgstr "" +msgstr "El Objeto %s no existe" #. module: rpc_helper #: code:addons/rpc_helper/patch.py:0 #, python-format msgid "RPC call on %s is not allowed" -msgstr "" +msgstr "Las llamadas RPC en %s no están permitidas" #. module: rpc_helper #: model_terms:ir.ui.view,arch_db:rpc_helper.view_model_form msgid "RPC config" -msgstr "" +msgstr "Configuración RPC" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config msgid "Rpc Config" -msgstr "" +msgstr "Configuración Rpc" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config_edit msgid "Rpc Config Edit" -msgstr "" +msgstr "Editar la Configuración Rpc" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search msgid "Smart Search" -msgstr "" +msgstr "Búsqueda Inteligente" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset msgid "User Can See Changeset" -msgstr "" +msgstr "El Usuario Puede ver Conjuntos de Cambios" From 140662108ab02e9477695b082e7ac6ec7a0143e2 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Tue, 7 Mar 2023 18:19:07 +0100 Subject: [PATCH 11/22] rpc_helper: fix readme --- rpc_helper/readme/{CONFIGURATION.rst => CONFIGURE.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename rpc_helper/readme/{CONFIGURATION.rst => CONFIGURE.rst} (100%) diff --git a/rpc_helper/readme/CONFIGURATION.rst b/rpc_helper/readme/CONFIGURE.rst similarity index 100% rename from rpc_helper/readme/CONFIGURATION.rst rename to rpc_helper/readme/CONFIGURE.rst From 9cac14b844885fee2116ba5442efbbe1f827e2ac Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 7 Mar 2023 17:37:53 +0000 Subject: [PATCH 12/22] [UPD] README.rst --- rpc_helper/README.rst | 27 ++++++++++++ rpc_helper/static/description/index.html | 55 +++++++++++++++++------- 2 files changed, 66 insertions(+), 16 deletions(-) diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index d2aba0e21a1..1bdacfa879f 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -37,6 +37,33 @@ Provide helpers to authorize RPC calls. .. contents:: :local: +Configuration +============= + +Enable debug mode and go to "Technical -> Database Structure -> Models". + +Open the model that you like to configure and go to the tab "RPC config". + +There you see a text field which supports JSON configuration. + +The configuration is the same you can pass via decorator. +The only difference is that you have to wrap values in a dictionary +like `{"disable": [...values...]}`. + +To disable all calls:: + + { + "disable": ["all"], + } + +To disable only some methods:: + + { + "disable": ["create", "write", "another_method"], + } + +NOTE: on the resulting JSON will be automatically formatted on save for better readability. + Usage ===== diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index b288563f22c..654fc69c52e 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -378,24 +378,47 @@

Disable RPC

Table of contents

+
+

Configuration

+

Enable debug mode and go to “Technical -> Database Structure -> Models”.

+

Open the model that you like to configure and go to the tab “RPC config”.

+

There you see a text field which supports JSON configuration.

+

The configuration is the same you can pass via decorator. +The only difference is that you have to wrap values in a dictionary +like {“disable”: […values…]}.

+

To disable all calls:

+
+{
+    "disable": ["all"],
+}
+
+

To disable only some methods:

+
+{
+    "disable": ["create", "write", "another_method"],
+}
+
+

NOTE: on the resulting JSON will be automatically formatted on save for better readability.

+
-

Usage

+

Usage

-

Via code

+

Via code

Decorate an Odoo model class like this:

 from odoo.addons.rpc_helper.decorator import disable_rpc
@@ -413,12 +436,12 @@ 

Via code

-

Via ir.model configuration

+

Via ir.model configuration

See “Configuration” section.

-

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 smashing it by providing a detailed and welcomed @@ -426,21 +449,21 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Camptocamp
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose From ebb2d9f8320a22889edf4ecbdc5ac86215feb670 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 7 Mar 2023 17:37:53 +0000 Subject: [PATCH 13/22] rpc_helper 14.0.1.1.1 --- rpc_helper/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index 2896e40a9ac..11f86dd3295 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Disable RPC", "summary": """Helpers for disabling RPC calls""", - "version": "14.0.1.1.0", + "version": "14.0.1.1.1", "development_status": "Alpha", "license": "LGPL-3", "website": "https://github.com/OCA/server-tools", From 288855b32525b3d039e0a517d25249536d922706 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Thu, 11 May 2023 17:52:08 +0200 Subject: [PATCH 14/22] rpc_helper: upgrade to Beta --- rpc_helper/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index 11f86dd3295..6590d5b087b 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -6,7 +6,7 @@ "name": "Disable RPC", "summary": """Helpers for disabling RPC calls""", "version": "14.0.1.1.1", - "development_status": "Alpha", + "development_status": "Beta", "license": "LGPL-3", "website": "https://github.com/OCA/server-tools", "author": "Camptocamp, Odoo Community Association (OCA)", From 68c098b1ca93529cb02f2fd79cf9b872370b4bc7 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 11 May 2023 16:15:35 +0000 Subject: [PATCH 15/22] [UPD] README.rst --- rpc_helper/README.rst | 9 ++------- rpc_helper/static/description/index.html | 8 +------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index 1bdacfa879f..b471319975f 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -7,9 +7,9 @@ Disable RPC !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status - :alt: Alpha + :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 @@ -27,11 +27,6 @@ Disable RPC Provide helpers to authorize RPC calls. -.. IMPORTANT:: - This is an alpha version, the data model and design can change at any time without warning. - Only for development or testing purpose, do not use in production. - `More details on development status `_ - **Table of contents** .. contents:: diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index 654fc69c52e..60f175e4201 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -367,14 +367,8 @@

Disable RPC

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Alpha License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runbot

+

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

Provide helpers to authorize RPC calls.

-
-

Important

-

This is an alpha version, the data model and design can change at any time without warning. -Only for development or testing purpose, do not use in production. -More details on development status

-

Table of contents

    From bf8421e1f557c1e68db9b55e2920bc353c089744 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 11 May 2023 16:15:36 +0000 Subject: [PATCH 16/22] rpc_helper 14.0.1.2.0 --- rpc_helper/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index 6590d5b087b..96ffff4ed93 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Disable RPC", "summary": """Helpers for disabling RPC calls""", - "version": "14.0.1.1.1", + "version": "14.0.1.2.0", "development_status": "Beta", "license": "LGPL-3", "website": "https://github.com/OCA/server-tools", From a95eb309b36053dd678897fc8e6d3e296daa8baf Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 3 Sep 2023 16:46:20 +0000 Subject: [PATCH 17/22] [UPD] README.rst --- rpc_helper/README.rst | 15 ++++--- rpc_helper/static/description/index.html | 52 ++++++++++++------------ 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index b471319975f..eb5d4089bb4 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -2,10 +2,13 @@ Disable RPC =========== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:c19fd3c9f11f0161f86e314ba36731565c735edaae0052a305fc6ad9112b1fd9 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Disable RPC .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/server-tools-14-0/server-tools-14-0-rpc_helper :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/149/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/server-tools&target_branch=14.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| Provide helpers to authorize RPC calls. @@ -92,7 +95,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 smashing it by providing a detailed and welcomed +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. diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index 60f175e4201..bbf8f631910 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -1,20 +1,20 @@ - + - + Disable RPC