Clawith/backend/app/schemas/agent_credential.py

61 lines
2.1 KiB
Python

"""Pydantic schemas for AgentCredential CRUD operations.
These schemas ensure that sensitive fields (cookies_json, password)
are never returned to the frontend in API responses.
"""
import uuid
from datetime import datetime
from pydantic import BaseModel, Field
class AgentCredentialCreate(BaseModel):
"""Schema for creating a new credential."""
credential_type: str = Field(default="website", description="Type: website|email|social|api_key")
platform: str = Field(..., description="Domain name e.g. 'baidu.com'")
display_name: str = Field(default="", description="Human-readable label")
username: str | None = Field(default=None, description="Login username (will be encrypted)")
password: str | None = Field(default=None, description="Login password (will be encrypted)")
login_url: str | None = Field(default=None, description="Login page URL")
cookies_json: str | None = Field(default=None, description="JSON array of cookies")
class AgentCredentialUpdate(BaseModel):
"""Schema for updating an existing credential."""
credential_type: str | None = None
platform: str | None = None
display_name: str | None = None
username: str | None = None
password: str | None = None
login_url: str | None = None
cookies_json: str | None = None
status: str | None = None
class AgentCredentialResponse(BaseModel):
"""Schema for credential API responses.
Note: cookies_json and password are NEVER included in responses.
"""
id: uuid.UUID
agent_id: uuid.UUID
credential_type: str
platform: str
display_name: str
username: str | None = None # decrypted username (safe to show)
login_url: str | None = None
status: str
cookies_updated_at: datetime | None = None
last_login_at: datetime | None = None
last_injected_at: datetime | None = None
has_cookies: bool = False # indicates whether cookies_json is stored
has_password: bool = False # indicates whether password is stored
created_at: datetime
updated_at: datetime
model_config = {"from_attributes": True}