Revision e0cc1c4a

b/snf-astakos-app/astakos/im/cookie.py
35 35

  
36 36
from urllib import quote, unquote
37 37

  
38
from django.http import HttpRequest
39 38
from django.contrib.auth.models import AnonymousUser
39
from django.http import HttpRequest
40
from django.utils.translation import ugettext as _
40 41

  
41 42
from astakos.im.settings import (
42 43
    COOKIE_NAME, COOKIE_DOMAIN, COOKIE_SECURE, LOGGING_LEVEL
......
45 46
logger = logging.getLogger(__name__)
46 47

  
47 48
class Cookie():
48
    def __init__(self, request, response):
49
    def __init__(self, request, response=None):
49 50
        cookies = getattr(request, 'COOKIES', {})
50 51
        cookie = unquote(cookies.get(COOKIE_NAME, ''))
51 52
        self.email, sep, self.auth_token = cookie.partition('|')
......
53 54
        self.response = response
54 55
    
55 56
    @property
57
    def email(self):
58
        return getattr(self, 'email', '')
59
    
60
    @property
61
    def auth_token(self):
62
        return getattr(self, 'auth_token', '')
63
    
64
    @property
56 65
    def is_set(self):
57 66
        no_token = not self.auth_token 
58 67
        return not no_token
......
67 76
        return getattr(self.request, 'user', AnonymousUser())
68 77
    
69 78
    def __set(self):
79
        if not self.response:
80
            raise ValueError(_('There is no response.'))
70 81
        user = self.user
71 82
        expire_fmt = user.auth_token_expires.strftime('%a, %d-%b-%Y %H:%M:%S %Z')
72 83
        cookie_value = quote(user.email + '|' + user.auth_token)
......
78 89
        logger._log(LOGGING_LEVEL, msg, [])
79 90
    
80 91
    def __delete(self):
92
        if not self.response:
93
            raise ValueError(_('There is no response.'))
81 94
        self.response.delete_cookie(COOKIE_NAME, path='/', domain=COOKIE_DOMAIN)
82 95
        msg = 'Cookie deleted for %(email)s' % self.__dict__
83 96
        logger._log(LOGGING_LEVEL, msg, [])
84 97
    
85
    def fix(self):
98
    def fix(self, response=None):
99
        self.response = response or self.response
86 100
        if self.user.is_authenticated():
87 101
            if not self.is_set or not self.is_valid:
88 102
                self.__set()
b/snf-astakos-app/astakos/im/middleware.py
43 43

  
44 44
class CookieAuthenticationMiddleware(object):
45 45
    def process_request(self, request):
46
        if request.user.is_authenticated():
47
            return
48
        
49
        cookie = unquote(request.COOKIES.get(COOKIE_NAME, ''))
50
        if not cookie:
46
        cookie = Cookie(request)
47
        if cookie.is_valid:
51 48
            return
52 49
        
53 50
        response = HttpResponse(status=302)
......
58 55
        url = urlunsplit(parts)
59 56
        
60 57
        response['Location'] = url
61
        Cookie(request, response).fix()
58
        cookie.fix(response)
62 59
        return response
63 60
    
64 61
    def process_response(self, request, response):

Also available in: Unified diff