aboutsummaryrefslogtreecommitdiff
path: root/rhodecode
diff options
context:
space:
mode:
authorMarcin Kuzminski <marcin@python-works.com>2012-06-18 21:25:49 +0200
committerMarcin Kuzminski <marcin@python-works.com>2012-06-18 21:25:49 +0200
commit02d6cc4503aa3f46d2b07186a5266e9407715676 (patch)
tree65c8747c91a5946308772db57d76ecebef6b27f4 /rhodecode
parent2d988da18391803efa112ab793ee3820af84516e (diff)
Added validation into user email map
--HG-- branch : beta
Diffstat (limited to 'rhodecode')
-rw-r--r--rhodecode/controllers/admin/users.py10
-rw-r--r--rhodecode/lib/auth.py9
-rw-r--r--rhodecode/model/forms.py7
-rw-r--r--rhodecode/model/user.py13
-rw-r--r--rhodecode/model/validators.py3
5 files changed, 29 insertions, 13 deletions
diff --git a/rhodecode/controllers/admin/users.py b/rhodecode/controllers/admin/users.py
index b08e5123..84bdcc4a 100644
--- a/rhodecode/controllers/admin/users.py
+++ b/rhodecode/controllers/admin/users.py
@@ -125,12 +125,15 @@ class UsersController(BaseController):
h.flash(_('User updated successfully'), category='success')
Session.commit()
except formencode.Invalid, errors:
+ c.user_email_map = UserEmailMap.query()\
+ .filter(UserEmailMap.user == c.user).all()
+ defaults = errors.value
e = errors.error_dict or {}
perm = Permission.get_by_key('hg.create.repository')
- e.update({'create_repo_perm': user_model.has_perm(id, perm)})
+ defaults.update({'create_repo_perm': user_model.has_perm(id, perm)})
return htmlfill.render(
render('admin/users/user_edit.html'),
- defaults=errors.value,
+ defaults=defaults,
errors=e,
prefix_error=False,
encoding="UTF-8")
@@ -231,6 +234,9 @@ class UsersController(BaseController):
user_model.add_extra_email(id, email)
Session.commit()
h.flash(_("Added email %s to user" % email), category='success')
+ except formencode.Invalid, error:
+ msg = error.error_dict['email']
+ h.flash(msg, category='error')
except Exception:
log.error(traceback.format_exc())
h.flash(_('An error occurred during email saving'),
diff --git a/rhodecode/lib/auth.py b/rhodecode/lib/auth.py
index ec970895..74da132e 100644
--- a/rhodecode/lib/auth.py
+++ b/rhodecode/lib/auth.py
@@ -38,11 +38,6 @@ from pylons.i18n.translation import _
from rhodecode import __platform__, PLATFORM_WIN, PLATFORM_OTHERS
from rhodecode.model.meta import Session
-if __platform__ in PLATFORM_WIN:
- from hashlib import sha256
-if __platform__ in PLATFORM_OTHERS:
- import bcrypt
-
from rhodecode.lib.utils2 import str2bool, safe_unicode
from rhodecode.lib.exceptions import LdapPasswordError, LdapUsernameError
from rhodecode.lib.utils import get_repo_slug, get_repos_group_slug
@@ -98,8 +93,10 @@ class RhodeCodeCrypto(object):
:param password: password to hash
"""
if __platform__ in PLATFORM_WIN:
+ from hashlib import sha256
return sha256(str_).hexdigest()
elif __platform__ in PLATFORM_OTHERS:
+ import bcrypt
return bcrypt.hashpw(str_, bcrypt.gensalt(10))
else:
raise Exception('Unknown or unsupported platform %s' \
@@ -116,8 +113,10 @@ class RhodeCodeCrypto(object):
"""
if __platform__ in PLATFORM_WIN:
+ from hashlib import sha256
return sha256(password).hexdigest() == hashed
elif __platform__ in PLATFORM_OTHERS:
+ import bcrypt
return bcrypt.hashpw(password, hashed) == hashed
else:
raise Exception('Unknown or unsupported platform %s' \
diff --git a/rhodecode/model/forms.py b/rhodecode/model/forms.py
index 6c558e53..033f1540 100644
--- a/rhodecode/model/forms.py
+++ b/rhodecode/model/forms.py
@@ -299,3 +299,10 @@ def LdapSettingsForm(tls_reqcert_choices, search_scope_choices,
ldap_attr_email = v.UnicodeString(strip=True,)
return _LdapSettingsForm
+
+
+def UserExtraEmailForm():
+ class _UserExtraEmailForm(formencode.Schema):
+ email = All(v.UniqSystemEmail(), v.Email)
+
+ return _UserExtraEmailForm \ No newline at end of file
diff --git a/rhodecode/model/user.py b/rhodecode/model/user.py
index 855c5f18..7b282f2b 100644
--- a/rhodecode/model/user.py
+++ b/rhodecode/model/user.py
@@ -29,9 +29,11 @@ import traceback
from pylons import url
from pylons.i18n.translation import _
+from sqlalchemy.exc import DatabaseError
+from sqlalchemy.orm import joinedload
+
from rhodecode.lib.utils2 import safe_unicode, generate_api_key
from rhodecode.lib.caching_query import FromCache
-
from rhodecode.model import BaseModel
from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \
UserToPerm, UsersGroupRepoToPerm, UsersGroupToPerm, UsersGroupMember, \
@@ -40,9 +42,6 @@ from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \
from rhodecode.lib.exceptions import DefaultUserException, \
UserOwnsReposException
-from sqlalchemy.exc import DatabaseError
-
-from sqlalchemy.orm import joinedload
log = logging.getLogger(__name__)
@@ -593,10 +592,14 @@ class UserModel(BaseModel):
:param user:
:param email:
"""
+ from rhodecode.model import forms
+ form = forms.UserExtraEmailForm()()
+ data = form.to_python(dict(email=email))
user = self._get_user(user)
+
obj = UserEmailMap()
obj.user = user
- obj.email = email
+ obj.email = data['email']
self.sa.add(obj)
return obj
diff --git a/rhodecode/model/validators.py b/rhodecode/model/validators.py
index 9cb5e6f6..da0361a0 100644
--- a/rhodecode/model/validators.py
+++ b/rhodecode/model/validators.py
@@ -14,7 +14,6 @@ from formencode.validators import (
from rhodecode.lib.utils import repo_name_slug
from rhodecode.model.db import RepoGroup, Repository, UsersGroup, User
-from rhodecode.lib.auth import authenticate
from rhodecode.lib.exceptions import LdapImportError
from rhodecode.config.routing import ADMIN_PREFIX
# silence warnings and pylint
@@ -241,6 +240,8 @@ def ValidAuth():
}
def validate_python(self, value, state):
+ from rhodecode.lib.auth import authenticate
+
password = value['password']
username = value['username']