comparison pylons_app/lib/auth.py @ 343:6484963056cd

implemented cache for repeated queries in simplehg mercurial requests
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 14 Jul 2010 12:31:11 +0200
parents 5d517bbf0a0d
children 664a5b8c551a
comparison
equal deleted inserted replaced
342:c71dc6ef36e6 343:6484963056cd
20 """ 20 """
21 Created on April 4, 2010 21 Created on April 4, 2010
22 22
23 @author: marcink 23 @author: marcink
24 """ 24 """
25 25 from beaker.cache import cache_region
26 from functools import wraps 26 from functools import wraps
27 from pylons import session, url, request 27 from pylons import config, session, url, request
28 from pylons.controllers.util import abort, redirect 28 from pylons.controllers.util import abort, redirect
29 from pylons_app.lib.utils import get_repo_slug
29 from pylons_app.model import meta 30 from pylons_app.model import meta
30 from pylons_app.model.db import User, Repo2Perm, Repository, Permission 31 from pylons_app.model.db import User, Repo2Perm, Repository, Permission
31 from pylons_app.lib.utils import get_repo_slug
32 from sqlalchemy.exc import OperationalError 32 from sqlalchemy.exc import OperationalError
33 from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound 33 from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
34 import crypt 34 import crypt
35 import logging 35 import logging
36 from pylons import config 36
37 log = logging.getLogger(__name__) 37 log = logging.getLogger(__name__)
38 38
39 def get_crypt_password(password): 39 def get_crypt_password(password):
40 """ 40 """
41 Cryptographic function used for password hashing 41 Cryptographic function used for password hashing
42 @param password: password to hash 42 @param password: password to hash
43 """ 43 """
44 return crypt.crypt(password, '6a') 44 return crypt.crypt(password, '6a')
45 45
46
47 @cache_region('super_short_term', 'cached_user')
48 def get_user_cached(username):
49 sa = meta.Session
50 user = sa.query(User).filter(User.username == username).one()
51 return user
52
46 def authfunc(environ, username, password): 53 def authfunc(environ, username, password):
47 sa = meta.Session
48 password_crypt = get_crypt_password(password) 54 password_crypt = get_crypt_password(password)
49 try: 55 try:
50 user = sa.query(User).filter(User.username == username).one() 56 user = get_user_cached(username)
51 except (NoResultFound, MultipleResultsFound, OperationalError) as e: 57 except (NoResultFound, MultipleResultsFound, OperationalError) as e:
52 log.error(e) 58 log.error(e)
53 user = None 59 user = None
54 60
55 if user: 61 if user: