6
6
import json
7
7
import getopt
8
8
import subprocess
9
- import collections
10
9
import urllib .error
11
10
import urllib .request
12
11
28
27
"ldaps://ldap.cilogon.org" ,
29
28
"-D" ,
30
29
"uid=readonly_user,ou=system,o=OSG,o=CO,dc=cilogon,dc=org" ,
31
- "-w" , "{}" ,
30
+ "-w" , "{auth }" ,
32
31
"-b" ,
33
32
"ou=groups,o=OSG,o=CO,dc=cilogon,dc=org" ,
34
33
"-s" ,
42
41
"-H" , "ldaps://ldap.cilogon.org" ,
43
42
"-D" , "uid=readonly_user,ou=system,o=OSG,o=CO,dc=cilogon,dc=org" ,
44
43
"-x" ,
45
- "-w" , "{}" ,
44
+ "-w" , "{auth }" ,
46
45
"-b" , "ou=people,o=OSG,o=CO,dc=cilogon,dc=org" ,
47
- "(isMemberOf=CO:members:active) " , "voPersonApplicationUID" ,
46
+ "{filter} " , "voPersonApplicationUID" ,
48
47
"|" , "grep" , "voPersonApplicationUID" ,
49
48
"|" , "sort" ,
50
49
]
@@ -242,13 +241,13 @@ def get_ldap_group_members_data():
242
241
).stdout .decode ('utf-8' ).strip ()
243
242
244
243
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
246
245
247
246
data_file = subprocess .run (
248
247
ldap_group_members_command , stdout = subprocess .PIPE ).stdout .decode ('utf-8' ).split ('\n ' )
249
248
250
249
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 ),
252
251
(line for line in data_file )))
253
252
254
253
search_results .reverse ()
@@ -270,14 +269,17 @@ def get_ldap_group_members_data():
270
269
return group_data_dict
271
270
272
271
273
- def get_ldap_active_users ():
272
+ def get_ldap_active_users (filter_group_name ):
274
273
auth_str = subprocess .run (
275
274
LDAP_AUTH_COMMAND ,
276
275
stdout = subprocess .PIPE
277
276
).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))" )
278
279
279
280
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
281
283
282
284
active_users = subprocess .run (ldap_active_users_command , stdout = subprocess .PIPE ).stdout .decode ('utf-8' ).split ('\n ' )
283
285
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():
308
310
return project_osggids_to_name
309
311
310
312
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
-
329
313
def get_osguser_groups (filter_group_name = None ):
330
314
project_osggids_to_name = get_co_api_data ()
331
315
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 )
333
317
334
318
active_project_osggids = set (ldap_groups_members .keys ()).intersection (set (project_osggids_to_name .keys ()))
335
319
project_to_user_map = {
@@ -345,9 +329,6 @@ def get_osguser_groups(filter_group_name=None):
345
329
all_active_project_users ,
346
330
project_osggids_to_name ,
347
331
)
348
-
349
- #if filter_group_name is not None:
350
- #pid_gids = filter_by_group(pid_gids, groups, filter_group_name)
351
332
352
333
return usernames_to_project_map
353
334
0 commit comments