|
|
|
@ -9,9 +9,11 @@ from sqlalchemy.orm import selectinload
|
|
|
|
from src.aeros_equipment.service import save_default_equipment
|
|
|
|
from src.aeros_equipment.service import save_default_equipment
|
|
|
|
from src.aeros_simulation.service import save_default_simulation_node
|
|
|
|
from src.aeros_simulation.service import save_default_simulation_node
|
|
|
|
from src.auth.service import CurrentUser
|
|
|
|
from src.auth.service import CurrentUser
|
|
|
|
from src.config import WINDOWS_AEROS_BASE_URL, AEROS_BASE_URL
|
|
|
|
from src.config import WINDOWS_AEROS_BASE_URL, AEROS_BASE_URL, CLAMAV_HOST, CLAMAV_PORT
|
|
|
|
from src.database.core import DbSession
|
|
|
|
from src.database.core import DbSession
|
|
|
|
from src.database.service import search_filter_sort_paginate
|
|
|
|
from src.database.service import search_filter_sort_paginate
|
|
|
|
|
|
|
|
import clamd
|
|
|
|
|
|
|
|
import io
|
|
|
|
|
|
|
|
|
|
|
|
from .model import AerosProject
|
|
|
|
from .model import AerosProject
|
|
|
|
from .schema import AerosProjectInput
|
|
|
|
from .schema import AerosProjectInput
|
|
|
|
@ -49,6 +51,30 @@ async def import_aro_project(*, db_session: DbSession, aeros_project_in: AerosPr
|
|
|
|
detail="File too large. Max size: 100Mb"
|
|
|
|
detail="File too large. Max size: 100Mb"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ClamAV Scan
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
cd = clamd.ClamdNetworkSocket(CLAMAV_HOST, CLAMAV_PORT)
|
|
|
|
|
|
|
|
scan_result = cd.instream(io.BytesIO(content))
|
|
|
|
|
|
|
|
# Result format: {'stream': ('FOUND', 'Eicar-Test-Signature')} or {'stream': ('OK', None)}
|
|
|
|
|
|
|
|
if scan_result and scan_result.get('stream') and scan_result['stream'][0] == 'FOUND':
|
|
|
|
|
|
|
|
raise HTTPException(
|
|
|
|
|
|
|
|
status_code=400,
|
|
|
|
|
|
|
|
detail=f"Virus detected: {scan_result['stream'][1]}"
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
except clamd.ConnectionError:
|
|
|
|
|
|
|
|
raise HTTPException(
|
|
|
|
|
|
|
|
status_code=500,
|
|
|
|
|
|
|
|
detail="Antivirus service unavailable"
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
except HTTPException:
|
|
|
|
|
|
|
|
raise
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
|
|
print(f"ClamAV error: {e}")
|
|
|
|
|
|
|
|
raise HTTPException(
|
|
|
|
|
|
|
|
status_code=500,
|
|
|
|
|
|
|
|
detail=f"Antivirus check failed: {str(e)}"
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Project name hardcode
|
|
|
|
# Project name hardcode
|
|
|
|
# project_name = "trialapi"
|
|
|
|
# project_name = "trialapi"
|
|
|
|
|