src/cm/middleware.py
author gibus
Tue, 25 Jun 2013 11:56:01 +0200
changeset 504 b2e0186daa5b
parent 475 782d40ecf7c3
permissions -rw-r--r--
Adds a category to comments, painted with colored vertical bar.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
from cm.exception import UnauthorizedException 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
from django.conf import settings
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
from django.http import HttpResponseServerError,HttpResponseRedirect
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
from django.core.urlresolvers import reverse
285
1070d52adc11 propagates query string parameters when login in (so that link with direct coment id are properly propagated)
raph
parents: 0
diff changeset
     5
from urllib import urlencode
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
class CmMiddleware(object):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
    def process_exception(self, request, exception):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
        if settings.DEBUG:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
            import sys, traceback
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
            traceback.print_exc()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
        if type(exception) == UnauthorizedException:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
            if request.user.is_anonymous():
285
1070d52adc11 propagates query string parameters when login in (so that link with direct coment id are properly propagated)
raph
parents: 0
diff changeset
    15
                query = urlencode({'next': request.META['PATH_INFO'], 'q' : request.META['QUERY_STRING'] })
1070d52adc11 propagates query string parameters when login in (so that link with direct coment id are properly propagated)
raph
parents: 0
diff changeset
    16
                login_url = reverse('login') + '?'  + query
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
                return HttpResponseRedirect(login_url)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
            else:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
                redirect_url = reverse('unauthorized')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
                return HttpResponseRedirect(redirect_url)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
        raise
475
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    22
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    23
    """
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    24
        This middleware allows cross-domain XHR using the html5 postMessage API.
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    25
    """
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    26
    def process_request(self, request):
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    27
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    28
        if 'HTTP_ACCESS_CONTROL_REQUEST_METHOD' in request.META:
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    29
            response = http.HttpResponse()
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    30
            response['Access-Control-Allow-Origin']  = '*' 
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    31
            return response
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    32
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    33
        return None
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    34
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    35
    def process_response(self, request, response):
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    36
        # Avoid unnecessary work
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    37
        if response.has_header('Access-Control-Allow-Origin'):
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    38
            return response
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    39
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    40
        response['Access-Control-Allow-Origin']  = '*' 
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    41
782d40ecf7c3 New fonts.
gibus
parents: 285
diff changeset
    42
        return response