From f0d3d36365e26df52a0f80cd3c2b531855413edb Mon Sep 17 00:00:00 2001 From: Kay0u Date: Wed, 25 Nov 2020 11:41:00 +0100 Subject: [PATCH] An optional password should be either empty or strong enough --- src/yunohost/app.py | 3 ++- .../tests/test_apps_arguments_parsing.py | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/yunohost/app.py b/src/yunohost/app.py index 1d103f00c..432cabe67 100644 --- a/src/yunohost/app.py +++ b/src/yunohost/app.py @@ -2498,7 +2498,8 @@ class PasswordArgumentParser(YunoHostArgumentFormatParser): if any(char in question.value for char in self.forbidden_chars): raise YunohostError('pattern_password_app', forbidden_chars=self.forbidden_chars) - if not question.optional: + # If it's an optional argument the value should be empty or strong enough + if not question.optional or question.value: from yunohost.utils.password import assert_password_is_strong_enough assert_password_is_strong_enough('user', question.value) diff --git a/src/yunohost/tests/test_apps_arguments_parsing.py b/src/yunohost/tests/test_apps_arguments_parsing.py index 5edd450d8..646f7da58 100644 --- a/src/yunohost/tests/test_apps_arguments_parsing.py +++ b/src/yunohost/tests/test_apps_arguments_parsing.py @@ -418,6 +418,24 @@ def test_parse_args_in_yunohost_format_password_strong_enough(): _parse_args_in_yunohost_format({"some_password": "password"}, questions) +def test_parse_args_in_yunohost_format_password_optional_strong_enough(): + questions = [ + { + "name": "some_password", + "ask": "some question", + "type": "password", + "optional": True, + } + ] + + with pytest.raises(YunohostError): + # too short + _parse_args_in_yunohost_format({"some_password": "a"}, questions) + + with pytest.raises(YunohostError): + _parse_args_in_yunohost_format({"some_password": "password"}, questions) + + def test_parse_args_in_yunohost_format_path(): questions = [{"name": "some_path", "type": "path", }] answers = {"some_path": "some_value"}