Skip to content

Commit 4e86b39

Browse files
committed
[IMP] api_log: Hide sensitive headers
1 parent dd31507 commit 4e86b39

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

api_log/models/api_log.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,30 @@ class APILog(models.Model):
5959
compute="_compute_response_headers_derived", store=True
6060
)
6161

62+
@api.model
63+
def _headers_hidden_keys(self):
64+
"""Header keys that should not be logged.
65+
66+
They might contains sensitive data.
67+
"""
68+
return (
69+
"Api-Key",
70+
"Cookie",
71+
)
72+
73+
@api.model
74+
def _sanitize_headers_dict(self, headers_dict):
75+
keys_to_hide = self._headers_hidden_keys()
76+
for key in headers_dict:
77+
if key in keys_to_hide:
78+
headers_dict[key] = "<redacted>"
79+
return headers_dict
80+
81+
@api.model
6282
def _headers_to_dict(self, headers):
6383
try:
64-
return {key.lower(): value for key, value in headers.items()}
84+
headers_dict = {key: value for key, value in headers.items()}
85+
return self._sanitize_headers_dict(headers_dict)
6586
except AttributeError:
6687
return {}
6788

api_log/tests/test_api_log.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,23 @@
1212
class TestAPILog(CommonAPILog):
1313
def test_log_request(self):
1414
base_url = self.base_url()
15+
secret_api_key = "my-secret-api-key"
16+
secret_cookie = "my-secret-biscuit"
1517
request = requests.Request(
18+
headers={
19+
"Api-Key": secret_api_key,
20+
"Cookie": secret_cookie,
21+
},
1622
url=base_url,
1723
method="GET",
1824
)
1925
log = self.log_model.log_request(request)
2026

2127
self.assertEqual(log.request_url, base_url)
2228
self.assertEqual(log.request_method, "GET")
29+
headers_dict = log.request_headers.values()
30+
self.assertNotIn(secret_api_key, headers_dict)
31+
self.assertNotIn(secret_cookie, headers_dict)
2332

2433
def test_log_response(self):
2534
response = Response()

0 commit comments

Comments
 (0)