Update auditlog/middleware.py and add tests in ManyRelatedModelTest

This commit is contained in:
Nathan Bureau 2024-03-29 18:15:35 +01:00
parent 3821e2ec60
commit cef0a4ef78
2 changed files with 16 additions and 11 deletions

View file

@ -15,10 +15,12 @@ class AuditlogMiddleware:
self.get_response = get_response
if not isinstance(settings.AUDITLOG_DISABLE_REMOTE_ADDR, bool):
raise TypeError("Setting 'AUDITLOG_DISABLE_REMOTE_ADDR' must be a boolean")
self.disable_remote_addr = settings.AUDITLOG_DISABLE_REMOTE_ADDR
@staticmethod
def _get_remote_addr(request):
if settings.AUDITLOG_DISABLE_REMOTE_ADDR:
return None
# In case there is no proxy, return the original address
if not request.headers.get("X-Forwarded-For"):
return request.META.get("REMOTE_ADDR")
@ -42,10 +44,7 @@ class AuditlogMiddleware:
return None
def __call__(self, request):
if self.disable_remote_addr:
remote_addr = None
else:
remote_addr = self._get_remote_addr(request)
remote_addr = self._get_remote_addr(request)
user = self._get_actor(request)
set_cid(request)

View file

@ -513,6 +513,18 @@ class MiddlewareTest(TestCase):
self.assert_no_listeners()
def test_init_middleware(self):
with override_settings(AUDITLOG_DISABLE_REMOTE_ADDR="str"):
with self.assertRaisesMessage(TypeError, "Setting 'AUDITLOG_DISABLE_REMOTE_ADDR' must be a boolean"):
AuditlogMiddleware()
def test_disable_remote_addr(self):
with override_settings(AUDITLOG_DISABLE_REMOTE_ADDR=True):
headers = {"HTTP_X_FORWARDED_FOR": "127.0.0.2"}
request = self.factory.get("/", **headers)
remote_addr = self.middleware._get_remote_addr(request)
self.assertIsNone(remote_addr)
def test_get_remote_addr(self):
tests = [ # (headers, expected_remote_addr)
({}, "127.0.0.1"),
@ -1273,12 +1285,6 @@ class RegisterModelSettingsTest(TestCase):
):
self.test_auditlog.register_from_settings()
with override_settings(AUDITLOG_DISABLE_REMOTE_ADDR="str"):
with self.assertRaisesMessage(
TypeError, "Setting 'AUDITLOG_DISABLE_REMOTE_ADDR' must be a boolean"
):
self.test_auditlog.register_from_settings()
@override_settings(
AUDITLOG_INCLUDE_ALL_MODELS=True,
AUDITLOG_EXCLUDE_TRACKING_MODELS=("auditlog_tests.SimpleExcludeModel",),