@cryptotaxi247 / CoPilot / commits / 1f635d40

585 vuln report title fix (#586)

* fix: enhance vulnerability report generation to handle creating new report names * fix: update current version to 0.1.20

taylor_socfortress committed Jan 2, 2026 at 09:59 UTC 1f635d40329d900802f24587770b5acf59e22614
2 files changed +32 -11
backend/app/agents/vulnerabilities/services/vulnerabilities.py
+31 -10
@@ -1529,7 +1529,36 @@ async def generate_vulnerability_csv_report(
1529 error="Customer not found",
1530 )
1531
1532 - logger.info(f"Generating vulnerability report for customer: {request.customer_code}")
1532 + # If report_id exists, get the existing report name and object_key
1533 + # Otherwise generate new ones
1534 + if report_id:
1535 + stmt = select(VulnerabilityReport).filter(VulnerabilityReport.id == report_id)
1536 + result = await db_session.execute(stmt)
1537 + existing_report = result.scalars().first()
1538 +
1539 + if not existing_report:
1540 + return VulnerabilityReportGenerateResponse(
1541 + success=False,
1542 + message=f"Report ID {report_id} not found",
1543 + error="Report not found",
1544 + )
1545 +
1546 + # Use existing report name and paths
1547 + report_name = existing_report.report_name
1548 + file_name = existing_report.file_name
1549 + object_key = existing_report.object_key
1550 + bucket_name = existing_report.bucket_name
1551 +
1552 + logger.info(f"Generating vulnerability report for existing record: {report_name} (ID: {report_id})")
1553 + else:
1554 + # Generate new report name for synchronous generation
1555 + timestamp = datetime.utcnow().strftime("%Y%m%d_%H%M%S")
1556 + report_name = request.report_name or f"vulnerability_report_{timestamp}"
1557 + file_name = f"{report_name}.csv"
1558 + object_key = f"{request.customer_code}/{file_name}"
1559 + bucket_name = "vulnerability-reports"
1560 +
1561 + logger.info(f"Generating new vulnerability report: {report_name}")
1562
1563 # Fetch ALL vulnerabilities using scroll API (no pagination limits)
1564 all_vulnerabilities = await fetch_all_vulnerabilities_for_export(
@@ -1618,18 +1647,10 @@ async def generate_vulnerability_csv_report(
1647 csv_content = csv_buffer.getvalue().encode("utf-8")
1648 csv_buffer.close()
1649
1621 - # Generate file name
1622 - timestamp = datetime.utcnow().strftime("%Y%m%d_%H%M%S")
1623 - report_name = request.report_name or f"vulnerability_report_{timestamp}"
1624 - file_name = f"{report_name}.csv"
1625 -
1650 # Calculate file hash
1651 file_hash = hashlib.sha256(csv_content).hexdigest()
1652
1629 - # Store in MinIO
1630 - object_key = f"{request.customer_code}/{file_name}"
1631 - bucket_name = "vulnerability-reports"
1632 -
1653 + # Store in MinIO using the paths we determined earlier
1654 minio_result = await store_file_in_minio(
1655 file_content=csv_content,
1656 bucket_name=bucket_name,
backend/app/version/services/version.py
+1 -1
@@ -7,7 +7,7 @@ from loguru import logger
7 from packaging.version import Version
8
9 # Current version - update this with each release
10 -CURRENT_VERSION = "0.1.19"
10 +CURRENT_VERSION = "0.1.20"
11 VERSION_CHECK_URL = "https://api.github.com/repos/socfortress/CoPilot/releases/latest"
12
13