Mercurial > kallithea
comparison pylons_app/model/forms.py @ 442:d66a7fa7689b
moved loged in user propagation out of forms,
update user model to get auto update last login.
bugfix with redirect log
fixed forms logic a little bit
some other tweeks
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 01 Sep 2010 23:32:47 +0200 |
parents | 63c697d1a631 |
children | 00f883abdb0c |
comparison
equal
deleted
inserted
replaced
441:c59c4d4323e7 | 442:d66a7fa7689b |
---|---|
24 Email, Bool, StringBoolean | 24 Email, Bool, StringBoolean |
25 from pylons import session | 25 from pylons import session |
26 from pylons.i18n.translation import _ | 26 from pylons.i18n.translation import _ |
27 from pylons_app.lib.auth import check_password, get_crypt_password | 27 from pylons_app.lib.auth import check_password, get_crypt_password |
28 from pylons_app.model import meta | 28 from pylons_app.model import meta |
29 from pylons_app.model.user_model import UserModel | |
29 from pylons_app.model.db import User, Repository | 30 from pylons_app.model.db import User, Repository |
30 from sqlalchemy.exc import OperationalError | 31 from sqlalchemy.exc import OperationalError |
31 from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound | 32 from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound |
32 from webhelpers.pylonslib.secure_form import authentication_token | 33 from webhelpers.pylonslib.secure_form import authentication_token |
33 import datetime | |
34 import formencode | 34 import formencode |
35 import logging | 35 import logging |
36 import os | 36 import os |
37 import pylons_app.lib.helpers as h | 37 import pylons_app.lib.helpers as h |
38 log = logging.getLogger(__name__) | 38 log = logging.getLogger(__name__) |
91 e_dict = {'username':messages['invalid_login'], | 91 e_dict = {'username':messages['invalid_login'], |
92 'password':messages['invalid_password']} | 92 'password':messages['invalid_password']} |
93 e_dict_disable = {'username':messages['disabled_account']} | 93 e_dict_disable = {'username':messages['disabled_account']} |
94 | 94 |
95 def validate_python(self, value, state): | 95 def validate_python(self, value, state): |
96 sa = meta.Session | |
97 password = value['password'] | 96 password = value['password'] |
98 username = value['username'] | 97 username = value['username'] |
99 try: | 98 try: |
100 user = sa.query(User).filter(User.username == username).one() | 99 user = UserModel().get_user_by_name(username) |
101 except (NoResultFound, MultipleResultsFound, OperationalError) as e: | 100 except (NoResultFound, MultipleResultsFound, OperationalError) as e: |
102 log.error(e) | 101 log.error(e) |
103 user = None | 102 user = None |
104 raise formencode.Invalid(self.message('invalid_password', | 103 raise formencode.Invalid(self.message('invalid_password', |
105 state=State_obj), value, state, | 104 state=State_obj), value, state, |
106 error_dict=self.e_dict) | 105 error_dict=self.e_dict) |
107 if user: | 106 if user: |
108 if user.active: | 107 if user.active: |
109 if user.username == username and check_password(password, user.password): | 108 if user.username == username and check_password(password, |
110 from pylons_app.lib.auth import AuthUser | 109 user.password): |
111 auth_user = AuthUser() | |
112 auth_user.username = username | |
113 auth_user.is_authenticated = True | |
114 auth_user.is_admin = user.admin | |
115 auth_user.user_id = user.user_id | |
116 auth_user.name = user.name | |
117 auth_user.lastname = user.lastname | |
118 session['hg_app_user'] = auth_user | |
119 session.save() | |
120 log.info('user %s is now authenticated', username) | |
121 | |
122 try: | |
123 user.last_login = datetime.datetime.now() | |
124 sa.add(user) | |
125 sa.commit() | |
126 except (OperationalError) as e: | |
127 log.error(e) | |
128 sa.rollback() | |
129 | |
130 return value | 110 return value |
131 else: | 111 else: |
132 log.warning('user %s not authenticated', username) | 112 log.warning('user %s not authenticated', username) |
133 raise formencode.Invalid(self.message('invalid_password', | 113 raise formencode.Invalid(self.message('invalid_password', |
134 state=State_obj), value, state, | 114 state=State_obj), value, state, |
137 log.warning('user %s is disabled', username) | 117 log.warning('user %s is disabled', username) |
138 raise formencode.Invalid(self.message('disabled_account', | 118 raise formencode.Invalid(self.message('disabled_account', |
139 state=State_obj), | 119 state=State_obj), |
140 value, state, | 120 value, state, |
141 error_dict=self.e_dict_disable) | 121 error_dict=self.e_dict_disable) |
142 | |
143 meta.Session.remove() | |
144 | |
145 | 122 |
146 class ValidRepoUser(formencode.validators.FancyValidator): | 123 class ValidRepoUser(formencode.validators.FancyValidator): |
147 | 124 |
148 def to_python(self, value, state): | 125 def to_python(self, value, state): |
149 sa = meta.Session | |
150 try: | 126 try: |
151 self.user_db = sa.query(User)\ | 127 self.user_db = meta.Session.query(User)\ |
152 .filter(User.active == True)\ | 128 .filter(User.active == True)\ |
153 .filter(User.username == value).one() | 129 .filter(User.username == value).one() |
154 except Exception: | 130 except Exception: |
155 raise formencode.Invalid(_('This username is not valid'), | 131 raise formencode.Invalid(_('This username is not valid'), |
156 value, state) | 132 value, state) |
157 meta.Session.remove() | 133 finally: |
134 meta.Session.remove() | |
135 | |
158 return self.user_db.user_id | 136 return self.user_db.user_id |
159 | 137 |
160 def ValidRepoName(edit, old_data): | 138 def ValidRepoName(edit, old_data): |
161 class _ValidRepoName(formencode.validators.FancyValidator): | 139 class _ValidRepoName(formencode.validators.FancyValidator): |
162 | 140 |