phi/src/phi/ldap/group.py

64 lines
1.6 KiB
Python

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)