Skip to content

Commit c410e7c

Browse files
committed
Get users and groups directly from ldap, query for group 'project-ness' from topology rather than comanage
1 parent ce1b8a2 commit c410e7c

2 files changed

Lines changed: 19 additions & 20 deletions

File tree

comanage_utils.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,19 @@ def get_ldap_active_users(ldap_server, ldap_user, ldap_authtok, filter_group_nam
205205
ldap_active_users.add(person["attributes"]["employeeNumber"])
206206
return ldap_active_users
207207

208+
def get_ldap_active_users_and_groups(ldap_server, ldap_user, ldap_authtok, filter_group_name=None):
209+
""" Retrieve a dictionary of active users from LDAP, with their group memberships. """
210+
ldap_active_users = {}
211+
filter_str = ("(isMemberOf=CO:members:active)" if filter_group_name is None
212+
else f"(&(isMemberOf={filter_group_name})(isMemberOf=CO:members:active))")
213+
server = Server(ldap_server, get_info=ALL)
214+
connection = Connection(server, ldap_user, ldap_authtok, client_strategy=SAFE_SYNC, auto_bind=True)
215+
_, _, response, _ = connection.search("ou=people,o=OSG,o=CO,dc=cilogon,dc=org", filter_str, attributes=["employeeNumber", "isMemberOf"])
216+
for person in response:
217+
ldap_active_users[person["attributes"]["employeeNumber"]] = person["attributes"].get("isMemberOf", [])
218+
219+
return ldap_active_users
220+
208221

209222
def identifier_from_list(id_list, id_type):
210223
id_type_list = [id["Type"] for id in id_list]

osg-comanage-project-usermap.py

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
import getopt
88
import urllib.error
99
import urllib.request
10+
import requests
1011
import comanage_utils as utils
1112

1213

1314
SCRIPT = os.path.basename(__file__)
1415
ENDPOINT = "https://registry-test.cilogon.org/registry/"
16+
TOPOLOGY_ENDPOINT = "https://topology.opensciencegrid.org/"
1517
LDAP_SERVER = "ldaps://ldap-test.cilogon.org"
1618
LDAP_USER = "uid=registry_user,ou=system,o=OSG,o=CO,dc=cilogon,dc=org"
1719
OSG_CO_ID = 8
@@ -203,26 +205,10 @@ def get_co_api_data():
203205

204206

205207
def get_osguser_groups(filter_group_name=None):
206-
project_osggids_to_name = get_co_api_data()
207-
ldap_groups_members = get_ldap_group_members_dict()
208-
ldap_users = utils.get_ldap_active_users(options.ldap_server, options.ldap_user, options.ldap_authtok, filter_group_name)
209-
210-
active_project_osggids = set(ldap_groups_members.keys()).intersection(set(project_osggids_to_name.keys()))
211-
project_to_user_map = {
212-
osggid : ldap_groups_members[osggid]
213-
for osggid in active_project_osggids
214-
}
215-
all_project_users = set(
216-
username for osggid in project_to_user_map for username in project_to_user_map[osggid]
217-
)
218-
all_active_project_users = all_project_users.intersection(ldap_users)
219-
usernames_to_project_map = create_user_to_projects_map(
220-
project_to_user_map,
221-
all_active_project_users,
222-
project_osggids_to_name,
223-
)
224-
225-
return usernames_to_project_map
208+
ldap_users = utils.get_ldap_active_users_and_groups(options.ldap_server, options.ldap_user, options.ldap_authtok, filter_group_name)
209+
topology_projects = requests.get(f"{TOPOLOGY_ENDPOINT}/miscproject/json").json()
210+
project_names = topology_projects.keys()
211+
return {user: [p for p in groups if p in project_names] for user, groups in ldap_users.items()}
226212

227213

228214
def parse_localmap(inputfile):

0 commit comments

Comments
 (0)