Example #1
0
    def authenticate(self, request, username=None, password=None):

        if username not in settings.MANAGERS:
            return None

        try:
            ldap_helper = LDAPHelper()
            LDAPHelper.bind(ldap_helper.connection, username, password)
            ldap_user = LDAPHelper.search_single(ldap_helper.connection,
                                                 username)
        except LDAPHelper.LDAPHelperException as e:
            logging.error('LDAP Error: %s' % e)
            return None
        else:
            try:
                user = User.objects.get(username=username)
            except User.DoesNotExist:
                user = User(username=username)

                # Try to extract some other details
                try:
                    user.first_name = LDAPHelper.extract_firstname(ldap_user)
                except LDAPHelper.MissingAttribute:
                    pass
                try:
                    user.last_name = LDAPHelper.extract_lastname(ldap_user)
                except LDAPHelper.MissingAttribute:
                    pass
                try:
                    user.email = LDAPHelper.extract_email(ldap_user)
                except LDAPHelper.MissingAttribute:
                    pass

                try:
                    user.save()
                except Exception as e:
                    logging.error('Unable to save user `%s`: %s' %
                                  (username, str(e)))
                    return None
        return user