fix: use ai@sibcem.ru when user has no mail in AD

This commit is contained in:
Денис Кривоченко
2026-07-23 10:41:17 +07:00
parent 23a7d20722
commit 977e7369e3
+12 -7
View File
@@ -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)