Mercurial > hg > bitsyauth
comparison bitsyauth/minimal.py @ 12:2efb1b30da4a
fix typos; now works, more or less
author | egj@socialplanning.org |
---|---|
date | Tue, 05 Jan 2010 18:18:35 +0000 |
parents | 6fc4f426b8d4 |
children |
comparison
equal
deleted
inserted
replaced
11:6fc4f426b8d4 | 12:2efb1b30da4a |
---|---|
1 from webob import Request | 1 from webob import Request |
2 | 2 |
3 import os | 3 import os |
4 | 4 |
5 def pw(basedir, user): | 5 def getpw(basedir, user): |
6 file = os.path.join(basedir, user, '.password') | 6 file = os.path.join(basedir, user, '.password') |
7 | 7 |
8 try: | 8 try: |
9 fp = open(file) | 9 fp = open(file) |
10 except IOError: | 10 except IOError: |
18 try: | 18 try: |
19 from hashlib import md5 | 19 from hashlib import md5 |
20 except ImportError: | 20 except ImportError: |
21 from md5 import md5 | 21 from md5 import md5 |
22 def hash(user, pw, realm): | 22 def hash(user, pw, realm): |
23 return md5("%s:%s:%s" (user, realm, pw)).hexdigest() | 23 return md5("%s:%s:%s" % (user, realm, pw)).hexdigest() |
24 | 24 |
25 class BitsyblogFilespaceAuth(object): | 25 class BitsyblogFilespaceAuth(object): |
26 def __init__(self, realm, basedir): | 26 def __init__(self, realm, basedir): |
27 self.realm = realm | 27 self.realm = realm |
28 self.basedir = basedir | 28 self.basedir = basedir |
29 def __call__(self, user, pw): | 29 def __call__(self, user, pw): |
30 stored = pw(self.basedir, user) | 30 stored = getpw(self.basedir, user) |
31 if stored is None: | 31 if stored is None: |
32 return False | 32 return False |
33 return hash(user, pw, self.realm) == stored | 33 return hash(user, pw, self.realm) == stored |
34 | 34 |
35 def filter_factory(app, global_conf, realm, basedir): | 35 def filter_factory(global_conf, realm=None, basedir=None): |
36 #from paste.util.import_string import eval_import | 36 #from paste.util.import_string import eval_import |
37 #authfunc = eval_import(authfunc) | 37 #authfunc = eval_import(authfunc) |
38 | 38 |
39 authfunc = BitsyblogFilespaceAuth(realm, basedir) | 39 authfunc = BitsyblogFilespaceAuth(realm, basedir) |
40 | 40 |
41 return BasicAuthMiddleware(app, realm, authfunc) | 41 def filter(app): |
42 return BasicAuthMiddleware(app, realm, authfunc) | |
43 return filter | |
42 | 44 |
43 class BasicAuthMiddleware(object): | 45 class BasicAuthMiddleware(object): |
44 def __init__(self, app, realm, auth_checker): | 46 def __init__(self, app, realm, auth_checker): |
45 self.app = app | 47 self.app = app |
46 self.realm = realm | 48 self.realm = realm |
47 self.auth_checker = auth_checker | 49 self.auth_checker = auth_checker |
48 | 50 |
49 def __call__(self, environ, start_response): | 51 def __call__(self, environ, start_response): |
50 req = Request(environ) | 52 req = Request(environ) |
51 | 53 |
52 header = req.headers.get('AUTHORIZATION') | 54 header = req.authorization |
53 if not header: | 55 if not header: |
54 return self.app(environ, start_response) | 56 return self.app(environ, start_response) |
55 | 57 |
56 (method, auth) = header.split(' ', 1) | 58 (method, auth) = header.split(' ', 1) |
57 if method != 'basic': | 59 if method.lower() != 'basic': |
58 return self.app(environ, start_response) | 60 return self.app(environ, start_response) |
59 | 61 |
60 auth = auth.strip().decode('base64') | 62 auth = auth.strip().decode('base64') |
61 | 63 |
62 username, password = auth.split(':', 1) | 64 username, password = auth.split(':', 1) |