from datetime import datetime from typing import Optional, Dict, Any from pydantic import BaseModel, ConfigDict, Field class LdapConfigCreate(BaseModel): ldap_host: str = Field(..., min_length=1, max_length=200) ldap_port: int = Field(default=389, ge=1, le=65535) use_ldaps: bool = False admin_dn: str = Field(..., min_length=1, max_length=500) admin_password: Optional[str] = Field(default=None, max_length=500) search_filter: Optional[str] = Field(default=None, max_length=500) base_dn: str = Field(..., min_length=1, max_length=500) user_mapping: Optional[Dict[str, Any]] = None class LdapConfigUpdate(BaseModel): ldap_host: Optional[str] = Field(default=None, min_length=1, max_length=200) ldap_port: Optional[int] = Field(default=None, ge=1, le=65535) use_ldaps: Optional[bool] = None admin_dn: Optional[str] = Field(default=None, min_length=1, max_length=500) admin_password: Optional[str] = Field(default=None, min_length=1, max_length=500) search_filter: Optional[str] = Field(default=None, max_length=500) base_dn: Optional[str] = Field(default=None, min_length=1, max_length=500) user_mapping: Optional[Dict[str, Any]] = None class LdapConfigResponse(BaseModel): id: int ldap_host: str ldap_port: int use_ldaps: bool admin_dn: str admin_password: str # masked in endpoint search_filter: Optional[str] = None base_dn: str user_mapping: Optional[Dict[str, Any]] = None created_at: datetime updated_at: datetime model_config = ConfigDict(from_attributes=True) class LdapTestRequest(BaseModel): test_user: str = Field(..., min_length=1) test_password: str = Field(..., min_length=1)