Initial commit: TrueConf Chatbot КЛЕВЕР
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
from ldap3 import Server, Connection, ALL, MODIFY_REPLACE
|
||||
|
||||
# Подтягиваем конфиг
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
from config.config import AD_SERVER, AD_USER, AD_PASSWORD, AD_BASE
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def upload_photo_to_ad(target_user: str, photo_path: str) -> dict:
|
||||
"""
|
||||
Читает готовое фото с диска и записывает его в атрибут thumbnailPhoto в AD.
|
||||
"""
|
||||
try:
|
||||
# Читаем сырые байты картинки
|
||||
with open(photo_path, "rb") as f:
|
||||
photo_bytes = f.read()
|
||||
|
||||
# Формируем фильтр для поиска
|
||||
if '@' in target_user:
|
||||
ldap_filter = f"(mail={target_user})"
|
||||
else:
|
||||
ldap_filter = f"(sAMAccountName={target_user})"
|
||||
|
||||
# Подключаемся к AD
|
||||
server = Server(AD_SERVER, get_info=ALL)
|
||||
conn = Connection(server, user=AD_USER, password=AD_PASSWORD, auto_bind=True)
|
||||
|
||||
# Находим пользователя в дереве (нам нужен его точный путь - DN)
|
||||
conn.search(search_base=AD_BASE, search_filter=ldap_filter, attributes=["cn"])
|
||||
|
||||
if not conn.entries:
|
||||
return {"success": False, "error": f"Пользователь {target_user} не найден в AD."}
|
||||
|
||||
user_dn = conn.entries[0].entry_dn
|
||||
|
||||
# 🪄 МАГИЯ: Перезаписываем атрибут thumbnailPhoto нашими байтами
|
||||
conn.modify(user_dn, {'thumbnailPhoto': [(MODIFY_REPLACE, [photo_bytes])]})
|
||||
|
||||
if conn.result['result'] == 0:
|
||||
return {"success": True}
|
||||
else:
|
||||
return {"success": False, "error": str(conn.result['description'])}
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка загрузки в AD для {target_user}: {e}")
|
||||
return {"success": False, "error": "Сбой при связи с сервером Active Directory."}
|
||||
Reference in New Issue
Block a user