Changeset - 54684e071457
[Not reviewed]
beta
0 2 0
Marcin Kuzminski - 15 years ago 2010-11-23 12:58:45
marcin@python-works.com
fixes issue #78, ldap makes user validation caseInsensitive
and fixed validators to check for case insensitive values.
2 files changed with 14 insertions and 3 deletions:
0 comments (0 inline, 0 general)
rhodecode/lib/auth.py
Show inline comments
 
@@ -100,19 +100,27 @@ def authfunc(environ, username, password
 
                return True
 
        else:
 
            log.error('user %s is disabled', username)
 

	
 

	
 
    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()
 

	
 
        #======================================================================
 
        # 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', ''),
 
                  'port':ldap_settings.get('ldap_port'),
 
                  'bind_dn':ldap_settings.get('ldap_dn_user'),
 
                  'bind_pass':ldap_settings.get('ldap_dn_pass'),
 
@@ -211,14 +219,14 @@ def fill_perms(user):
 
        #=======================================================================
 
        # set default permissions
 
        #=======================================================================
 

	
 
        #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)
 

	
 
        #default repositories
 
        for perm in default_perms:
rhodecode/model/forms.py
Show inline comments
 
@@ -64,13 +64,13 @@ def ValidUsername(edit, old_data):
 
            #check if user is unique
 
            old_un = None
 
            if edit:
 
                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)
 

	
 
    return _ValidUsername
 

	
 
class ValidPassword(formencode.validators.FancyValidator):
 
@@ -241,12 +241,14 @@ class ValidPath(formencode.validators.Fa
 
                                     error_dict={'paths_root_path':msg})
 
        return value
 

	
 
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:
 
                    user = sa.query(User).filter(User.email == value).scalar()
 
                    if user:
 
                        raise formencode.Invalid(_("That e-mail address is already taken") ,
 
@@ -257,12 +259,13 @@ def UniqSystemEmail(old_data):
 
            return value
 

	
 
    return _UniqSystemEmail
 

	
 
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()
 
            if  user is None:
 
                raise formencode.Invalid(_("That e-mail address doesn't exist.") ,
 
                                         value, state)
0 comments (0 inline, 0 general)