1515
1616from vulnerabilities import severity_systems
1717from vulnerabilities .importer import AdvisoryData
18- from vulnerabilities .importer import Importer
19- from vulnerabilities .importer import Reference
18+ from vulnerabilities .importer import ReferenceV2
2019from vulnerabilities .importer import VulnerabilitySeverity
20+ from vulnerabilities .pipelines import VulnerableCodeBaseImporterPipelineV2
2121
2222logger = logging .getLogger (__name__ )
2323
2424
25- class EPSSImporter ( Importer ):
25+ class EPSSImporterPipeline ( VulnerableCodeBaseImporterPipelineV2 ):
2626 """Exploit Prediction Scoring System (EPSS) Importer"""
2727
2828 advisory_url = "https://epss.cyentia.com/epss_scores-current.csv.gz"
29+ pipeline_id = "epss_importer_v2"
2930 spdx_license_expression = "unknown"
3031 importer_name = "EPSS Importer"
3132
32- def advisory_data (self ) -> Iterable [AdvisoryData ]:
33+ def advisories_count (self ):
34+ return 1 # FIXME
35+
36+ @classmethod
37+ def steps (cls ):
38+ return (
39+ cls .collect_and_store_advisories ,
40+ )
41+
42+ def collect_advisories (self ) -> Iterable [AdvisoryData ]:
3343 response = urllib .request .urlopen (self .advisory_url )
3444 with gzip .open (response , "rb" ) as f :
3545 lines = [l .decode ("utf-8" ) for l in f .readlines ()]
@@ -55,13 +65,13 @@ def advisory_data(self) -> Iterable[AdvisoryData]:
5565 published_at = published_at ,
5666 )
5767
58- references = Reference (
68+ references = ReferenceV2 (
5969 url = f"https://api.first.org/data/v1/epss?cve={ cve } " ,
60- severities = [severity ],
6170 )
6271
6372 yield AdvisoryData (
64- aliases = [cve ],
65- references = [references ],
73+ advisory_id = cve ,
74+ severities = [severity ],
75+ references_v2 = [references ],
6676 url = self .advisory_url ,
6777 )
0 commit comments