Skip to content

Commit a8846f8

Browse files
committed
Properly handle conversion of advisory v2 object to AdvisoryData
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent 4a4f142 commit a8846f8

File tree

1 file changed

+43
-18
lines changed

1 file changed

+43
-18
lines changed

vulnerabilities/models.py

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2532,6 +2532,20 @@ class Meta:
25322532
verbose_name_plural = "Advisory severities"
25332533
ordering = ["url", "scoring_system", "value"]
25342534

2535+
def to_dict(self):
2536+
return {
2537+
"system": self.scoring_system,
2538+
"value": self.value,
2539+
"scoring_elements": self.scoring_elements,
2540+
"published_at": self.published_at,
2541+
"url": self.url,
2542+
}
2543+
2544+
def to_vulnerability_severity_data(self):
2545+
from vulnerabilities.importer import VulnerabilitySeverity
2546+
2547+
return VulnerabilitySeverity.from_dict(self.to_dict())
2548+
25352549

25362550
class AdvisoryWeakness(models.Model):
25372551
"""
@@ -2625,6 +2639,18 @@ def is_cpe(self):
26252639
"""
26262640
return self.reference_id.startswith("cpe")
26272641

2642+
def to_dict(self):
2643+
return {
2644+
"reference_id": self.reference_id,
2645+
"reference_type": self.reference_type,
2646+
"url": self.url,
2647+
}
2648+
2649+
def to_reference_v2_data(self):
2650+
from vulnerabilities.importer import ReferenceV2
2651+
2652+
return ReferenceV2.from_dict(self.to_dict())
2653+
26282654

26292655
class AdvisoryAlias(models.Model):
26302656
alias = models.CharField(
@@ -2806,18 +2832,17 @@ def get_absolute_url(self):
28062832

28072833
def to_advisory_data(self) -> "AdvisoryData":
28082834
from vulnerabilities.importer import AdvisoryData
2809-
from vulnerabilities.importer import ReferenceV2
28102835

28112836
return AdvisoryData(
28122837
aliases=[item.alias for item in self.aliases.all()],
28132838
summary=self.summary,
28142839
affected_packages=[
2815-
impacted.to_affected_package() for impacted in self.impacted_packages.all()
2840+
impacted.to_affected_package_data() for impacted in self.impacted_packages.all()
28162841
],
2817-
references_v2=[ReferenceV2.from_dict(ref) for ref in self.references],
2842+
references_v2=[ref.to_reference_v2_data() for ref in self.references.all()],
28182843
date_published=self.date_published,
2819-
weaknesses=self.weaknesses,
2820-
severities=self.severities,
2844+
weaknesses=[weak.cwe_id for weak in self.weaknesses.all()],
2845+
severities=[sev.to_vulnerability_severity_data() for sev in self.severities.all()],
28212846
url=self.url,
28222847
)
28232848

@@ -2849,14 +2874,12 @@ class ImpactedPackage(models.Model):
28492874
help_text="Version less PURL related to impacted range.",
28502875
)
28512876

2852-
affecting_vers = models.CharField(
2853-
max_length=500,
2877+
affecting_vers = models.TextField(
28542878
blank=True,
28552879
help_text="VersionRange expression for package vulnerable to this impact.",
28562880
)
28572881

2858-
fixed_vers = models.CharField(
2859-
max_length=500,
2882+
fixed_vers = models.TextField(
28602883
blank=True,
28612884
help_text="VersionRange expression for packages fixing the vulnerable package in this impact.",
28622885
)
@@ -2879,18 +2902,20 @@ class ImpactedPackage(models.Model):
28792902
help_text="Timestamp indicating when this impact was added.",
28802903
)
28812904

2882-
def to_affected_package(self):
2905+
def to_dict(self):
2906+
from vulnerabilities.utils import purl_to_dict
2907+
2908+
return {
2909+
"package": purl_to_dict(self.base_purl),
2910+
"affected_version_range": self.affecting_vers,
2911+
"fixed_version_range": self.fixed_vers,
2912+
}
2913+
2914+
def to_affected_package_data(self):
28832915
"""Return `AffectedPackageV2` data from the impact."""
28842916
from vulnerabilities.importer import AffectedPackageV2
2885-
from vulnerabilities.utils import purl_to_dict
28862917

2887-
return AffectedPackageV2.from_dict(
2888-
affected_pkg={
2889-
"package": purl_to_dict(self.base_purl),
2890-
"affected_version_range": self.affecting_vers,
2891-
"fixed_version_range": self.fixed_vers,
2892-
}
2893-
)
2918+
return AffectedPackageV2.from_dict(self.to_dict())
28942919

28952920

28962921
class ToDoRelatedAdvisory(models.Model):

0 commit comments

Comments
 (0)