77import urllib .error
88import urllib .request
99from ldap3 import Server , Connection , ALL , SAFE_SYNC , Tls
10+ from dataclasses import dataclass
1011
1112#PRODUCTION VALUES
1213
@@ -173,11 +174,23 @@ def get_datalist(data, listname):
173174 return data [listname ] if data else []
174175
175176
177+ class LDAPSearch :
178+ """ Wrapper class for LDAP searches. """
179+ server : Server = None
180+ connection : Connection = None
181+
182+ def __init__ (self , ldap_server , ldap_user , ldap_authtok ):
183+ self .server = Server (ldap_server , get_info = ALL )
184+ self .connection = Connection (self .server , ldap_user , ldap_authtok , client_strategy = SAFE_SYNC , auto_bind = True )
185+
186+ def search (self , ou , filter_str , attrs ):
187+ _ , _ , response , _ = self .connection .search (f"ou={ ou } ,o=OSG,o=CO,dc=cilogon,dc=org" , filter_str , attributes = attrs )
188+ return response
189+
176190def get_ldap_groups (ldap_server , ldap_user , ldap_authtok ):
177191 ldap_group_osggids = set ()
178- server = Server (ldap_server , get_info = ALL )
179- connection = Connection (server , ldap_user , ldap_authtok , client_strategy = SAFE_SYNC , auto_bind = True )
180- _ , _ , response , _ = connection .search ("ou=groups,o=OSG,o=CO,dc=cilogon,dc=org" , "(cn=*)" , attributes = ["gidNumber" ])
192+ searcher = LDAPSearch (ldap_server , ldap_user , ldap_authtok )
193+ response = searcher .search ("groups" , "(cn=*)" , ["gidNumber" ])
181194 for group in response :
182195 ldap_group_osggids .add (group ["attributes" ]["gidNumber" ])
183196 return ldap_group_osggids
@@ -188,9 +201,10 @@ def get_ldap_active_users_and_groups(ldap_server, ldap_user, ldap_authtok, filte
188201 ldap_active_users = dict ()
189202 filter_str = ("(isMemberOf=CO:members:active)" if filter_group_name is None
190203 else f"(&(isMemberOf={ filter_group_name } )(isMemberOf=CO:members:active))" )
191- server = Server (ldap_server , get_info = ALL )
192- connection = Connection (server , ldap_user , ldap_authtok , client_strategy = SAFE_SYNC , auto_bind = True )
193- _ , _ , response , _ = connection .search ("ou=people,o=OSG,o=CO,dc=cilogon,dc=org" , filter_str , attributes = ["employeeNumber" , "isMemberOf" ])
204+
205+ searcher = LDAPSearch (ldap_server , ldap_user , ldap_authtok )
206+ response = searcher .search ("people" , filter_str , ["employeeNumber" , "isMemberOf" ])
207+
194208 for person in response :
195209 ldap_active_users [person ["attributes" ]["employeeNumber" ]] = person ["attributes" ].get ("isMemberOf" , [])
196210
0 commit comments