changeset 741:54684e071457 beta

fixes issue #78, ldap makes user validation caseInsensitive and fixed validators to check for case insensitive values.
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 23 Nov 2010 12:58:45 +0100
parents 9279dfedcf93
children 1377a9d4bdb9
files rhodecode/lib/auth.py rhodecode/model/forms.py
diffstat 2 files changed, 14 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/auth.py	Tue Nov 23 01:58:49 2010 +0100
+++ b/rhodecode/lib/auth.py	Tue Nov 23 12:58:45 2010 +0100
@@ -103,6 +103,13 @@
 
 
     else:
+
+        #since ldap is searching in case insensitive check if this user is still
+        #not in our system
+        username = username.lower()
+        if user_model.get_by_username(username, cache=False) is not None:
+            return False 
+        
         from rhodecode.model.settings import SettingsModel
         ldap_settings = SettingsModel().get_ldap_settings()
 
@@ -110,6 +117,7 @@
         # FALLBACK TO LDAP AUTH IN ENABLE                
         #======================================================================
         if ldap_settings.get('ldap_active', False):
+            
             kwargs = {
                   'server':ldap_settings.get('ldap_host', ''),
                   'base_dn':ldap_settings.get('ldap_base_dn', ''),
@@ -214,8 +222,8 @@
 
         #default global
         default_global_perms = sa.query(UserToPerm)\
-            .filter(UserToPerm.user == sa.query(User).filter(User.username ==
-            'default').one())
+            .filter(UserToPerm.user == sa.query(User)\
+                   .filter(User.username == 'default').one())
 
         for perm in default_global_perms:
             user.permissions['global'].add(perm.permission.permission_name)
--- a/rhodecode/model/forms.py	Tue Nov 23 01:58:49 2010 +0100
+++ b/rhodecode/model/forms.py	Tue Nov 23 12:58:45 2010 +0100
@@ -67,7 +67,7 @@
                 old_un = UserModel().get(old_data.get('user_id')).username
 
             if old_un != value or not edit:
-                if UserModel().get_by_username(value, cache=False):
+                if UserModel().get_by_username(value.lower(), cache=False):
                     raise formencode.Invalid(_('This username already exists') ,
                                              value, state)
 
@@ -244,6 +244,8 @@
 def UniqSystemEmail(old_data):
     class _UniqSystemEmail(formencode.validators.FancyValidator):
         def to_python(self, value, state):
+            value = value.lower()
+            #TODO:write test for MixedCase scenarios
             if old_data.get('email') != value:
                 sa = meta.Session()
                 try:
@@ -260,6 +262,7 @@
 
 class ValidSystemEmail(formencode.validators.FancyValidator):
     def to_python(self, value, state):
+        value = value.lower()
         sa = meta.Session
         try:
             user = sa.query(User).filter(User.email == value).scalar()