from typing import Union import ldap from zope import component from zope.interface import implementer from .UWLDAPRecord import UWLDAPRecord from ceo_common.interfaces import IUWLDAPService, IConfig @implementer(IUWLDAPService) class UWLDAPService: def __init__(self): cfg = component.getUtility(IConfig) self.uwldap_server_url = cfg.get('uwldap_server_url') self.uwldap_base = cfg.get('uwldap_base') def get(self, username: str) -> Union[UWLDAPRecord, None]: conn = ldap.initialize(self.uwldap_server_url) results = conn.search_s(self.uwldap_base, ldap.SCOPE_SUBTREE, f'uid={username}') if not results: return None return UWLDAPRecord.deserialize_from_dict(results[0])