Skip to content

Commit 9babdaf

Browse files
committed
Drop package_managers in favour of fetchcode.package_versions
Signed-off-by: Keshav Priyadarshi <[email protected]>
1 parent 5fb36dc commit 9babdaf

File tree

16 files changed

+575
-14055
lines changed

16 files changed

+575
-14055
lines changed

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ websocket-client==0.59.0
113113
yarl==1.7.2
114114
zipp==3.8.0
115115
dateparser==1.1.1
116-
fetchcode==0.2.0
116+
# TODO: pin fetchcode, once nexB/fetchcode#93 is merged
117+
# fetchcode==0.2.0
117118
cwe2==2.0.0
118119
drf-spectacular-sidecar==2022.10.1
119120
drf-spectacular==0.24.2

setup.cfg

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ install_requires =
9090
# networking
9191
GitPython>=3.1.17
9292
requests>=2.25.1
93-
fetchcode>=0.2.0
93+
# TODO: replace this with new fetchcode release
94+
fetchcode @ git+https://github.com/nexB/fetchcode.git@refs/pull/93/head
9495

9596
#vulntotal
9697
python-dotenv

vulnerabilities/importers/istio.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@
3434
from vulnerabilities.improver import Improver
3535
from vulnerabilities.improver import Inference
3636
from vulnerabilities.models import Advisory
37-
from vulnerabilities.package_managers import GitHubTagsAPI
38-
from vulnerabilities.package_managers import VersionAPI
3937
from vulnerabilities.utils import AffectedPackage as LegacyAffectedPackage
4038
from vulnerabilities.utils import get_affected_packages_by_patched_package
4139
from vulnerabilities.utils import nearest_patched_package

vulnerabilities/improvers/valid_versions.py

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
from django.db.models import Q
1919
from django.db.models.query import QuerySet
20+
from fetchcode import package_versions
2021
from packageurl import PackageURL
2122
from univers.versions import NginxVersion
2223

@@ -41,12 +42,6 @@
4142
from vulnerabilities.improver import Improver
4243
from vulnerabilities.improver import Inference
4344
from vulnerabilities.models import Advisory
44-
from vulnerabilities.package_managers import GitHubTagsAPI
45-
from vulnerabilities.package_managers import GoproxyVersionAPI
46-
from vulnerabilities.package_managers import PackageVersion
47-
from vulnerabilities.package_managers import VersionAPI
48-
from vulnerabilities.package_managers import get_api_package_name
49-
from vulnerabilities.package_managers import get_version_fetcher
5045
from vulnerabilities.utils import AffectedPackage as LegacyAffectedPackage
5146
from vulnerabilities.utils import clean_nginx_git_tag
5247
from vulnerabilities.utils import evolve_purl
@@ -63,8 +58,8 @@ class ValidVersionImprover(Improver):
6358
importer: Importer
6459
ignorable_versions: List[str] = dataclasses.field(default_factory=list)
6560

66-
def __init__(self) -> None:
67-
self.versions_fetcher_by_purl: Mapping[str, VersionAPI] = {}
61+
def __init__(self):
62+
pass
6863

6964
@property
7065
def interesting_advisories(self) -> QuerySet:
@@ -74,21 +69,16 @@ def get_package_versions(
7469
self, package_url: PackageURL, until: Optional[datetime] = None
7570
) -> List[str]:
7671
"""
77-
Return a list of `valid_versions` for the `package_url`
72+
Return a list of versions published before `until` for the `package_url`
7873
"""
79-
api_name = get_api_package_name(package_url)
80-
if not api_name:
81-
logger.error(f"Could not get versions for {package_url!r}")
82-
return []
83-
versions_fetcher = self.versions_fetcher_by_purl.get(package_url)
84-
if not versions_fetcher:
85-
versions_fetcher = get_version_fetcher(package_url)
86-
self.versions_fetcher_by_purl[package_url] = versions_fetcher()
87-
88-
versions_fetcher = self.versions_fetcher_by_purl[package_url]
74+
versions = package_versions.versions(str(package_url))
75+
versions_before_until = set()
76+
for version in versions:
77+
if until and version.release_date and version.release_date > until:
78+
continue
79+
versions_before_until.add(version.value)
8980

90-
self.versions_fetcher_by_purl[package_url] = versions_fetcher
91-
return versions_fetcher.get_until(package_name=api_name, until=until).valid_versions
81+
return versions_before_until
9282

9383
def get_inferences(self, advisory_data: AdvisoryData) -> Iterable[Inference]:
9484
"""
@@ -248,11 +238,10 @@ def get_inferences(self, advisory_data: AdvisoryData) -> Iterable[Inference]:
248238
)
249239

250240
def get_inferences_from_versions(
251-
self, advisory_data: AdvisoryData, all_versions: List[PackageVersion]
241+
self, advisory_data: AdvisoryData, all_versions: List[str]
252242
) -> Iterable[Inference]:
253243
"""
254-
Yield inferences given an ``advisory_data`` and a ``all_versions`` of
255-
PackageVersion.
244+
Yield inferences given an ``advisory_data`` and a ``all_versions``.
256245
"""
257246

258247
try:
@@ -268,9 +257,9 @@ def get_inferences_from_versions(
268257

269258
affected_purls = []
270259
for affected_version_range in affected_version_ranges:
271-
for package_version in all_versions:
260+
for version in all_versions:
272261
# FIXME: we should reference an NginxVersion tbd in univers
273-
version = NginxVersion(package_version.value)
262+
version = NginxVersion(version)
274263
if is_vulnerable_nginx_version(
275264
version=version,
276265
affected_version_range=affected_version_range,
@@ -294,12 +283,12 @@ def get_inferences_from_versions(
294283

295284
def fetch_nginx_version_from_git_tags(self):
296285
"""
297-
Yield all nginx PackageVersion from its git tags.
286+
Yield all nginx version from its git tags.
298287
"""
299-
nginx_versions = GitHubTagsAPI().fetch("nginx/nginx")
288+
nginx_versions = package_versions.versions("pkg:github/nginx/nginx")
300289
for version in nginx_versions:
301290
cleaned = clean_nginx_git_tag(version.value)
302-
yield PackageVersion(value=cleaned, release_date=version.release_date)
291+
yield cleaned
303292

304293

305294
class ApacheHTTPDImprover(ValidVersionImprover):

0 commit comments

Comments
 (0)