1 import binascii
2
3 from paste.request import get_cookies
4
5 from zope.interface import implements
6
7 from repoze.who.interfaces import IIdentifier
8
10
11 implements(IIdentifier)
12
13 - def __init__(self, cookie_name, cookie_path='/'):
14 self.cookie_name = cookie_name
15 self.cookie_path = cookie_path
16
17
19 cookies = get_cookies(environ)
20 cookie = cookies.get(self.cookie_name)
21
22 if cookie is None:
23 return None
24
25 try:
26 auth = cookie.value.decode('base64')
27 except binascii.Error:
28 return None
29
30 try:
31 login, password = auth.split(':', 1)
32 return {'login':login, 'password':password}
33 except ValueError:
34 return None
35
36
37 - def forget(self, environ, identity):
38
39 expired = ('%s=""; Path=%s; Expires=Sun, 10-May-1971 11:59:00 GMT' %
40 (self.cookie_name, self.cookie_path))
41 return [('Set-Cookie', expired)]
42
43
45 cookie_value = '%(login)s:%(password)s' % identity
46 cookie_value = cookie_value.encode('base64').rstrip()
47 cookies = get_cookies(environ)
48 existing = cookies.get(self.cookie_name)
49 value = getattr(existing, 'value', None)
50 if value != cookie_value:
51
52 set_cookie = '%s=%s; Path=%s;' % (self.cookie_name, cookie_value,
53 self.cookie_path)
54 return [('Set-Cookie', set_cookie)]
55
57 return '<%s %s>' % (self.__class__.__name__,
58 id(self))
59
60 -def make_plugin(cookie_name='repoze.who.plugins.cookie', cookie_path='/'):
63