changeset 742:1377a9d4bdb9 beta

#78, fixed more reliable case insensitive searches
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 23 Nov 2010 14:15:45 +0100
parents 54684e071457
children c9fa3f53143b
files rhodecode/lib/auth.py rhodecode/model/forms.py rhodecode/model/user.py
diffstat 3 files changed, 26 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/auth.py	Tue Nov 23 12:58:45 2010 +0100
+++ b/rhodecode/lib/auth.py	Tue Nov 23 14:15:45 2010 +0100
@@ -107,7 +107,9 @@
         #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:
+        user_obj = user_model.get_by_username(username, cache=False,
+                                            case_insensitive=True)
+        if user_obj is not None:
             return False 
         
         from rhodecode.model.settings import SettingsModel
--- a/rhodecode/model/forms.py	Tue Nov 23 12:58:45 2010 +0100
+++ b/rhodecode/model/forms.py	Tue Nov 23 14:15:45 2010 +0100
@@ -67,7 +67,8 @@
                 old_un = UserModel().get(old_data.get('user_id')).username
 
             if old_un != value or not edit:
-                if UserModel().get_by_username(value.lower(), cache=False):
+                if UserModel().get_by_username(value, cache=False,
+                                               case_insensitive=True):
                     raise formencode.Invalid(_('This username already exists') ,
                                              value, state)
 
@@ -183,7 +184,8 @@
 
         def to_python(self, value, state):
             if old_data['repo_type'] != value:
-                raise formencode.Invalid(_('Fork have to be the same type as original'), value, state)
+                raise formencode.Invalid(_('Fork have to be the same type as original'),
+                                         value, state)
             return value
     return _ValidForkType
 
@@ -220,7 +222,8 @@
             except Exception:
                 msg = self.message('perm_new_user_name',
                                      state=State_obj)
-                raise formencode.Invalid(msg, value, state, error_dict={'perm_new_user_name':msg})
+                raise formencode.Invalid(msg, value, state,
+                                         error_dict={'perm_new_user_name':msg})
         return value
 
 class ValidSettings(formencode.validators.FancyValidator):
@@ -316,7 +319,8 @@
     class _UserForm(formencode.Schema):
         allow_extra_fields = True
         filter_extra_fields = True
-        username = All(UnicodeString(strip=True, min=1, not_empty=True), ValidUsername(edit, old_data))
+        username = All(UnicodeString(strip=True, min=1, not_empty=True),
+                       ValidUsername(edit, old_data))
         if edit:
             new_password = All(UnicodeString(strip=True, min=6, not_empty=False))
             admin = StringBoolean(if_missing=False)
@@ -335,7 +339,8 @@
     class _RegisterForm(formencode.Schema):
         allow_extra_fields = True
         filter_extra_fields = True
-        username = All(ValidUsername(edit, old_data), UnicodeString(strip=True, min=1, not_empty=True))
+        username = All(ValidUsername(edit, old_data),
+                       UnicodeString(strip=True, min=1, not_empty=True))
         password = All(UnicodeString(strip=True, min=6, not_empty=True))
         password_confirmation = All(UnicodeString(strip=True, min=6, not_empty=True))
         active = StringBoolean(if_missing=False)
@@ -358,7 +363,8 @@
     class _RepoForm(formencode.Schema):
         allow_extra_fields = True
         filter_extra_fields = False
-        repo_name = All(UnicodeString(strip=True, min=1, not_empty=True), ValidRepoName(edit, old_data))
+        repo_name = All(UnicodeString(strip=True, min=1, not_empty=True),
+                        ValidRepoName(edit, old_data))
         description = UnicodeString(strip=True, min=1, not_empty=True)
         private = StringBoolean(if_missing=False)
         repo_type = OneOf(supported_backends)
@@ -372,7 +378,8 @@
     class _RepoForkForm(formencode.Schema):
         allow_extra_fields = True
         filter_extra_fields = False
-        fork_name = All(UnicodeString(strip=True, min=1, not_empty=True), ValidRepoName(edit, old_data))
+        fork_name = All(UnicodeString(strip=True, min=1, not_empty=True),
+                        ValidRepoName(edit, old_data))
         description = UnicodeString(strip=True, min=1, not_empty=True)
         private = StringBoolean(if_missing=False)
         repo_type = All(ValidForkType(old_data), OneOf(supported_backends))
@@ -382,7 +389,8 @@
     class _RepoForm(formencode.Schema):
         allow_extra_fields = True
         filter_extra_fields = False
-        repo_name = All(UnicodeString(strip=True, min=1, not_empty=True), ValidRepoName(edit, old_data))
+        repo_name = All(UnicodeString(strip=True, min=1, not_empty=True),
+                        ValidRepoName(edit, old_data))
         description = UnicodeString(strip=True, min=1, not_empty=True)
         private = StringBoolean(if_missing=False)
 
--- a/rhodecode/model/user.py	Tue Nov 23 12:58:45 2010 +0100
+++ b/rhodecode/model/user.py	Tue Nov 23 14:15:45 2010 +0100
@@ -48,9 +48,13 @@
         return user.get(user_id)
 
 
-    def get_by_username(self, username, cache=False):
-        user = self.sa.query(User)\
-            .filter(User.username == username)
+    def get_by_username(self, username, cache=False, case_insensitive=False):
+        
+        if case_insensitive:
+            user = self.sa.query(User).filter(User.username.ilike(username))
+        else:
+            user = self.sa.query(User)\
+                .filter(User.username == username)
         if cache:
             user = user.options(FromCache("sql_cache_short",
                                           "get_user_%s" % username))