From affcc47fe97cda4347b1acac18ce38401147a630 Mon Sep 17 00:00:00 2001 From: User Identifier Date: Sat, 10 Oct 2020 12:54:28 +0200 Subject: [PATCH] Clean user and group dictionaries --- src/phi/ldap/user.py | 5 +++-- src/phi/ldap/utils.py | 48 ++++++++++++++++++++++++------------------- test/test_ldap.py | 23 ++++++++++----------- 3 files changed, 41 insertions(+), 35 deletions(-) diff --git a/src/phi/ldap/user.py b/src/phi/ldap/user.py index e23c2bc..984771f 100644 --- a/src/phi/ldap/user.py +++ b/src/phi/ldap/user.py @@ -48,7 +48,7 @@ def get_all_users(client): return users -def add_user(client, uid, cn, sn, mail): +def add_user(client, uid, cn, sn, mail, password): dn = 'uid={},ou=Hackers,{}'.format(uid, client.base_dn) attributes={ @@ -59,7 +59,8 @@ def add_user(client, uid, cn, sn, mail): ], 'cn': cn, 'sn': sn, - 'mail': mail + 'mail': mail, + 'userPassword': password # TODO: use hashed password } add_entry(client, dn, attributes) diff --git a/src/phi/ldap/utils.py b/src/phi/ldap/utils.py index f1a17a7..78061d0 100644 --- a/src/phi/ldap/utils.py +++ b/src/phi/ldap/utils.py @@ -1,35 +1,41 @@ +import re from phi.logging import get_logger log = get_logger(__name__) -def flatten_attribute(attr): - if isinstance(attr, list) and len(attr)==1: - return attr[0] - else: - return attr - - -def flatten_entry(entry): - return {k: flatten_attribute(attr) - for k, attr in entry['attributes'].items()} - - def make_user_dict(client, entry): - user = flatten_entry(entry) - dn = 'uid={},ou=Hackers,{}'.format(user['uid'], client.base_dn) - user['dn'] = dn + attributes = entry['attributes'] + + user = {} + user['uid'] = attributes['uid'][0] + user['dn'] = 'uid={},ou=Hackers,{}'.format(user['uid'], client.base_dn) + user['cn'] = attributes['cn'][0] + user['sn'] = attributes['sn'][0] + user['mail'] = attributes['mail'][0] + user['password'] = attributes['userPassword'][0] return user -def make_group_dict(client, entry): - group = flatten_entry(entry) - dn = 'cn={},ou=Groups,{}'.format(group['cn'], client.base_dn) - group['dn'] = dn +def get_uid_from_dn(client, dn): + uid = re.search('uid=(.+?),ou=Hackers,{}'.format(client.base_dn), + dn).group(1) + return uid - # unflatten members, they have to be a list even is there is a single one - group['member'] = entry['attributes']['member'] + +def make_group_dict(client, entry): + attributes = entry['attributes'] + + cn = attributes['cn'][0] + dn = 'cn={},ou=Groups,{}'.format(cn, client.base_dn) + members = [get_uid_from_dn(client, u_dn) + for u_dn in attributes['member']] + + group = {} + group['dn'] = dn + group['cn'] = cn + group['members'] = members return group diff --git a/test/test_ldap.py b/test/test_ldap.py index 040196b..0cf7a2b 100644 --- a/test/test_ldap.py +++ b/test/test_ldap.py @@ -15,9 +15,9 @@ def test_get_user_by_id(ldap_client): assert user['mail'] == 'rmascetti@autistici.org' -def test_get_users_by_ou(ldap_client): +def test_get_all_users(ldap_client): users = get_all_users(ldap_client) - + # print(users) assert 'conte_mascetti' in [u['uid'] for u in users] @@ -26,14 +26,16 @@ def test_add_delete_user(ldap_client): cn = 'Rosa' sn = 'Rossi' mail = 'foo@autistici.org' + password = 'changeme' - add_user(ldap_client, uid, cn, sn, mail) + add_user(ldap_client, uid, cn, sn, mail, password) user = get_user_by_uid(ldap_client, uid) assert user['uid'] == uid assert user['mail'] == mail delete_user(ldap_client, user) + # print(user) user = get_user_by_uid(ldap_client, uid) assert user is None @@ -43,7 +45,7 @@ def test_failing_add_user(ldap_client): uid = 'conte_mascetti' try: - add_user(ldap_client, uid, '.', '.', '.') + add_user(ldap_client, uid, 'name', 'surname', 'mail', 'pass') except: # User alrady existing pass else: @@ -72,13 +74,13 @@ def test_add_to_group(ldap_client): group_cn = 'WikiUsers' member_uid = 'rosa_rossi' - add_user(client, member_uid, '.', '.', '.') + add_user(client, member_uid, 'name', 'surname', 'mail', 'pass') user = get_user_by_uid(client, member_uid) - print(user) + # print(user) group = get_group_by_cn(client, group_cn) - group_members = group['member'] + group_members = group['members'] assert len(group_members) == 1 # print(group_members) @@ -86,13 +88,10 @@ def test_add_to_group(ldap_client): add_group_member(client, group, user) group = get_group_by_cn(client, group_cn) - group_members = group['member'] + group_members = group['members'] assert len(group_members) == 2 - assert user['dn'] in group_members + assert user['uid'] in group_members # print(group_members) delete_user(client, user) - - print(group) - # assert False