|
14 | 14 | from packageurl import PackageURL |
15 | 15 | from univers.version_range import ArchLinuxVersionRange |
16 | 16 |
|
| 17 | +from vulnerabilities import severity_systems |
17 | 18 | from vulnerabilities.importer import AdvisoryDataV2 |
18 | 19 | from vulnerabilities.importer import AffectedPackageV2 |
19 | 20 | from vulnerabilities.importer import ReferenceV2 |
| 21 | +from vulnerabilities.importer import VulnerabilitySeverity |
20 | 22 | from vulnerabilities.pipelines import VulnerableCodeBaseImporterPipelineV2 |
| 23 | +from vulnerabilities.severity_systems import SCORING_SYSTEMS |
21 | 24 | from vulnerabilities.utils import fetch_response |
22 | 25 |
|
23 | 26 |
|
@@ -53,7 +56,9 @@ def collect_advisories(self) -> Iterable[AdvisoryDataV2]: |
53 | 56 | def parse_advisory(self, record) -> AdvisoryDataV2: |
54 | 57 | affected_packages = [] |
55 | 58 | references = [] |
| 59 | + severities = [] |
56 | 60 | avg_name = record.get("name") |
| 61 | + severity = record.get("severity") |
57 | 62 | aliases = record.get("issues", []) |
58 | 63 | aliases.extend(record.get("advisories", [])) |
59 | 64 | summary = record.get("type", "") |
@@ -92,13 +97,26 @@ def parse_advisory(self, record) -> AdvisoryDataV2: |
92 | 97 | ) |
93 | 98 | ) |
94 | 99 |
|
| 100 | + if severity not in severity_systems.ARCHLINUX.choices: |
| 101 | + self.log(f"Unknown severity {severity} for {avg_name}") |
| 102 | + severity = None |
| 103 | + if severity: |
| 104 | + severities = [ |
| 105 | + VulnerabilitySeverity( |
| 106 | + system=severity_systems.ARCHLINUX, |
| 107 | + value=severity, |
| 108 | + url="https://security.archlinux.org/{avg_name}.json", |
| 109 | + ) |
| 110 | + ] |
| 111 | + |
95 | 112 | return AdvisoryDataV2( |
96 | 113 | advisory_id=avg_name, |
97 | 114 | aliases=aliases, |
98 | 115 | summary=summary, |
99 | 116 | references=references, |
100 | 117 | affected_packages=affected_packages, |
| 118 | + severities=severities, |
101 | 119 | weaknesses=[], |
102 | 120 | url=f"https://security.archlinux.org/{avg_name}.json", |
103 | | - original_advisory_text=json.dumps(record), |
| 121 | + original_advisory_text=json.dumps(record, indent=2, ensure_ascii=False), |
104 | 122 | ) |
0 commit comments