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