Commit fcbb1c1b authored by Joachim Kołodziejski's avatar Joachim Kołodziejski
Browse files

ldap: reuse connection for multiple groups

parent 52c8f140
Loading
Loading
Loading
Loading
+12 −12
Changes for tmp_ldap.py: 12 added lines, 12 removed lines.
Original line number Diff line number Diff line
@@ -27,13 +27,8 @@ def render_group_template(template: str, group: str) -> str:
    return template % {"group": ldap3.utils.conv.escape_filter_chars(group)}

def query(groups: list[str]) -> dict[str, list[dict[str, str]]]:
    return {
        group: [
            {
                "name": get_ldap_attr(obj, settings.LDAP_NAME_FIELD),
                "email": get_ldap_attr(obj, settings.LDAP_EMAIL_FIELD),
            }
            for obj in ldap3.Connection(
    result = {}
    with ldap3.Connection(
        server=ldap3.Server(
            host=settings.LDAP_HOST,
            port=settings.LDAP_PORT,
@@ -48,12 +43,17 @@ def query(groups: list[str]) -> dict[str, list[dict[str, str]]]:
        auto_bind=ldap3.AUTO_BIND_TLS_BEFORE_BIND if settings.LDAP_TLS else ldap3.AUTO_BIND_NO_TLS,
        client_strategy=ldap3.SAFE_SYNC,
        raise_exceptions=True,
            ).search(
    ) as conn:
        for group in set(groups):
            result[group] = []
            for obj in conn.search(
                search_base=render_group_template(settings.LDAP_GROUP_SEARCH_BASE_TEMPLATE, group),
                search_filter=render_group_template(settings.LDAP_GROUP_FILTER_TEMPLATE, group),
                attributes=ldap3.ALL_ATTRIBUTES,
                time_limit=settings.LDAP_TIMEOUT,
            )[2]
        ]
        for group in groups
    }
            )[2]:
                result[group].append({
                    "name": get_ldap_attr(obj, settings.LDAP_NAME_FIELD),
                    "email": get_ldap_attr(obj, settings.LDAP_EMAIL_FIELD),
                })
    return result