Show More
@@ -125,12 +125,15 class UsersController(BaseController): | |||||
125 | h.flash(_('User updated successfully'), category='success') |
|
125 | h.flash(_('User updated successfully'), category='success') | |
126 | Session.commit() |
|
126 | Session.commit() | |
127 | except formencode.Invalid, errors: |
|
127 | except formencode.Invalid, errors: | |
|
128 | c.user_email_map = UserEmailMap.query()\ | |||
|
129 | .filter(UserEmailMap.user == c.user).all() | |||
|
130 | defaults = errors.value | |||
128 | e = errors.error_dict or {} |
|
131 | e = errors.error_dict or {} | |
129 | perm = Permission.get_by_key('hg.create.repository') |
|
132 | perm = Permission.get_by_key('hg.create.repository') | |
130 | e.update({'create_repo_perm': user_model.has_perm(id, perm)}) |
|
133 | defaults.update({'create_repo_perm': user_model.has_perm(id, perm)}) | |
131 | return htmlfill.render( |
|
134 | return htmlfill.render( | |
132 | render('admin/users/user_edit.html'), |
|
135 | render('admin/users/user_edit.html'), | |
133 |
defaults= |
|
136 | defaults=defaults, | |
134 | errors=e, |
|
137 | errors=e, | |
135 | prefix_error=False, |
|
138 | prefix_error=False, | |
136 | encoding="UTF-8") |
|
139 | encoding="UTF-8") | |
@@ -231,6 +234,9 class UsersController(BaseController): | |||||
231 | user_model.add_extra_email(id, email) |
|
234 | user_model.add_extra_email(id, email) | |
232 | Session.commit() |
|
235 | Session.commit() | |
233 | h.flash(_("Added email %s to user" % email), category='success') |
|
236 | h.flash(_("Added email %s to user" % email), category='success') | |
|
237 | except formencode.Invalid, error: | |||
|
238 | msg = error.error_dict['email'] | |||
|
239 | h.flash(msg, category='error') | |||
234 | except Exception: |
|
240 | except Exception: | |
235 | log.error(traceback.format_exc()) |
|
241 | log.error(traceback.format_exc()) | |
236 | h.flash(_('An error occurred during email saving'), |
|
242 | h.flash(_('An error occurred during email saving'), |
@@ -38,11 +38,6 from pylons.i18n.translation import _ | |||||
38 | from rhodecode import __platform__, PLATFORM_WIN, PLATFORM_OTHERS |
|
38 | from rhodecode import __platform__, PLATFORM_WIN, PLATFORM_OTHERS | |
39 | from rhodecode.model.meta import Session |
|
39 | from rhodecode.model.meta import Session | |
40 |
|
40 | |||
41 | if __platform__ in PLATFORM_WIN: |
|
|||
42 | from hashlib import sha256 |
|
|||
43 | if __platform__ in PLATFORM_OTHERS: |
|
|||
44 | import bcrypt |
|
|||
45 |
|
||||
46 | from rhodecode.lib.utils2 import str2bool, safe_unicode |
|
41 | from rhodecode.lib.utils2 import str2bool, safe_unicode | |
47 | from rhodecode.lib.exceptions import LdapPasswordError, LdapUsernameError |
|
42 | from rhodecode.lib.exceptions import LdapPasswordError, LdapUsernameError | |
48 | from rhodecode.lib.utils import get_repo_slug, get_repos_group_slug |
|
43 | from rhodecode.lib.utils import get_repo_slug, get_repos_group_slug | |
@@ -98,8 +93,10 class RhodeCodeCrypto(object): | |||||
98 | :param password: password to hash |
|
93 | :param password: password to hash | |
99 | """ |
|
94 | """ | |
100 | if __platform__ in PLATFORM_WIN: |
|
95 | if __platform__ in PLATFORM_WIN: | |
|
96 | from hashlib import sha256 | |||
101 | return sha256(str_).hexdigest() |
|
97 | return sha256(str_).hexdigest() | |
102 | elif __platform__ in PLATFORM_OTHERS: |
|
98 | elif __platform__ in PLATFORM_OTHERS: | |
|
99 | import bcrypt | |||
103 | return bcrypt.hashpw(str_, bcrypt.gensalt(10)) |
|
100 | return bcrypt.hashpw(str_, bcrypt.gensalt(10)) | |
104 | else: |
|
101 | else: | |
105 | raise Exception('Unknown or unsupported platform %s' \ |
|
102 | raise Exception('Unknown or unsupported platform %s' \ | |
@@ -116,8 +113,10 class RhodeCodeCrypto(object): | |||||
116 | """ |
|
113 | """ | |
117 |
|
114 | |||
118 | if __platform__ in PLATFORM_WIN: |
|
115 | if __platform__ in PLATFORM_WIN: | |
|
116 | from hashlib import sha256 | |||
119 | return sha256(password).hexdigest() == hashed |
|
117 | return sha256(password).hexdigest() == hashed | |
120 | elif __platform__ in PLATFORM_OTHERS: |
|
118 | elif __platform__ in PLATFORM_OTHERS: | |
|
119 | import bcrypt | |||
121 | return bcrypt.hashpw(password, hashed) == hashed |
|
120 | return bcrypt.hashpw(password, hashed) == hashed | |
122 | else: |
|
121 | else: | |
123 | raise Exception('Unknown or unsupported platform %s' \ |
|
122 | raise Exception('Unknown or unsupported platform %s' \ |
@@ -299,3 +299,10 def LdapSettingsForm(tls_reqcert_choices | |||||
299 | ldap_attr_email = v.UnicodeString(strip=True,) |
|
299 | ldap_attr_email = v.UnicodeString(strip=True,) | |
300 |
|
300 | |||
301 | return _LdapSettingsForm |
|
301 | return _LdapSettingsForm | |
|
302 | ||||
|
303 | ||||
|
304 | def UserExtraEmailForm(): | |||
|
305 | class _UserExtraEmailForm(formencode.Schema): | |||
|
306 | email = All(v.UniqSystemEmail(), v.Email) | |||
|
307 | ||||
|
308 | return _UserExtraEmailForm No newline at end of file |
@@ -29,9 +29,11 import traceback | |||||
29 | from pylons import url |
|
29 | from pylons import url | |
30 | from pylons.i18n.translation import _ |
|
30 | from pylons.i18n.translation import _ | |
31 |
|
31 | |||
|
32 | from sqlalchemy.exc import DatabaseError | |||
|
33 | from sqlalchemy.orm import joinedload | |||
|
34 | ||||
32 | from rhodecode.lib.utils2 import safe_unicode, generate_api_key |
|
35 | from rhodecode.lib.utils2 import safe_unicode, generate_api_key | |
33 | from rhodecode.lib.caching_query import FromCache |
|
36 | from rhodecode.lib.caching_query import FromCache | |
34 |
|
||||
35 | from rhodecode.model import BaseModel |
|
37 | from rhodecode.model import BaseModel | |
36 | from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \ |
|
38 | from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \ | |
37 | UserToPerm, UsersGroupRepoToPerm, UsersGroupToPerm, UsersGroupMember, \ |
|
39 | UserToPerm, UsersGroupRepoToPerm, UsersGroupToPerm, UsersGroupMember, \ | |
@@ -40,9 +42,6 from rhodecode.model.db import User, Use | |||||
40 | from rhodecode.lib.exceptions import DefaultUserException, \ |
|
42 | from rhodecode.lib.exceptions import DefaultUserException, \ | |
41 | UserOwnsReposException |
|
43 | UserOwnsReposException | |
42 |
|
44 | |||
43 | from sqlalchemy.exc import DatabaseError |
|
|||
44 |
|
||||
45 | from sqlalchemy.orm import joinedload |
|
|||
46 |
|
45 | |||
47 | log = logging.getLogger(__name__) |
|
46 | log = logging.getLogger(__name__) | |
48 |
|
47 | |||
@@ -593,10 +592,14 class UserModel(BaseModel): | |||||
593 | :param user: |
|
592 | :param user: | |
594 | :param email: |
|
593 | :param email: | |
595 | """ |
|
594 | """ | |
|
595 | from rhodecode.model import forms | |||
|
596 | form = forms.UserExtraEmailForm()() | |||
|
597 | data = form.to_python(dict(email=email)) | |||
596 | user = self._get_user(user) |
|
598 | user = self._get_user(user) | |
|
599 | ||||
597 | obj = UserEmailMap() |
|
600 | obj = UserEmailMap() | |
598 | obj.user = user |
|
601 | obj.user = user | |
599 | obj.email = email |
|
602 | obj.email = data['email'] | |
600 | self.sa.add(obj) |
|
603 | self.sa.add(obj) | |
601 | return obj |
|
604 | return obj | |
602 |
|
605 |
@@ -14,7 +14,6 from formencode.validators import ( | |||||
14 |
|
14 | |||
15 | from rhodecode.lib.utils import repo_name_slug |
|
15 | from rhodecode.lib.utils import repo_name_slug | |
16 | from rhodecode.model.db import RepoGroup, Repository, UsersGroup, User |
|
16 | from rhodecode.model.db import RepoGroup, Repository, UsersGroup, User | |
17 | from rhodecode.lib.auth import authenticate |
|
|||
18 | from rhodecode.lib.exceptions import LdapImportError |
|
17 | from rhodecode.lib.exceptions import LdapImportError | |
19 | from rhodecode.config.routing import ADMIN_PREFIX |
|
18 | from rhodecode.config.routing import ADMIN_PREFIX | |
20 | # silence warnings and pylint |
|
19 | # silence warnings and pylint | |
@@ -241,6 +240,8 def ValidAuth(): | |||||
241 | } |
|
240 | } | |
242 |
|
241 | |||
243 | def validate_python(self, value, state): |
|
242 | def validate_python(self, value, state): | |
|
243 | from rhodecode.lib.auth import authenticate | |||
|
244 | ||||
244 | password = value['password'] |
|
245 | password = value['password'] | |
245 | username = value['username'] |
|
246 | username = value['username'] | |
246 |
|
247 |
General Comments 0
You need to be logged in to leave comments.
Login now