Skip to content

Commit 4d23b15

Browse files
committed
Enhance masking functions in LogRequestAndResponseMiddleware to support nested structures and improve partial masking logic.
1 parent 7c02a60 commit 4d23b15

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

django_google_structured_logger/middlewares.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -211,18 +211,32 @@ def _mask_sensitive_data(obj: Any) -> Union[str, Dict, None]:
211211

212212
def get_mask_function(style):
213213
def complete_mask(value):
214-
return "...FULL_MASKED..."
214+
if isinstance(value, dict):
215+
return {k: complete_mask(v) for k, v in value.items()}
216+
elif isinstance(value, (list, tuple)):
217+
masked_items = [complete_mask(item) for item in value]
218+
return type(value)(masked_items)
219+
else:
220+
return "...FULL_MASKED..."
215221

216222
def partial_mask(value):
217223
if not value:
218224
return value
219-
length = len(value)
220-
if length <= 4:
221-
return complete_mask(value)
222-
slice_value = min(4, length // 4)
223-
return "{prefix_value}...MASKED...{suffix_value}".format(
224-
prefix_value=value[:slice_value], suffix_value=value[-slice_value:]
225-
)
225+
if isinstance(value, dict):
226+
return {k: partial_mask(v) for k, v in value.items()}
227+
elif isinstance(value, (list, tuple)):
228+
masked_items = [partial_mask(item) for item in value]
229+
return type(value)(masked_items)
230+
else:
231+
# Convert all other types to string and mask
232+
str_value = str(value)
233+
length = len(str_value)
234+
if length <= 4:
235+
return complete_mask(str_value)
236+
slice_value = min(4, length // 4)
237+
return "{prefix_value}...MASKED...{suffix_value}".format(
238+
prefix_value=str_value[:slice_value], suffix_value=str_value[-slice_value:]
239+
)
226240

227241
mask_styles = {
228242
"complete": complete_mask,

0 commit comments

Comments
 (0)