5
5
import sys
6
6
import getopt
7
7
import subprocess
8
- import collections
9
8
import urllib .error
10
9
import urllib .request
11
10
import comanage_scripts_utils as utils
25
24
"ldaps://ldap.cilogon.org" ,
26
25
"-D" ,
27
26
"uid=readonly_user,ou=system,o=OSG,o=CO,dc=cilogon,dc=org" ,
28
- "-w" , "{}" ,
27
+ "-w" , "{auth }" ,
29
28
"-b" ,
30
29
"ou=groups,o=OSG,o=CO,dc=cilogon,dc=org" ,
31
30
"-s" ,
39
38
"-H" , "ldaps://ldap.cilogon.org" ,
40
39
"-D" , "uid=readonly_user,ou=system,o=OSG,o=CO,dc=cilogon,dc=org" ,
41
40
"-x" ,
42
- "-w" , "{}" ,
41
+ "-w" , "{auth }" ,
43
42
"-b" , "ou=people,o=OSG,o=CO,dc=cilogon,dc=org" ,
44
- "(isMemberOf=CO:members:active) " , "voPersonApplicationUID" ,
43
+ "{filter} " , "voPersonApplicationUID" ,
45
44
"|" , "grep" , "voPersonApplicationUID" ,
46
45
"|" , "sort" ,
47
46
]
@@ -165,13 +164,13 @@ def get_ldap_group_members_data():
165
164
).stdout .decode ('utf-8' ).strip ()
166
165
167
166
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
169
168
170
169
data_file = subprocess .run (
171
170
ldap_group_members_command , stdout = subprocess .PIPE ).stdout .decode ('utf-8' ).split ('\n ' )
172
171
173
172
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 ),
175
174
(line for line in data_file )))
176
175
177
176
search_results .reverse ()
@@ -193,14 +192,17 @@ def get_ldap_group_members_data():
193
192
return group_data_dict
194
193
195
194
196
- def get_ldap_active_users ():
195
+ def get_ldap_active_users (filter_group_name ):
197
196
auth_str = subprocess .run (
198
197
LDAP_AUTH_COMMAND ,
199
198
stdout = subprocess .PIPE
200
199
).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))" )
201
202
202
203
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
204
206
205
207
active_users = subprocess .run (ldap_active_users_command , stdout = subprocess .PIPE ).stdout .decode ('utf-8' ).split ('\n ' )
206
208
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():
231
233
return project_osggids_to_name
232
234
233
235
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
-
252
236
def get_osguser_groups (filter_group_name = None ):
253
237
project_osggids_to_name = get_co_api_data ()
254
238
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 )
256
240
257
241
active_project_osggids = set (ldap_groups_members .keys ()).intersection (set (project_osggids_to_name .keys ()))
258
242
project_to_user_map = {
@@ -268,9 +252,6 @@ def get_osguser_groups(filter_group_name=None):
268
252
all_active_project_users ,
269
253
project_osggids_to_name ,
270
254
)
271
-
272
- #if filter_group_name is not None:
273
- #pid_gids = filter_by_group(pid_gids, groups, filter_group_name)
274
255
275
256
return usernames_to_project_map
276
257
0 commit comments