@@ -346,7 +346,6 @@ def get_csaf_vulnerabilities(product):
346346 return vulnerabilities
347347
348348
349- # Entry point!
350349def 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+
359362def 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+
368393def 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
372399def 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 ),
0 commit comments