64 lines
1.6 KiB
Python
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)
|