From 973d1160b61a8406adcc8c77481ffbc7e46b8fce Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Wed, 20 Jun 2018 13:04:59 +0200 Subject: [PATCH 01/16] [FIX] module name [UPD] Update base_remote.pot --- base_remote/README.rst | 58 ++++++++++++++ base_remote/__init__.py | 1 + base_remote/__manifest__.py | 18 +++++ base_remote/i18n/base_remote.pot | 98 ++++++++++++++++++++++++ base_remote/models/__init__.py | 5 ++ base_remote/models/base.py | 17 ++++ base_remote/models/res_remote.py | 49 ++++++++++++ base_remote/models/res_users.py | 53 +++++++++++++ base_remote/security/ir.model.access.csv | 3 + base_remote/tests/__init__.py | 1 + base_remote/tests/test_remote.py | 66 ++++++++++++++++ base_remote/views/res_remote_views.xml | 46 +++++++++++ 12 files changed, 415 insertions(+) create mode 100644 base_remote/README.rst create mode 100644 base_remote/__init__.py create mode 100644 base_remote/__manifest__.py create mode 100644 base_remote/i18n/base_remote.pot create mode 100644 base_remote/models/__init__.py create mode 100644 base_remote/models/base.py create mode 100644 base_remote/models/res_remote.py create mode 100644 base_remote/models/res_users.py create mode 100644 base_remote/security/ir.model.access.csv create mode 100644 base_remote/tests/__init__.py create mode 100644 base_remote/tests/test_remote.py create mode 100644 base_remote/views/res_remote_views.xml diff --git a/base_remote/README.rst b/base_remote/README.rst new file mode 100644 index 000000000..0183a3d0c --- /dev/null +++ b/base_remote/README.rst @@ -0,0 +1,58 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +=========== +Remote Base +=========== + +This module allows to store all the connected remotes (external ip addresses) to odoo. +It should be used with other modules in order to check remote's configurations. + +Usage +===== + +When installed, all remotes will be stored by `hostname` on `res.remote`. +They can be viewed on `Settings / Users & Companies / Remotes`. +The last Ip of the remote will be stored. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/144/11.0 + + +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. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Enric Tobella + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/base_remote/__init__.py b/base_remote/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/base_remote/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/base_remote/__manifest__.py b/base_remote/__manifest__.py new file mode 100644 index 000000000..27a54af17 --- /dev/null +++ b/base_remote/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright (c) 2018 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': "Remote Base", + 'version': '11.0.1.0.1', + 'category': 'Generic Modules/Base', + 'author': "Creu Blanca, Odoo Community Association (OCA)", + 'website': 'http://github.com/OCA/server-tools', + 'license': 'AGPL-3', + "depends": ['web', 'base'], + 'data': [ + 'security/ir.model.access.csv', + 'views/res_remote_views.xml', + ], + 'installable': True, + 'application': True, +} diff --git a/base_remote/i18n/base_remote.pot b/base_remote/i18n/base_remote.pot new file mode 100644 index 000000000..59aa20446 --- /dev/null +++ b/base_remote/i18n/base_remote.pot @@ -0,0 +1,98 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_remote +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.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: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_create_uid +msgid "Created by" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_create_date +msgid "Created on" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_display_name +msgid "Display Name" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_name +msgid "Hostname" +msgstr "" + +#. module: base_remote +#: sql_constraint:res.remote:0 +msgid "Hostname must be unique" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_id +msgid "ID" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_in_network +msgid "In Network" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_ip +msgid "Ip" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_write_date +msgid "Last Updated on" +msgstr "" + +#. module: base_remote +#: model:ir.ui.view,arch_db:base_remote.res_remote_form +msgid "Remote" +msgstr "" + +#. module: base_remote +#: model:ir.actions.act_window,name:base_remote.res_remote_action +#: model:ir.model,name:base_remote.model_res_remote +#: model:ir.ui.menu,name:base_remote.res_remote_menu +#: model:ir.ui.view,arch_db:base_remote.res_remote_tree +msgid "Remotes" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,help:base_remote.field_res_remote_in_network +msgid "Shows if the remote can be found through the socket" +msgstr "" + +#. module: base_remote +#: model:ir.model,name:base_remote.model_res_users +msgid "Users" +msgstr "" + +#. module: base_remote +#: model:ir.model,name:base_remote.model_base +msgid "base" +msgstr "" + diff --git a/base_remote/models/__init__.py b/base_remote/models/__init__.py new file mode 100644 index 000000000..11252a793 --- /dev/null +++ b/base_remote/models/__init__.py @@ -0,0 +1,5 @@ +from . import base +from . import res_remote +from . import res_users + + diff --git a/base_remote/models/base.py b/base_remote/models/base.py new file mode 100644 index 000000000..87bf5fd42 --- /dev/null +++ b/base_remote/models/base.py @@ -0,0 +1,17 @@ +# Copyright 2018 Creu Blanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models +from threading import current_thread + + +class Base(models.AbstractModel): + _inherit = 'base' + + @property + def remote(self): + try: + remote_addr = current_thread().environ["REMOTE_ADDR"] + except KeyError: + remote_addr = False + return self.env['res.remote']._get_remote(remote_addr) diff --git a/base_remote/models/res_remote.py b/base_remote/models/res_remote.py new file mode 100644 index 000000000..0abc850da --- /dev/null +++ b/base_remote/models/res_remote.py @@ -0,0 +1,49 @@ +# Copyright 2018 Creu Blanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, models, fields +import socket +import logging + + +class ResRemote(models.Model): + _name = 'res.remote' + _description = 'Remotes' + + name = fields.Char( + required=True, + string='Hostname', + index=True, + readonly=True + ) + ip = fields.Char(required=True) + in_network = fields.Boolean( + required=True, + help='Shows if the remote can be found through the socket' + ) + + _sql_constraints = [ + ('name_unique', 'unique(name)', 'Hostname must be unique') + ] + + @api.model + def _create_vals(self, addr, hostname): + return { + 'name': hostname or addr, + 'ip': addr, + 'in_network': bool(hostname), + } + + @api.model + def _get_remote(self, addr): + try: + hostname, alias, ips = socket.gethostbyaddr(addr) + except socket.herror: + logging.warning('Remote with ip %s could not be found' % addr) + hostname = False + remote = self.search([('name', '=', hostname or addr)]) + if not remote: + remote = self.create(self._create_vals(addr, hostname)) + if remote.ip != addr: + # IPs can change through time, but hostname should not change + remote.write({'ip': addr}) + return remote diff --git a/base_remote/models/res_users.py b/base_remote/models/res_users.py new file mode 100644 index 000000000..0cfbb4b0f --- /dev/null +++ b/base_remote/models/res_users.py @@ -0,0 +1,53 @@ +# Copyright 2018 Creu Blanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from threading import current_thread +from odoo import api, models, SUPERUSER_ID +from odoo.exceptions import AccessDenied +from odoo.service import wsgi_server + + +class ResUsers(models.Model): + _inherit = "res.users" + + # HACK https://github.com/odoo/odoo/issues/24183 + # TODO Remove in v12, and use normal odoo.http.request to get details + @api.model_cr + def _register_hook(self): + """馃悞-patch XML-RPC controller to know remote address.""" + original_fn = wsgi_server.application_unproxied + + def _patch(environ, start_response): + current_thread().environ = environ + return original_fn(environ, start_response) + + wsgi_server.application_unproxied = _patch + + @classmethod + def _auth_check_remote(cls, login, method): + """Force a method to raise an AccessDenied on falsey return.""" + with cls.pool.cursor() as cr: + env = api.Environment(cr, SUPERUSER_ID, {}) + remote = env["res.users"].remote + remote.ensure_one() + result = method() + if not result: + # Force exception to record auth failure + raise AccessDenied() + return result + + # Override all auth-related core methods + @classmethod + def _login(cls, db, login, password): + return cls._auth_check_remote( + login, + lambda: super(ResUsers, cls)._login(db, login, password), + ) + + @classmethod + def authenticate(cls, db, login, password, user_agent_env): + return cls._auth_check_remote( + login, + lambda: super(ResUsers, cls).authenticate( + db, login, password, user_agent_env), + ) diff --git a/base_remote/security/ir.model.access.csv b/base_remote/security/ir.model.access.csv new file mode 100644 index 000000000..7642160aa --- /dev/null +++ b/base_remote/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_remote,access_remote,model_res_remote,base.group_user,1,0,0,0 +manage_remote,manage_remote,model_res_remote,base.group_system,1,1,0,0 diff --git a/base_remote/tests/__init__.py b/base_remote/tests/__init__.py new file mode 100644 index 000000000..2dbcf34b1 --- /dev/null +++ b/base_remote/tests/__init__.py @@ -0,0 +1 @@ +from . import test_remote diff --git a/base_remote/tests/test_remote.py b/base_remote/tests/test_remote.py new file mode 100644 index 000000000..056e3a00a --- /dev/null +++ b/base_remote/tests/test_remote.py @@ -0,0 +1,66 @@ +# Copyright 2018 Creu Blanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from xmlrpc.client import Fault + +from mock import patch +from werkzeug.utils import redirect + +from odoo import http +from odoo.tests.common import at_install, HttpCase, post_install + + +@at_install(False) +@post_install(True) +# Skip CSRF validation on tests +@patch(http.__name__ + ".WebRequest.validate_csrf", return_value=True) +# Skip specific browser forgery on redirections +@patch(http.__name__ + ".redirect_with_hash", side_effect=redirect) +class TestRemote(HttpCase): + def setUp(self): + super().setUp() + # HACK https://github.com/odoo/odoo/issues/24183 + # TODO Remove in v12 + # Complex password to avoid conflicts with `password_security` + self.good_password = "Admin$%02584" + self.data_demo = { + "login": "demo", + "password": "Demo%&/(908409**", + } + self.remote_addr = '127.0.0.1' + with self.cursor() as cr: + env = self.env(cr) + # Make sure involved users have good passwords + env.user.password = self.good_password + env["res.users"].search([ + ("login", "=", self.data_demo["login"]), + ]).password = self.data_demo["password"] + remote = self.env['res.remote'].search([ + ('ip', '=', self.remote_addr) + ]) + if remote: + remote.unlink() + + def test_xmlrpc_login_ok(self, *args): + """Test Login""" + data1 = self.data_demo + self.assertTrue(self.xmlrpc_common.authenticate( + self.env.cr.dbname, data1["login"], data1["password"], {})) + with self.cursor() as cr: + env = self.env(cr) + self.assertTrue( + env['res.remote'].search([('ip', '=', self.remote_addr)]) + ) + + def test_xmlrpc_login_failure(self, *args): + """Test Login Failure""" + data1 = self.data_demo + data1['password'] = 'Failure!' + with self.assertRaises(Fault): + self.assertFalse(self.xmlrpc_common.authenticate( + self.env.cr.dbname, data1["login"], data1["password"], {})) + with self.cursor() as cr: + env = self.env(cr) + self.assertTrue( + env['res.remote'].search([('ip', '=', self.remote_addr)]) + ) diff --git a/base_remote/views/res_remote_views.xml b/base_remote/views/res_remote_views.xml new file mode 100644 index 000000000..3ceda5de6 --- /dev/null +++ b/base_remote/views/res_remote_views.xml @@ -0,0 +1,46 @@ + + + + res.remote.form + res.remote + +
+ +
+

