Mercurial > public > src > rhodecode
comparison pylons_app/lib/auth.py @ 366: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
365:c71dc6ef36e6 | 366: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: |