from ldap3 import ALL_ATTRIBUTES, MODIFY_ADD from phi.ldap.utils import get_response, make_group_dict from phi.logging import get_logger log = get_logger(__name__) def get_group_by_cn(client, cn): log.info("Searching groups with common name: {}".format(cn)) dn = "cn={},ou=Groups,{}".format(cn, client.base_dn) log.debug("Search dn: {}".format(dn)) response_id = client.connection.search( dn, "(objectclass=groupOfNames)", search_scope="SUBTREE", attributes=[ALL_ATTRIBUTES], ) response = get_response(client, response_id) if not response: return None if len(response) > 1: log.error( "Looking for exactly one result but server gave {}. " "Taking the first and ignoring the rest.".format(len(response)) ) group = make_group_dict(client, response[0]) return group def get_all_groups(client): log.info("Searching all the groups") dn = "ou=Groups,{}".format(client.base_dn) log.debug("Search dn: {}".format(dn)) response_id = client.connection.search( dn, "(objectclass=groupOfNames)", search_scope="SUBTREE", attributes=[ALL_ATTRIBUTES], ) response = get_response(client, response_id) groups = [make_group_dict(client, entry) for entry in response] return groups def add_group_member(client, group, user): group_dn = group["dn"] member_dn = user["dn"] log.debug("Found adding {} to {}".format(member_dn, group_dn)) response_id = client.connection.modify( group_dn, {"member": [(MODIFY_ADD, [member_dn])]} ) return get_response(client, response_id)