ad-user-creator/ad_user_creator/interactive.py

59 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from __future__ import annotations
from typing import List
from ad_user_creator.models import UserInputRecord
from ad_user_creator.user_service import UserService
def _split_optional_groups(text: str) -> List[str]:
if not text.strip():
return []
items = [item.strip() for item in text.replace("", ",").split(",")]
return [item for item in items if item]
def run_interactive_create(user_service: UserService, default_base_group: str, dry_run: bool = False) -> None:
print("请输入 AD 用户信息:")
display_name = input("显示名称(姓名): ").strip()
sam_account_name = input("用户名(sAMAccountName): ").strip()
email = input("邮箱(mail): ").strip()
dept_ou = input("部门 OU (例如 CEO 或 RnD/tm_hardware): ").strip()
base_group_input = input(f"基础组(默认 {default_base_group}): ").strip()
base_group = base_group_input or default_base_group
project_groups = _split_optional_groups(input("项目组(逗号分隔,可空): "))
resource_groups = _split_optional_groups(input("资源组(逗号分隔,可空): "))
record = UserInputRecord(
display_name=display_name,
sam_account_name=sam_account_name,
email=email,
dept_ou=dept_ou,
base_group=base_group,
project_groups=project_groups,
resource_groups=resource_groups,
)
plan = user_service.preview_plan(record)
print("\n预览:")
print(f"- 显示名称: {plan.display_name}")
print(f"- 用户名: {plan.sam_account_name}")
print(f"- 邮箱: {plan.email}")
print(f"- 部门 OU: {record.dept_ou}")
print(f"- 用户 DN: {plan.user_dn}")
print(f"- 基础组: {plan.base_group}")
print(f"- 项目组: {', '.join(plan.project_groups) if plan.project_groups else '(空)'}")
print(f"- 资源组: {', '.join(plan.resource_groups) if plan.resource_groups else '(空)'}")
print(f"- uid: {plan.uid}")
print(f"- uidNumber: {plan.uid_number}")
print(f"- gidNumber: {plan.gid_number}")
print(f"- unixHomeDirectory: {plan.unix_home_directory}")
confirm = input("\n确认创建? [y/N]: ").strip().lower()
if confirm not in {"y", "yes"}:
print("已取消。")
return
result = user_service.process_user(record, dry_run=dry_run)
print(f"执行结果: {result.status} {result.reason}")