Skip to content

Commit da873aa

Browse files
authored
Replace reference with V2 (#1928)
* Replace reference with V2 Signed-off-by: Tushar Goel <[email protected]> * Fix gitlab importer advisory ID Signed-off-by: Tushar Goel <[email protected]> * Increase length for advisory ID Signed-off-by: Tushar Goel <[email protected]> * Fix tests Signed-off-by: Tushar Goel <[email protected]> --------- Signed-off-by: Tushar Goel <[email protected]>
1 parent 1c67eb7 commit da873aa

16 files changed

+65
-31
lines changed

vulnerabilities/api_v2.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ def get_fixing_vulnerabilities(self, obj):
349349
# Ghost package should not fix any vulnerability.
350350
if obj.is_ghost:
351351
return []
352-
return [adv.advisory_id for adv in obj.fixing_advisories.all()]
352+
return [adv.avid for adv in obj.fixing_advisories.all()]
353353

354354

355355
class PackageurlListSerializer(serializers.Serializer):

vulnerabilities/importer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def __post_init__(self):
160160
self.reference_id = str(self.reference_id)
161161

162162
def __lt__(self, other):
163-
if not isinstance(other, Reference):
163+
if not isinstance(other, ReferenceV2):
164164
return NotImplemented
165165
return self._cmp_key() < other._cmp_key()
166166

vulnerabilities/importers/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@
4242
from vulnerabilities.pipelines import pypa_importer
4343
from vulnerabilities.pipelines import pysec_importer
4444
from vulnerabilities.pipelines.v2_importers import apache_httpd_importer as apache_httpd_v2
45+
from vulnerabilities.pipelines.v2_importers import (
46+
elixir_security_importer as elixir_security_importer_v2,
47+
)
4548
from vulnerabilities.pipelines.v2_importers import github_importer as github_importer_v2
4649
from vulnerabilities.pipelines.v2_importers import gitlab_importer as gitlab_importer_v2
4750
from vulnerabilities.pipelines.v2_importers import npm_importer as npm_importer_v2
@@ -54,6 +57,7 @@
5457
IMPORTERS_REGISTRY = create_registry(
5558
[
5659
nvd_importer_v2.NVDImporterPipeline,
60+
elixir_security_importer_v2.ElixirSecurityImporterPipeline,
5761
github_importer_v2.GitHubAPIImporterPipeline,
5862
npm_importer_v2.NpmImporterPipeline,
5963
vulnrichment_importer_v2.VulnrichImporterPipeline,

vulnerabilities/importers/osv.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from vulnerabilities.importer import AdvisoryData
2424
from vulnerabilities.importer import AffectedPackage
2525
from vulnerabilities.importer import Reference
26+
from vulnerabilities.importer import ReferenceV2
2627
from vulnerabilities.importer import VulnerabilitySeverity
2728
from vulnerabilities.severity_systems import SCORING_SYSTEMS
2829
from vulnerabilities.utils import build_description
@@ -268,7 +269,7 @@ def get_references_v2(raw_data) -> List[Reference]:
268269
if not url:
269270
logger.error(f"Reference without URL : {ref!r} for OSV id: {raw_data['id']!r}")
270271
continue
271-
references.append(Reference(url=ref["url"]))
272+
references.append(ReferenceV2(url=ref["url"]))
272273
return references
273274

274275

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Generated by Django 4.2.22 on 2025-07-03 16:32
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("vulnerabilities", "0096_alter_pipelineschedule_run_interval"),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name="advisoryv2",
15+
name="advisory_id",
16+
field=models.CharField(
17+
help_text="An advisory is a unique vulnerability identifier in some database, such as PYSEC-2020-2233",
18+
max_length=500,
19+
),
20+
),
21+
migrations.AlterField(
22+
model_name="advisoryv2",
23+
name="datasource_id",
24+
field=models.CharField(
25+
help_text="Unique ID for the datasource used for this advisory .e.g.: nginx_importer_v2",
26+
max_length=200,
27+
),
28+
),
29+
]

vulnerabilities/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2657,15 +2657,15 @@ class AdvisoryV2(models.Model):
26572657

26582658
# This is similar to a type or a namespace
26592659
datasource_id = models.CharField(
2660-
max_length=100,
2660+
max_length=200,
26612661
blank=False,
26622662
null=False,
26632663
help_text="Unique ID for the datasource used for this advisory ." "e.g.: nginx_importer_v2",
26642664
)
26652665

26662666
# This is similar to a name
26672667
advisory_id = models.CharField(
2668-
max_length=50,
2668+
max_length=500,
26692669
blank=False,
26702670
null=False,
26712671
unique=False,

vulnerabilities/pipelines/v2_importers/apache_httpd_importer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
from vulnerabilities.importer import AdvisoryData
2323
from vulnerabilities.importer import AffectedPackage
24-
from vulnerabilities.importer import Reference
24+
from vulnerabilities.importer import ReferenceV2
2525
from vulnerabilities.importer import VulnerabilitySeverity
2626
from vulnerabilities.pipelines import VulnerableCodeBaseImporterPipelineV2
2727
from vulnerabilities.severity_systems import APACHE_HTTPD
@@ -260,7 +260,7 @@ def to_advisory(self, data):
260260
)
261261
)
262262
break
263-
reference = Reference(
263+
reference = ReferenceV2(
264264
reference_id=alias,
265265
url=urllib.parse.urljoin(self.base_url, f"{alias}.json"),
266266
)

vulnerabilities/pipelines/v2_importers/elixir_security_importer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
from vulnerabilities.importer import AdvisoryData
2020
from vulnerabilities.importer import AffectedPackage
21-
from vulnerabilities.importer import Reference
21+
from vulnerabilities.importer import ReferenceV2
2222
from vulnerabilities.pipelines import VulnerableCodeBaseImporterPipelineV2
2323
from vulnerabilities.utils import is_cve
2424
from vulnerabilities.utils import load_yaml
@@ -83,7 +83,7 @@ def process_file(self, file, base_path) -> Iterable[AdvisoryData]:
8383
references = []
8484
link = yaml_file.get("link") or ""
8585
if link:
86-
references.append(Reference(url=link))
86+
references.append(ReferenceV2(url=link))
8787

8888
constraints = []
8989
vrc = HexVersionRange.version_class

vulnerabilities/pipelines/v2_importers/github_importer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from vulnerabilities import utils
2525
from vulnerabilities.importer import AdvisoryData
2626
from vulnerabilities.importer import AffectedPackage
27-
from vulnerabilities.importer import Reference
27+
from vulnerabilities.importer import ReferenceV2
2828
from vulnerabilities.importer import VulnerabilitySeverity
2929
from vulnerabilities.pipelines import VulnerableCodeBaseImporterPipelineV2
3030
from vulnerabilities.utils import dedupe
@@ -271,7 +271,7 @@ def process_response(
271271
references = get_item(advisory, "references") or []
272272
if references:
273273
urls = (ref["url"] for ref in references)
274-
references = [Reference.from_url(u) for u in urls]
274+
references = [ReferenceV2.from_url(u) for u in urls]
275275

276276
date_published = get_item(advisory, "publishedAt")
277277
if date_published:

vulnerabilities/pipelines/v2_importers/gitlab_importer.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
from vulnerabilities.importer import AdvisoryData
2828
from vulnerabilities.importer import AffectedPackage
29-
from vulnerabilities.importer import Reference
29+
from vulnerabilities.importer import ReferenceV2
3030
from vulnerabilities.pipelines import VulnerableCodeBaseImporterPipelineV2
3131
from vulnerabilities.utils import build_description
3232
from vulnerabilities.utils import get_advisory_url
@@ -237,16 +237,15 @@ def parse_gitlab_advisory(
237237
aliases.remove(advisory_id)
238238
summary = build_description(gitlab_advisory.get("title"), gitlab_advisory.get("description"))
239239
urls = gitlab_advisory.get("urls")
240-
references = [Reference.from_url(u) for u in urls]
241-
242-
print(references)
240+
references = [ReferenceV2.from_url(u) for u in urls]
243241

244242
cwe_ids = gitlab_advisory.get("cwe_ids") or []
245243
cwe_list = list(map(get_cwe_id, cwe_ids))
246244

247245
date_published = dateparser.parse(gitlab_advisory.get("pubdate"))
248246
date_published = date_published.replace(tzinfo=pytz.UTC)
249247
package_slug = gitlab_advisory.get("package_slug")
248+
advisory_id = f"{package_slug}/{advisory_id}" if package_slug else advisory_id
250249
advisory_url = get_advisory_url(
251250
file=file,
252251
base_path=base_path,
@@ -264,7 +263,7 @@ def parse_gitlab_advisory(
264263
return AdvisoryData(
265264
aliases=aliases,
266265
summary=summary,
267-
references=references,
266+
references_v2=references,
268267
date_published=date_published,
269268
url=advisory_url,
270269
)

0 commit comments

Comments
 (0)