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)