Statistics
| Branch: | Tag: | Revision:

root / snf-astakos-app / astakos / im / decorators.py @ 14a7ba1a

History | View | Annotate | Download (2.4 kB)

1 14a7ba1a Sofia Papagiannaki
# Copyright 2011-2012 GRNET S.A. All rights reserved.
2 14a7ba1a Sofia Papagiannaki
#
3 14a7ba1a Sofia Papagiannaki
# Redistribution and use in source and binary forms, with or
4 14a7ba1a Sofia Papagiannaki
# without modification, are permitted provided that the following
5 14a7ba1a Sofia Papagiannaki
# conditions are met:
6 14a7ba1a Sofia Papagiannaki
#
7 14a7ba1a Sofia Papagiannaki
#   1. Redistributions of source code must retain the above
8 14a7ba1a Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
9 14a7ba1a Sofia Papagiannaki
#      disclaimer.
10 14a7ba1a Sofia Papagiannaki
#
11 14a7ba1a Sofia Papagiannaki
#   2. Redistributions in binary form must reproduce the above
12 14a7ba1a Sofia Papagiannaki
#      copyright notice, this list of conditions and the following
13 14a7ba1a Sofia Papagiannaki
#      disclaimer in the documentation and/or other materials
14 14a7ba1a Sofia Papagiannaki
#      provided with the distribution.
15 14a7ba1a Sofia Papagiannaki
#
16 14a7ba1a Sofia Papagiannaki
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 14a7ba1a Sofia Papagiannaki
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 14a7ba1a Sofia Papagiannaki
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 14a7ba1a Sofia Papagiannaki
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 14a7ba1a Sofia Papagiannaki
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 14a7ba1a Sofia Papagiannaki
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 14a7ba1a Sofia Papagiannaki
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 14a7ba1a Sofia Papagiannaki
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 14a7ba1a Sofia Papagiannaki
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 14a7ba1a Sofia Papagiannaki
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 14a7ba1a Sofia Papagiannaki
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 14a7ba1a Sofia Papagiannaki
# POSSIBILITY OF SUCH DAMAGE.
28 14a7ba1a Sofia Papagiannaki
#
29 14a7ba1a Sofia Papagiannaki
# The views and conclusions contained in the software and
30 14a7ba1a Sofia Papagiannaki
# documentation are those of the authors and should not be
31 14a7ba1a Sofia Papagiannaki
# interpreted as representing official policies, either expressed
32 14a7ba1a Sofia Papagiannaki
# or implied, of GRNET S.A.
33 14a7ba1a Sofia Papagiannaki
34 14a7ba1a Sofia Papagiannaki
from functools import wraps
35 14a7ba1a Sofia Papagiannaki
36 14a7ba1a Sofia Papagiannaki
from django.http import HttpResponse
37 14a7ba1a Sofia Papagiannaki
38 14a7ba1a Sofia Papagiannaki
from astakos.im.cookie import CookieHandler
39 14a7ba1a Sofia Papagiannaki
40 14a7ba1a Sofia Papagiannaki
41 14a7ba1a Sofia Papagiannaki
def cookie_fix(func):
42 14a7ba1a Sofia Papagiannaki
    """
43 14a7ba1a Sofia Papagiannaki
    Decorator checks whether the request.user conforms
44 14a7ba1a Sofia Papagiannaki
    with the astakos cookie and if not it fixes it.
45 14a7ba1a Sofia Papagiannaki
    """
46 14a7ba1a Sofia Papagiannaki
    @wraps(func)
47 14a7ba1a Sofia Papagiannaki
    def wrapper(request, *args, **kwargs):
48 14a7ba1a Sofia Papagiannaki
        cookie = CookieHandler(request)
49 14a7ba1a Sofia Papagiannaki
        if not cookie.is_valid:
50 14a7ba1a Sofia Papagiannaki
            # redirect to request path to set/delete the cookie
51 14a7ba1a Sofia Papagiannaki
            response = HttpResponse(status=302)
52 14a7ba1a Sofia Papagiannaki
            response['Location'] = request.get_full_path()
53 14a7ba1a Sofia Papagiannaki
            cookie.fix(response)
54 14a7ba1a Sofia Papagiannaki
            return response
55 14a7ba1a Sofia Papagiannaki
56 14a7ba1a Sofia Papagiannaki
        response = func(request, *args, **kwargs)
57 14a7ba1a Sofia Papagiannaki
58 14a7ba1a Sofia Papagiannaki
        # if the user authentication status has changed during the processing
59 14a7ba1a Sofia Papagiannaki
        # set/delete the cookie appropriately
60 14a7ba1a Sofia Papagiannaki
        if not cookie.is_valid:
61 14a7ba1a Sofia Papagiannaki
            cookie.fix(response)
62 14a7ba1a Sofia Papagiannaki
        return response
63 14a7ba1a Sofia Papagiannaki
    return wrapper