Skip to content

Commit e011ba0

Browse files
BB2-3355: Mask mbi in logs
1 parent 0c9e499 commit e011ba0

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

hhs_oauth_server/request_logging.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import datetime
22
import hashlib
33
import json
4+
import re
45
import uuid
56

67
import apps.logging.request_logger as logging
@@ -22,7 +23,9 @@
2223
)
2324

2425
audit = logging.getLogger("audit.%s" % __name__)
25-
26+
MBI_WITH_HYPHEN_PATTERN = r'\b\d[A-Z]{2}\d-[A-Z]{2}\d-[A-Z]{2}\d{2}\b'
27+
MBI_WITHOUT_HYPHEN_PATTERN = r'\b[1-9](?![SLOIBZ])[A-Z](?![SLOIBZ)])[A-Z\d]\d(?![SLOIBZ])[A-Z](?![SLOIBZ])[A-Z\d]\d(?![SLOIBZ])[A-Z]{2}\d{2}\b'
28+
MBI_PATTERN = f'({MBI_WITH_HYPHEN_PATTERN}|{MBI_WITHOUT_HYPHEN_PATTERN})'
2629

2730
class RequestResponseLog(object):
2831
"""Audit log message to JSON string
@@ -137,13 +140,20 @@ def __init__(self, req, resp):
137140
self.log_msg["location"] = ""
138141
self.log_msg["size"] = 0
139142

143+
144+
def has_mbi_match(text):
145+
return bool(re.search(MBI_PATTERN, text))
146+
147+
def mask_if_has_mbi(text):
148+
return re.sub(MBI_PATTERN, '***MBI***', text)
149+
140150
def _log_msg_update_from_dict(self, from_dict, key, dict_key):
141151
# Log message update from a passed in dictionary
142152
try:
143153
value = from_dict.get(dict_key, None)
144154
if value is not None:
145155
if len(str(value)) > 0:
146-
self.log_msg[key] = value
156+
self.log_msg[key] = self.mask_if_has_mbi(value)
147157
except ObjectDoesNotExist:
148158
self.log_msg[key] = (
149159
"ObjectDoesNotExist exception for key " + key + ":" + dict_key
@@ -159,7 +169,7 @@ def _log_msg_update_from_object(self, obj, key, obj_key):
159169
value = getattr(obj, obj_key, None)
160170
if value is not None:
161171
if len(str(value)) > 0:
162-
self.log_msg[key] = value
172+
self.log_msg[key] = self.mask_if_has_mbi(value)
163173
except ObjectDoesNotExist:
164174
self.log_msg[key] = (
165175
"ObjectDoesNotExist exception for key " + key + ":" + obj_key
@@ -174,6 +184,7 @@ def _log_msg_update_from_querydict(self, key, qp_key):
174184
try:
175185
value_list = self.request.GET.getlist(qp_key, None)
176186
if value_list is not None:
187+
value_list = [self.mask_if_has_mbi(value) for value in value_list]
177188
if len(value_list) == 1:
178189
self.log_msg[key] = value_list[0]
179190
elif len(value_list) > 1:
@@ -521,7 +532,8 @@ def to_dict(self):
521532
except ObjectDoesNotExist:
522533
pass
523534
self._sync_app_name()
524-
return self.log_msg
535+
masked_logged_dict = {key: self.mask_if_has_mbi(value) for key, value in self.log_msg.items()}
536+
return masked_logged_dict
525537

526538
##############################################################################
527539
#

0 commit comments

Comments
 (0)