From 977e7369e365ed88b0cb2ac3f7b6de33143584b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B5=D0=BD=D0=B8=D1=81=20=D0=9A=D1=80=D0=B8=D0=B2?= =?UTF-8?q?=D0=BE=D1=87=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Thu, 23 Jul 2026 10:41:17 +0700 Subject: [PATCH] fix: use ai@sibcem.ru when user has no mail in AD --- instruct/handlers.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/instruct/handlers.py b/instruct/handlers.py index 4e41876..c5b090d 100644 --- a/instruct/handlers.py +++ b/instruct/handlers.py @@ -60,7 +60,7 @@ def get_user_cn(user_id: str) -> str | None: if entries: entry = entries[0] cn = str(entry.cn) - mail = str(entry.mail) if 'mail' in entry else "N/A" + mail = str(entry.mail) if 'mail' in entry else "" sam = str(entry.sAMAccountName) if 'sAMAccountName' in entry else "N/A" upn = str(entry.userPrincipalName) if 'userPrincipalName' in entry else "N/A" logger.info(f"AD found: cn={cn}, mail={mail}, sam={sam}, upn={upn}") @@ -86,7 +86,9 @@ def get_ad_user_info(user_id: str) -> dict | None: if entries: entry = entries[0] cn = str(entry.cn) - mail = str(entry.mail) if 'mail' in entry else None + raw_mail = str(entry.mail) if 'mail' in entry else "" + # mail может быть "[]" (пустой LDAP объект), "" или "N/A" — фильтруем + mail = raw_mail if raw_mail and raw_mail not in ("[]", "N/A", "") else None city = str(entry.l) if 'l' in entry else "Кемерово" return {"cn": cn, "mail": mail, "city": city} except Exception as e: @@ -106,16 +108,19 @@ async def create_sd_ticket_for_trueconf(user_id: str, cn: str) -> str | None: # Пытаемся получить информацию из AD ad_info = get_ad_user_info(user_id) - if ad_info: - # Пользователь найден в AD - requester_email = ad_info["mail"] or DEFAULT_REQUESTER + if ad_info and ad_info.get("mail"): + # Пользователь найден в AD и имеет email + requester_email = ad_info["mail"] city = ad_info["city"] description = f"Пользователь {cn} ({user_id}) запросил инструкцию по Trueconf, но не имеет группы 2FA. Требуется выдача доступа." else: - # Пользователь не найден в AD — создаём от ai@sibcem.ru + # Пользователь не найден в AD ИЛИ не имеет email — создаём от ai@sibcem.ru requester_email = DEFAULT_REQUESTER city = "Кемерово" - description = f"Пользователь {cn} ({user_id}) не найден в Active Directory. Требуется ручная проверка и выдача доступа к Trueconf." + if ad_info and not ad_info.get("mail"): + description = f"Пользователь {cn} ({user_id}) не найден в Active Directory (нет email). Требуется ручная проверка и выдача доступа к Trueconf." + else: + description = f"Пользователь {cn} ({user_id}) не найден в Active Directory. Требуется ручная проверка и выдача доступа к Trueconf." try: ticket_id = await create_ticket_in_sd(requester_email, subject, description, city)