Files
leocrm/app/plugins/builtins/dms/schemas.py
T
Agent Zero 727d86614e Security fixes: P0-P2 complete (22 fixes)
P0 (7): Auth-bypass removed, migrations fixed, plugin-upload disabled, RLS FORCE+WITH CHECK, plugin double-registration fixed, persistent volume, domain removed
P1 (11): User/tenant model, Redis centralized, worker separated, transactional outbox, XSS fixed, DMS chunked streaming, permissions unified, password reset, metrics secured, config/docs fixed, cross-tenant FK
P2 (4): Contact model normalized, cross-imports reduced 94%, commands+state machines for contacts/dms/mail/calendar, SPA path-traversal

8 new migrations, 99 unit tests, 13 commands, 8 contracts, 72 files changed
2026-07-25 21:03:46 +02:00

71 lines
1.6 KiB
Python

"""Pydantic schemas for the DMS plugin."""
from __future__ import annotations
from datetime import datetime
from pydantic import BaseModel, Field
class FolderCreate(BaseModel):
name: str = Field(..., min_length=1, max_length=255)
parent_id: str | None = None
class FolderUpdate(BaseModel):
name: str | None = Field(None, min_length=1, max_length=255)
parent_id: str | None = None
class FolderResponse(BaseModel):
id: str
name: str
parent_id: str | None = None
created_by: str
deleted_at: datetime | None = None
path: str = ""
children: list[dict] = []
class FileMetadataResponse(BaseModel):
id: str
name: str
folder_id: str | None = None
uploaded_by: str
mime_type: str
size_bytes: int
content_hash: str | None = None
deleted_at: datetime | None = None
created_at: datetime | None = None
updated_at: datetime | None = None
class FileUpdate(BaseModel):
name: str | None = Field(None, min_length=1, max_length=255)
folder_id: str | None = None
class ShareRequest(BaseModel):
user_ids: list[str] = Field(default_factory=list)
group_ids: list[str] = Field(default_factory=list)
access_level: str = Field("read", pattern="^(read|write)$")
class ShareRemoveRequest(BaseModel):
user_id: str | None = None
group_id: str | None = None
class BulkMoveRequest(BaseModel):
file_ids: list[str] = Field(..., min_length=1)
target_folder_id: str | None = None
class BulkDeleteRequest(BaseModel):
file_ids: list[str] = Field(..., min_length=1)
class CollaboraConfig(BaseModel):
document: dict
editorConfig: dict # noqa: N815