Add session id middleware.
parent
230a6cdb28
commit
68a5fe32d3
|
@ -117,6 +117,7 @@ TEMPLATE_LOADERS = [
|
||||||
MIDDLEWARE_CLASSES = [
|
MIDDLEWARE_CLASSES = [
|
||||||
"taiga.base.middleware.cors.CoorsMiddleware",
|
"taiga.base.middleware.cors.CoorsMiddleware",
|
||||||
"taiga.domains.middleware.DomainsMiddleware",
|
"taiga.domains.middleware.DomainsMiddleware",
|
||||||
|
"taiga.events.middleware.SessionIDMiddleware",
|
||||||
|
|
||||||
# Common middlewares
|
# Common middlewares
|
||||||
"django.middleware.common.CommonMiddleware",
|
"django.middleware.common.CommonMiddleware",
|
||||||
|
|
|
@ -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
|
|
@ -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")
|
Loading…
Reference in New Issue