Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / middleware.py @ e0cc1c4a

History | View | Annotate | Download (2.3 kB)

1 68ed1683 Sofia Papagiannaki
# Copyright 2011 GRNET S.A. All rights reserved.
2 68ed1683 Sofia Papagiannaki
#
3 68ed1683 Sofia Papagiannaki
# Redistribution and use in source and binary forms, with or
4 68ed1683 Sofia Papagiannaki
# without modification, are permitted provided that the following
5 68ed1683 Sofia Papagiannaki
# conditions are met:
6 68ed1683 Sofia Papagiannaki
#
7 68ed1683 Sofia Papagiannaki
#   1. Redistributions of source code must retain the above
8 68ed1683 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
9 68ed1683 Sofia Papagiannaki
#      disclaimer.
10 68ed1683 Sofia Papagiannaki
#
11 68ed1683 Sofia Papagiannaki
#   2. Redistributions in binary form must reproduce the above
12 68ed1683 Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
13 68ed1683 Sofia Papagiannaki
#      disclaimer in the documentation and/or other materials
14 68ed1683 Sofia Papagiannaki
#      provided with the distribution.
15 68ed1683 Sofia Papagiannaki
#
16 68ed1683 Sofia Papagiannaki
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 68ed1683 Sofia Papagiannaki
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 68ed1683 Sofia Papagiannaki
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 68ed1683 Sofia Papagiannaki
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 68ed1683 Sofia Papagiannaki
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 68ed1683 Sofia Papagiannaki
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 68ed1683 Sofia Papagiannaki
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 68ed1683 Sofia Papagiannaki
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 68ed1683 Sofia Papagiannaki
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 68ed1683 Sofia Papagiannaki
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 68ed1683 Sofia Papagiannaki
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 68ed1683 Sofia Papagiannaki
# POSSIBILITY OF SUCH DAMAGE.
28 68ed1683 Sofia Papagiannaki
#
29 68ed1683 Sofia Papagiannaki
# The views and conclusions contained in the software and
30 68ed1683 Sofia Papagiannaki
# documentation are those of the authors and should not be
31 68ed1683 Sofia Papagiannaki
# interpreted as representing official policies, either expressed
32 68ed1683 Sofia Papagiannaki
# or implied, of GRNET S.A.
33 68ed1683 Sofia Papagiannaki
34 4573cae0 Sofia Papagiannaki
from urllib import unquote
35 4573cae0 Sofia Papagiannaki
from urlparse import urlunsplit, urlsplit
36 4573cae0 Sofia Papagiannaki
37 4573cae0 Sofia Papagiannaki
from django.http import HttpResponse
38 4573cae0 Sofia Papagiannaki
from django.utils.http import urlencode
39 4573cae0 Sofia Papagiannaki
40 b2ffa772 Sofia Papagiannaki
from astakos.im.cookie import Cookie
41 4573cae0 Sofia Papagiannaki
from astakos.im.settings import COOKIE_NAME
42 4573cae0 Sofia Papagiannaki
from astakos.im.util import get_query
43 68ed1683 Sofia Papagiannaki
44 68ed1683 Sofia Papagiannaki
class CookieAuthenticationMiddleware(object):
45 4573cae0 Sofia Papagiannaki
    def process_request(self, request):
46 e0cc1c4a Sofia Papagiannaki
        cookie = Cookie(request)
47 e0cc1c4a Sofia Papagiannaki
        if cookie.is_valid:
48 4573cae0 Sofia Papagiannaki
            return
49 4573cae0 Sofia Papagiannaki
        
50 4573cae0 Sofia Papagiannaki
        response = HttpResponse(status=302)
51 4573cae0 Sofia Papagiannaki
        
52 4573cae0 Sofia Papagiannaki
        parts = list(urlsplit(request.path))
53 4573cae0 Sofia Papagiannaki
        params = get_query(request)
54 4573cae0 Sofia Papagiannaki
        parts[3] = urlencode(params)
55 4573cae0 Sofia Papagiannaki
        url = urlunsplit(parts)
56 4573cae0 Sofia Papagiannaki
        
57 4573cae0 Sofia Papagiannaki
        response['Location'] = url
58 e0cc1c4a Sofia Papagiannaki
        cookie.fix(response)
59 4573cae0 Sofia Papagiannaki
        return response
60 4573cae0 Sofia Papagiannaki
    
61 b2ffa772 Sofia Papagiannaki
    def process_response(self, request, response):
62 47097c8a Sofia Papagiannaki
        Cookie(request, response).fix()
63 b2ffa772 Sofia Papagiannaki
        return response