Source code for flask_ldap3_login.forms

from flask_wtf import FlaskForm
import wtforms
from wtforms import validators
from flask import current_app
from flask_ldap3_login import AuthenticationResponseStatus

import logging
log = logging.getLogger(__name__)


class LDAPValidationError(validators.ValidationError):
    pass


[docs]class LDAPLoginForm(FlaskForm): """ A basic loginform which can be subclassed by your application. Upon validation, the form will check against ldap for a valid username/password combination. Once validiated will have a `form.user` object that contains a user object. """ username = wtforms.StringField('Username', validators=[validators.Required()]) password = wtforms.PasswordField('Password', validators=[validators.Required()]) submit = wtforms.SubmitField('Submit') remember_me = wtforms.BooleanField('Remember Me', default=True) def validate_ldap(self): logging.debug('Validating LDAPLoginForm against LDAP') 'Validate the username/password data against ldap directory' ldap_mgr = current_app.ldap3_login_manager username = self.username.data password = self.password.data result = ldap_mgr.authenticate(username, password) if result.status == AuthenticationResponseStatus.success: self.user = ldap_mgr._save_user( result.user_dn, result.user_id, result.user_info, result.user_groups ) return True else: self.user = None self.username.errors.append('Invalid Username/Password.') self.password.errors.append('Invalid Username/Password.') return False
[docs] def validate(self, *args, **kwargs): """ Validates the form by calling `validate` on each field, passing any extra `Form.validate_<fieldname>` validators to the field validator. also calls `validate_ldap` """ valid = FlaskForm.validate(self, *args, **kwargs) if not valid: logging.debug("Form validation failed before we had a change to " "check ldap. Reasons: '{0}'".format(self.errors)) return valid return self.validate_ldap()