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