Skip to content

Commit 1465e6d

Browse files
committed
fixed issue with hiding private (sensitive) information
1 parent 10f49c3 commit 1465e6d

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed

tests/test_zabbix_api.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,26 @@ def test_hide_private(self):
504504
{
505505
'input': {"result": "6.0.0"},
506506
'output': {"result": "6.0.0"}
507+
},
508+
{
509+
'input': {"result": ["10"]},
510+
'output': {"result": ["10"]}
511+
},
512+
{
513+
'input': {"result": [{"token": "jZAC51wHuWdwvQnxwbP2T55vh6R5R2uW"}]},
514+
'output': {"result": [{"token": f"jZAC{mask}R2uW"}]}
515+
},
516+
{
517+
'input': {"result": [["10"],["15"]]},
518+
'output': {"result": [["10"],["15"]]}
519+
},
520+
{
521+
'input': {"result": [[{"token": "jZAC51wHuWdwvQnxwbP2T55vh6R5R2uW"}]]},
522+
'output': {"result": [[{"token": f"jZAC{mask}R2uW"}]]}
523+
},
524+
{
525+
'input': {"result": ["jZAC51wHuWdwvQnxwbP2T55vh6R5R2uW"]},
526+
'output': {"result": [f"jZAC{mask}R2uW"]}
507527
}
508528
]
509529

zabbix_utils/common.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class ModuleUtils():
5252
"auth": r"^.+$",
5353
"sessionid": r"^.+$",
5454
"password": r"^.+$",
55-
"result": r"^(?!(zabbix_export|[0-9.]{5}))[A-Za-z0-9]+$",
55+
"result": r"^[A-Za-z0-9]{32}$",
5656
}
5757

5858
@classmethod
@@ -116,14 +116,38 @@ def hide_private(cls, input_data: dict, fields: dict = None) -> dict:
116116
def gen_repl(match: Match):
117117
return cls.mask_secret(match.group(0))
118118

119+
def hide_str(k, v):
120+
return re.sub(private_fields[k], gen_repl, v)
121+
122+
def hide_dict(v):
123+
return cls.hide_private(v)
124+
125+
def hide_list(v):
126+
result = []
127+
for item in v:
128+
if isinstance(item, dict):
129+
result.append(hide_dict(item))
130+
continue
131+
if isinstance(item, list):
132+
result.append(hide_list(item))
133+
continue
134+
if isinstance(item, str):
135+
if 'result' in private_fields:
136+
result.append(hide_str('result', item))
137+
continue
138+
result.append(item)
139+
return result
140+
119141
result_data = input_data.copy()
120142

121143
for key, value in result_data.items():
122144
if isinstance(value, str):
123145
if key in private_fields:
124-
result_data[key] = re.sub(private_fields[key], gen_repl, value)
146+
result_data[key] = hide_str(key, value)
125147
if isinstance(value, dict):
126-
result_data[key] = cls.hide_private(value)
148+
result_data[key] = hide_dict(value)
149+
if isinstance(value, list):
150+
result_data[key] = hide_list(value)
127151

128152
return result_data
129153

0 commit comments

Comments
 (0)