Add session id middleware.

remotes/origin/enhancement/email-actions
Andrey Antukh 2014-03-16 16:08:49 +01:00
parent 230a6cdb28
commit 68a5fe32d3
3 changed files with 61 additions and 0 deletions

View File

@ -117,6 +117,7 @@ TEMPLATE_LOADERS = [
MIDDLEWARE_CLASSES = [
"taiga.base.middleware.cors.CoorsMiddleware",
"taiga.domains.middleware.DomainsMiddleware",
"taiga.events.middleware.SessionIDMiddleware",
# Common middlewares
"django.middleware.common.CommonMiddleware",

View File

@ -0,0 +1,31 @@
import threading
_local = threading.local()
_local.session_id = None
def get_current_session_id():
global _local
if not hasattr(_local, "session_id"):
raise RuntimeException("No session identifier is found, "
"ara you sure that session id middleware "
"is active?")
return _local.session_id
class SessionIDMiddleware(object):
"""
Middleware for extract and store a current web sesion
identifier to thread local storage (that only avaliable for
current thread).
"""
def process_request(self, request):
global _local
session_id = request.META.get("HTTP_X_SESSION_ID", None)
_local.session_id = session_id
request.session_id = session_id
def process_response(self, request, response):
global _local
_local.session_id = None
return response

29
taiga/events/tests.py Normal file
View File

@ -0,0 +1,29 @@
from django import test
from django.test.client import RequestFactory
from django.http import HttpResponse
from . import middleware as mw
class SessionIDMiddlewareTests(test.TestCase):
# fixtures = ["initial_domains.json"]
def setUp(self):
self.factory = RequestFactory()
def test_process_session_id_01(self):
request = self.factory.get("/")
mw_instance = mw.SessionIDMiddleware()
mw_instance.process_request(request)
self.assertEqual(mw.get_current_session_id(), None)
def test_process_session_id_02(self):
request = self.factory.get("/", HTTP_X_SESSION_ID="foobar")
mw_instance = mw.SessionIDMiddleware()
mw_instance.process_request(request)
self.assertEqual(mw.get_current_session_id(), "foobar")