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:
+10
-11
@@ -13,27 +13,26 @@ from ldap3 import Server, Connection, ALL, SUBTREE
|
||||
|
||||
# Подтягиваем конфиг
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
from config.config import AD_SERVER, AD_USER, AD_PASSWORD, AD_BASE
|
||||
from config.config import AD_SERVER, AD_USER, AD_PASSWORD, AD_BASES
|
||||
from utils.ad_search import search_by_filter as ad_search_all_bases
|
||||
|
||||
|
||||
def find_user(login: str) -> dict | None:
|
||||
"""Найти пользователя в AD по логину (sAMAccountName или mail)."""
|
||||
server = Server(AD_SERVER, get_info=ALL)
|
||||
conn = Connection(server, user=AD_USER, password=AD_PASSWORD, auto_bind=True)
|
||||
|
||||
"""Найти пользователя в AD по логину (sAMAccountName или mail).
|
||||
Ищет по всем OU из AD_BASES."""
|
||||
filter_login = login.lower().replace("\\", "\\5c").replace("*", "\\2a").replace("(", "\\28").replace(")", "\\29")
|
||||
|
||||
if "@" in filter_login:
|
||||
ldap_filter = f"(|(mail={filter_login})(sAMAccountName={filter_login}))"
|
||||
ldap_filter = "(|{}{})".format("(mail={})".format(filter_login), "(sAMAccountName={})".format(filter_login))
|
||||
else:
|
||||
ldap_filter = f"(|(sAMAccountName={filter_login})(mail={filter_login}))"
|
||||
ldap_filter = "(|{}{})".format("(sAMAccountName={})".format(filter_login), "(mail={})".format(filter_login))
|
||||
|
||||
conn.search(search_base=AD_BASE, search_filter=ldap_filter, attributes=["cn", "sAMAccountName", "memberOf"])
|
||||
entries = ad_search_all_bases(ldap_filter, ["cn", "sAMAccountName", "memberOf"])
|
||||
|
||||
if not conn.entries:
|
||||
if not entries:
|
||||
return None
|
||||
|
||||
entry = conn.entries[0]
|
||||
entry = entries[0]
|
||||
return {
|
||||
"dn": entry.entry_dn,
|
||||
"cn": str(entry.cn),
|
||||
@@ -64,7 +63,7 @@ def main():
|
||||
print(" Проверка пользователя в группе 2FA (Active Directory)")
|
||||
print("=" * 60)
|
||||
print(f"\n Сервер AD: {AD_SERVER}")
|
||||
print(f" База поиска: {AD_BASE}")
|
||||
print(f" Базы поиска: {config.AD_BASES}")
|
||||
print(f" Подключено как: {AD_USER}")
|
||||
print()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user