Skip to content

Commit c99affc

Browse files
committed
feat: include advisory_id and advisory_uid for curation advisory
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent c4e58d3 commit c99affc

2 files changed

Lines changed: 47 additions & 21 deletions

File tree

‎vulnerabilities/api_v3.py‎

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -156,15 +156,20 @@ def get_related_ssvc_trees(self, obj):
156156

157157
def get_curating_advisories(self, obj):
158158
request = self.context.get("request")
159-
return [
160-
reverse(
161-
"advisory_details",
162-
kwargs={"avid": related_advisory.avid},
163-
request=request,
164-
)
159+
curating_advisories = {
160+
related_advisory.avid: {
161+
"advisory_uid": related_advisory.avid,
162+
"advisory_id": related_advisory.advisory_id.split("/")[-1],
163+
"resource_url": reverse(
164+
"advisory_details",
165+
kwargs={"avid": related_advisory.avid},
166+
request=request,
167+
),
168+
}
165169
for todo in obj.resolves_todos.all()
166170
for related_advisory in todo.advisories.all()
167-
]
171+
}
172+
return list(curating_advisories.values())
168173

169174
class Meta:
170175
model = AdvisoryV2
@@ -474,7 +479,7 @@ def create(self, request, *args, **kwargs):
474479
queryset=AdvisoryToDoV2.objects.prefetch_related(
475480
Prefetch(
476481
"advisories",
477-
queryset=AdvisoryV2.objects.only("avid"),
482+
queryset=AdvisoryV2.objects.only("avid", "advisory_id"),
478483
)
479484
),
480485
),
@@ -512,7 +517,7 @@ def get_queryset(self):
512517
queryset=AdvisoryToDoV2.objects.prefetch_related(
513518
Prefetch(
514519
"advisories",
515-
queryset=AdvisoryV2.objects.only("avid"),
520+
queryset=AdvisoryV2.objects.only("avid", "advisory_id"),
516521
)
517522
),
518523
),
@@ -682,7 +687,7 @@ def get_affected_advisories_bulk(packages, max_advisories, base_url, reachabilit
682687
queryset=AdvisoryToDoV2.objects.prefetch_related(
683688
Prefetch(
684689
"advisories",
685-
queryset=AdvisoryV2.objects.only("avid"),
690+
queryset=AdvisoryV2.objects.only("avid", "advisory_id"),
686691
)
687692
),
688693
),
@@ -818,11 +823,15 @@ def get_affected_advisories_bulk(packages, max_advisories, base_url, reachabilit
818823

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

821-
curating_advisories = [
822-
f"{base_url}{related_advisory.get_absolute_url()}"
826+
curating_advisories = {
827+
related_advisory.avid: {
828+
"advisory_uid": related_advisory.avid,
829+
"advisory_id": related_advisory.advisory_id.split("/")[-1],
830+
"resource_url": f"{base_url}{related_advisory.get_absolute_url()}",
831+
}
823832
for todo in primary.resolves_todos.all()
824833
for related_advisory in todo.advisories.all()
825-
]
834+
}
826835

827836
resource_url = None
828837
advisory_url = primary.get_absolute_url()
@@ -852,7 +861,7 @@ def get_affected_advisories_bulk(packages, max_advisories, base_url, reachabilit
852861
"resource_url": resource_url,
853862
"todo_count": adv.primary_adv_todo_count,
854863
"is_curation": primary.is_curation,
855-
"curating_advisories": curating_advisories,
864+
"curating_advisories": list(curating_advisories.values()),
856865
}
857866
)
858867

@@ -922,7 +931,7 @@ def get_affected_advisories_bulk(packages, max_advisories, base_url, reachabilit
922931
queryset=AdvisoryToDoV2.objects.prefetch_related(
923932
Prefetch(
924933
"advisories",
925-
queryset=AdvisoryV2.objects.only("avid"),
934+
queryset=AdvisoryV2.objects.only("avid", "advisory_id"),
926935
)
927936
),
928937
),
@@ -950,11 +959,15 @@ def get_affected_advisories_bulk(packages, max_advisories, base_url, reachabilit
950959
identifier = advisory.advisory_id.split("/")[-1]
951960

952961
aliases = [alias.alias for alias in advisory.aliases.all() if alias.alias != identifier]
953-
curating_advisories = [
954-
f"{base_url}{related_advisory.get_absolute_url()}"
962+
curating_advisories = {
963+
related_advisory.avid: {
964+
"advisory_uid": related_advisory.avid,
965+
"advisory_id": related_advisory.advisory_id.split("/")[-1],
966+
"resource_url": f"{base_url}{related_advisory.get_absolute_url()}",
967+
}
955968
for todo in advisory.resolves_todos.all()
956969
for related_advisory in todo.advisories.all()
957-
]
970+
}
958971

959972
resource_url = None
960973
advisory_url = advisory.get_absolute_url()
@@ -986,7 +999,7 @@ def get_affected_advisories_bulk(packages, max_advisories, base_url, reachabilit
986999
"resource_url": resource_url,
9871000
"todo_count": advisory.todo_count,
9881001
"is_curation": advisory.is_curation,
989-
"curating_advisories": curating_advisories,
1002+
"curating_advisories": list(curating_advisories.values()),
9901003
}
9911004
)
9921005

‎vulnerabilities/tests/test_api_v3.py‎

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -846,7 +846,13 @@ def test_get_curating_advisories_in_package_endpoint(self):
846846
self.assertEqual(affected_by_vulnerabilities["is_curation"], True)
847847
self.assertEqual(
848848
affected_by_vulnerabilities["curating_advisories"],
849-
["http://testserver/advisories/ghsa/GHSA-4321"],
849+
[
850+
{
851+
"advisory_id": "GHSA-4321",
852+
"advisory_uid": "ghsa/GHSA-4321",
853+
"resource_url": "http://testserver/advisories/ghsa/GHSA-4321",
854+
}
855+
],
850856
)
851857

852858
def test_get_curating_advisories_in_affected_by_advisory_endpoint(self):
@@ -867,7 +873,14 @@ def test_get_curating_advisories_in_affected_by_advisory_endpoint(self):
867873

868874
self.assertEqual(results["is_curation"], True)
869875
self.assertEqual(
870-
results["curating_advisories"], ["http://testserver/advisories/ghsa/GHSA-4321"]
876+
results["curating_advisories"],
877+
[
878+
{
879+
"advisory_id": "GHSA-4321",
880+
"advisory_uid": "ghsa/GHSA-4321",
881+
"resource_url": "http://testserver/advisories/ghsa/GHSA-4321",
882+
}
883+
],
871884
)
872885

873886
def test_get_curating_advisories_in_advisory_endpoint(self):

0 commit comments

Comments
 (0)