libs/ldap_client.py (60 lines of code) (raw):

import ldap from ldap.ldapobject import ReconnectLDAPObject from ldap.resiter import ResultProcessor from threading import Timer class LDAPClient(ReconnectLDAPObject, ResultProcessor, object): def __init__(self, config): self.config = config super(LDAPClient, self).__init__(uri=self.config["uri"]) self.base_dn = self.config["base_dn"] ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_ALLOW) def ldap_search(self, scope=ldap.SCOPE_SUBTREE, filterstr='(objectClass=*)'): results = [] self.simple_bind_s(who=self.config["user"], cred=self.config["pass"]) ldap_search = self.search(self.base_dn, scope, filterstr) for res_type, res_data, res_msgid, res_controls in self.allresults(ldap_search): for dn, entry in res_data: results.append(entry) return results def is_valid_user(self, user): is_valid_user_query = self.config["queries"]["user_is_valid"] query = is_valid_user_query.replace("USER", user) ldap_search = self.ldap_search(filterstr=query) if len(ldap_search) > 0: return True else: return False def is_active_user(self, user): is_active_user_query = self.config["queries"]["user_is_active"] query = is_active_user_query.replace("USER", user) ldap_search = self.ldap_search(filterstr=query) if len(ldap_search) > 0: return True else: return False def get_user_info(self, user): user_info_query = self.config["queries"]["user_info"] query = user_info_query.replace("USER", user) user_info = self.ldap_search(filterstr=query) return user_info[0] def sync_users(self): users = [] all_users_query = self.config["queries"]["all_users"] ldap_search = self.ldap_search(filterstr=all_users_query) for result in ldap_search: if "uid" in result: users.append(result["uid"][0]) return users class LdapSyncThread(object): def __init__(self, t, hfunction): self.t=t self.hfunction = hfunction self.thread = Timer(self.t, self.handle_function) def handle_function(self): self.hFunction() self.thread = Timer(self.t, self.handle_function) self.thread.start() def start(self): self.thread.start() def cancel(self): self.thread.cancel()