Skip to content

Commit da9f34f

Browse files
Reimplement filtering by members of a group
And clean up of no-longer-used methods remove collections import
1 parent da46112 commit da9f34f

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
@@ -5,7 +5,6 @@
55
import sys
66
import getopt
77
import subprocess
8-
import collections
98
import urllib.error
109
import urllib.request
1110
import comanage_scripts_utils as utils
@@ -25,7 +24,7 @@
2524
"ldaps://ldap.cilogon.org",
2625
"-D",
2726
"uid=readonly_user,ou=system,o=OSG,o=CO,dc=cilogon,dc=org",
28-
"-w", "{}",
27+
"-w", "{auth}",
2928
"-b",
3029
"ou=groups,o=OSG,o=CO,dc=cilogon,dc=org",
3130
"-s",
@@ -39,9 +38,9 @@
3938
"-H", "ldaps://ldap.cilogon.org",
4039
"-D", "uid=readonly_user,ou=system,o=OSG,o=CO,dc=cilogon,dc=org",
4140
"-x",
42-
"-w", "{}",
41+
"-w", "{auth}",
4342
"-b", "ou=people,o=OSG,o=CO,dc=cilogon,dc=org",
44-
"(isMemberOf=CO:members:active)", "voPersonApplicationUID",
43+
"{filter}", "voPersonApplicationUID",
4544
"|", "grep", "voPersonApplicationUID",
4645
"|", "sort",
4746
]
@@ -165,13 +164,13 @@ def get_ldap_group_members_data():
165164
).stdout.decode('utf-8').strip()
166165

167166
ldap_group_members_command = LDAP_GROUP_MEMBERS_COMMAND
168-
ldap_group_members_command[LDAP_GROUP_MEMBERS_COMMAND.index("{}")] = auth_str
167+
ldap_group_members_command[LDAP_GROUP_MEMBERS_COMMAND.index("{auth}")] = auth_str
169168

170169
data_file = subprocess.run(
171170
ldap_group_members_command, stdout=subprocess.PIPE).stdout.decode('utf-8').split('\n')
172171

173172
search_results = list(filter(
174-
lambda x: not re.compile("#|dn|cn|objectClass").match(x),
173+
lambda x: not re.compile("#|dn:|cn:|objectClass:").match(x),
175174
(line for line in data_file)))
176175

177176
search_results.reverse()
@@ -193,14 +192,17 @@ def get_ldap_group_members_data():
193192
return group_data_dict
194193

195194

196-
def get_ldap_active_users():
195+
def get_ldap_active_users(filter_group_name):
197196
auth_str = subprocess.run(
198197
LDAP_AUTH_COMMAND,
199198
stdout=subprocess.PIPE
200199
).stdout.decode('utf-8').strip()
200+
201+
filter_str = ("(isMemberOf=CO:members:active)" if filter_group_name is None else f"(&(isMemberOf={filter_group_name})(isMemberOf=CO:members:active))")
201202

202203
ldap_active_users_command = LDAP_ACTIVE_USERS_COMMAND
203-
ldap_active_users_command[LDAP_ACTIVE_USERS_COMMAND.index("{}")] = auth_str
204+
ldap_active_users_command[LDAP_ACTIVE_USERS_COMMAND.index("{auth}")] = auth_str
205+
ldap_active_users_command[LDAP_ACTIVE_USERS_COMMAND.index("{filter}")] = filter_str
204206

205207
active_users = subprocess.run(ldap_active_users_command, stdout=subprocess.PIPE).stdout.decode('utf-8').split('\n')
206208
users = set(line.replace("voPersonApplicationUID: ", "") if re.compile("dn: voPerson*") else "" for line in active_users)
@@ -231,28 +233,10 @@ def get_co_api_data():
231233
return project_osggids_to_name
232234

233235

234-
def gid_pids_to_osguser_pid_gids(gid_pids, pid_osguser):
235-
pid_gids = collections.defaultdict(set)
236-
237-
for gid in gid_pids:
238-
for pid in gid_pids[gid]:
239-
if pid_osguser[pid] is not None:
240-
pid_gids[pid].add(gid)
241-
242-
return pid_gids
243-
244-
245-
def filter_by_group(pid_gids, groups, filter_group_name):
246-
groups_idx = { v: k for k,v in groups.items() }
247-
filter_gid = groups_idx[filter_group_name] # raises KeyError if missing
248-
filter_group_pids = set(get_co_group_members__pids(filter_gid))
249-
return { p: g for p,g in pid_gids.items() if p in filter_group_pids }
250-
251-
252236
def get_osguser_groups(filter_group_name=None):
253237
project_osggids_to_name = get_co_api_data()
254238
ldap_groups_members = get_ldap_group_members_data()
255-
ldap_users = get_ldap_active_users()
239+
ldap_users = get_ldap_active_users(filter_group_name)
256240

257241
active_project_osggids = set(ldap_groups_members.keys()).intersection(set(project_osggids_to_name.keys()))
258242
project_to_user_map = {
@@ -268,9 +252,6 @@ def get_osguser_groups(filter_group_name=None):
268252
all_active_project_users,
269253
project_osggids_to_name,
270254
)
271-
272-
#if filter_group_name is not None:
273-
#pid_gids = filter_by_group(pid_gids, groups, filter_group_name)
274255

275256
return usernames_to_project_map
276257

0 commit comments

Comments
 (0)