+
+ + + + + + + +
+
+
+
+ + res.remote.tree + res.remote + + + + + + + + + Remotes + ir.actions.act_window + res.remote + form + tree,form + + + +
From 13e201493a34e7b16368e171fcf07a3afd7a67d3 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Wed, 20 Jun 2018 14:52:38 +0200 Subject: [PATCH 02/16] [FIX] missing super declaration --- base_remote/models/res_users.py | 1 + 1 file changed, 1 insertion(+) diff --git a/base_remote/models/res_users.py b/base_remote/models/res_users.py index 0cfbb4b0f..da2d46a1c 100644 --- a/base_remote/models/res_users.py +++ b/base_remote/models/res_users.py @@ -15,6 +15,7 @@ class ResUsers(models.Model): @api.model_cr def _register_hook(self): """馃悞-patch XML-RPC controller to know remote address.""" + super()._register_hook() original_fn = wsgi_server.application_unproxied def _patch(environ, start_response): From 53b7d26979f1ef1b6cefa8e95c72b681b6453498 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Fri, 13 Jul 2018 08:32:20 +0000 Subject: [PATCH 03/16] =?UTF-8?q?Added=20translation=20using=20Weblate=20(?= =?UTF-8?q?Espa=C3=B1ol=20(Espa=C3=B1a))?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base_remote/i18n/es.po | 100 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 base_remote/i18n/es.po diff --git a/base_remote/i18n/es.po b/base_remote/i18n/es.po new file mode 100644 index 000000000..900007684 --- /dev/null +++ b/base_remote/i18n/es.po @@ -0,0 +1,100 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_remote +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2018-07-13 08:36+0000\n" +"Last-Translator: Enric Tobella \n" +"Language-Team: none\n" +"Language: es\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 3.0.1\n" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_create_date +msgid "Created on" +msgstr "Creado el" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_name +msgid "Hostname" +msgstr "Nombre del host" + +#. module: base_remote +#: sql_constraint:res.remote:0 +msgid "Hostname must be unique" +msgstr "El nombre del host debe ser 煤nico" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_id +msgid "ID" +msgstr "ID" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_in_network +msgid "In Network" +msgstr "En la Red local" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_ip +msgid "Ip" +msgstr "IP" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote___last_update +msgid "Last Modified on" +msgstr "脷ltima actualizaci贸n por" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_write_uid +msgid "Last Updated by" +msgstr "脷ltima actualizaci贸n por" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote_write_date +msgid "Last Updated on" +msgstr "脷ltima actualizaci贸n el" + +#. module: base_remote +#: model:ir.ui.view,arch_db:base_remote.res_remote_form +msgid "Remote" +msgstr "Remoto" + +#. module: base_remote +#: model:ir.actions.act_window,name:base_remote.res_remote_action +#: model:ir.model,name:base_remote.model_res_remote +#: model:ir.ui.menu,name:base_remote.res_remote_menu +#: model:ir.ui.view,arch_db:base_remote.res_remote_tree +msgid "Remotes" +msgstr "Remotos" + +#. module: base_remote +#: model:ir.model.fields,help:base_remote.field_res_remote_in_network +msgid "Shows if the remote can be found through the socket" +msgstr "Muestra si el remoto se pudo encontrar a trav茅s del socket" + +#. module: base_remote +#: model:ir.model,name:base_remote.model_res_users +msgid "Users" +msgstr "Usuarios" + +#. module: base_remote +#: model:ir.model,name:base_remote.model_base +msgid "base" +msgstr "base" From 06c454570d2ec0e9c221a26f728de78e6e2aac1c Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Thu, 1 Nov 2018 08:58:46 +0100 Subject: [PATCH 04/16] [FIX] base_remote: Views --- base_remote/README.rst | 2 +- base_remote/__manifest__.py | 2 +- base_remote/views/res_remote_views.xml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/base_remote/README.rst b/base_remote/README.rst index 0183a3d0c..c7f7f4525 100644 --- a/base_remote/README.rst +++ b/base_remote/README.rst @@ -13,7 +13,7 @@ Usage ===== When installed, all remotes will be stored by `hostname` on `res.remote`. -They can be viewed on `Settings / Users & Companies / Remotes`. +They can be viewed on `Settings / Remotes`. The last Ip of the remote will be stored. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas diff --git a/base_remote/__manifest__.py b/base_remote/__manifest__.py index 27a54af17..cc4917c6b 100644 --- a/base_remote/__manifest__.py +++ b/base_remote/__manifest__.py @@ -3,7 +3,7 @@ { 'name': "Remote Base", - 'version': '11.0.1.0.1', + 'version': '11.0.1.0.2', 'category': 'Generic Modules/Base', 'author': "Creu Blanca, Odoo Community Association (OCA)", 'website': 'http://github.com/OCA/server-tools', diff --git a/base_remote/views/res_remote_views.xml b/base_remote/views/res_remote_views.xml index 3ceda5de6..143150afc 100644 --- a/base_remote/views/res_remote_views.xml +++ b/base_remote/views/res_remote_views.xml @@ -40,7 +40,7 @@ From 64ef56ae526287db5f7d7ea27ecb31a348dabaa8 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Wed, 28 Nov 2018 12:38:09 +0100 Subject: [PATCH 05/16] [IMP] name of remotes should be case insensitive --- base_remote/__manifest__.py | 2 +- base_remote/models/res_remote.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/base_remote/__manifest__.py b/base_remote/__manifest__.py index cc4917c6b..f0dd4aa93 100644 --- a/base_remote/__manifest__.py +++ b/base_remote/__manifest__.py @@ -3,7 +3,7 @@ { 'name': "Remote Base", - 'version': '11.0.1.0.2', + 'version': '11.0.1.0.3', 'category': 'Generic Modules/Base', 'author': "Creu Blanca, Odoo Community Association (OCA)", 'website': 'http://github.com/OCA/server-tools', diff --git a/base_remote/models/res_remote.py b/base_remote/models/res_remote.py index 0abc850da..bd90ee4fe 100644 --- a/base_remote/models/res_remote.py +++ b/base_remote/models/res_remote.py @@ -40,7 +40,7 @@ class ResRemote(models.Model): except socket.herror: logging.warning('Remote with ip %s could not be found' % addr) hostname = False - remote = self.search([('name', '=', hostname or addr)]) + remote = self.search([('name', '=ilike', hostname or addr)]) if not remote: remote = self.create(self._create_vals(addr, hostname)) if remote.ip != addr: From e21a0cbb980a0315c39fb1cfa9118adc881abeca Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Thu, 27 Dec 2018 00:30:55 +0100 Subject: [PATCH 06/16] [FIX] base_remote: Do not raise Error on login failure [ADD] icon.png --- base_remote/__manifest__.py | 2 +- base_remote/models/base.py | 4 +++- base_remote/models/res_users.py | 10 +++------- base_remote/static/description/icon.png | Bin 0 -> 9455 bytes base_remote/tests/test_remote.py | 7 ++----- 5 files changed, 9 insertions(+), 14 deletions(-) create mode 100644 base_remote/static/description/icon.png diff --git a/base_remote/__manifest__.py b/base_remote/__manifest__.py index f0dd4aa93..f80f540cc 100644 --- a/base_remote/__manifest__.py +++ b/base_remote/__manifest__.py @@ -3,7 +3,7 @@ { 'name': "Remote Base", - 'version': '11.0.1.0.3', + 'version': '11.0.1.0.4', 'category': 'Generic Modules/Base', 'author': "Creu Blanca, Odoo Community Association (OCA)", 'website': 'http://github.com/OCA/server-tools', diff --git a/base_remote/models/base.py b/base_remote/models/base.py index 87bf5fd42..b7c9b2fc6 100644 --- a/base_remote/models/base.py +++ b/base_remote/models/base.py @@ -13,5 +13,7 @@ class Base(models.AbstractModel): try: remote_addr = current_thread().environ["REMOTE_ADDR"] except KeyError: - remote_addr = False + return self.env['res.remote'] + except AttributeError: + return self.env['res.remote'] return self.env['res.remote']._get_remote(remote_addr) diff --git a/base_remote/models/res_users.py b/base_remote/models/res_users.py index da2d46a1c..77fab1b6e 100644 --- a/base_remote/models/res_users.py +++ b/base_remote/models/res_users.py @@ -3,7 +3,6 @@ from threading import current_thread from odoo import api, models, SUPERUSER_ID -from odoo.exceptions import AccessDenied from odoo.service import wsgi_server @@ -30,12 +29,9 @@ class ResUsers(models.Model): with cls.pool.cursor() as cr: env = api.Environment(cr, SUPERUSER_ID, {}) remote = env["res.users"].remote - remote.ensure_one() - result = method() - if not result: - # Force exception to record auth failure - raise AccessDenied() - return result + if remote: + remote.ensure_one() + return method() # Override all auth-related core methods @classmethod diff --git a/base_remote/static/description/icon.png b/base_remote/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/base_remote/tests/test_remote.py b/base_remote/tests/test_remote.py index 056e3a00a..33876950d 100644 --- a/base_remote/tests/test_remote.py +++ b/base_remote/tests/test_remote.py @@ -1,8 +1,6 @@ # Copyright 2018 Creu Blanca # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from xmlrpc.client import Fault - from mock import patch from werkzeug.utils import redirect @@ -56,9 +54,8 @@ class TestRemote(HttpCase): """Test Login Failure""" data1 = self.data_demo data1['password'] = 'Failure!' - with self.assertRaises(Fault): - self.assertFalse(self.xmlrpc_common.authenticate( - self.env.cr.dbname, data1["login"], data1["password"], {})) + self.assertFalse(self.xmlrpc_common.authenticate( + self.env.cr.dbname, data1["login"], data1["password"], {})) with self.cursor() as cr: env = self.env(cr) self.assertTrue( From 937ec7cec033daa6550676e7332bf726f0cb860f Mon Sep 17 00:00:00 2001 From: Jaime Arroyo Date: Mon, 3 Jun 2019 12:30:21 +0200 Subject: [PATCH 07/16] [12.0][MIG] base_remote [UPD] Update base_remote.pot --- base_remote/README.rst | 71 ++-- base_remote/__manifest__.py | 4 +- base_remote/i18n/base_remote.pot | 38 +- base_remote/models/base.py | 4 +- base_remote/models/res_remote.py | 2 +- base_remote/models/res_users.py | 10 +- base_remote/readme/CONTRIBUTORS.rst | 1 + base_remote/readme/DESCRIPTION.rst | 2 + base_remote/readme/USAGE.rst | 3 + base_remote/static/description/index.html | 427 ++++++++++++++++++++++ base_remote/tests/test_remote.py | 3 +- 11 files changed, 512 insertions(+), 53 deletions(-) create mode 100644 base_remote/readme/CONTRIBUTORS.rst create mode 100644 base_remote/readme/DESCRIPTION.rst create mode 100644 base_remote/readme/USAGE.rst create mode 100644 base_remote/static/description/index.html diff --git a/base_remote/README.rst b/base_remote/README.rst index c7f7f4525..8c0ebb16e 100644 --- a/base_remote/README.rst +++ b/base_remote/README.rst @@ -1,58 +1,81 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 - =========== Remote Base =========== -This module allows to store all the connected remotes (external ip addresses) to odoo. +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github + :target: https://github.com/OCA/server-tools/tree/12.0/base_remote + :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-12-0/server-tools-12-0-base_remote + :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/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to store all the connected remotes (external ip addresses) to Odoo. It should be used with other modules in order to check remote's configurations. +**Table of contents** + +.. contents:: + :local: + Usage ===== When installed, all remotes will be stored by `hostname` on `res.remote`. They can be viewed on `Settings / Remotes`. -The last Ip of the remote will be stored. - -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/144/11.0 - +The last IP of the remote will be stored. 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. +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 ======= -Images ------- +Authors +~~~~~~~ -* Odoo Community Association: `Icon `_. +* Creu Blanca Contributors ------------- +~~~~~~~~~~~~ * Enric Tobella -Maintainer ----------- +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -This module is maintained by the OCA. - OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -To contribute to this module, please visit https://odoo-community.org. +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/base_remote/__manifest__.py b/base_remote/__manifest__.py index f80f540cc..16301dce3 100644 --- a/base_remote/__manifest__.py +++ b/base_remote/__manifest__.py @@ -3,12 +3,12 @@ { 'name': "Remote Base", - 'version': '11.0.1.0.4', + 'version': '12.0.1.0.0', 'category': 'Generic Modules/Base', 'author': "Creu Blanca, Odoo Community Association (OCA)", 'website': 'http://github.com/OCA/server-tools', 'license': 'AGPL-3', - "depends": ['web', 'base'], + "depends": ['web'], 'data': [ 'security/ir.model.access.csv', 'views/res_remote_views.xml', diff --git a/base_remote/i18n/base_remote.pot b/base_remote/i18n/base_remote.pot index 59aa20446..b3395eb4a 100644 --- a/base_remote/i18n/base_remote.pot +++ b/base_remote/i18n/base_remote.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 11.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -14,22 +14,27 @@ msgstr "" "Plural-Forms: \n" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_create_uid +#: model:ir.model,name:base_remote.model_base +msgid "Base" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__create_uid msgid "Created by" msgstr "" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_create_date +#: model:ir.model.fields,field_description:base_remote.field_res_remote__create_date msgid "Created on" msgstr "" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_display_name +#: model:ir.model.fields,field_description:base_remote.field_res_remote__display_name msgid "Display Name" msgstr "" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_name +#: model:ir.model.fields,field_description:base_remote.field_res_remote__name msgid "Hostname" msgstr "" @@ -39,37 +44,37 @@ msgid "Hostname must be unique" msgstr "" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_id +#: model:ir.model.fields,field_description:base_remote.field_res_remote__id msgid "ID" msgstr "" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_in_network +#: model:ir.model.fields,field_description:base_remote.field_res_remote__in_network msgid "In Network" msgstr "" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_ip +#: model:ir.model.fields,field_description:base_remote.field_res_remote__ip msgid "Ip" msgstr "" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote___last_update +#: model:ir.model.fields,field_description:base_remote.field_res_remote____last_update msgid "Last Modified on" msgstr "" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_write_uid +#: model:ir.model.fields,field_description:base_remote.field_res_remote__write_uid msgid "Last Updated by" msgstr "" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_write_date +#: model:ir.model.fields,field_description:base_remote.field_res_remote__write_date msgid "Last Updated on" msgstr "" #. module: base_remote -#: model:ir.ui.view,arch_db:base_remote.res_remote_form +#: model_terms:ir.ui.view,arch_db:base_remote.res_remote_form msgid "Remote" msgstr "" @@ -77,12 +82,12 @@ msgstr "" #: model:ir.actions.act_window,name:base_remote.res_remote_action #: model:ir.model,name:base_remote.model_res_remote #: model:ir.ui.menu,name:base_remote.res_remote_menu -#: model:ir.ui.view,arch_db:base_remote.res_remote_tree +#: model_terms:ir.ui.view,arch_db:base_remote.res_remote_tree msgid "Remotes" msgstr "" #. module: base_remote -#: model:ir.model.fields,help:base_remote.field_res_remote_in_network +#: model:ir.model.fields,help:base_remote.field_res_remote__in_network msgid "Shows if the remote can be found through the socket" msgstr "" @@ -91,8 +96,3 @@ msgstr "" msgid "Users" msgstr "" -#. module: base_remote -#: model:ir.model,name:base_remote.model_base -msgid "base" -msgstr "" - diff --git a/base_remote/models/base.py b/base_remote/models/base.py index b7c9b2fc6..c534ad13e 100644 --- a/base_remote/models/base.py +++ b/base_remote/models/base.py @@ -12,8 +12,6 @@ class Base(models.AbstractModel): def remote(self): try: remote_addr = current_thread().environ["REMOTE_ADDR"] - except KeyError: - return self.env['res.remote'] - except AttributeError: + except (KeyError, AttributeError): return self.env['res.remote'] return self.env['res.remote']._get_remote(remote_addr) diff --git a/base_remote/models/res_remote.py b/base_remote/models/res_remote.py index bd90ee4fe..0abc850da 100644 --- a/base_remote/models/res_remote.py +++ b/base_remote/models/res_remote.py @@ -40,7 +40,7 @@ class ResRemote(models.Model): except socket.herror: logging.warning('Remote with ip %s could not be found' % addr) hostname = False - remote = self.search([('name', '=ilike', hostname or addr)]) + remote = self.search([('name', '=', hostname or addr)]) if not remote: remote = self.create(self._create_vals(addr, hostname)) if remote.ip != addr: diff --git a/base_remote/models/res_users.py b/base_remote/models/res_users.py index 77fab1b6e..50996a77e 100644 --- a/base_remote/models/res_users.py +++ b/base_remote/models/res_users.py @@ -3,7 +3,9 @@ from threading import current_thread from odoo import api, models, SUPERUSER_ID +from odoo.exceptions import AccessDenied from odoo.service import wsgi_server +from odoo.tools import config class ResUsers(models.Model): @@ -29,9 +31,13 @@ class ResUsers(models.Model): with cls.pool.cursor() as cr: env = api.Environment(cr, SUPERUSER_ID, {}) remote = env["res.users"].remote - if remote: + if not config['test_enable']: remote.ensure_one() - return method() + result = method() + if not result: + # Force exception to record auth failure + raise AccessDenied() + return result # Override all auth-related core methods @classmethod diff --git a/base_remote/readme/CONTRIBUTORS.rst b/base_remote/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..93ec993e0 --- /dev/null +++ b/base_remote/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Enric Tobella diff --git a/base_remote/readme/DESCRIPTION.rst b/base_remote/readme/DESCRIPTION.rst new file mode 100644 index 000000000..01d99917a --- /dev/null +++ b/base_remote/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module allows to store all the connected remotes (external ip addresses) to Odoo. +It should be used with other modules in order to check remote's configurations. \ No newline at end of file diff --git a/base_remote/readme/USAGE.rst b/base_remote/readme/USAGE.rst new file mode 100644 index 000000000..52ab7c552 --- /dev/null +++ b/base_remote/readme/USAGE.rst @@ -0,0 +1,3 @@ +When installed, all remotes will be stored by `hostname` on `res.remote`. +They can be viewed on `Settings / Remotes`. +The last IP of the remote will be stored. diff --git a/base_remote/static/description/index.html b/base_remote/static/description/index.html new file mode 100644 index 000000000..ebdb73884 --- /dev/null +++ b/base_remote/static/description/index.html @@ -0,0 +1,427 @@ + + + + + + +Remote Base + + + +
+

Remote Base

+ + +

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

+

This module allows to store all the connected remotes (external ip addresses) to Odoo. +It should be used with other modules in order to check remote鈥檚 configurations.

+

Table of contents

+ +
+

Usage

+

When installed, all remotes will be stored by hostname on res.remote. +They can be viewed on Settings / Remotes. +The last IP of the remote will be stored.

+
+
+

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

+
    +
  • Creu Blanca
  • +
+
+
+

Contributors

+ +
+
+

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/server-tools project on GitHub.

+

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

+
+
+
+ + diff --git a/base_remote/tests/test_remote.py b/base_remote/tests/test_remote.py index 33876950d..4eaa0b08b 100644 --- a/base_remote/tests/test_remote.py +++ b/base_remote/tests/test_remote.py @@ -17,8 +17,7 @@ from odoo.tests.common import at_install, HttpCase, post_install class TestRemote(HttpCase): def setUp(self): super().setUp() - # HACK https://github.com/odoo/odoo/issues/24183 - # TODO Remove in v12 + # Complex password to avoid conflicts with `password_security` self.good_password = "Admin$%02584" self.data_demo = { From 92884297a9f963aae1e13320469a254137b0407b Mon Sep 17 00:00:00 2001 From: Jaime Arroyo Date: Fri, 17 Apr 2020 08:58:57 +0200 Subject: [PATCH 08/16] [12.0][FIX] base_remote: search =ilike base_remote 12.0.1.0.1 Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: server-tools-12.0/server-tools-12.0-base_remote Translate-URL: https://translation.odoo-community.org/projects/server-tools-12-0/server-tools-12-0-base_remote/ --- base_remote/__manifest__.py | 2 +- base_remote/i18n/es.po | 39 +++++++++++++++++--------------- base_remote/models/res_remote.py | 2 +- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/base_remote/__manifest__.py b/base_remote/__manifest__.py index 16301dce3..1613ac032 100644 --- a/base_remote/__manifest__.py +++ b/base_remote/__manifest__.py @@ -3,7 +3,7 @@ { 'name': "Remote Base", - 'version': '12.0.1.0.0', + 'version': '12.0.1.0.1', 'category': 'Generic Modules/Base', 'author': "Creu Blanca, Odoo Community Association (OCA)", 'website': 'http://github.com/OCA/server-tools', diff --git a/base_remote/i18n/es.po b/base_remote/i18n/es.po index 900007684..410485323 100644 --- a/base_remote/i18n/es.po +++ b/base_remote/i18n/es.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * base_remote +# * base_remote # msgid "" msgstr "" @@ -17,22 +17,27 @@ msgstr "" "X-Generator: Weblate 3.0.1\n" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_create_uid +#: model:ir.model,name:base_remote.model_base +msgid "Base" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__create_uid msgid "Created by" msgstr "Creado por" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_create_date +#: model:ir.model.fields,field_description:base_remote.field_res_remote__create_date msgid "Created on" msgstr "Creado el" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_display_name +#: model:ir.model.fields,field_description:base_remote.field_res_remote__display_name msgid "Display Name" msgstr "Nombre a mostrar" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_name +#: model:ir.model.fields,field_description:base_remote.field_res_remote__name msgid "Hostname" msgstr "Nombre del host" @@ -42,37 +47,37 @@ msgid "Hostname must be unique" msgstr "El nombre del host debe ser 煤nico" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_id +#: model:ir.model.fields,field_description:base_remote.field_res_remote__id msgid "ID" msgstr "ID" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_in_network +#: model:ir.model.fields,field_description:base_remote.field_res_remote__in_network msgid "In Network" msgstr "En la Red local" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_ip +#: model:ir.model.fields,field_description:base_remote.field_res_remote__ip msgid "Ip" msgstr "IP" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote___last_update +#: model:ir.model.fields,field_description:base_remote.field_res_remote____last_update msgid "Last Modified on" msgstr "脷ltima actualizaci贸n por" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_write_uid +#: model:ir.model.fields,field_description:base_remote.field_res_remote__write_uid msgid "Last Updated by" msgstr "脷ltima actualizaci贸n por" #. module: base_remote -#: model:ir.model.fields,field_description:base_remote.field_res_remote_write_date +#: model:ir.model.fields,field_description:base_remote.field_res_remote__write_date msgid "Last Updated on" msgstr "脷ltima actualizaci贸n el" #. module: base_remote -#: model:ir.ui.view,arch_db:base_remote.res_remote_form +#: model_terms:ir.ui.view,arch_db:base_remote.res_remote_form msgid "Remote" msgstr "Remoto" @@ -80,12 +85,12 @@ msgstr "Remoto" #: model:ir.actions.act_window,name:base_remote.res_remote_action #: model:ir.model,name:base_remote.model_res_remote #: model:ir.ui.menu,name:base_remote.res_remote_menu -#: model:ir.ui.view,arch_db:base_remote.res_remote_tree +#: model_terms:ir.ui.view,arch_db:base_remote.res_remote_tree msgid "Remotes" msgstr "Remotos" #. module: base_remote -#: model:ir.model.fields,help:base_remote.field_res_remote_in_network +#: model:ir.model.fields,help:base_remote.field_res_remote__in_network msgid "Shows if the remote can be found through the socket" msgstr "Muestra si el remoto se pudo encontrar a trav茅s del socket" @@ -94,7 +99,5 @@ msgstr "Muestra si el remoto se pudo encontrar a trav茅s del socket" msgid "Users" msgstr "Usuarios" -#. module: base_remote -#: model:ir.model,name:base_remote.model_base -msgid "base" -msgstr "base" +#~ msgid "base" +#~ msgstr "base" diff --git a/base_remote/models/res_remote.py b/base_remote/models/res_remote.py index 0abc850da..bd90ee4fe 100644 --- a/base_remote/models/res_remote.py +++ b/base_remote/models/res_remote.py @@ -40,7 +40,7 @@ class ResRemote(models.Model): except socket.herror: logging.warning('Remote with ip %s could not be found' % addr) hostname = False - remote = self.search([('name', '=', hostname or addr)]) + remote = self.search([('name', '=ilike', hostname or addr)]) if not remote: remote = self.create(self._create_vals(addr, hostname)) if remote.ip != addr: From 3c22eb4eeed78f946331516458e249d95b3c4c50 Mon Sep 17 00:00:00 2001 From: Jaime Arroyo Date: Mon, 20 Jul 2020 10:47:41 +0200 Subject: [PATCH 09/16] [IMP] base_remote: black, isort, prettier --- base_remote/__manifest__.py | 23 +++++++--------- base_remote/models/__init__.py | 2 -- base_remote/models/base.py | 9 +++--- base_remote/models/res_remote.py | 35 ++++++++++-------------- base_remote/models/res_users.py | 11 ++++---- base_remote/readme/DESCRIPTION.rst | 2 +- base_remote/tests/test_remote.py | 38 +++++++++++++------------- base_remote/views/res_remote_views.xml | 27 ++++++++++-------- 8 files changed, 70 insertions(+), 77 deletions(-) diff --git a/base_remote/__manifest__.py b/base_remote/__manifest__.py index 1613ac032..2a758f727 100644 --- a/base_remote/__manifest__.py +++ b/base_remote/__manifest__.py @@ -2,17 +2,14 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': "Remote Base", - 'version': '12.0.1.0.1', - 'category': 'Generic Modules/Base', - 'author': "Creu Blanca, Odoo Community Association (OCA)", - 'website': 'http://github.com/OCA/server-tools', - 'license': 'AGPL-3', - "depends": ['web'], - 'data': [ - 'security/ir.model.access.csv', - 'views/res_remote_views.xml', - ], - 'installable': True, - 'application': True, + "name": "Remote Base", + "version": "13.0.1.0.1", + "category": "Generic Modules/Base", + "author": "Creu Blanca, Odoo Community Association (OCA)", + "website": "http://github.com/OCA/server-tools", + "license": "AGPL-3", + "depends": ["web"], + "data": ["security/ir.model.access.csv", "views/res_remote_views.xml"], + "installable": True, + "application": True, } diff --git a/base_remote/models/__init__.py b/base_remote/models/__init__.py index 11252a793..afa66d0dc 100644 --- a/base_remote/models/__init__.py +++ b/base_remote/models/__init__.py @@ -1,5 +1,3 @@ from . import base from . import res_remote from . import res_users - - diff --git a/base_remote/models/base.py b/base_remote/models/base.py index c534ad13e..cb128d5c0 100644 --- a/base_remote/models/base.py +++ b/base_remote/models/base.py @@ -1,17 +1,18 @@ # Copyright 2018 Creu Blanca # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import models from threading import current_thread +from odoo import models + class Base(models.AbstractModel): - _inherit = 'base' + _inherit = "base" @property def remote(self): try: remote_addr = current_thread().environ["REMOTE_ADDR"] except (KeyError, AttributeError): - return self.env['res.remote'] - return self.env['res.remote']._get_remote(remote_addr) + return self.env["res.remote"] + return self.env["res.remote"]._get_remote(remote_addr) diff --git a/base_remote/models/res_remote.py b/base_remote/models/res_remote.py index bd90ee4fe..8e57d9bc1 100644 --- a/base_remote/models/res_remote.py +++ b/base_remote/models/res_remote.py @@ -1,36 +1,29 @@ # Copyright 2018 Creu Blanca # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import api, models, fields -import socket import logging +import socket + +from odoo import api, fields, models class ResRemote(models.Model): - _name = 'res.remote' - _description = 'Remotes' + _name = "res.remote" + _description = "Remotes" - name = fields.Char( - required=True, - string='Hostname', - index=True, - readonly=True - ) + name = fields.Char(required=True, string="Hostname", index=True, readonly=True) ip = fields.Char(required=True) in_network = fields.Boolean( - required=True, - help='Shows if the remote can be found through the socket' + required=True, help="Shows if the remote can be found through the socket" ) - _sql_constraints = [ - ('name_unique', 'unique(name)', 'Hostname must be unique') - ] + _sql_constraints = [("name_unique", "unique(name)", "Hostname must be unique")] @api.model def _create_vals(self, addr, hostname): return { - 'name': hostname or addr, - 'ip': addr, - 'in_network': bool(hostname), + "name": hostname or addr, + "ip": addr, + "in_network": bool(hostname), } @api.model @@ -38,12 +31,12 @@ class ResRemote(models.Model): try: hostname, alias, ips = socket.gethostbyaddr(addr) except socket.herror: - logging.warning('Remote with ip %s could not be found' % addr) + logging.warning("Remote with ip %s could not be found" % addr) hostname = False - remote = self.search([('name', '=ilike', hostname or addr)]) + remote = self.search([("name", "=ilike", hostname or addr)]) if not remote: remote = self.create(self._create_vals(addr, hostname)) if remote.ip != addr: # IPs can change through time, but hostname should not change - remote.write({'ip': addr}) + remote.write({"ip": addr}) return remote diff --git a/base_remote/models/res_users.py b/base_remote/models/res_users.py index 50996a77e..09d2c17b6 100644 --- a/base_remote/models/res_users.py +++ b/base_remote/models/res_users.py @@ -2,7 +2,8 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from threading import current_thread -from odoo import api, models, SUPERUSER_ID + +from odoo import SUPERUSER_ID, api, models from odoo.exceptions import AccessDenied from odoo.service import wsgi_server from odoo.tools import config @@ -31,7 +32,7 @@ class ResUsers(models.Model): with cls.pool.cursor() as cr: env = api.Environment(cr, SUPERUSER_ID, {}) remote = env["res.users"].remote - if not config['test_enable']: + if not config["test_enable"]: remote.ensure_one() result = method() if not result: @@ -43,8 +44,7 @@ class ResUsers(models.Model): @classmethod def _login(cls, db, login, password): return cls._auth_check_remote( - login, - lambda: super(ResUsers, cls)._login(db, login, password), + login, lambda: super(ResUsers, cls)._login(db, login, password), ) @classmethod @@ -52,5 +52,6 @@ class ResUsers(models.Model): return cls._auth_check_remote( login, lambda: super(ResUsers, cls).authenticate( - db, login, password, user_agent_env), + db, login, password, user_agent_env + ), ) diff --git a/base_remote/readme/DESCRIPTION.rst b/base_remote/readme/DESCRIPTION.rst index 01d99917a..be5ce4d3f 100644 --- a/base_remote/readme/DESCRIPTION.rst +++ b/base_remote/readme/DESCRIPTION.rst @@ -1,2 +1,2 @@ This module allows to store all the connected remotes (external ip addresses) to Odoo. -It should be used with other modules in order to check remote's configurations. \ No newline at end of file +It should be used with other modules in order to check remote's configurations. diff --git a/base_remote/tests/test_remote.py b/base_remote/tests/test_remote.py index 4eaa0b08b..85941f5cd 100644 --- a/base_remote/tests/test_remote.py +++ b/base_remote/tests/test_remote.py @@ -5,7 +5,7 @@ from mock import patch from werkzeug.utils import redirect from odoo import http -from odoo.tests.common import at_install, HttpCase, post_install +from odoo.tests.common import HttpCase, at_install, post_install @at_install(False) @@ -24,39 +24,39 @@ class TestRemote(HttpCase): "login": "demo", "password": "Demo%&/(908409**", } - self.remote_addr = '127.0.0.1' + self.remote_addr = "127.0.0.1" with self.cursor() as cr: env = self.env(cr) # Make sure involved users have good passwords env.user.password = self.good_password - env["res.users"].search([ - ("login", "=", self.data_demo["login"]), - ]).password = self.data_demo["password"] - remote = self.env['res.remote'].search([ - ('ip', '=', self.remote_addr) - ]) + env["res.users"].search( + [("login", "=", self.data_demo["login"])] + ).password = self.data_demo["password"] + remote = self.env["res.remote"].search([("ip", "=", self.remote_addr)]) if remote: remote.unlink() def test_xmlrpc_login_ok(self, *args): """Test Login""" data1 = self.data_demo - self.assertTrue(self.xmlrpc_common.authenticate( - self.env.cr.dbname, data1["login"], data1["password"], {})) + self.assertTrue( + self.xmlrpc_common.authenticate( + self.env.cr.dbname, data1["login"], data1["password"], {} + ) + ) with self.cursor() as cr: env = self.env(cr) - self.assertTrue( - env['res.remote'].search([('ip', '=', self.remote_addr)]) - ) + self.assertTrue(env["res.remote"].search([("ip", "=", self.remote_addr)])) def test_xmlrpc_login_failure(self, *args): """Test Login Failure""" data1 = self.data_demo - data1['password'] = 'Failure!' - self.assertFalse(self.xmlrpc_common.authenticate( - self.env.cr.dbname, data1["login"], data1["password"], {})) + data1["password"] = "Failure!" + self.assertFalse( + self.xmlrpc_common.authenticate( + self.env.cr.dbname, data1["login"], data1["password"], {} + ) + ) with self.cursor() as cr: env = self.env(cr) - self.assertTrue( - env['res.remote'].search([('ip', '=', self.remote_addr)]) - ) + self.assertTrue(env["res.remote"].search([("ip", "=", self.remote_addr)])) diff --git a/base_remote/views/res_remote_views.xml b/base_remote/views/res_remote_views.xml index 143150afc..582ab9c24 100644 --- a/base_remote/views/res_remote_views.xml +++ b/base_remote/views/res_remote_views.xml @@ -7,15 +7,17 @@
-

+

+ +

- - + + - +
@@ -25,8 +27,8 @@ res.remote - - + + @@ -37,10 +39,11 @@ form tree,form - - + From 4efa9ec5e0834bb1c57efd974961d9277a03dc4f Mon Sep 17 00:00:00 2001 From: Jaime Arroyo Date: Mon, 20 Jul 2020 10:52:44 +0200 Subject: [PATCH 10/16] [13.0][MIG] base_remote [UPD] Update base_remote.pot --- base_remote/README.rst | 10 +++---- base_remote/__manifest__.py | 1 - base_remote/i18n/base_remote.pot | 34 +++++++++++++++++++---- base_remote/models/res_users.py | 3 -- base_remote/static/description/index.html | 6 ++-- base_remote/views/res_remote_views.xml | 1 - 6 files changed, 37 insertions(+), 18 deletions(-) diff --git a/base_remote/README.rst b/base_remote/README.rst index 8c0ebb16e..564507bee 100644 --- a/base_remote/README.rst +++ b/base_remote/README.rst @@ -14,13 +14,13 @@ Remote Base :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github - :target: https://github.com/OCA/server-tools/tree/12.0/base_remote + :target: https://github.com/OCA/server-tools/tree/13.0/base_remote :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-12-0/server-tools-12-0-base_remote + :target: https://translation.odoo-community.org/projects/server-tools-13-0/server-tools-13-0-base_remote :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/12.0 + :target: https://runbot.odoo-community.org/runbot/149/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -46,7 +46,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 -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -76,6 +76,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/server-tools `_ project on GitHub. +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/base_remote/__manifest__.py b/base_remote/__manifest__.py index 2a758f727..ed66ae0e1 100644 --- a/base_remote/__manifest__.py +++ b/base_remote/__manifest__.py @@ -11,5 +11,4 @@ "depends": ["web"], "data": ["security/ir.model.access.csv", "views/res_remote_views.xml"], "installable": True, - "application": True, } diff --git a/base_remote/i18n/base_remote.pot b/base_remote/i18n/base_remote.pot index b3395eb4a..e889d8fc4 100644 --- a/base_remote/i18n/base_remote.pot +++ b/base_remote/i18n/base_remote.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * base_remote +# * base_remote # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,6 +18,26 @@ msgstr "" msgid "Base" msgstr "" +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__changeset_change_ids +msgid "Changeset Changes" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__changeset_ids +msgid "Changesets" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__count_pending_changeset_changes +msgid "Count Pending Changeset Changes" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__count_pending_changesets +msgid "Count Pending Changesets" +msgstr "" + #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__create_uid msgid "Created by" @@ -39,7 +59,7 @@ msgid "Hostname" msgstr "" #. module: base_remote -#: sql_constraint:res.remote:0 +#: model:ir.model.constraint,message:base_remote.constraint_res_remote_name_unique msgid "Hostname must be unique" msgstr "" @@ -91,8 +111,12 @@ msgstr "" msgid "Shows if the remote can be found through the socket" msgstr "" +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__user_can_see_changeset +msgid "User Can See Changeset" +msgstr "" + #. module: base_remote #: model:ir.model,name:base_remote.model_res_users msgid "Users" msgstr "" - diff --git a/base_remote/models/res_users.py b/base_remote/models/res_users.py index 09d2c17b6..7b04c6d25 100644 --- a/base_remote/models/res_users.py +++ b/base_remote/models/res_users.py @@ -12,9 +12,6 @@ from odoo.tools import config class ResUsers(models.Model): _inherit = "res.users" - # HACK https://github.com/odoo/odoo/issues/24183 - # TODO Remove in v12, and use normal odoo.http.request to get details - @api.model_cr def _register_hook(self): """馃悞-patch XML-RPC controller to know remote address.""" super()._register_hook() diff --git a/base_remote/static/description/index.html b/base_remote/static/description/index.html index ebdb73884..82d763099 100644 --- a/base_remote/static/description/index.html +++ b/base_remote/static/description/index.html @@ -367,7 +367,7 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

This module allows to store all the connected remotes (external ip addresses) to Odoo. It should be used with other modules in order to check remote鈥檚 configurations.

Table of contents

@@ -394,7 +394,7 @@ The last IP of the remote will be stored.

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.

+feedback.

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

@@ -418,7 +418,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

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/server-tools project on GitHub.

+

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/base_remote/views/res_remote_views.xml b/base_remote/views/res_remote_views.xml index 582ab9c24..4eb9f75bd 100644 --- a/base_remote/views/res_remote_views.xml +++ b/base_remote/views/res_remote_views.xml @@ -36,7 +36,6 @@ Remotes ir.actions.act_window res.remote - form tree,form Date: Mon, 28 Jun 2021 10:18:02 +0530 Subject: [PATCH 11/16] [IMP] isort, black, prettier. --- base_remote/__manifest__.py | 2 +- base_remote/models/res_users.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/base_remote/__manifest__.py b/base_remote/__manifest__.py index ed66ae0e1..f61fb989c 100644 --- a/base_remote/__manifest__.py +++ b/base_remote/__manifest__.py @@ -6,7 +6,7 @@ "version": "13.0.1.0.1", "category": "Generic Modules/Base", "author": "Creu Blanca, Odoo Community Association (OCA)", - "website": "http://github.com/OCA/server-tools", + "website": "https://github.com/OCA/server-tools", "license": "AGPL-3", "depends": ["web"], "data": ["security/ir.model.access.csv", "views/res_remote_views.xml"], diff --git a/base_remote/models/res_users.py b/base_remote/models/res_users.py index 7b04c6d25..3fd489788 100644 --- a/base_remote/models/res_users.py +++ b/base_remote/models/res_users.py @@ -41,7 +41,8 @@ class ResUsers(models.Model): @classmethod def _login(cls, db, login, password): return cls._auth_check_remote( - login, lambda: super(ResUsers, cls)._login(db, login, password), + login, + lambda: super(ResUsers, cls)._login(db, login, password), ) @classmethod From a1a51944be68519883a08c6ae0e2f23b5f7c7360 Mon Sep 17 00:00:00 2001 From: fshah Date: Mon, 28 Jun 2021 10:49:25 +0530 Subject: [PATCH 12/16] [MIG] Migrate module base_remote to v14. [UPD] Update base_remote.pot [UPD] README.rst [UPD] Update base_remote.pot Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: server-tools-14.0/server-tools-14.0-base_remote Translate-URL: https://translation.odoo-community.org/projects/server-tools-14-0/server-tools-14-0-base_remote/ --- base_remote/README.rst | 10 +++--- base_remote/__manifest__.py | 2 +- base_remote/i18n/base_remote.pot | 16 ++++++++- base_remote/i18n/es.po | 41 ++++++++++++++++++++++- base_remote/models/res_users.py | 4 +-- base_remote/static/description/index.html | 6 ++-- base_remote/tests/test_remote.py | 6 ++-- 7 files changed, 69 insertions(+), 16 deletions(-) diff --git a/base_remote/README.rst b/base_remote/README.rst index 564507bee..5e76f9f11 100644 --- a/base_remote/README.rst +++ b/base_remote/README.rst @@ -14,13 +14,13 @@ Remote Base :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github - :target: https://github.com/OCA/server-tools/tree/13.0/base_remote + :target: https://github.com/OCA/server-tools/tree/14.0/base_remote :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-13-0/server-tools-13-0-base_remote + :target: https://translation.odoo-community.org/projects/server-tools-14-0/server-tools-14-0-base_remote :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/13.0 + :target: https://runbot.odoo-community.org/runbot/149/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -46,7 +46,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 -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -76,6 +76,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/server-tools `_ project on GitHub. +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/base_remote/__manifest__.py b/base_remote/__manifest__.py index f61fb989c..e28ae489a 100644 --- a/base_remote/__manifest__.py +++ b/base_remote/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Remote Base", - "version": "13.0.1.0.1", + "version": "14.0.1.0.0", "category": "Generic Modules/Base", "author": "Creu Blanca, Odoo Community Association (OCA)", "website": "https://github.com/OCA/server-tools", diff --git a/base_remote/i18n/base_remote.pot b/base_remote/i18n/base_remote.pot index e889d8fc4..1321a06f1 100644 --- a/base_remote/i18n/base_remote.pot +++ b/base_remote/i18n/base_remote.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -20,21 +20,25 @@ msgstr "" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__changeset_change_ids +#: model:ir.model.fields,field_description:base_remote.field_res_users__changeset_change_ids msgid "Changeset Changes" msgstr "" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__changeset_ids +#: model:ir.model.fields,field_description:base_remote.field_res_users__changeset_ids msgid "Changesets" msgstr "" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__count_pending_changeset_changes +#: model:ir.model.fields,field_description:base_remote.field_res_users__count_pending_changeset_changes msgid "Count Pending Changeset Changes" msgstr "" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__count_pending_changesets +#: model:ir.model.fields,field_description:base_remote.field_res_users__count_pending_changesets msgid "Count Pending Changesets" msgstr "" @@ -50,6 +54,7 @@ msgstr "" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__display_name +#: model:ir.model.fields,field_description:base_remote.field_res_users__display_name msgid "Display Name" msgstr "" @@ -65,6 +70,7 @@ msgstr "" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__id +#: model:ir.model.fields,field_description:base_remote.field_res_users__id msgid "ID" msgstr "" @@ -80,6 +86,7 @@ msgstr "" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote____last_update +#: model:ir.model.fields,field_description:base_remote.field_res_users____last_update msgid "Last Modified on" msgstr "" @@ -111,8 +118,15 @@ msgstr "" msgid "Shows if the remote can be found through the socket" msgstr "" +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__smart_search +#: model:ir.model.fields,field_description:base_remote.field_res_users__smart_search +msgid "Smart Search" +msgstr "" + #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__user_can_see_changeset +#: model:ir.model.fields,field_description:base_remote.field_res_users__user_can_see_changeset msgid "User Can See Changeset" msgstr "" diff --git a/base_remote/i18n/es.po b/base_remote/i18n/es.po index 410485323..34dd9802d 100644 --- a/base_remote/i18n/es.po +++ b/base_remote/i18n/es.po @@ -21,6 +21,30 @@ msgstr "" msgid "Base" msgstr "" +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__changeset_change_ids +#: model:ir.model.fields,field_description:base_remote.field_res_users__changeset_change_ids +msgid "Changeset Changes" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__changeset_ids +#: model:ir.model.fields,field_description:base_remote.field_res_users__changeset_ids +msgid "Changesets" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__count_pending_changeset_changes +#: model:ir.model.fields,field_description:base_remote.field_res_users__count_pending_changeset_changes +msgid "Count Pending Changeset Changes" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__count_pending_changesets +#: model:ir.model.fields,field_description:base_remote.field_res_users__count_pending_changesets +msgid "Count Pending Changesets" +msgstr "" + #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__create_uid msgid "Created by" @@ -33,6 +57,7 @@ msgstr "Creado el" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__display_name +#: model:ir.model.fields,field_description:base_remote.field_res_users__display_name msgid "Display Name" msgstr "Nombre a mostrar" @@ -42,12 +67,13 @@ msgid "Hostname" msgstr "Nombre del host" #. module: base_remote -#: sql_constraint:res.remote:0 +#: model:ir.model.constraint,message:base_remote.constraint_res_remote_name_unique msgid "Hostname must be unique" msgstr "El nombre del host debe ser 煤nico" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__id +#: model:ir.model.fields,field_description:base_remote.field_res_users__id msgid "ID" msgstr "ID" @@ -63,6 +89,7 @@ msgstr "IP" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote____last_update +#: model:ir.model.fields,field_description:base_remote.field_res_users____last_update msgid "Last Modified on" msgstr "脷ltima actualizaci贸n por" @@ -94,6 +121,18 @@ msgstr "Remotos" msgid "Shows if the remote can be found through the socket" msgstr "Muestra si el remoto se pudo encontrar a trav茅s del socket" +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__smart_search +#: model:ir.model.fields,field_description:base_remote.field_res_users__smart_search +msgid "Smart Search" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__user_can_see_changeset +#: model:ir.model.fields,field_description:base_remote.field_res_users__user_can_see_changeset +msgid "User Can See Changeset" +msgstr "" + #. module: base_remote #: model:ir.model,name:base_remote.model_res_users msgid "Users" diff --git a/base_remote/models/res_users.py b/base_remote/models/res_users.py index 3fd489788..8bb0d3928 100644 --- a/base_remote/models/res_users.py +++ b/base_remote/models/res_users.py @@ -39,10 +39,10 @@ class ResUsers(models.Model): # Override all auth-related core methods @classmethod - def _login(cls, db, login, password): + def _login(cls, db, login, password, user_agent_env): return cls._auth_check_remote( login, - lambda: super(ResUsers, cls)._login(db, login, password), + lambda: super(ResUsers, cls)._login(db, login, password, user_agent_env), ) @classmethod diff --git a/base_remote/static/description/index.html b/base_remote/static/description/index.html index 82d763099..8a37c1601 100644 --- a/base_remote/static/description/index.html +++ b/base_remote/static/description/index.html @@ -367,7 +367,7 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

This module allows to store all the connected remotes (external ip addresses) to Odoo. It should be used with other modules in order to check remote鈥檚 configurations.

Table of contents

@@ -394,7 +394,7 @@ The last IP of the remote will be stored.

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.

+feedback.

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

@@ -418,7 +418,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

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/server-tools project on GitHub.

+

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/base_remote/tests/test_remote.py b/base_remote/tests/test_remote.py index 85941f5cd..c7a6c1c57 100644 --- a/base_remote/tests/test_remote.py +++ b/base_remote/tests/test_remote.py @@ -5,11 +5,11 @@ from mock import patch from werkzeug.utils import redirect from odoo import http -from odoo.tests.common import HttpCase, at_install, post_install +from odoo.tests import tagged +from odoo.tests.common import HttpCase -@at_install(False) -@post_install(True) +@tagged("post_install", "-at_install") # Skip CSRF validation on tests @patch(http.__name__ + ".WebRequest.validate_csrf", return_value=True) # Skip specific browser forgery on redirections From be4fcee90ea4047a1a0d772ec2f9ca8aba49b4cd Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Sun, 27 Mar 2022 22:27:31 +0000 Subject: [PATCH 13/16] Added translation using Weblate (Spanish (Argentina)) --- base_remote/i18n/es_AR.po | 137 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 base_remote/i18n/es_AR.po diff --git a/base_remote/i18n/es_AR.po b/base_remote/i18n/es_AR.po new file mode 100644 index 000000000..66e41e942 --- /dev/null +++ b/base_remote/i18n/es_AR.po @@ -0,0 +1,137 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_remote +# +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: base_remote +#: model:ir.model,name:base_remote.model_base +msgid "Base" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__changeset_change_ids +#: model:ir.model.fields,field_description:base_remote.field_res_users__changeset_change_ids +msgid "Changeset Changes" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__changeset_ids +#: model:ir.model.fields,field_description:base_remote.field_res_users__changeset_ids +msgid "Changesets" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__count_pending_changeset_changes +#: model:ir.model.fields,field_description:base_remote.field_res_users__count_pending_changeset_changes +msgid "Count Pending Changeset Changes" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__count_pending_changesets +#: model:ir.model.fields,field_description:base_remote.field_res_users__count_pending_changesets +msgid "Count Pending Changesets" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__create_uid +msgid "Created by" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__create_date +msgid "Created on" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__display_name +#: model:ir.model.fields,field_description:base_remote.field_res_users__display_name +msgid "Display Name" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__name +msgid "Hostname" +msgstr "" + +#. module: base_remote +#: model:ir.model.constraint,message:base_remote.constraint_res_remote_name_unique +msgid "Hostname must be unique" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__id +#: model:ir.model.fields,field_description:base_remote.field_res_users__id +msgid "ID" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__in_network +msgid "In Network" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__ip +msgid "Ip" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote____last_update +#: model:ir.model.fields,field_description:base_remote.field_res_users____last_update +msgid "Last Modified on" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__write_date +msgid "Last Updated on" +msgstr "" + +#. module: base_remote +#: model_terms:ir.ui.view,arch_db:base_remote.res_remote_form +msgid "Remote" +msgstr "" + +#. module: base_remote +#: model:ir.actions.act_window,name:base_remote.res_remote_action +#: model:ir.model,name:base_remote.model_res_remote +#: model:ir.ui.menu,name:base_remote.res_remote_menu +#: model_terms:ir.ui.view,arch_db:base_remote.res_remote_tree +msgid "Remotes" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,help:base_remote.field_res_remote__in_network +msgid "Shows if the remote can be found through the socket" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__smart_search +#: model:ir.model.fields,field_description:base_remote.field_res_users__smart_search +msgid "Smart Search" +msgstr "" + +#. module: base_remote +#: model:ir.model.fields,field_description:base_remote.field_res_remote__user_can_see_changeset +#: model:ir.model.fields,field_description:base_remote.field_res_users__user_can_see_changeset +msgid "User Can See Changeset" +msgstr "" + +#. module: base_remote +#: model:ir.model,name:base_remote.model_res_users +msgid "Users" +msgstr "" From 908e0c5e7909470c09d57b93685dc4c0724a6261 Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Sun, 27 Mar 2022 22:30:02 +0000 Subject: [PATCH 14/16] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (22 of 22 strings) Translation: server-tools-14.0/server-tools-14.0-base_remote Translate-URL: https://translation.odoo-community.org/projects/server-tools-14-0/server-tools-14-0-base_remote/es_AR/ --- base_remote/i18n/es_AR.po | 48 ++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/base_remote/i18n/es_AR.po b/base_remote/i18n/es_AR.po index 66e41e942..1756a376a 100644 --- a/base_remote/i18n/es_AR.po +++ b/base_remote/i18n/es_AR.po @@ -6,105 +6,107 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2022-03-28 01:17+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: base_remote #: model:ir.model,name:base_remote.model_base msgid "Base" -msgstr "" +msgstr "Base" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__changeset_change_ids #: model:ir.model.fields,field_description:base_remote.field_res_users__changeset_change_ids msgid "Changeset Changes" -msgstr "" +msgstr "Cambios en el Conjunto de Cambios" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__changeset_ids #: model:ir.model.fields,field_description:base_remote.field_res_users__changeset_ids msgid "Changesets" -msgstr "" +msgstr "Conjunto de Cambios" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__count_pending_changeset_changes #: model:ir.model.fields,field_description:base_remote.field_res_users__count_pending_changeset_changes msgid "Count Pending Changeset Changes" -msgstr "" +msgstr "Contar los Cambios Pendientes del Conjunto de Cambios" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__count_pending_changesets #: model:ir.model.fields,field_description:base_remote.field_res_users__count_pending_changesets msgid "Count Pending Changesets" -msgstr "" +msgstr "Contar Conjunto de Cambios Pendientes" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__create_uid msgid "Created by" -msgstr "" +msgstr "Creado por" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__create_date msgid "Created on" -msgstr "" +msgstr "Creado en" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__display_name #: model:ir.model.fields,field_description:base_remote.field_res_users__display_name msgid "Display Name" -msgstr "" +msgstr "Mostrar Nombre" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__name msgid "Hostname" -msgstr "" +msgstr "Nombre del Host" #. module: base_remote #: model:ir.model.constraint,message:base_remote.constraint_res_remote_name_unique msgid "Hostname must be unique" -msgstr "" +msgstr "El nombre del host debe ser 煤nico" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__id #: model:ir.model.fields,field_description:base_remote.field_res_users__id msgid "ID" -msgstr "" +msgstr "ID" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__in_network msgid "In Network" -msgstr "" +msgstr "En Red" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__ip msgid "Ip" -msgstr "" +msgstr "IP" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote____last_update #: model:ir.model.fields,field_description:base_remote.field_res_users____last_update msgid "Last Modified on" -msgstr "" +msgstr "脷ltima modificaci贸n en" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__write_uid msgid "Last Updated by" -msgstr "" +msgstr "脷ltima actualizaci贸n realizada por" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__write_date msgid "Last Updated on" -msgstr "" +msgstr "脷ltima actualizaci贸n el" #. module: base_remote #: model_terms:ir.ui.view,arch_db:base_remote.res_remote_form msgid "Remote" -msgstr "" +msgstr "Remoto" #. module: base_remote #: model:ir.actions.act_window,name:base_remote.res_remote_action @@ -112,26 +114,26 @@ msgstr "" #: model:ir.ui.menu,name:base_remote.res_remote_menu #: model_terms:ir.ui.view,arch_db:base_remote.res_remote_tree msgid "Remotes" -msgstr "" +msgstr "Remotos" #. module: base_remote #: model:ir.model.fields,help:base_remote.field_res_remote__in_network msgid "Shows if the remote can be found through the socket" -msgstr "" +msgstr "Muestro si el remoto se puede encontrar a trav茅s del socket" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__smart_search #: model:ir.model.fields,field_description:base_remote.field_res_users__smart_search msgid "Smart Search" -msgstr "" +msgstr "B煤squeda Inteligente" #. module: base_remote #: model:ir.model.fields,field_description:base_remote.field_res_remote__user_can_see_changeset #: model:ir.model.fields,field_description:base_remote.field_res_users__user_can_see_changeset msgid "User Can See Changeset" -msgstr "" +msgstr "El usuario puede ver el Conjunto de Cambios" #. module: base_remote #: model:ir.model,name:base_remote.model_res_users msgid "Users" -msgstr "" +msgstr "Usuarios" From 823d0f83a3702895645bd5d977e377de3f42e28c Mon Sep 17 00:00:00 2001 From: Olga Marco Date: Fri, 20 May 2022 11:42:49 +0200 Subject: [PATCH 15/16] [IMP] base_remote: black, isort, prettier --- setup/base_remote/odoo/addons/base_remote | 1 + setup/base_remote/setup.py | 6 ++++++ 2 files changed, 7 insertions(+) create mode 120000 setup/base_remote/odoo/addons/base_remote create mode 100644 setup/base_remote/setup.py diff --git a/setup/base_remote/odoo/addons/base_remote b/setup/base_remote/odoo/addons/base_remote new file mode 120000 index 000000000..1dda6f4b9 --- /dev/null +++ b/setup/base_remote/odoo/addons/base_remote @@ -0,0 +1 @@ +../../../../base_remote \ No newline at end of file diff --git a/setup/base_remote/setup.py b/setup/base_remote/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/base_remote/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 6382bf86578d3d405b44070aa21c2db98f65bef1 Mon Sep 17 00:00:00 2001 From: Olga Marco Date: Fri, 20 May 2022 11:44:11 +0200 Subject: [PATCH 16/16] [MIG] base_remote: Migration to 15.0 Co-authored-by: Enric Tobella --- base_remote/__manifest__.py | 2 +- base_remote/tests/test_remote.py | 3 --- base_remote/views/res_remote_views.xml | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/base_remote/__manifest__.py b/base_remote/__manifest__.py index e28ae489a..0c0a02eb0 100644 --- a/base_remote/__manifest__.py +++ b/base_remote/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Remote Base", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "category": "Generic Modules/Base", "author": "Creu Blanca, Odoo Community Association (OCA)", "website": "https://github.com/OCA/server-tools", diff --git a/base_remote/tests/test_remote.py b/base_remote/tests/test_remote.py index c7a6c1c57..d25cd5773 100644 --- a/base_remote/tests/test_remote.py +++ b/base_remote/tests/test_remote.py @@ -2,7 +2,6 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from mock import patch -from werkzeug.utils import redirect from odoo import http from odoo.tests import tagged @@ -12,8 +11,6 @@ from odoo.tests.common import HttpCase @tagged("post_install", "-at_install") # Skip CSRF validation on tests @patch(http.__name__ + ".WebRequest.validate_csrf", return_value=True) -# Skip specific browser forgery on redirections -@patch(http.__name__ + ".redirect_with_hash", side_effect=redirect) class TestRemote(HttpCase): def setUp(self): super().setUp() diff --git a/base_remote/views/res_remote_views.xml b/base_remote/views/res_remote_views.xml index 4eb9f75bd..b100f9331 100644 --- a/base_remote/views/res_remote_views.xml +++ b/base_remote/views/res_remote_views.xml @@ -26,7 +26,7 @@ res.remote.tree res.remote - +