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)