mirror of
https://github.com/langgenius/dify.git
synced 2026-11-13 14:51:39 +08:00
Add a shared file malware-scanning module and use it in the Classic Knowledge Base, RAG Pipeline local files and the Agent Knowledge Base. - core/file_scan: scanner adapters for ClamAV (deployment-configured), Cloudmersive, Scanii, OPSWAT MetaDefender Cloud and API-based extensions (new `file.malware_scan` extension point). - services/file_scan: FileScanService is the single entry point other modules call. Providers are workspace-wide; a policy belongs to a scope (dataset, knowledge_fs_space), so further modules can adopt scanning without schema changes. - Each file is scanned on its own: a rejected file fails only its own document. Malware always blocks and deletes the stored original; invalid credentials and exhausted quota stop processing regardless of the "allow" fallback. - Console: workspace scanner management and a per-knowledge-base policy section in both settings forms; the Agent Knowledge Base upload keeps going after a rejected file and explains each failure. - Off by default behind FILE_SCAN_ENABLED. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
"""Malware scanning of stored files, shared by every product module.
|
|
|
|
A module adopts scanning in three steps:
|
|
|
|
1. Pick a scope type (``ScanScope("dataset", dataset_id)``) and expose
|
|
``FileScanPolicyService`` behind its own settings route, guarded by its own permissions.
|
|
2. Call ``FileScanService().scan_upload_file(...)`` before it first reads an uploaded file, and
|
|
stop when ``outcome.allowed`` is false.
|
|
3. Call ``FileScanPolicyService().delete_scope(...)`` when the resource is deleted.
|
|
"""
|
|
|
|
from services.file_scan.entities import ScanErrorCode, ScanOutcome, ScanPolicy, ScanScope
|
|
from services.file_scan.errors import (
|
|
FileScanBlockedError,
|
|
FileScanError,
|
|
FileScanProviderInUseError,
|
|
FileScanProviderNotFoundError,
|
|
FileScanValidationError,
|
|
)
|
|
from services.file_scan.file_scan_service import FileScanService
|
|
from services.file_scan.policy_service import FileScanPolicyService
|
|
from services.file_scan.provider_service import FileScanProviderService
|
|
|
|
__all__ = [
|
|
"FileScanBlockedError",
|
|
"FileScanError",
|
|
"FileScanPolicyService",
|
|
"FileScanProviderInUseError",
|
|
"FileScanProviderNotFoundError",
|
|
"FileScanProviderService",
|
|
"FileScanService",
|
|
"FileScanValidationError",
|
|
"ScanErrorCode",
|
|
"ScanOutcome",
|
|
"ScanPolicy",
|
|
"ScanScope",
|
|
]
|