Files
trueconf_bot/photo_bot/check_ad_photo.py
T

83 lines
3.8 KiB
Python

import sys
import os
import io
import logging
from ldap3 import Server, Connection, ALL
from PIL import Image
# Подтягиваем ваши настройки из конфига
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
logging.basicConfig(level=logging.INFO, format="%(message)s")
def check_user_photo(target_user: str):
print(f"🔍 Ищем пользователя: {target_user}...")
# Если передали email, ищем по почте. Если просто логин — по sAMAccountName
if '@' in target_user:
ldap_filter = f"(mail={target_user})"
else:
ldap_filter = f"(sAMAccountName={target_user})"
try:
# Подключаемся к AD
server = Server(AD_SERVER, get_info=ALL)
conn = Connection(server, user=AD_USER, password=AD_PASSWORD, auto_bind=True)
# Ищем пользователя и просим вернуть атрибуты: имя (cn) и фото (thumbnailPhoto)
conn.search(
search_base=AD_BASE,
search_filter=ldap_filter,
attributes=["cn", "thumbnailPhoto"]
)
if not conn.entries:
print("❌ Пользователь с такими данными не найден в AD.")
return
user = conn.entries[0]
user_name = user.cn.value if 'cn' in user else target_user
print(f"👤 Найден сотрудник: {user_name}")
# Проверяем, есть ли вообще фото
if 'thumbnailPhoto' not in user or not user.thumbnailPhoto.value:
print("⚠️ У этого пользователя НЕТ фотографии в Active Directory.")
return
# Достаем байты фотографии
photo_bytes = user.thumbnailPhoto.value
size_kb = len(photo_bytes) / 1024
# Читаем картинку прямо из памяти (без сохранения на диск) с помощью Pillow
image = Image.open(io.BytesIO(photo_bytes))
width, height = image.size
print("\n📊 --- ИНФОРМАЦИЯ О ФОТО В AD ---")
print(f"📐 Разрешение : {width}x{height} пикселей")
print(f"⚖️ Вес : {size_kb:.1f} KB")
print(f"🗂 Формат : {image.format}")
print("----------------------------------\n")
# Бонус: сохраняем фото во временную папку, чтобы вы могли на него взглянуть
safe_name = target_user.replace('@', '_').replace('.', '_')
save_path = f"/tmp/{safe_name}_ad.jpg"
with open(save_path, "wb") as f:
f.write(photo_bytes)
print(f"💾 Оригинал из AD сохранен сюда: {save_path}")
print("Вы можете скачать его через WinSCP или открыть в TrueConf, чтобы оценить качество глазами.")
except Exception as e:
print(f"❌ Ошибка при подключении к AD: {e}")
if __name__ == "__main__":
# Замените на нужный email или логин (например, 'n.shmargalova' или 'n.shmargalova@sibcem.ru')
target = "n.shmargalova@sibcem.ru"
# Если скрипт запущен с аргументом (python check_ad_photo.py логин), берем аргумент
if len(sys.argv) > 1:
target = sys.argv[1]
check_user_photo(target)