Skip to content

Commit 81c2e4a

Browse files
committed
use new package-types endpoint
Signed-off-by: tdruez <tdruez@aboutcode.org>
1 parent 43719c6 commit 81c2e4a

4 files changed

Lines changed: 22 additions & 35 deletions

File tree

dejacode_toolkit/vulnerablecode.py

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -74,32 +74,11 @@ def get_vulnerable_purls(self, packages, details=False, timeout=10):
7474
return (vulnerable_purls or {}).get("results") or []
7575

7676
def get_package_url_available_types(self):
77-
# Replace by fetching the endpoint once available.
78-
# https://github.com/aboutcode-org/vulnerablecode/issues/1561#issuecomment-2298764730
79-
return [
80-
"alpine",
81-
"alpm",
82-
"apache",
83-
"cargo",
84-
"composer",
85-
"conan",
86-
"deb",
87-
"gem",
88-
"generic",
89-
"github",
90-
"golang",
91-
"hex",
92-
"mattermost",
93-
"maven",
94-
"mozilla",
95-
"nginx",
96-
"npm",
97-
"nuget",
98-
"openssl",
99-
"pypi",
100-
"rpm",
101-
"ruby",
102-
]
77+
"""Return the list of supported package types from the VulnerableCode API."""
78+
response = self.request_get(f"{self.api_url}package-types")
79+
if isinstance(response, list):
80+
return response
81+
return []
10382

10483

10584
def get_plain_purl(purl_str):

vulnerabilities/fetch.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ def fetch_from_vulnerablecode(dataspace, batch_size, update, timeout, log_func=N
3636
return
3737

3838
available_types = vulnerablecode.get_package_url_available_types()
39+
if not available_types:
40+
raise ValueError("VulnerableCode did not return any supported package types.")
41+
3942
package_qs = (
4043
Package.objects.scope(dataspace)
4144
.has_package_url()

vulnerabilities/management/commands/fetchvulnerabilities.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,17 @@ def handle(self, *args, **options):
4848
if not vulnerablecode.is_configured():
4949
raise CommandError("VulnerableCode is not configured.")
5050

51-
fetch.fetch_from_vulnerablecode(
52-
self.dataspace,
53-
batch_size=batch_size,
54-
update=True,
55-
timeout=timeout,
56-
log_func=self.stdout.write,
57-
verbosity=options["verbosity"],
58-
)
51+
try:
52+
fetch.fetch_from_vulnerablecode(
53+
self.dataspace,
54+
batch_size=batch_size,
55+
update=True,
56+
timeout=timeout,
57+
log_func=self.stdout.write,
58+
verbosity=options["verbosity"],
59+
)
60+
except ValueError as error:
61+
raise CommandError(error) from error
5962

6063
if not options["no_notification"]:
6164
fetch.notify_vulnerability_data_update(self.dataspace)

vulnerabilities/tests/test_fetch.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,16 @@ def setUp(self):
3535
self.dataspace = Dataspace.objects.create(name="nexB")
3636

3737
@mock.patch("vulnerabilities.fetch.fetch_for_packages")
38+
@mock.patch("dejacode_toolkit.vulnerablecode.VulnerableCode.get_package_url_available_types")
3839
@mock.patch("dejacode_toolkit.vulnerablecode.VulnerableCode.is_configured")
3940
def test_vulnerabilities_fetch_from_vulnerablecode(
40-
self, mock_is_configured, mock_fetch_for_packages
41+
self, mock_is_configured, mock_get_available_types, mock_fetch_for_packages
4142
):
4243
buffer = io.StringIO()
4344
make_package(self.dataspace, package_url="pkg:pypi/idna@3.6")
4445
make_package(self.dataspace, package_url="pkg:pypi/idna@2.0")
4546
mock_is_configured.return_value = True
47+
mock_get_available_types.return_value = ["pypi"]
4648
mock_fetch_for_packages.return_value = {"created": 2, "updated": 0}
4749
fetch_from_vulnerablecode(
4850
self.dataspace, batch_size=1, update=True, timeout=None, log_func=buffer.write

0 commit comments

Comments
 (0)