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()
|