Skip to content

Commit 0befc74

Browse files
committed
Refactor shared ldap connection construction logic out of get_ldap_groups/get_ldap_active_users_and_groups
1 parent 784c1ab commit 0befc74

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

comanage_utils.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import urllib.error
88
import urllib.request
99
from 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+
176190
def 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

Comments
 (0)