Home | Trees | Indices | Help |
|
---|
|
1 from zope.interface import implements 2 3 from repoze.who.interfaces import IAuthenticator 4 from repoze.who.interfaces import IMetadataProvider 57 try: 8 from hashlib import sha1 9 except ImportError: # Python < 2.5 #pragma NO COVERAGE 10 from sha import new as sha1 #pragma NO COVERAGE 11 12 # the stored password is stored as '{SHA}<SHA hexdigest>'. 13 # or as a cleartext password (no {SHA} prefix) 14 15 if stored_password_hash.startswith('{SHA}'): 16 stored_password_hash = stored_password_hash[5:] 17 digest = sha1(cleartext_password).hexdigest() 18 else: 19 digest = cleartext_password 20 21 if stored_password_hash == digest: 22 return True 23 24 return False2527 # convenience (I always seem to use Postgres) 28 def conn_factory(): #pragma NO COVERAGE 29 import psycopg2 #pragma NO COVERAGE 30 return psycopg2.connect(kw['repoze.who.dsn']) #pragma NO COVERAGE31 return conn_factory #pragma NO COVERAGE 3234 implements(IAuthenticator) 355837 # statement should be pyformat dbapi binding-style, e.g. 38 # "select user_id, password from users where login=%(login)s" 39 self.query = query 40 self.conn_factory = conn_factory 41 self.compare_fn = compare_fn or default_password_compare 42 self.conn = None43 44 # IAuthenticator46 if not 'login' in identity: 47 return None 48 if not self.conn: 49 self.conn = self.conn_factory() 50 curs = self.conn.cursor() 51 curs.execute(self.query, identity) 52 result = curs.fetchone() 53 curs.close() 54 if result: 55 user_id, password = result 56 if self.compare_fn(identity['password'], password): 57 return user_id60 implements(IMetadataProvider) 618363 self.name = name 64 self.query = query 65 self.conn_factory = conn_factory 66 self.filter = filter 67 self.conn = None68 69 # IMetadataProvider71 if self.conn is None: 72 self.conn = self.conn_factory() 73 curs = self.conn.cursor() 74 # can't use dots in names in python string formatting :-( 75 identity['__userid'] = identity['repoze.who.userid'] 76 curs.execute(self.query, identity) 77 result = curs.fetchall() 78 if self.filter: 79 result = self.filter(result) 80 curs.close() 81 del identity['__userid'] 82 identity[self.name] = result86 from repoze.who.utils import resolveDotted 87 if query is None: 88 raise ValueError('query must be specified') 89 if conn_factory is None: 90 raise ValueError('conn_factory must be specified') 91 try: 92 conn_factory = resolveDotted(conn_factory)(**kw) 93 except Exception, why: 94 raise ValueError('conn_factory could not be resolved: %s' % why) 95 if compare_fn is not None: 96 compare_fn = resolveDotted(compare_fn) 97 return SQLAuthenticatorPlugin(query, conn_factory, compare_fn)98101 from repoze.who.utils import resolveDotted 102 if name is None: 103 raise ValueError('name must be specified') 104 if query is None: 105 raise ValueError('query must be specified') 106 if conn_factory is None: 107 raise ValueError('conn_factory must be specified') 108 try: 109 conn_factory = resolveDotted(conn_factory)(**kw) 110 except Exception, why: 111 raise ValueError('conn_factory could not be resolved: %s' % why) 112 if filter is not None: 113 filter = resolveDotted(filter) 114 return SQLMetadataProviderPlugin(name, query, conn_factory, filter)115
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Thu Jun 3 10:41:58 2010 | http://epydoc.sourceforge.net |