Skip to content

Commit 575cc19

Browse files
committed
Use faster Nuget API
Also refactor tests Signed-off-by: Philippe Ombredanne <[email protected]>
1 parent 4980f92 commit 575cc19

File tree

5 files changed

+662
-76
lines changed

5 files changed

+662
-76
lines changed

vulntotal/datasources/osv.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import requests
1414

15-
from vulntotal.ecosystem.nuget import get_closest_nuget_package_name
15+
from vulntotal.ecosystem.nuget import search_closest_nuget_package_name
1616
from vulntotal.validator import DataSource
1717
from vulntotal.validator import VendorData
1818
from vulntotal.vulntotal_utils import get_item
@@ -130,7 +130,7 @@ def generate_payload(purl):
130130
package["name"] = "Kernel"
131131

132132
elif purl_type == "nuget":
133-
nuget_package = get_closest_nuget_package_name(purl.name)
133+
nuget_package = search_closest_nuget_package_name(purl.name)
134134
if not nuget_package:
135135
logger.error(f"Invalid NuGet PURL {str(purl)}")
136136
return

vulntotal/ecosystem/nuget.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@
1111

1212
import requests
1313

14+
"""
15+
Find case-sensitive NuGet package names using API calls.
16+
Some data source such as OSV demand case-sensitive names.
17+
"""
18+
1419

1520
def get_closest_nuget_package_name(query):
1621
"""
@@ -31,3 +36,26 @@ def get_closest_nuget_package_name(query):
3136
query_response = requests.get(url_query).json()
3237
if query_response.get("data"):
3338
return query_response["data"][0]["id"]
39+
40+
41+
def search_closest_nuget_package_name(query):
42+
"""
43+
Return case-sensitive NuGet package name using
44+
the autocomplete service provided by NuGet
45+
The data has this shape:
46+
{
47+
"@context": {
48+
"@vocab": "http://schema.nuget.org/schema#"
49+
},
50+
"totalHits": 3145,
51+
"data": [
52+
"Azure.Core",
53+
"Azure.Storage.Blobs",
54+
"Azure.Security.KeyVault.Secrets",
55+
...
56+
"""
57+
url_query = f"https://azuresearch-usnc.nuget.org/autocomplete?q={query}"
58+
query_response = requests.get(url_query).json()
59+
data = query_response.get("data")
60+
if data:
61+
return data[0]

0 commit comments

Comments
 (0)