Skip to content

Commit fccbe38

Browse files
committed
Simplify the vulnerability affectation system
Signed-off-by: tdruez <[email protected]>
1 parent 9d02bed commit fccbe38

File tree

3 files changed

+8
-34
lines changed

3 files changed

+8
-34
lines changed

product_portfolio/tests/test_models.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,11 @@ def test_product_model_all_packages(self):
155155
def test_product_model_get_vulnerable_packages(self):
156156
self.assertEqual(0, self.product1.get_vulnerable_packages().count())
157157

158-
package1 = make_package(self.dataspace, is_vulnerable=True, risk_score=5.0)
158+
package1 = make_package(self.dataspace)
159+
vulnerability1 = make_vulnerability(self.dataspace, risk_score=5.0)
160+
package1.add_affected_by(vulnerability1)
159161
make_product_package(self.product1, package1)
162+
160163
self.assertEqual(1, self.product1.get_vulnerable_packages().count())
161164
self.assertEqual(0, self.product1.get_vulnerable_packages(risk_threshold=6.0).count())
162165
self.assertEqual(1, self.product1.get_vulnerable_packages(risk_threshold=4.0).count())

vulnerabilities/fetch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def create_or_update_vulnerability(
135135
if updated_fields:
136136
results["updated"] += 1
137137

138-
vulnerability.add_affected_packages(affected_packages)
138+
vulnerability.add_affected(affected_packages)
139139
return vulnerability
140140

141141

vulnerabilities/models.py

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -172,41 +172,12 @@ def cve(self):
172172
return alias
173173

174174
def add_affected(self, instances):
175-
"""
176-
Assign the ``instances`` (Package, Component, or Product) as affected by this
177-
vulnerability.
178-
"""
179-
from component_catalog.models import Component
180-
from component_catalog.models import Package
181-
from product_portfolio.models import Product
182-
183-
if not isinstance(instances, list):
175+
"""Assign the ``instances`` (Package or Product) as affected by this vulnerability."""
176+
if not isinstance(instances, (list, tuple, models.QuerySet)):
184177
instances = [instances]
185178

186179
for instance in instances:
187-
if isinstance(instance, Package):
188-
self.add_affected_packages([instance])
189-
if isinstance(instance, Component):
190-
self.add_affected_components([instance])
191-
if isinstance(instance, Product):
192-
self.add_affected_products([instance])
193-
194-
def add_affected_packages(self, packages):
195-
"""Assign the ``packages`` as affected by this vulnerability."""
196-
through_defaults = {"dataspace_id": self.dataspace_id}
197-
self.affected_packages.add(*packages, through_defaults=through_defaults)
198-
199-
def add_affected_components(self, components):
200-
"""Assign the ``components`` as affected by this vulnerability."""
201-
through_defaults = {"dataspace_id": self.dataspace_id}
202-
self.affected_components.add(*components, through_defaults=through_defaults)
203-
204-
def add_affected_products(self, products):
205-
"""Assign the ``products`` as affected by this vulnerability."""
206-
through_defaults = {"dataspace_id": self.dataspace_id}
207-
self.affected_products.add(*products, through_defaults=through_defaults)
208-
for product in products:
209-
product.update_risk_score()
180+
instance.add_affected_by(vulnerability=self)
210181

211182
@classmethod
212183
def create_from_data(cls, dataspace, data, validate=False, affecting=None):

0 commit comments

Comments
 (0)