diff --git a/temba/settings_common.py b/temba/settings_common.py index 24932b7506c..f330c226dd1 100644 --- a/temba/settings_common.py +++ b/temba/settings_common.py @@ -170,6 +170,7 @@ 'temba.middleware.FlowSimulationMiddleware', 'temba.middleware.ActivateLanguageMiddleware', 'temba.middleware.NonAtomicGetsMiddleware', + 'temba.utils.middleware.OrgHeaderMiddleware', ) ROOT_URLCONF = 'temba.urls' diff --git a/temba/utils/middleware.py b/temba/utils/middleware.py index 52389581542..4e4185b99e8 100644 --- a/temba/utils/middleware.py +++ b/temba/utils/middleware.py @@ -28,3 +28,15 @@ def process_view(self, request, view_func, view_args, view_kwargs): if getattr(view_func, 'disable_middleware', False): return view_func(request, *view_args, **view_kwargs) return None + + +class OrgHeaderMiddleware(object): + """ + Simple middleware to add a response header with the current org id, which can then be included in logs + """ + def process_response(self, request, response): + if request.user.is_authenticated(): + org = request.user.get_org() + if org: + response['X-Temba-Org'] = org.id + return response diff --git a/temba/utils/tests.py b/temba/utils/tests.py index 3d411fd35d1..e3895a794b6 100644 --- a/temba/utils/tests.py +++ b/temba/utils/tests.py @@ -4,11 +4,13 @@ import json import pytz +import six from celery.app.task import Task from datetime import datetime, time from decimal import Decimal from django.conf import settings +from django.core.urlresolvers import reverse from django.core.paginator import Paginator from django.utils import timezone from django_redis import get_redis_connection @@ -1048,3 +1050,20 @@ def test_currencies(self): self.assertEqual(currency_for_country('DE').letter, 'EUR') self.assertEqual(currency_for_country('YE').letter, 'YER') self.assertEqual(currency_for_country('AF').letter, 'AFN') + + +class MiddlewareTest(TembaTest): + + def test_orgheader(self): + response = self.client.get(reverse('public.public_index')) + self.assertFalse(response.has_header('X-Temba-Org')) + + self.login(self.superuser) + + response = self.client.get(reverse('public.public_index')) + self.assertFalse(response.has_header('X-Temba-Org')) + + self.login(self.admin) + + response = self.client.get(reverse('public.public_index')) + self.assertEqual(response['X-Temba-Org'], six.text_type(self.org.id))