from phi.ldap.entry import get_entry_by_uid, get_entries_by_ou, \ add_entry, delete_entry shown_keys = ['uid', 'mail', 'createTimestamp', 'modifyTimestamp'] def flatten_attribute(attr): if isinstance(attr, list) and len(attr)==1: return attr[0] else: return attr def flatten_user(entry): return {k: flatten_attribute(attr) for k, attr in entry['attributes'].items() if k in shown_keys} def get_user_by_uid(client, uid): entry = get_entry_by_uid(client, uid) if not entry: return None return flatten_user(entry) def get_users_by_ou(client, ou): entries = get_entries_by_ou(client, ou) users = [flatten_user(entry) for entry in entries] return users def add_user(client, uid, cn, sn, mail): dn = 'uid={},ou=Hackers,{}'.format(uid, client.base_dn) attributes={ 'objectClass': [ 'inetOrgPerson', 'organizationalPerson', 'person', 'top' ], 'cn': cn, 'sn': sn, 'mail': mail } add_entry(client, dn, attributes) def delete_user(client, uid): dn = 'uid={},ou=Hackers,{}'.format(uid, client.base_dn) delete_entry(client, dn)