2020-10-04 17:45:09 +02:00
|
|
|
from phi.ldap.entry import get_entry_by_uid, get_entries_by_ou, \
|
|
|
|
add_entry, delete_entry
|
2017-12-21 13:44:54 +01:00
|
|
|
|
2020-09-30 18:42:28 +02:00
|
|
|
shown_keys = ['uid', 'mail', 'createTimestamp', 'modifyTimestamp']
|
2017-12-21 13:44:54 +01:00
|
|
|
|
2020-09-30 16:38:31 +02:00
|
|
|
|
2020-09-30 18:42:28 +02:00
|
|
|
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):
|
2017-12-21 13:44:54 +01:00
|
|
|
entry = get_entry_by_uid(client, uid)
|
|
|
|
|
|
|
|
if not entry:
|
|
|
|
return None
|
|
|
|
|
2020-09-30 18:42:28 +02:00
|
|
|
return flatten_user(entry)
|
2017-12-21 13:44:54 +01:00
|
|
|
|
|
|
|
|
2020-09-30 18:42:28 +02:00
|
|
|
def get_users_by_ou(client, ou):
|
|
|
|
entries = get_entries_by_ou(client, ou)
|
|
|
|
users = [flatten_user(entry) for entry in entries]
|
|
|
|
|
|
|
|
return users
|
2020-10-04 17:45:09 +02:00
|
|
|
|
|
|
|
|
|
|
|
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)
|