KamoCRM

MediaService checks attachments with Antivirus and refuses locked files on every read

FeatureMediaService
Shipped
November 8, 2026 at 12:50 AM UTC
Author
Kamo
Commit
2d9e689

- Chat attachments (member CHAT, web-chat visitor PUBLIC), system-bug files, Growth Hub images are checked inside storeContentAddressed with their context (member, conversation); Canva output through uploadDocument. A refusal reaches the client as the platform shape (422 ANTIVIRUS_BLOCKED {family} / 503 ANTIVIRUS_UNAVAILABLE) instead of being wrapped into a 500. - Meeting backgrounds (raw MinIO, public bucket) go through AntivirusUploadGuard first. - /attachments/link (dedup by hash) refuses content Antivirus locked (422); a held file may be linked and stays unreadable until checked. - Attachments carry scan {status, family, outcome} on the upload answer, the live message frame and history; PENDING while held. - ImagingProxyController (original and preview), the visitor download, system-bug files, Growth Hub images, materials and Canva material reads call the read gate: 423 ANTIVIRUS_BLOCKED / ANTIVIRUS_CHECKING, checked before the missing-content 410 so a held file says 'still being checked'. The proxy now checks membership before content state. - ConfigMap kamo.antivirus.* (enabled: false until KamoAntivirus is Ready); ANTIVIRUS_INTERNAL_AUTH_SECRET from mlos-internal-auth.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing