Skip to content

Commit 3efe8a6

Browse files
Reimplement filtering by members of a group
And clean up of no-longer-used methods remove collections import
1 parent 2ffdc5d commit 3efe8a6

File tree

1 file changed

+11
-30
lines changed

1 file changed

+11
-30
lines changed

osg-comanage-project-usermap.py

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import json
77
import getopt
88
import subprocess
9-
import collections
109
import urllib.error
1110
import urllib.request
1211

@@ -28,7 +27,7 @@
2827
"ldaps://ldap.cilogon.org",
2928
"-D",
3029
"uid=readonly_user,ou=system,o=OSG,o=CO,dc=cilogon,dc=org",
31-
"-w", "{}",
30+
"-w", "{auth}",
3231
"-b",
3332
"ou=groups,o=OSG,o=CO,dc=cilogon,dc=org",
3433
"-s",
@@ -42,9 +41,9 @@
4241
"-H", "ldaps://ldap.cilogon.org",
4342
"-D", "uid=readonly_user,ou=system,o=OSG,o=CO,dc=cilogon,dc=org",
4443
"-x",
45-
"-w", "{}",
44+
"-w", "{auth}",
4645
"-b", "ou=people,o=OSG,o=CO,dc=cilogon,dc=org",
47-
"(isMemberOf=CO:members:active)", "voPersonApplicationUID",
46+
"{filter}", "voPersonApplicationUID",
4847
"|", "grep", "voPersonApplicationUID",
4948
"|", "sort",
5049
]
@@ -242,13 +241,13 @@ def get_ldap_group_members_data():
242241
).stdout.decode('utf-8').strip()
243242

244243
ldap_group_members_command = LDAP_GROUP_MEMBERS_COMMAND
245-
ldap_group_members_command[LDAP_GROUP_MEMBERS_COMMAND.index("{}")] = auth_str
244+
ldap_group_members_command[LDAP_GROUP_MEMBERS_COMMAND.index("{auth}")] = auth_str
246245

247246
data_file = subprocess.run(
248247
ldap_group_members_command, stdout=subprocess.PIPE).stdout.decode('utf-8').split('\n')
249248

250249
search_results = list(filter(
251-
lambda x: not re.compile("#|dn|cn|objectClass").match(x),
250+
lambda x: not re.compile("#|dn:|cn:|objectClass:").match(x),
252251
(line for line in data_file)))
253252

254253
search_results.reverse()
@@ -270,14 +269,17 @@ def get_ldap_group_members_data():
270269
return group_data_dict
271270

272271

273-
def get_ldap_active_users():
272+
def get_ldap_active_users(filter_group_name):
274273
auth_str = subprocess.run(
275274
LDAP_AUTH_COMMAND,
276275
stdout=subprocess.PIPE
277276
).stdout.decode('utf-8').strip()
277+
278+
filter_str = ("(isMemberOf=CO:members:active)" if filter_group_name is None else f"(&(isMemberOf={filter_group_name})(isMemberOf=CO:members:active))")
278279

279280
ldap_active_users_command = LDAP_ACTIVE_USERS_COMMAND
280-
ldap_active_users_command[LDAP_ACTIVE_USERS_COMMAND.index("{}")] = auth_str
281+
ldap_active_users_command[LDAP_ACTIVE_USERS_COMMAND.index("{auth}")] = auth_str
282+
ldap_active_users_command[LDAP_ACTIVE_USERS_COMMAND.index("{filter}")] = filter_str
281283

282284
active_users = subprocess.run(ldap_active_users_command, stdout=subprocess.PIPE).stdout.decode('utf-8').split('\n')
283285
users = set(line.replace("voPersonApplicationUID: ", "") if re.compile("dn: voPerson*") else "" for line in active_users)
@@ -308,28 +310,10 @@ def get_co_api_data():
308310
return project_osggids_to_name
309311

310312

311-
def gid_pids_to_osguser_pid_gids(gid_pids, pid_osguser):
312-
pid_gids = collections.defaultdict(set)
313-
314-
for gid in gid_pids:
315-
for pid in gid_pids[gid]:
316-
if pid_osguser[pid] is not None:
317-
pid_gids[pid].add(gid)
318-
319-
return pid_gids
320-
321-
322-
def filter_by_group(pid_gids, groups, filter_group_name):
323-
groups_idx = { v: k for k,v in groups.items() }
324-
filter_gid = groups_idx[filter_group_name] # raises KeyError if missing
325-
filter_group_pids = set(get_co_group_members__pids(filter_gid))
326-
return { p: g for p,g in pid_gids.items() if p in filter_group_pids }
327-
328-
329313
def get_osguser_groups(filter_group_name=None):
330314
project_osggids_to_name = get_co_api_data()
331315
ldap_groups_members = get_ldap_group_members_data()
332-
ldap_users = get_ldap_active_users()
316+
ldap_users = get_ldap_active_users(filter_group_name)
333317

334318
active_project_osggids = set(ldap_groups_members.keys()).intersection(set(project_osggids_to_name.keys()))
335319
project_to_user_map = {
@@ -345,9 +329,6 @@ def get_osguser_groups(filter_group_name=None):
345329
all_active_project_users,
346330
project_osggids_to_name,
347331
)
348-
349-
#if filter_group_name is not None:
350-
#pid_gids = filter_by_group(pid_gids, groups, filter_group_name)
351332

352333
return usernames_to_project_map
353334

0 commit comments

Comments
 (0)