Skip to content

Commit 9000cd6

Browse files
committed
Progress on the OpenVEX output implementation
Signed-off-by: tdruez <[email protected]>
1 parent 952d00d commit 9000cd6

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

dje/outputs.py

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,6 @@ def get_csaf_vulnerabilities(product):
346346
return vulnerabilities
347347

348348

349-
# Entry point!
350349
def get_csaf_security_advisory(product):
351350
security_advisory = csaf.CommonSecurityAdvisoryFramework(
352351
document=get_csaf_document(product),
@@ -356,6 +355,10 @@ def get_csaf_security_advisory(product):
356355
return security_advisory
357356

358357

358+
def get_openvex_timestamp():
359+
return datetime.now(UTC).strftime("%Y-%m-%dT%H:%M:%S.%f")
360+
361+
359362
def get_openvex_vulnerability(vulnerability):
360363
return openvex.Vulnerability(
361364
field_id=vulnerability.resource_url,
@@ -365,16 +368,40 @@ def get_openvex_vulnerability(vulnerability):
365368
)
366369

367370

371+
def get_openvex_statement(vulnerability):
372+
products = [
373+
openvex.Component1(field_id=package.package_url)
374+
for package in vulnerability.affected_packages.all()
375+
]
376+
377+
status = openvex.Status.under_investigation
378+
vulnerability_analyses = vulnerability.vulnerability_analyses.all()
379+
if len(vulnerability_analyses) == 1:
380+
analysis = vulnerability_analyses[0]
381+
print(analysis)
382+
383+
return openvex.Statement(
384+
vulnerability=get_openvex_vulnerability(vulnerability),
385+
timestamp=get_openvex_timestamp(),
386+
products=products,
387+
status=status,
388+
# status_notes: analysis.detail
389+
# justification: analysis.justification
390+
)
391+
392+
368393
def get_openvex_statements(product):
369-
return []
394+
vulnerability_qs = product.get_vulnerability_qs(prefetch_related_packages=True)
395+
statements = [get_openvex_statement(vulnerability) for vulnerability in vulnerability_qs]
396+
return statements
370397

371398

372399
def get_openvex_document(product):
373400
return openvex.OpenVEX(
374401
field_context="https://openvex.dev/ns/v0.2.0",
375402
field_id=f"OpenVEX-Document-{str(product.uuid)}",
376403
author=product.dataspace.name,
377-
timestamp=datetime.now(UTC).strftime("%Y-%m-%dT%H:%M:%S.%f"),
404+
timestamp=get_openvex_timestamp(),
378405
version=1,
379406
tooling=f"DejaCode-{dejacode_version}",
380407
statements=get_openvex_statements(product),

product_portfolio/templates/product_portfolio/product_details.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
</a>
119119
<div class="dropdown-header">OpenVEX</div>
120120
<a href="{{ object.get_export_openvex_url }}" class="dropdown-item" target="_blank">
121-
<i class="fas fa-download"></i> OpenVEX VEX
121+
<i class="fas fa-download"></i> OpenVEX
122122
</a>
123123
{% endif %}
124124
</div>

0 commit comments

Comments
 (0)