mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-02 20:32:39 +02:00
feat(obsidian_plugin): validate binary attachments and enforce MIME type checks
This commit is contained in:
parent
3b9be79d65
commit
e84dc87c5b
9 changed files with 275 additions and 40 deletions
|
|
@ -10,11 +10,26 @@ from __future__ import annotations
|
|||
from datetime import datetime
|
||||
from typing import Any, Literal
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
||||
|
||||
_PLUGIN_MODEL_CONFIG = ConfigDict(extra="ignore")
|
||||
|
||||
|
||||
# Source of truth for the attachment whitelist. Mirrors MIME_BY_EXTENSION in
|
||||
# surfsense_obsidian/src/sync-engine.ts — keep in sync.
|
||||
ATTACHMENT_MIME_TYPES: dict[str, str] = {
|
||||
"pdf": "application/pdf",
|
||||
"png": "image/png",
|
||||
"jpg": "image/jpeg",
|
||||
"jpeg": "image/jpeg",
|
||||
"gif": "image/gif",
|
||||
"webp": "image/webp",
|
||||
"svg": "image/svg+xml",
|
||||
"txt": "text/plain",
|
||||
}
|
||||
ALLOWED_ATTACHMENT_EXTENSIONS: frozenset[str] = frozenset(ATTACHMENT_MIME_TYPES)
|
||||
|
||||
|
||||
class _PluginBase(BaseModel):
|
||||
"""Base schema carrying the shared forward-compatibility config."""
|
||||
|
||||
|
|
@ -78,6 +93,19 @@ class NotePayload(_PluginBase):
|
|||
mtime: datetime
|
||||
ctime: datetime
|
||||
|
||||
@model_validator(mode="after")
|
||||
def _enforce_binary_invariants(self) -> NotePayload:
|
||||
if self.is_binary:
|
||||
if not self.binary_base64:
|
||||
raise ValueError("binary_base64 is required when is_binary is True")
|
||||
if not self.mime_type:
|
||||
raise ValueError("mime_type is required when is_binary is True")
|
||||
elif self.binary_base64 is not None or self.mime_type is not None:
|
||||
raise ValueError(
|
||||
"binary_base64 and mime_type must be omitted when is_binary is False",
|
||||
)
|
||||
return self
|
||||
|
||||
|
||||
class SyncBatchRequest(_PluginBase):
|
||||
"""Batch upsert; plugin sends 10-20 notes per request."""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue