KamoCRM

ConversionService checks uploads with Antivirus, completes held files, re-checks on new signatures

FeatureConversionService
Shipped
November 8, 2026 at 12:41 AM UTC
Author
Kamo
Commit
0775720

Replaces the in-service clamd client (malware/ package, UploadScanGuard, QuarantineStore, retro-scan) with the shared-library Antivirus: - /upload, /replace, /templates/upload are checked inside ImageService before any row or object is written (HOLD allowed); refusals use the platform shapes: 422 ANTIVIRUS_BLOCKED {family}, 503 ANTIVIRUS_UNAVAILABLE, 503 HASH_MISMATCH. MALWARE_DETECTED is gone and no signature name is ever returned. Responses carry scan {status, family, outcome}; a held file is PENDING and converts once stored. The pipeline emits a 'scanning' stage. - /register-existing (dedup by reference) refuses content Antivirus locked (422). - Sound effects (raw MinIO) go through AntivirusUploadGuard (no hold, 503 when down). - QuarantineStore no longer exists, so nothing is written to the quarantine bucket; nothing in it is touched. - antivirus.hold.verdict (queue antivirus-hold-completer) -> AntivirusHoldCompleter, then the ordinary conversion for the released documents; a storage failure naks for redelivery. - antivirus.signatures.promoted (queue antivirus-recheck) -> AntivirusRecheckService: every flagged hash whose bytes are stored (unlock + notify + AUTO_CLEARED reports) and CLEAN content first seen in the last 14 days (LOCKED_LATER + alerts), streamed from MinIO, one at a time, throttled. Subscribes retry until the ANTIVIRUS stream exists. - 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