Skip to content

Commit c4636f4

Browse files
committed
Use the new severities in API
Signed-off-by: Keshav Priyadarshi <[email protected]>
1 parent 46f4b5a commit c4636f4

File tree

5 files changed

+17
-13
lines changed

5 files changed

+17
-13
lines changed

vulnerabilities/api.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,18 @@ def to_representation(self, instance):
5454

5555

5656
class VulnerabilityReferenceSerializer(serializers.ModelSerializer):
57-
scores = VulnerabilitySeveritySerializer(many=True, source="vulnerabilityseverity_set")
57+
scores = serializers.SerializerMethodField()
5858
reference_url = serializers.CharField(source="url")
5959

6060
class Meta:
6161
model = VulnerabilityReference
6262
fields = ["reference_url", "reference_id", "reference_type", "scores", "url"]
6363

64+
def get_scores(self, instance):
65+
matching_scores = VulnerabilitySeverity.objects.filter(url=instance.url)
66+
67+
return VulnerabilitySeveritySerializer(matching_scores, many=True).data
68+
6469

6570
class BaseResourceSerializer(serializers.HyperlinkedModelSerializer):
6671
"""
@@ -217,7 +222,7 @@ def to_representation(self, instance):
217222
def get_severity_range_score(self, instance):
218223
severity_vectors = []
219224
severity_values = set()
220-
for s in instance.severities:
225+
for s in instance.severities.all():
221226
if s.scoring_system == EPSS.identifier:
222227
continue
223228

vulnerabilities/api_extension.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,10 @@ class Meta:
8484

8585
class V2VulnerabilitySeveritySerializer(ModelSerializer):
8686
score = CharField(source="value")
87-
reference = V2VulnerabilityReferenceSerializer()
8887

8988
class Meta:
9089
model = VulnerabilitySeverity
91-
fields = ("score", "scoring_system", "scoring_elements", "published_at", "reference")
90+
fields = ("url", "score", "scoring_system", "scoring_elements", "published_at")
9291

9392

9493
class V2WeaknessSerializer(ModelSerializer):
@@ -130,6 +129,7 @@ class V2VulnerabilitySerializer(ModelSerializer):
130129
scores = V2VulnerabilitySeveritySerializer(many=True, source="vulnerabilityseverity_set")
131130
references = V2VulnerabilityReferenceSerializer(many=True, source="vulnerabilityreference_set")
132131
exploits = V2ExploitSerializer(many=True, source="weaknesses")
132+
severities = V2VulnerabilitySeveritySerializer(many=True)
133133

134134
def get_aliases(self, vulnerability):
135135
return vulnerability.aliases.only("alias").values_list("alias", flat=True)
@@ -150,6 +150,7 @@ class Meta:
150150
"summary",
151151
"exploits",
152152
"references",
153+
"severities",
153154
)
154155

155156

@@ -358,7 +359,7 @@ def get_queryset(self):
358359
.get_queryset()
359360
.prefetch_related(
360361
"weaknesses",
361-
# "severities",
362+
"severities",
362363
# "exploits",
363364
)
364365
)

vulnerabilities/tests/test_api.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,8 @@ def setUp(self):
222222
url="https://.com",
223223
)
224224

225-
VulnerabilitySeverity.objects.create(
226-
reference=self.reference1,
225+
severity = VulnerabilitySeverity.objects.create(
226+
url="https://.com",
227227
scoring_system=EPSS.identifier,
228228
scoring_elements=".0016",
229229
value="0.526",
@@ -239,6 +239,7 @@ def setUp(self):
239239
cwe_id=10000
240240
) # cwe not present in weaknesses_db
241241
self.invalid_weaknesses.vulnerabilities.add(self.vulnerability)
242+
self.vulnerability.severities.add(severity)
242243

243244
def test_api_status(self):
244245
response = self.csrf_client.get("/api/vulnerabilities/")

vulnerabilities/tests/test_api_extension.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def vulnerability_severity(vulnerability_reference):
4545
scoring_system="cvssv3_vector",
4646
value="7.0",
4747
scoring_elements="CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
48-
reference_id=vulnerability_reference.id,
48+
url=f"https://..",
4949
)
5050

5151

@@ -86,7 +86,7 @@ def test_V2VulnerabilitySeveritySerializer(vulnerability_severity):
8686
results = V2VulnerabilitySeveritySerializer(instance=vulnerability_severity).data
8787
expected = {
8888
"published_at": None,
89-
"reference": {"reference_id": "fake", "reference_type": "", "reference_url": "https://.."},
89+
"url": "https://..",
9090
"score": "7.0",
9191
"scoring_elements": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
9292
"scoring_system": "cvssv3_vector",

vulnerabilities/tests/test_data/export_command/aboutcode-vulnerabilities/ps/VCID-pst6-b358-aaap.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@ severities:
77
scoring_system: cvssv3_vector
88
scoring_elements: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
99
published_at:
10-
reference:
11-
url: https://..
12-
reference_type:
13-
reference_id: fake
10+
url: https://..
1411
weaknesses:
1512
- CWE-15
1613
references:

0 commit comments

Comments
 (0)