Skip to content

Commit 1302761

Browse files
committed
Report Vulnerability severities correctly #904
* Add "severities" property to Vulnerability This is traversing severities through the references. * Remove the "severities" property from a VulnerabilityReference. * Also use "Fixed by packages" #903 Reference: #903 Reference: #904 Signed-off-by: Philippe Ombredanne <[email protected]>
1 parent f82bbc3 commit 1302761

File tree

4 files changed

+32
-37
lines changed

4 files changed

+32
-37
lines changed

vulnerabilities/models.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import hashlib
1111
import json
1212
import logging
13-
import uuid
1413

1514
from django.conf import settings
1615
from django.core.exceptions import ValidationError
@@ -59,6 +58,11 @@ class Vulnerability(models.Model):
5958
through="PackageRelatedVulnerability",
6059
)
6160

61+
@property
62+
def severities(self):
63+
for reference in self.references.all():
64+
yield from VulnerabilitySeverity.objects.filter(reference=reference.id)
65+
6266
def save(self, *args, **kwargs):
6367
super().save(*args, **kwargs)
6468
if not self.vulnerability_id:
@@ -115,10 +119,6 @@ class VulnerabilityReference(models.Model):
115119
blank=True,
116120
)
117121

118-
@property
119-
def severities(self):
120-
return VulnerabilitySeverity.objects.filter(reference=self.id)
121-
122122
class Meta:
123123
unique_together = (
124124
"url",

vulnerabilities/templates/vulnerability_details.html

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
<li data-tab="4">
5757
<a>
5858
<span>
59-
Fixed packages ({{ vulnerability.resolved_to|length }})
59+
Fixed by packages ({{ vulnerability.resolved_to|length }})
6060
</span>
6161
</a>
6262
</li>
@@ -106,32 +106,30 @@
106106
Severity ({{ severities|length }})
107107
</div>
108108
<div class="tab-nested-div">
109-
{% if vulnerability.references.all %}
109+
{% if severities %}
110110
<table class="table is-bordered is-striped is-narrow is-hoverable is-fullwidth gray-header-border">
111111
<tr>
112112
<th> System </th>
113113
<th> Score </th>
114114
<th> Found at </th>
115115
</tr>
116-
{% for ref in vulnerability.references.all %}
117-
{% for sever in ref.severities %}
118-
<tr>
119-
<td>{{ sever.scoring_system }}</td>
120-
<td>{{ sever.value }}</td>
121-
{% if ref.url %}
122-
<td><a href="{{ ref.url }}" target="_blank">
123-
{{ ref.url }}<i class="fa fa-external-link fa_link_custom"></i></a></td>
124-
{% else %}
125-
<td>{{ ref.reference_id }}</td>
126-
{% endif %}
127-
</tr>
128-
{% endfor %}
129-
{% empty %}
130-
<tr>
131-
<td colspan="3">
132-
There are no severity scores.
133-
</td>
134-
</tr>
116+
{% for severity in severities %}
117+
<tr>
118+
<td>{{ severity.scoring_system }}</td>
119+
<td>{{ severity.value }}</td>
120+
{% if severity.reference.url %}
121+
<td><a href="{{ severity.reference.url }}" target="_blank">
122+
{{ severity.reference.url }}<i class="fa fa-external-link fa_link_custom"></i></a></td>
123+
{% else %}
124+
<td>{{ severity.reference.reference_id }}</td>
125+
{% endif %}
126+
</tr>
127+
{% empty %}
128+
<tr>
129+
<td colspan="3">
130+
There are no severity scores.
131+
</td>
132+
</tr>
135133
{% endfor %}
136134
</table>
137135
{% endif %}
@@ -147,9 +145,9 @@
147145
</span>
148146
</td>
149147
<td style="border: 0; padding: 8px 12px 3px 3px; vertical-align: bottom;" class="has-text-weight-bold">
150-
Fixed packages
148+
Fixed by packages
151149
<span style="font-weight: normal;">({{ vulnerability.resolved_to.all|length }})
152-
(see <i>Fixed packages</i> tab)
150+
(see <i>Fixed by packages</i> tab)
153151
</span>
154152
</td>
155153
</tr>

vulnerabilities/tests/test_view.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,11 @@ class PackageSearchTestCase(TestCase):
1818
def setUp(self):
1919
self.client = Client()
2020

21-
def test_paginator(self):
22-
"""
23-
Test PackageSearch paginator
24-
"""
21+
def test_packages_search_view_paginator(self):
2522
response = self.client.get("/packages/search?type=deb&name=&page=1")
2623
self.assertEqual(response.status_code, 200)
2724
response = self.client.get("/packages/search?type=deb&name=&page=*")
28-
self.assertEqual(response.status_code, 200)
25+
self.assertEqual(response.status_code, 404)
2926
response = self.client.get("/packages/search?type=deb&name=&page=")
3027
self.assertEqual(response.status_code, 200)
3128
response = self.client.get("/packages/search?type=&name=&page=")
@@ -41,7 +38,7 @@ def setUp(self):
4138
self.id = vulnerability.id
4239
self.client = Client()
4340

44-
def test_vulnerabilties(self):
41+
def test_vulnerabilties_search_view(self):
4542
"""
4643
Test Vulnerability View
4744
"""
@@ -55,9 +52,9 @@ def test_vulnerabilties_search(self):
5552
response = self.client.get(f"/vulnerabilities/search")
5653
self.assertEqual(response.status_code, 200)
5754

58-
def test_alias(self):
55+
def test_vulnerabilities_alias(self):
5956
"""
6057
Test Vulnerability Search View
6158
"""
62-
response = self.client.get(f"/vulnerabilities/search?vuln_id=TEST-2022")
59+
response = self.client.get(f"/vulnerabilities/search?vulnerability_id=TEST-2022")
6360
self.assertEqual(response.status_code, 200)

vulnerabilities/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
# See https://aboutcode.org for more information about nexB OSS projects.
88
#
99

10-
1110
from django.db.models import Count
1211
from django.db.models import Q
1312
from django.http.response import HttpResponseNotAllowed
@@ -172,6 +171,7 @@ def get_context_data(self, **kwargs):
172171
context = super().get_context_data(**kwargs)
173172
context["vulnerability"] = self.object
174173
context["vulnerability_form"] = VulnerabilityForm(self.request.GET)
174+
context["severities"] = list(self.object.severities)
175175
return context
176176

177177

0 commit comments

Comments
 (0)