AD: поиск по нескольким OU (AD_BASES)
- config.py: AD_BASE -> AD_BASES (кортеж OU) - utils/ad_search.py: новая утилита для поиска по всем OU - utils/ad_checker.py: использовать ad_search - utils/otp_service.py: использовать ad_search - lk/handlers.py: использовать ad_search - transcription_bot/handlers.py: использовать ad_search - service_desk/handlers.py: использовать ad_search - instruct/handlers.py: использовать ad_search - photo_bot/ad_helper.py: использовать ad_search - photo_bot/check_ad_photo.py: использовать ad_search - check_ad_2fa.py: использовать ad_search - debug_ad_filter.py: обновить для AD_BASES - lk/test_lk_payslip.py: обновить для AD_BASES
This commit is contained in:
+6
-20
@@ -3,34 +3,20 @@
|
||||
|
||||
|
||||
from ldap3 import Server, Connection, ALL
|
||||
|
||||
|
||||
def _get_ad_connection():
|
||||
"""Создать соединение с AD."""
|
||||
from config.config import AD_SERVER, AD_USER, AD_PASSWORD, AD_BASE # noqa: E501
|
||||
server = Server(AD_SERVER, get_info=ALL)
|
||||
return Connection(server, user=AD_USER, password=AD_PASSWORD, auto_bind=True), AD_BASE
|
||||
from utils.ad_search import search_by_filter as ad_search_all_bases
|
||||
|
||||
|
||||
def get_user_groups(cn: str) -> list[str] | None:
|
||||
"""
|
||||
Найти пользователя по CN и вернуть список групп.
|
||||
Ищет по всем OU из AD_BASES.
|
||||
Возвращает None если пользователь не найден.
|
||||
"""
|
||||
conn, ad_base = _get_ad_connection()
|
||||
try:
|
||||
conn.search(
|
||||
search_base=ad_base,
|
||||
search_filter=f"(cn={cn})",
|
||||
attributes=["cn", "sAMAccountName", "memberOf"],
|
||||
)
|
||||
if not conn.entries:
|
||||
return None
|
||||
entry = conn.entries[0]
|
||||
return [str(g) for g in entry.memberOf]
|
||||
except Exception as e:
|
||||
print(f"❌ Ошибка AD при поиске {cn}: {e}")
|
||||
entries = ad_search_all_bases("(cn={})".format(cn), ["cn", "sAMAccountName", "memberOf"])
|
||||
if not entries:
|
||||
return None
|
||||
entry = entries[0]
|
||||
return [str(g) for g in entry.memberOf]
|
||||
|
||||
|
||||
def check_group_membership(cn: str, group_pattern: str = "2FA") -> dict:
|
||||
|
||||
Reference in New Issue
Block a user