src/cm/middleware.py
author gibus
Wed, 11 Sep 2013 23:13:01 +0200
changeset 532 0bad3613f59d
parent 475 782d40ecf7c3
permissions -rw-r--r--
Reverse to YUI 3.0.0 since with YUI.3.10.3, comment content including words 'paragraph' or 'section' do not show up on Firefox, this is weird and has to be investigated.
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