Changeset - 9a9946320435
[Not reviewed]
default
0 2 0
Marcin Kuzminski - 15 years ago 2011-03-17 21:05:14
marcin@python-works.com
fixed ldap form, it doesn't validate the baseDN until enable checkbox is set
2 files changed with 10 insertions and 6 deletions:
0 comments (0 inline, 0 general)
rhodecode/controllers/admin/ldap_settings.py
Show inline comments
 
@@ -59,28 +59,29 @@ class LdapSettingsController(BaseControl
 
        defaults = SettingsModel().get_ldap_settings()
 

	
 
        return htmlfill.render(
 
                    render('admin/ldap/ldap.html'),
 
                    defaults=defaults,
 
                    encoding="UTF-8",
 
                    force_defaults=True,)
 

	
 
    def ldap_settings(self):
 
        """POST ldap create and store ldap settings"""
 

	
 
        settings_model = SettingsModel()
 
        _form = LdapSettingsForm()()
 
        post_data = dict(request.POST)
 
        _form = LdapSettingsForm(post_data.get('ldap_active'))()
 

	
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 
            form_result = _form.to_python(post_data)
 
            try:
 

	
 
                for k, v in form_result.items():
 
                    if k.startswith('ldap_'):
 
                        setting = settings_model.get(k)
 
                        setting.app_settings_value = v
 
                        self.sa.add(setting)
 

	
 
                self.sa.commit()
 
                h.flash(_('Ldap settings updated successfully'),
 
                    category='success')
 
            except (DatabaseError,):
rhodecode/model/forms.py
Show inline comments
 
@@ -291,44 +291,47 @@ class ValidSystemEmail(formencode.valida
 
        return value
 

	
 
class LdapLibValidator(formencode.validators.FancyValidator):
 

	
 
    def to_python(self, value, state):
 

	
 
        try:
 
            import ldap
 
        except ImportError:
 
            raise LdapImportError
 
        return value
 

	
 
class BaseDnValidator(formencode.validators.FancyValidator):
 
def BaseDnValidator(ldap_enable):
 
    class _BaseDnValidator(formencode.validators.FancyValidator):
 

	
 
    def to_python(self, value, state):
 

	
 
            if not ldap_enable:
 
                return ''
 
        try:
 
            value % {'user':'valid'}
 

	
 
            if value.find('%(user)s') == -1:
 
                raise formencode.Invalid(_("You need to specify %(user)s in "
 
                                           "template for example uid=%(user)s "
 
                                           ",dc=company...") ,
 
                                         value, state)
 

	
 
        except KeyError:
 
            raise formencode.Invalid(_("Wrong template used, only %(user)s "
 
                                       "is an valid entry") ,
 
                                         value, state)
 

	
 
        return value
 

	
 
    return _BaseDnValidator
 
#===============================================================================
 
# FORMS        
 
#===============================================================================
 
class LoginForm(formencode.Schema):
 
    allow_extra_fields = True
 
    filter_extra_fields = True
 
    username = UnicodeString(
 
                             strip=True,
 
                             min=1,
 
                             not_empty=True,
 
                             messages={
 
                                       'empty':_('Please enter a login'),
 
@@ -458,26 +461,26 @@ def DefaultPermissionsForm(perms_choices
 
    class _DefaultPermissionsForm(formencode.Schema):
 
        allow_extra_fields = True
 
        filter_extra_fields = True
 
        overwrite_default = StringBoolean(if_missing=False)
 
        anonymous = OneOf(['True', 'False'], if_missing=False)
 
        default_perm = OneOf(perms_choices)
 
        default_register = OneOf(register_choices)
 
        default_create = OneOf(create_choices)
 

	
 
    return _DefaultPermissionsForm
 

	
 

	
 
def LdapSettingsForm():
 
def LdapSettingsForm(ldap_enable):
 
    class _LdapSettingsForm(formencode.Schema):
 
        allow_extra_fields = True
 
        filter_extra_fields = True
 
        pre_validators = [LdapLibValidator]
 
        ldap_active = StringBoolean(if_missing=False)
 
        ldap_host = UnicodeString(strip=True,)
 
        ldap_port = Number(strip=True,)
 
        ldap_ldaps = StringBoolean(if_missing=False)
 
        ldap_dn_user = UnicodeString(strip=True,)
 
        ldap_dn_pass = UnicodeString(strip=True,)
 
        ldap_base_dn = All(BaseDnValidator, UnicodeString(strip=True,))
 
        ldap_base_dn = All(BaseDnValidator(ldap_enable), UnicodeString(strip=True,))
 

	
 
    return _LdapSettingsForm
0 comments (0 inline, 0 general)