|
8 | 8 | # |
9 | 9 |
|
10 | 10 | import logging |
11 | | -from datetime import datetime |
12 | 11 | from typing import Iterable |
13 | | -from typing import List |
14 | | -from typing import Mapping |
15 | 12 | from typing import Optional |
16 | 13 |
|
17 | 14 | from dateutil import parser as dateparser |
18 | | -from django.db.models.query import QuerySet |
19 | 15 | from packageurl import PackageURL |
20 | 16 | from univers.version_range import RANGE_CLASS_BY_SCHEMES |
21 | 17 | from univers.version_range import build_range_from_github_advisory_constraint |
|
26 | 22 | from vulnerabilities.importer import AffectedPackage |
27 | 23 | from vulnerabilities.importer import Importer |
28 | 24 | from vulnerabilities.importer import Reference |
29 | | -from vulnerabilities.importer import UnMergeablePackageError |
30 | 25 | from vulnerabilities.importer import VulnerabilitySeverity |
31 | | -from vulnerabilities.improver import Improver |
32 | | -from vulnerabilities.improver import Inference |
33 | | -from vulnerabilities.models import Advisory |
34 | | -from vulnerabilities.package_managers import VERSION_API_CLASSES_BY_PACKAGE_TYPE |
35 | | -from vulnerabilities.package_managers import GoproxyVersionAPI |
36 | | -from vulnerabilities.package_managers import VersionAPI |
37 | | -from vulnerabilities.package_managers import get_api_package_name |
38 | | -from vulnerabilities.utils import AffectedPackage as LegacyAffectedPackage |
39 | 26 | from vulnerabilities.utils import dedupe |
40 | | -from vulnerabilities.utils import get_affected_packages_by_patched_package |
41 | 27 | from vulnerabilities.utils import get_item |
42 | | -from vulnerabilities.utils import nearest_patched_package |
43 | | -from vulnerabilities.utils import resolve_version_range |
44 | 28 |
|
45 | 29 | logger = logging.getLogger(__name__) |
46 | 30 |
|
@@ -319,92 +303,3 @@ def process_response(resp: dict, package_type: str) -> Iterable[AdvisoryData]: |
319 | 303 | affected_packages=affected_packages, |
320 | 304 | date_published=date_published, |
321 | 305 | ) |
322 | | - |
323 | | - |
324 | | -class GitHubBasicImprover(Improver): |
325 | | - def __init__(self) -> None: |
326 | | - self.versions_fetcher_by_purl: Mapping[str, VersionAPI] = {} |
327 | | - |
328 | | - @property |
329 | | - def interesting_advisories(self) -> QuerySet: |
330 | | - return Advisory.objects.filter(created_by=GitHubAPIImporter.qualified_name) |
331 | | - |
332 | | - def get_package_versions( |
333 | | - self, package_url: PackageURL, until: Optional[datetime] = None |
334 | | - ) -> List[str]: |
335 | | - """ |
336 | | - Return a list of `valid_versions` for the `package_url` |
337 | | - """ |
338 | | - api_name = get_api_package_name(package_url) |
339 | | - if not api_name: |
340 | | - logger.error(f"Could not get versions for {package_url!r}") |
341 | | - return [] |
342 | | - versions_fetcher = self.versions_fetcher_by_purl.get(package_url) |
343 | | - if not versions_fetcher: |
344 | | - versions_fetcher: VersionAPI = VERSION_API_CLASSES_BY_PACKAGE_TYPE[package_url.type] |
345 | | - self.versions_fetcher_by_purl[package_url] = versions_fetcher() |
346 | | - |
347 | | - versions_fetcher = self.versions_fetcher_by_purl[package_url] |
348 | | - |
349 | | - self.versions_fetcher_by_purl[package_url] = versions_fetcher |
350 | | - return versions_fetcher.get_until(package_name=api_name, until=until).valid_versions |
351 | | - |
352 | | - def get_inferences(self, advisory_data: AdvisoryData) -> Iterable[Inference]: |
353 | | - """ |
354 | | - Yield Inferences for the given advisory data |
355 | | - """ |
356 | | - if not advisory_data.affected_packages: |
357 | | - return |
358 | | - try: |
359 | | - purl, affected_version_ranges, _ = AffectedPackage.merge( |
360 | | - advisory_data.affected_packages |
361 | | - ) |
362 | | - except UnMergeablePackageError: |
363 | | - logger.error(f"Cannot merge with different purls {advisory_data.affected_packages!r}") |
364 | | - return iter([]) |
365 | | - |
366 | | - pkg_type = purl.type |
367 | | - pkg_namespace = purl.namespace |
368 | | - pkg_name = purl.name |
369 | | - if purl.type == "golang": |
370 | | - # Problem with the Golang and Go that they provide full path |
371 | | - # FIXME: We need to get the PURL subpath for Go module |
372 | | - versions_fetcher = self.versions_fetcher_by_purl.get(purl) |
373 | | - if not versions_fetcher: |
374 | | - versions_fetcher = GoproxyVersionAPI() |
375 | | - self.versions_fetcher_by_purl[purl] = versions_fetcher |
376 | | - pkg_name = versions_fetcher.module_name_by_package_name.get(pkg_name, pkg_name) |
377 | | - |
378 | | - valid_versions = self.get_package_versions( |
379 | | - package_url=purl, until=advisory_data.date_published |
380 | | - ) |
381 | | - for affected_version_range in affected_version_ranges: |
382 | | - aff_vers, unaff_vers = resolve_version_range( |
383 | | - affected_version_range=affected_version_range, |
384 | | - package_versions=valid_versions, |
385 | | - ignorable_versions=WEIRD_IGNORABLE_VERSIONS, |
386 | | - ) |
387 | | - affected_purls = [ |
388 | | - PackageURL(type=pkg_type, namespace=pkg_namespace, name=pkg_name, version=version) |
389 | | - for version in aff_vers |
390 | | - ] |
391 | | - |
392 | | - unaffected_purls = [ |
393 | | - PackageURL(type=pkg_type, namespace=pkg_namespace, name=pkg_name, version=version) |
394 | | - for version in unaff_vers |
395 | | - ] |
396 | | - |
397 | | - affected_packages: List[LegacyAffectedPackage] = nearest_patched_package( |
398 | | - vulnerable_packages=affected_purls, resolved_packages=unaffected_purls |
399 | | - ) |
400 | | - |
401 | | - for ( |
402 | | - fixed_package, |
403 | | - affected_packages, |
404 | | - ) in get_affected_packages_by_patched_package(affected_packages).items(): |
405 | | - yield Inference.from_advisory_data( |
406 | | - advisory_data, |
407 | | - confidence=100, # We are getting all valid versions to get this inference |
408 | | - affected_purls=affected_packages, |
409 | | - fixed_purl=fixed_package, |
410 | | - ) |
0 commit comments