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 from utils.ad_search import search_by_filter as ad_search_all_bases 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 и ищем по всем OU из AD_BASES entries = ad_search_all_bases(ldap_filter, ["cn", "thumbnailPhoto"]) if not entries: print("❌ Пользователь с такими данными не найден в AD.") return user = 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)