Skip to content

Commit

Permalink
fix: Handle exceptions raised when fetching Django request data (#758)
Browse files Browse the repository at this point in the history
  • Loading branch information
davidwtbuxton committed Sep 22, 2023
1 parent 41e073f commit 5ecf886
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
9 changes: 8 additions & 1 deletion google/cloud/logging_v2/handlers/_helpers.py
Expand Up @@ -104,10 +104,17 @@ def get_request_data_from_django():
if request is None:
return None, None, None, False

# Django can raise django.core.exceptions.DisallowedHost here for a
# malformed HTTP_HOST header. But we don't want to import Django modules.
try:
request_url = request.build_absolute_uri()
except Exception:
request_url = None

# build http_request
http_request = {
"requestMethod": request.method,
"requestUrl": request.build_absolute_uri(),
"requestUrl": request_url,
"userAgent": request.META.get(_DJANGO_USERAGENT_HEADER),
"protocol": request.META.get(_PROTOCOL_HEADER),
}
Expand Down
13 changes: 13 additions & 0 deletions tests/unit/handlers/test__helpers.py
Expand Up @@ -242,6 +242,19 @@ def test_http_request_sparse(self):
self.assertEqual(http_request["requestUrl"], expected_path)
self.assertEqual(http_request["protocol"], "HTTP/1.1")

def test_invalid_host_header(self):
from django.test import RequestFactory
from google.cloud.logging_v2.handlers.middleware import request

invalid_http_host = "testserver%7d"
django_request = RequestFactory().put("/", HTTP_HOST=invalid_http_host)
middleware = request.RequestMiddleware(None)
middleware(django_request)
http_request, *_ = self._call_fut()
self.assertEqual(http_request["requestMethod"], "PUT")
self.assertIsNone(http_request["requestUrl"])
self.assertEqual(http_request["protocol"], "HTTP/1.1")


class Test_get_request_data(unittest.TestCase):
@staticmethod
Expand Down

0 comments on commit 5ecf886

Please sign in to comment.