Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 32 additions & 19 deletions vulnerabilities/api_v3.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,15 +156,20 @@ def get_related_ssvc_trees(self, obj):

def get_curating_advisories(self, obj):
request = self.context.get("request")
return [
reverse(
"advisory_details",
kwargs={"avid": related_advisory.avid},
request=request,
)
curating_advisories = {
related_advisory.avid: {
"advisory_uid": related_advisory.avid,
"advisory_id": related_advisory.advisory_id.split("/")[-1],
"resource_url": reverse(
"advisory_details",
kwargs={"avid": related_advisory.avid},
request=request,
),
}
for todo in obj.resolves_todos.all()
for related_advisory in todo.advisories.all()
]
}
return list(curating_advisories.values())

class Meta:
model = AdvisoryV2
Expand Down Expand Up @@ -474,7 +479,7 @@ def create(self, request, *args, **kwargs):
queryset=AdvisoryToDoV2.objects.prefetch_related(
Prefetch(
"advisories",
queryset=AdvisoryV2.objects.only("avid"),
queryset=AdvisoryV2.objects.only("avid", "advisory_id"),
)
),
),
Expand Down Expand Up @@ -512,7 +517,7 @@ def get_queryset(self):
queryset=AdvisoryToDoV2.objects.prefetch_related(
Prefetch(
"advisories",
queryset=AdvisoryV2.objects.only("avid"),
queryset=AdvisoryV2.objects.only("avid", "advisory_id"),
)
),
),
Expand Down Expand Up @@ -682,7 +687,7 @@ def get_affected_advisories_bulk(packages, max_advisories, base_url, reachabilit
queryset=AdvisoryToDoV2.objects.prefetch_related(
Prefetch(
"advisories",
queryset=AdvisoryV2.objects.only("avid"),
queryset=AdvisoryV2.objects.only("avid", "advisory_id"),
)
),
),
Expand Down Expand Up @@ -818,11 +823,15 @@ def get_affected_advisories_bulk(packages, max_advisories, base_url, reachabilit

aliases = [a for a in adv._aliases_cache if a != identifier]

curating_advisories = [
f"{base_url}{related_advisory.get_absolute_url()}"
curating_advisories = {
related_advisory.avid: {
"advisory_uid": related_advisory.avid,
"advisory_id": related_advisory.advisory_id.split("/")[-1],
"resource_url": f"{base_url}{related_advisory.get_absolute_url()}",
}
for todo in primary.resolves_todos.all()
for related_advisory in todo.advisories.all()
]
}

resource_url = None
advisory_url = primary.get_absolute_url()
Expand Down Expand Up @@ -852,7 +861,7 @@ def get_affected_advisories_bulk(packages, max_advisories, base_url, reachabilit
"resource_url": resource_url,
"todo_count": adv.primary_adv_todo_count,
"is_curation": primary.is_curation,
"curating_advisories": curating_advisories,
"curating_advisories": list(curating_advisories.values()),
}
)

Expand Down Expand Up @@ -922,7 +931,7 @@ def get_affected_advisories_bulk(packages, max_advisories, base_url, reachabilit
queryset=AdvisoryToDoV2.objects.prefetch_related(
Prefetch(
"advisories",
queryset=AdvisoryV2.objects.only("avid"),
queryset=AdvisoryV2.objects.only("avid", "advisory_id"),
)
),
),
Expand Down Expand Up @@ -950,11 +959,15 @@ def get_affected_advisories_bulk(packages, max_advisories, base_url, reachabilit
identifier = advisory.advisory_id.split("/")[-1]

aliases = [alias.alias for alias in advisory.aliases.all() if alias.alias != identifier]
curating_advisories = [
f"{base_url}{related_advisory.get_absolute_url()}"
curating_advisories = {
related_advisory.avid: {
"advisory_uid": related_advisory.avid,
"advisory_id": related_advisory.advisory_id.split("/")[-1],
"resource_url": f"{base_url}{related_advisory.get_absolute_url()}",
}
for todo in advisory.resolves_todos.all()
for related_advisory in todo.advisories.all()
]
}

resource_url = None
advisory_url = advisory.get_absolute_url()
Expand Down Expand Up @@ -986,7 +999,7 @@ def get_affected_advisories_bulk(packages, max_advisories, base_url, reachabilit
"resource_url": resource_url,
"todo_count": advisory.todo_count,
"is_curation": advisory.is_curation,
"curating_advisories": curating_advisories,
"curating_advisories": list(curating_advisories.values()),
}
)

Expand Down
17 changes: 15 additions & 2 deletions vulnerabilities/tests/test_api_v3.py
Original file line number Diff line number Diff line change
Expand Up @@ -846,7 +846,13 @@ def test_get_curating_advisories_in_package_endpoint(self):
self.assertEqual(affected_by_vulnerabilities["is_curation"], True)
self.assertEqual(
affected_by_vulnerabilities["curating_advisories"],
["http://testserver/advisories/ghsa/GHSA-4321"],
[
{
"advisory_id": "GHSA-4321",
"advisory_uid": "ghsa/GHSA-4321",
"resource_url": "http://testserver/advisories/ghsa/GHSA-4321",
}
],
)

def test_get_curating_advisories_in_affected_by_advisory_endpoint(self):
Expand All @@ -867,7 +873,14 @@ def test_get_curating_advisories_in_affected_by_advisory_endpoint(self):

self.assertEqual(results["is_curation"], True)
self.assertEqual(
results["curating_advisories"], ["http://testserver/advisories/ghsa/GHSA-4321"]
results["curating_advisories"],
[
{
"advisory_id": "GHSA-4321",
"advisory_uid": "ghsa/GHSA-4321",
"resource_url": "http://testserver/advisories/ghsa/GHSA-4321",
}
],
)

def test_get_curating_advisories_in_advisory_endpoint(self):
Expand Down