fix: use ai@sibcem.ru when user has no mail in AD
This commit is contained in:
+12
-7
@@ -60,7 +60,7 @@ def get_user_cn(user_id: str) -> str | None:
|
|||||||
if entries:
|
if entries:
|
||||||
entry = entries[0]
|
entry = entries[0]
|
||||||
cn = str(entry.cn)
|
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"
|
sam = str(entry.sAMAccountName) if 'sAMAccountName' in entry else "N/A"
|
||||||
upn = str(entry.userPrincipalName) if 'userPrincipalName' 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}")
|
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:
|
if entries:
|
||||||
entry = entries[0]
|
entry = entries[0]
|
||||||
cn = str(entry.cn)
|
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 "Кемерово"
|
city = str(entry.l) if 'l' in entry else "Кемерово"
|
||||||
return {"cn": cn, "mail": mail, "city": city}
|
return {"cn": cn, "mail": mail, "city": city}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -106,16 +108,19 @@ async def create_sd_ticket_for_trueconf(user_id: str, cn: str) -> str | None:
|
|||||||
# Пытаемся получить информацию из AD
|
# Пытаемся получить информацию из AD
|
||||||
ad_info = get_ad_user_info(user_id)
|
ad_info = get_ad_user_info(user_id)
|
||||||
|
|
||||||
if ad_info:
|
if ad_info and ad_info.get("mail"):
|
||||||
# Пользователь найден в AD
|
# Пользователь найден в AD и имеет email
|
||||||
requester_email = ad_info["mail"] or DEFAULT_REQUESTER
|
requester_email = ad_info["mail"]
|
||||||
city = ad_info["city"]
|
city = ad_info["city"]
|
||||||
description = f"Пользователь {cn} ({user_id}) запросил инструкцию по Trueconf, но не имеет группы 2FA. Требуется выдача доступа."
|
description = f"Пользователь {cn} ({user_id}) запросил инструкцию по Trueconf, но не имеет группы 2FA. Требуется выдача доступа."
|
||||||
else:
|
else:
|
||||||
# Пользователь не найден в AD — создаём от ai@sibcem.ru
|
# Пользователь не найден в AD ИЛИ не имеет email — создаём от ai@sibcem.ru
|
||||||
requester_email = DEFAULT_REQUESTER
|
requester_email = DEFAULT_REQUESTER
|
||||||
city = "Кемерово"
|
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:
|
try:
|
||||||
ticket_id = await create_ticket_in_sd(requester_email, subject, description, city)
|
ticket_id = await create_ticket_in_sd(requester_email, subject, description, city)
|
||||||
|
|||||||
Reference in New Issue
Block a user