phi/src/phi/ldap/group.py

64 lines
1.6 KiB
Python
Raw Normal View History

2020-10-05 14:51:16 +02:00
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))
2020-11-20 12:04:17 +01:00
dn = "cn={},ou=Groups,{}".format(cn, client.base_dn)
2020-10-05 14:51:16 +02:00
log.debug("Search dn: {}".format(dn))
response_id = client.connection.search(
2020-11-20 12:04:17 +01:00
dn,
"(objectclass=groupOfNames)",
search_scope="SUBTREE",
attributes=[ALL_ATTRIBUTES],
2020-10-05 14:51:16 +02:00
)
response = get_response(client, response_id)
if not response:
return None
if len(response) > 1:
2020-11-20 12:04:17 +01:00
log.error(
"Looking for exactly one result but server gave {}. "
"Taking the first and ignoring the rest.".format(len(response))
)
2020-10-05 14:51:16 +02:00
group = make_group_dict(client, response[0])
return group
2020-10-10 11:25:14 +02:00
def get_all_groups(client):
log.info("Searching all the groups")
2020-11-20 12:04:17 +01:00
dn = "ou=Groups,{}".format(client.base_dn)
2020-10-10 11:25:14 +02:00
log.debug("Search dn: {}".format(dn))
response_id = client.connection.search(
2020-11-20 12:04:17 +01:00
dn,
"(objectclass=groupOfNames)",
search_scope="SUBTREE",
attributes=[ALL_ATTRIBUTES],
2020-10-10 11:25:14 +02:00
)
response = get_response(client, response_id)
groups = [make_group_dict(client, entry) for entry in response]
return groups
2020-10-05 14:51:16 +02:00
def add_group_member(client, group, user):
2020-11-20 12:04:17 +01:00
group_dn = group["dn"]
member_dn = user["dn"]
log.debug("Found adding {} to {}".format(member_dn, group_dn))
2020-10-05 14:51:16 +02:00
response_id = client.connection.modify(
2020-11-20 12:04:17 +01:00
group_dn, {"member": [(MODIFY_ADD, [member_dn])]}
2020-10-05 14:51:16 +02:00
)
return get_response(client, response_id)