Skip to content

Commit 9a2ab6c

Browse files
committed
Merge PR #235 into 17.0
Signed-off-by simahawk
2 parents 5d1272a + 49efd97 commit 9a2ab6c

6 files changed

Lines changed: 67 additions & 14 deletions

File tree

server_environment/models/server_env_mixin.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ def _server_env_add_default_field(self, base_field):
407407
"sparse": "server_env_defaults",
408408
"automatic": True,
409409
"string": fieldlabel,
410+
"default": base_field.default,
410411
}
411412
)
412413

server_environment/server_env.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -308,11 +308,11 @@ def get_view(self, view_id=None, view_type="form", **options):
308308
@api.model
309309
def _is_secret(self, key):
310310
"""
311-
This method is intended to be inherited to defined which keywords
312-
should be secret.
313-
:return: list of secret keywords
311+
This method is intended to be inherited to define which values
312+
should be kept secret.
313+
:return: True if information has to be protected, False otherwise
314314
"""
315-
secret_keys = ["passw", "key", "secret", "token"]
315+
secret_keys = ["_pass", "passw", "key", "secret", "token"]
316316
return any(secret_key in key for secret_key in secret_keys)
317317

318318
@api.model

server_environment/tests/common.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
import odoo.addons.server_environment.models.server_env_mixin as server_env_mixin
1111
from odoo.addons.server_environment import server_env
1212

13+
CLEAN_ENV = {
14+
var: value
15+
for (var, value) in os.environ.items()
16+
if var not in ("RUNNING_ENV", "ODOO_STAGE")
17+
}
18+
1319

1420
class ServerEnvironmentCase(common.TransactionCase):
1521
@contextmanager
@@ -24,23 +30,34 @@ def set_config_dir(self, path):
2430
server_env._dir = original_dir
2531

2632
@contextmanager
27-
def set_env_variables(self, public=None, secret=None):
28-
newkeys = {}
33+
def set_env_variables(self, public=None, secret=None, **env_vars):
34+
newkeys = {**CLEAN_ENV, **env_vars}
2935
if public:
3036
newkeys["SERVER_ENV_CONFIG"] = public
3137
if secret:
3238
newkeys["SERVER_ENV_CONFIG_SECRET"] = secret
33-
with patch.dict("os.environ", newkeys):
39+
with patch.dict("os.environ", newkeys, clear=True):
3440
yield
3541

3642
@contextmanager
37-
def load_config(self, public=None, secret=None, serv_config_class=server_env_mixin):
43+
def load_config(
44+
self,
45+
public=None,
46+
secret=None,
47+
config_dir=None,
48+
serv_config_class=server_env_mixin,
49+
):
3850
original_serv_config = serv_config_class.serv_config
3951
try:
40-
with self.set_config_dir(None), self.set_env_variables(public, secret):
52+
with (
53+
self.set_config_dir(config_dir),
54+
self.set_env_variables(public, secret),
55+
):
4156
parser = server_env._load_config()
4257
serv_config_class.serv_config = parser
58+
server_env.serv_config = parser
4359
yield
4460

4561
finally:
4662
serv_config_class.serv_config = original_serv_config
63+
server_env.serv_config = original_serv_config

server_environment/tests/test_environment_variable.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# Copyright 2018 Camptocamp (https://www.camptocamp.com).
22
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html)
33

4-
54
from unittest.mock import patch
65

76
from odoo.tools.config import config as odoo_config
@@ -11,8 +10,11 @@
1110

1211

1312
class TestRunningEnvDefault(ServerEnvironmentCase):
13+
@patch.dict(odoo_config.options, {"running_env": None})
1414
def test_running_env_default(self):
1515
"""When var is not provided it defaults to `test`."""
16+
with self.set_env_variables():
17+
server_env._load_running_env()
1618
self.assertEqual(odoo_config["running_env"], "test")
1719

1820

server_environment/tests/test_server_environment.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,17 @@
99
from .. import server_env
1010
from . import common
1111

12+
NO_DEFAULT = [
13+
"id",
14+
"create_uid",
15+
"create_date",
16+
"write_uid",
17+
"write_date",
18+
"display_name",
19+
"config",
20+
"__last_update",
21+
]
22+
1223

1324
class TestEnv(common.ServerEnvironmentCase):
1425
def test_view(self):
@@ -20,17 +31,20 @@ def _test_default(self, hidden_pwd=False):
2031
model = self.env["server.config"]
2132
rec = model.create({})
2233
fields = model.fields_get()
23-
self.assertTrue(fields)
2434
defaults = rec.default_get(list(fields))
25-
self.assertTrue(defaults)
35+
fields_with_default = {fld for fld in fields if fld not in NO_DEFAULT}
36+
self.assertTrue(fields_with_default)
2637
self.assertIsInstance(defaults, dict)
38+
self.assertEqual(fields_with_default, set(defaults))
39+
# Check secrets
2740
pass_checked = False
2841
for default in defaults:
29-
if "passw" in default:
42+
if "_pass" in default:
3043
check = self.assertEqual if hidden_pwd else self.assertNotEqual
3144
check(defaults[default], "**********")
3245
pass_checked = True
3346
self.assertTrue(pass_checked)
47+
return defaults
3448

3549
@patch.dict(odoo_config.options, {"running_env": "dev"})
3650
def test_default_dev(self):
@@ -54,10 +68,23 @@ def test_odoosh_dev_from_environ(self):
5468
self._test_default()
5569

5670
@patch.dict(odoo_config.options, {"running_env": "testing"})
57-
def test_value_retrival(self):
71+
def test_value_retrieval(self):
5872
with self.set_config_dir("testfiles"):
5973
parser = server_env._load_config()
6074
val = parser.get("external_service.ftp", "user")
6175
self.assertEqual(val, "testing")
6276
val = parser.get("external_service.ftp", "host")
6377
self.assertEqual(val, "sftp.example.com")
78+
79+
@patch.dict(odoo_config.options, {"running_env": "testing"})
80+
def test_default_hidden_password(self):
81+
with self.load_config(config_dir="testfiles"):
82+
model = self.env["server.config"]
83+
model._add_columns()
84+
self.env.registry.setup_models(self.env.cr)
85+
defaults = self._test_default(hidden_pwd=True)
86+
87+
self.assertIn("odoo_I_admin_passwd", defaults)
88+
self.assertIn("odoo_I_db_password", defaults)
89+
self.assertIn("odoo_I_smtp_password", defaults)
90+
self.assertIn("outgoing_mail_provider_promail_I_smtp_pass", defaults)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[outgoing_mail.provider_promail]
2+
smtp_encryption = ssl
3+
smtp_host = email.server.invalid
4+
smtp_pass = THISISNOTPUBLIC
5+
smtp_port = 912
6+
smtp_user = user_abc

0 commit comments

Comments
 (0)