Skip to content

Commit 495a8b5

Browse files
committed
Add data migration for nginx advisory
Signed-off-by: Keshav Priyadarshi <[email protected]>
1 parent 463c0a2 commit 495a8b5

File tree

3 files changed

+78
-1
lines changed

3 files changed

+78
-1
lines changed

vulnerabilities/improvers/valid_versions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ class NginxBasicImprover(Improver):
220220

221221
@property
222222
def interesting_advisories(self) -> QuerySet:
223-
return Advisory.objects.filter(created_by=NginxImporterPipeline.qualified_name).paginated()
223+
return Advisory.objects.filter(created_by=NginxImporterPipeline.pipeline_id).paginated()
224224

225225
def get_inferences(self, advisory_data: AdvisoryData) -> Iterable[Inference]:
226226
all_versions = list(self.fetch_nginx_version_from_git_tags())
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Generated by Django 4.2.15 on 2024-09-23 13:06
2+
3+
from django.db import migrations
4+
5+
"""
6+
Update the created_by field on Advisory from the old qualified_name
7+
to the new pipeline_id.
8+
"""
9+
10+
11+
def update_created_by(apps, schema_editor):
12+
from vulnerabilities.pipelines.nginx_importer import NginxImporterPipeline
13+
14+
Advisory = apps.get_model("vulnerabilities", "Advisory")
15+
Advisory.objects.filter(created_by="vulnerabilities.importers.nginx.NginxImporter").update(
16+
created_by=NginxImporterPipeline.pipeline_id
17+
)
18+
19+
20+
21+
def reverse_update_created_by(apps, schema_editor):
22+
from vulnerabilities.pipelines.nginx_importer import NginxImporterPipeline
23+
24+
Advisory = apps.get_model("vulnerabilities", "Advisory")
25+
Advisory.objects.filter(created_by=NginxImporterPipeline.pipeline_id).update(
26+
created_by="vulnerabilities.importers.nginx.NginxImporter"
27+
)
28+
29+
30+
class Migration(migrations.Migration):
31+
32+
dependencies = [
33+
("vulnerabilities", "0064_update_npm_pypa_advisory_created_by"),
34+
]
35+
36+
operations = [
37+
migrations.RunPython(update_created_by, reverse_code=reverse_update_created_by),
38+
]

vulnerabilities/tests/test_data_migrations.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,3 +681,42 @@ def test_removal_of_duped_purls(self):
681681

682682
assert adv.filter(created_by="vulnerabilities.importers.npm.NpmImporter").count() == 0
683683
assert adv.filter(created_by="npm_importer").count() == 1
684+
685+
686+
class TestUpdateNginxAdvisoryCreatedByField(TestMigrations):
687+
app_name = "vulnerabilities"
688+
migrate_from = "0064_update_npm_pypa_advisory_created_by"
689+
migrate_to = "0065_update_nginx_advisory_created_by"
690+
691+
advisory_data1 = AdvisoryData(
692+
aliases=["CVE-2020-13371337"],
693+
summary="vulnerability description here",
694+
affected_packages=[
695+
AffectedPackage(
696+
package=PackageURL(type="nginx", name="nginx"),
697+
affected_version_range=VersionRange.from_string("vers:nginx/>=1.0.0|<=2.0.0"),
698+
)
699+
],
700+
references=[Reference(url="https://example.com/with/more/info/CVE-2020-13371337")],
701+
date_published=timezone.now(),
702+
url="https://test.com",
703+
)
704+
705+
def setUpBeforeMigration(self, apps):
706+
Advisory = apps.get_model("vulnerabilities", "Advisory")
707+
adv1 = Advisory.objects.create(
708+
aliases=self.advisory_data1.aliases,
709+
summary=self.advisory_data1.summary,
710+
affected_packages=[pkg.to_dict() for pkg in self.advisory_data1.affected_packages],
711+
references=[ref.to_dict() for ref in self.advisory_data1.references],
712+
url=self.advisory_data1.url,
713+
created_by="vulnerabilities.importers.nginx.NginxImporter",
714+
date_collected=timezone.now(),
715+
)
716+
717+
def test_removal_of_duped_purls(self):
718+
Advisory = apps.get_model("vulnerabilities", "Advisory")
719+
adv = Advisory.objects.all()
720+
721+
assert adv.filter(created_by="vulnerabilities.importers.nginx.NginxImporter").count() == 0
722+
assert adv.filter(created_by="nginx_importer").count() == 1

0 commit comments

Comments
 (0)