From 54bdf4861c9c318dc968e904a84fc8fdbb31b2dd Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Wed, 9 Apr 2025 14:20:56 +0200 Subject: [PATCH] fix: better error message --- .../rougail_user_data_bitwarden.po | 63 ++++++++++++------ locale/rougail_user_data_bitwarden.pot | 48 +++++++++---- src/rougail/user_data_bitwarden/data.py | 19 ++++-- .../rougail_user_data_bitwarden.mo | Bin 1876 -> 2185 bytes .../1_secret_unknown/errors/bitwarden.json | 4 +- .../4_several_secrets/errors/bitwarden.json | 2 +- .../errors/bitwarden.json | 2 +- .../6_no_username/errors/bitwarden.json | 6 ++ .../6_no_username/makedict/bitwarden.json | 4 ++ .../9_unknown_type/errors/bitwarden.json | 4 -- tests/structures/6_no_username/00-base.yml | 22 ++++++ tests/test_load.py | 10 +++ 12 files changed, 137 insertions(+), 47 deletions(-) create mode 100644 tests/results/6_no_username/errors/bitwarden.json create mode 100644 tests/results/6_no_username/makedict/bitwarden.json delete mode 100644 tests/results/9_unknown_type/errors/bitwarden.json create mode 100644 tests/structures/6_no_username/00-base.yml diff --git a/locale/fr/LC_MESSAGES/rougail_user_data_bitwarden.po b/locale/fr/LC_MESSAGES/rougail_user_data_bitwarden.po index d062018..d9faf42 100644 --- a/locale/fr/LC_MESSAGES/rougail_user_data_bitwarden.po +++ b/locale/fr/LC_MESSAGES/rougail_user_data_bitwarden.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2025-02-17 09:25+0100\n" -"PO-Revision-Date: 2025-02-17 09:28+0100\n" +"POT-Creation-Date: 2025-04-09 14:13+0200\n" +"PO-Revision-Date: 2025-04-09 14:14+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -20,15 +20,24 @@ msgstr "" msgid "\"bitwarden\" is not set in step.user_data" msgstr "\"bitwarden\" n'est pas dans step.user_data" -#: src/rougail/user_data_bitwarden/data.py:83 -msgid "please unlock Bitwarden password database" -msgstr "veuillez déverrouiller la base de donnée de mot de passe Bitwarden" +#: src/rougail/user_data_bitwarden/data.py:74 +msgid "\"rbw\" or \"bw\"" +msgstr "\"rbw\" ou \"bw\"" -#: src/rougail/user_data_bitwarden/data.py:84 -msgid "cannot find Bitwarden command (rbw or bw) please install it" -msgstr "ne peut trouver la commande Bitwarden (rbw ou bw) veuillez l'installer" +#: src/rougail/user_data_bitwarden/data.py:76 +msgid "\"{0}\"" +msgstr "\"{0}\"" -#: src/rougail/user_data_bitwarden/data.py:126 +#: src/rougail/user_data_bitwarden/data.py:78 +msgid "please unlock Bitwarden password database with {0}" +msgstr "" +"veuillez déverrouiller la base de donnée de mot de passe Bitwarden avec {0}" + +#: src/rougail/user_data_bitwarden/data.py:79 +msgid "cannot find Bitwarden command {0} please install it" +msgstr "ne peut trouver la commande Bitwarden {0} veuillez l'installer" + +#: src/rougail/user_data_bitwarden/data.py:153 msgid "" "the value for \"{0}\" at index {1} is already set while it should be filled " "in by Bitwarden" @@ -36,7 +45,7 @@ msgstr "" "la valeur de \"{0}\" à l'index {1} est déjà renseigné alors que celle doit " "devrait être renseigné par Bitwarden" -#: src/rougail/user_data_bitwarden/data.py:128 +#: src/rougail/user_data_bitwarden/data.py:155 msgid "" "the value for \"{0}\" is already set while it should be filled in by " "Bitwarden" @@ -44,32 +53,46 @@ msgstr "" "la valeur de \"{0}\" est déjà renseignée alors que celle doit devrait être " "renseignée par Bitwarden" -#: src/rougail/user_data_bitwarden/data.py:157 +#: src/rougail/user_data_bitwarden/data.py:185 msgid "the default value for \"{0}\" must be the Bitwarden item name" msgstr "" "la valeur par défaut pour \"{0}\" doit être un nom d'élément de Bitwarden" -#: src/rougail/user_data_bitwarden/data.py:166 +#: src/rougail/user_data_bitwarden/data.py:198 msgid "cannot execute the \"{0}\" commandline from Bitwarden for \"{1}\": {2}" msgstr "" "ne peut exécuter la ligne de commande \"{0}\" pour Bitwarden pour \"{1}\": " "{2}" -#: src/rougail/user_data_bitwarden/data.py:169 -msgid "cannot find {0} \"{1}\" from Bitwarden for \"{2}\"" -msgstr "ne peut trouver {0} \"{1}\" pour Bitwarden pour \"{2}\"" +#: src/rougail/user_data_bitwarden/data.py:201 +msgid "item \"{0}\" in Bitwarden is not found for \"{1}\"" +msgstr "l'élément \"{0}\" dans Bitwarden n'est pas trouvé pour \"{1}\"" -#: src/rougail/user_data_bitwarden/data.py:176 -msgid "" -"several items found with name \"{0}\" from Bitwarden for \"{1}\": \"{2}\"" +#: src/rougail/user_data_bitwarden/data.py:208 +msgid "several items found with name \"{0}\" in Bitwarden for \"{1}\": \"{2}\"" msgstr "" -"plusieurs éléments trouvés avec le nom \"{0}\" pour Bitwarden pour \"{1}\": " +"plusieurs éléments trouvés avec le nom \"{0}\" dans Bitwarden pour \"{1}\": " "\"{2}\"" -#: src/rougail/user_data_bitwarden/data.py:186 +#: src/rougail/user_data_bitwarden/data.py:219 msgid "unexpected datas \"{0}\" from Bitwarden for \"{1}\": {2}" msgstr "données inattendues \"{0}\" pour Bitwarden pour \"{1}\": {2}" +#: src/rougail/user_data_bitwarden/data.py:224 +msgid "password" +msgstr "de mot de passe" + +#: src/rougail/user_data_bitwarden/data.py:226 +msgid "username" +msgstr "de nom d'utilisateur" + +#: src/rougail/user_data_bitwarden/data.py:227 +msgid "item \"{0}\" in Bitwarden has no {1} for \"{2}\"" +msgstr "l'élément \"{0}\" dans Bitwarden n'a pas {1} for \"{2}\"" + +#~ msgid "cannot find {0} \"{1}\" from Bitwarden for \"{2}\"" +#~ msgstr "ne peut trouver {0} \"{1}\" pour Bitwarden pour \"{2}\"" + #~ msgid "" #~ "only \"unix_user\" or \"secret\" variable type can have \"bitwarden\" " #~ "attribute, but \"{0}\" has type \"{1}\"" diff --git a/locale/rougail_user_data_bitwarden.pot b/locale/rougail_user_data_bitwarden.pot index 000ef00..d3b2bbe 100644 --- a/locale/rougail_user_data_bitwarden.pot +++ b/locale/rougail_user_data_bitwarden.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2025-02-17 09:28+0100\n" +"POT-Creation-Date: 2025-04-09 14:14+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,39 +19,59 @@ msgstr "" msgid "\"bitwarden\" is not set in step.user_data" msgstr "" -#: src/rougail/user_data_bitwarden/data.py:83 -msgid "please unlock Bitwarden password database" +#: src/rougail/user_data_bitwarden/data.py:74 +msgid "\"rbw\" or \"bw\"" msgstr "" -#: src/rougail/user_data_bitwarden/data.py:84 -msgid "cannot find Bitwarden command (rbw or bw) please install it" +#: src/rougail/user_data_bitwarden/data.py:76 +msgid "\"{0}\"" msgstr "" -#: src/rougail/user_data_bitwarden/data.py:126 +#: src/rougail/user_data_bitwarden/data.py:78 +msgid "please unlock Bitwarden password database with {0}" +msgstr "" + +#: src/rougail/user_data_bitwarden/data.py:79 +msgid "cannot find Bitwarden command {0} please install it" +msgstr "" + +#: src/rougail/user_data_bitwarden/data.py:153 msgid "the value for \"{0}\" at index {1} is already set while it should be filled in by Bitwarden" msgstr "" -#: src/rougail/user_data_bitwarden/data.py:128 +#: src/rougail/user_data_bitwarden/data.py:155 msgid "the value for \"{0}\" is already set while it should be filled in by Bitwarden" msgstr "" -#: src/rougail/user_data_bitwarden/data.py:157 +#: src/rougail/user_data_bitwarden/data.py:185 msgid "the default value for \"{0}\" must be the Bitwarden item name" msgstr "" -#: src/rougail/user_data_bitwarden/data.py:166 +#: src/rougail/user_data_bitwarden/data.py:198 msgid "cannot execute the \"{0}\" commandline from Bitwarden for \"{1}\": {2}" msgstr "" -#: src/rougail/user_data_bitwarden/data.py:169 -msgid "cannot find {0} \"{1}\" from Bitwarden for \"{2}\"" +#: src/rougail/user_data_bitwarden/data.py:201 +msgid "item \"{0}\" in Bitwarden is not found for \"{1}\"" msgstr "" -#: src/rougail/user_data_bitwarden/data.py:176 -msgid "several items found with name \"{0}\" from Bitwarden for \"{1}\": \"{2}\"" +#: src/rougail/user_data_bitwarden/data.py:208 +msgid "several items found with name \"{0}\" in Bitwarden for \"{1}\": \"{2}\"" msgstr "" -#: src/rougail/user_data_bitwarden/data.py:186 +#: src/rougail/user_data_bitwarden/data.py:219 msgid "unexpected datas \"{0}\" from Bitwarden for \"{1}\": {2}" msgstr "" +#: src/rougail/user_data_bitwarden/data.py:224 +msgid "password" +msgstr "" + +#: src/rougail/user_data_bitwarden/data.py:226 +msgid "username" +msgstr "" + +#: src/rougail/user_data_bitwarden/data.py:227 +msgid "item \"{0}\" in Bitwarden has no {1} for \"{2}\"" +msgstr "" + diff --git a/src/rougail/user_data_bitwarden/data.py b/src/rougail/user_data_bitwarden/data.py index 12384fe..1110c6f 100644 --- a/src/rougail/user_data_bitwarden/data.py +++ b/src/rougail/user_data_bitwarden/data.py @@ -198,22 +198,31 @@ class RougailUserDataBitwarden: self.errors.append(_('cannot execute the "{0}" commandline from Bitwarden for "{1}": {2}').format(self.bitwarden_command_line, path, exc)) return None, None if not data: - self.errors.append(_('cannot find {0} "{1}" from Bitwarden for "{2}"').format(type_, key_bitwarden, path)) + self.errors.append(_('item "{0}" in Bitwarden is not found for "{1}"').format(key_bitwarden, path)) return None, None if len(data) != 1: names = [d["name"] for d in data] if allow_multiple: ret = [] return names, [self.get_value(key_bitwarden, path, type_, d) for d in data] - self.errors.append(_('several items found with name "{0}" from Bitwarden for "{1}": "{2}"').format(key_bitwarden, path, "\", \"".join(names))) + self.errors.append(_('several items found with name "{0}" in Bitwarden for "{1}": "{2}"').format(key_bitwarden, path, "\", \"".join(names))) return None, None return data[0]['name'], self.get_value(key_bitwarden, path, type_, data[0]) def get_value(self, key_bitwarden: str, path: str, type_: str, data: dict) -> str: try: if type_ == 'secret': - return data['login']['password'] - return data['login']['username'] + value = data['login']['password'] + else: + value = data['login']['username'] except Exception as exc: self.errors.append(_('unexpected datas "{0}" from Bitwarden for "{1}": {2}').format(key_bitwarden, path, exc)) - return None + value = None + else: + if value is None: + if type_ == 'secret': + bw_type = _('password') + else: + bw_type = _('username') + self.errors.append(_('item "{0}" in Bitwarden has no {1} for "{2}"').format(key_bitwarden, bw_type, path)) + return value diff --git a/src/rougail/user_data_bitwarden/locale/fr/LC_MESSAGES/rougail_user_data_bitwarden.mo b/src/rougail/user_data_bitwarden/locale/fr/LC_MESSAGES/rougail_user_data_bitwarden.mo index b7f9318fe9f6a3bd42e4ec2f8c11601bd3c50760..ef079881ee478e68a268ffc05888df00adacf997 100644 GIT binary patch delta 834 zcma*j&ubGw6bJCP`C%Ki)wUKdqK}0%6>Ul4A|#?<#ghuXDxyr>DIM4!VP`g}hM04& zF1_hNPv%xA_y-vL3lxw30U~<#Ao!g%g(3(J%zR!ZZ+70BPxHGAqc4l4J;FGRc@Fa> z=2;s%STJ_rDtrp(;2T(m`)~ukgIC~Bcp0u0h}Pi)I16`S6TW~q;RkpP&J>C66OHH= zg1gvw1wHr`+JhHLM8DuFya-ott1Vy?+5#S7xdVN81Mb7C@CUpOSB?>#vj4+-(7;Xj z9@=wDGejEq(_;i%*!T!ru#MZ#Km*ZKe(5~4AFE&@jZkAg?5o*dB{%8xU5*oWA-RM4(9K#-XM}*effQP@inI|yz{-#^GUPl7 zyS$-HUnIVacw1VVEI3~5p51J%S&-W%{?#8Ko9NVog vIm9CX+qcXfmTy;B^yHJg-`C|v$yRajx%}K&Mp6`q?AKDG0;PqKX+pmNm_xHw delta 463 zcmZY4J4*vW6b0Zr+08>GVp3@o83JOWBxIvt5(~jsqlJxvg~i59WMSBi`$)hLQrieR z=nwEO1O!XL($d<(%0g_c6;Bee@xtNT=bV}I#PfLfC8=K%W(=7@d?bN9A^n+PL>ZWX z>#zb>VF%{nJmocg=<*_4>LFsN{n&Ib9z9_{Pk2)7 diff --git a/tests/results/1_secret_unknown/errors/bitwarden.json b/tests/results/1_secret_unknown/errors/bitwarden.json index 92d579e..47dd894 100644 --- a/tests/results/1_secret_unknown/errors/bitwarden.json +++ b/tests/results/1_secret_unknown/errors/bitwarden.json @@ -1,6 +1,6 @@ { "errors": [ - "cannot find secret \"1_secret_unknown - environment - service - user\" from Bitwarden for \"rougail.secret\"" + "item \"1_secret_unknown - environment - service - user\" in Bitwarden is not found for \"rougail.secret\"" ], "warnings": [] -} +} \ No newline at end of file diff --git a/tests/results/4_several_secrets/errors/bitwarden.json b/tests/results/4_several_secrets/errors/bitwarden.json index 0509385..9a92834 100644 --- a/tests/results/4_several_secrets/errors/bitwarden.json +++ b/tests/results/4_several_secrets/errors/bitwarden.json @@ -1,6 +1,6 @@ { "errors": [ - "several items found with name \"4_several_secrets - environment - service - user\" from Bitwarden for \"rougail.secret\": \"4_several_secrets - environment - service - user_1\", \"4_several_secrets - environment - service - user_2\"" + "several items found with name \"4_several_secrets - environment - service - user\" in Bitwarden for \"rougail.secret\": \"4_several_secrets - environment - service - user_1\", \"4_several_secrets - environment - service - user_2\"" ], "warnings": [] } \ No newline at end of file diff --git a/tests/results/4_several_secrets_upper/errors/bitwarden.json b/tests/results/4_several_secrets_upper/errors/bitwarden.json index 2f692d1..1bc2b94 100644 --- a/tests/results/4_several_secrets_upper/errors/bitwarden.json +++ b/tests/results/4_several_secrets_upper/errors/bitwarden.json @@ -1,6 +1,6 @@ { "errors": [ - "several items found with name \"3_leadership_secret - ENVIRONMENT - SERVICE - USER\" from Bitwarden for \"rougail.secret\": \"3_leadership_secret - environment - service - user_1\", \"3_leadership_secret - environment - service - user_2\"" + "several items found with name \"3_leadership_secret - ENVIRONMENT - SERVICE - USER\" in Bitwarden for \"rougail.secret\": \"3_leadership_secret - environment - service - user_1\", \"3_leadership_secret - environment - service - user_2\"" ], "warnings": [] } \ No newline at end of file diff --git a/tests/results/6_no_username/errors/bitwarden.json b/tests/results/6_no_username/errors/bitwarden.json new file mode 100644 index 0000000..2de794e --- /dev/null +++ b/tests/results/6_no_username/errors/bitwarden.json @@ -0,0 +1,6 @@ +{ + "errors": [ + "item \"6_no_username - environment - service - user_1\" in Bitwarden has no username for \"rougail.username\"" + ], + "warnings": [] +} \ No newline at end of file diff --git a/tests/results/6_no_username/makedict/bitwarden.json b/tests/results/6_no_username/makedict/bitwarden.json new file mode 100644 index 0000000..e9d227d --- /dev/null +++ b/tests/results/6_no_username/makedict/bitwarden.json @@ -0,0 +1,4 @@ +{ + "rougail.username": null, + "rougail.secret": "ET6RrpdZv5bNZu" +} \ No newline at end of file diff --git a/tests/results/9_unknown_type/errors/bitwarden.json b/tests/results/9_unknown_type/errors/bitwarden.json deleted file mode 100644 index 217db0a..0000000 --- a/tests/results/9_unknown_type/errors/bitwarden.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "errors": [], - "warnings": [] -} \ No newline at end of file diff --git a/tests/structures/6_no_username/00-base.yml b/tests/structures/6_no_username/00-base.yml new file mode 100644 index 0000000..2680a81 --- /dev/null +++ b/tests/structures/6_no_username/00-base.yml @@ -0,0 +1,22 @@ +--- +version: 1.1 + +username: + description: the username + type: unix_user + secret_manager: + host: test + project: 6_no_username + environment: environment + service: service + user: user_1 + +secret: + description: the secret + type: secret + secret_manager: + host: test + project: 6_no_username + environment: environment + service: service + user: user_1 diff --git a/tests/test_load.py b/tests/test_load.py index aca668a..c293eaa 100644 --- a/tests/test_load.py +++ b/tests/test_load.py @@ -169,6 +169,16 @@ def test_dictionaries_5_secret_calc_bw(): _test_dictionaries(test_dir / '5_secret_calc', 'bw') +def test_dictionaries_6_no_username_rbw(): + "tests the output" + _test_dictionaries(test_dir / '6_no_username', 'rbw') + + +def test_dictionaries_6_no_username_bw(): + "tests the output" + _test_dictionaries(test_dir / '6_no_username', 'bw') + + def test_dictionaries_8_multi_variable_rbw(): "tests the output" with raises(DictConsistencyError) as err: