|
18 | 18 |
|
19 | 19 | from vulnerabilities.importer import AdvisoryData |
20 | 20 | from vulnerabilities.importer import Importer |
| 21 | +from vulnerabilities.importers import IMPORTERS_REGISTRY |
21 | 22 | from vulnerabilities.improver import Inference |
22 | 23 | from vulnerabilities.improvers.default import DefaultImporter |
23 | 24 | from vulnerabilities.models import Advisory |
24 | 25 | from vulnerabilities.models import Alias |
25 | 26 | from vulnerabilities.models import Package |
26 | 27 | from vulnerabilities.models import PackageRelatedVulnerability |
27 | 28 | from vulnerabilities.models import Vulnerability |
| 29 | +from vulnerabilities.models import VulnerabilityChangeLog |
28 | 30 | from vulnerabilities.models import VulnerabilityReference |
29 | 31 | from vulnerabilities.models import VulnerabilityRelatedReference |
30 | 32 | from vulnerabilities.models import VulnerabilitySeverity |
31 | 33 | from vulnerabilities.models import Weakness |
| 34 | +from vulnerabilities.utils import get_importer_name |
32 | 35 |
|
33 | 36 | logger = logging.getLogger(__name__) |
34 | 37 |
|
@@ -102,6 +105,7 @@ def process_advisories( |
102 | 105 | "created_by": importer_name, |
103 | 106 | "date_collected": datetime.datetime.now(tz=datetime.timezone.utc), |
104 | 107 | }, |
| 108 | + url=data.url, |
105 | 109 | ) |
106 | 110 | if not obj.date_imported: |
107 | 111 | advisories.append(obj) |
@@ -151,6 +155,7 @@ def process_inferences(inferences: List[Inference], advisory: Advisory, improver |
151 | 155 | vulnerability_id=inference.vulnerability_id, |
152 | 156 | aliases=inference.aliases, |
153 | 157 | summary=inference.summary, |
| 158 | + advisory=advisory, |
154 | 159 | ) |
155 | 160 |
|
156 | 161 | if not vulnerability: |
@@ -193,24 +198,24 @@ def process_inferences(inferences: List[Inference], advisory: Advisory, improver |
193 | 198 | ) |
194 | 199 |
|
195 | 200 | for affected_purl in inference.affected_purls or []: |
196 | | - vulnerable_package = Package.objects.get_or_create_from_purl(purl=affected_purl) |
| 201 | + vulnerable_package, _ = Package.objects.get_or_create_from_purl(purl=affected_purl) |
197 | 202 | PackageRelatedVulnerability( |
198 | 203 | vulnerability=vulnerability, |
199 | 204 | package=vulnerable_package, |
200 | 205 | created_by=improver_name, |
201 | 206 | confidence=inference.confidence, |
202 | 207 | fix=False, |
203 | | - ).update_or_create() |
| 208 | + ).update_or_create(advisory=advisory) |
204 | 209 |
|
205 | 210 | if inference.fixed_purl: |
206 | | - fixed_package = Package.objects.get_or_create_from_purl(purl=inference.fixed_purl) |
| 211 | + fixed_package, _ = Package.objects.get_or_create_from_purl(purl=inference.fixed_purl) |
207 | 212 | PackageRelatedVulnerability( |
208 | 213 | vulnerability=vulnerability, |
209 | 214 | package=fixed_package, |
210 | 215 | created_by=improver_name, |
211 | 216 | confidence=inference.confidence, |
212 | 217 | fix=True, |
213 | | - ).update_or_create() |
| 218 | + ).update_or_create(advisory=advisory) |
214 | 219 |
|
215 | 220 | if inference.weaknesses and vulnerability: |
216 | 221 | for cwe_id in inference.weaknesses: |
@@ -246,7 +251,7 @@ def create_valid_vulnerability_reference(url, reference_id=None): |
246 | 251 |
|
247 | 252 |
|
248 | 253 | def get_or_create_vulnerability_and_aliases( |
249 | | - aliases: List[str], vulnerability_id=None, summary=None |
| 254 | + aliases: List[str], vulnerability_id=None, summary=None, advisory=None |
250 | 255 | ): |
251 | 256 | """ |
252 | 257 | Get or create vulnerabilitiy and aliases such that all existing and new |
@@ -297,6 +302,12 @@ def get_or_create_vulnerability_and_aliases( |
297 | 302 | vulnerability = create_vulnerability_and_add_aliases( |
298 | 303 | aliases=new_alias_names, summary=summary |
299 | 304 | ) |
| 305 | + importer_name = get_importer_name(advisory) |
| 306 | + VulnerabilityChangeLog.log_import( |
| 307 | + importer=importer_name, |
| 308 | + source_url=advisory.url, |
| 309 | + vulnerability=vulnerability, |
| 310 | + ) |
300 | 311 | except Exception as e: |
301 | 312 | logger.error( |
302 | 313 | f"Cannot create vulnerability with summary {summary!r} and {new_alias_names!r} {e!r}.\n{traceback_format_exc()}." |
|
0 commit comments