diff --git a/auditlog/middleware.py b/auditlog/middleware.py index b52491e..c47666b 100644 --- a/auditlog/middleware.py +++ b/auditlog/middleware.py @@ -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) diff --git a/auditlog_tests/tests.py b/auditlog_tests/tests.py index 27ceacb..1f34121 100644 --- a/auditlog_tests/tests.py +++ b/auditlog_tests/tests.py @@ -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",),