Skip to content

Commit f4a6808

Browse files
committed
Support retrieval of advisories for a CVE in DataSource
- VendorData now includes PURL, necessary for organizing advisories received via CVE queries Signed-off-by: Keshav Priyadarshi <[email protected]>
1 parent 33b3d92 commit f4a6808

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

vulntotal/validator.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,48 @@
1111
from typing import Iterable
1212
from typing import List
1313

14+
from packageurl import PackageURL
15+
1416

1517
@dataclasses.dataclass(order=True)
1618
class VendorData:
19+
purl: PackageURL
1720
aliases: List[str] = dataclasses.field(default_factory=list)
1821
affected_versions: List[str] = dataclasses.field(default_factory=list)
1922
fixed_versions: List[str] = dataclasses.field(default_factory=list)
2023

2124
def to_dict(self):
2225
return {
26+
"purl": str(self.purl),
2327
"affected_versions": self.affected_versions,
2428
"fixed_versions": self.fixed_versions,
2529
"aliases": self.aliases,
2630
}
2731

2832

33+
class InvalidCVEError(Exception):
34+
def __init__(self, message="CVE identifier must start with 'CVE-'"):
35+
self.message = message
36+
super().__init__(self.message)
37+
38+
2939
class DataSource:
3040
def __init__(self):
3141
self._raw_dump = []
3242

33-
def datasource_advisory(self, purl) -> Iterable[VendorData]:
43+
def datasource_advisory(self, purl: PackageURL) -> Iterable[VendorData]:
44+
"""
45+
Yield VendorData object for crossponding PURL.
46+
"""
47+
return NotImplementedError
48+
49+
def datasource_advisory_from_cve(self, cve: str) -> Iterable[VendorData]:
3450
"""
35-
Yield VendorData object corresponding to DataSource
51+
Yield VendorData objects for a given CVE identifier.
3652
"""
53+
if not cve.upper().startswith("CVE-"):
54+
raise InvalidCVEError
55+
3756
return NotImplementedError
3857

3958
@classmethod

0 commit comments

Comments
 (0)