Skip to content

Commit 58fff59

Browse files
committed
Include latest and next non-vulnerable versions in API v2
Fixes: #1959 Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent a6be088 commit 58fff59

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

vulnerabilities/api_v2.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,8 @@ class AdvisoryPackageV2Serializer(serializers.ModelSerializer):
311311
risk_score = serializers.FloatField(read_only=True)
312312
affected_by_vulnerabilities = serializers.SerializerMethodField()
313313
fixing_vulnerabilities = serializers.SerializerMethodField()
314-
next_non_vulnerable_version = serializers.CharField(read_only=True)
315-
latest_non_vulnerable_version = serializers.CharField(read_only=True)
314+
next_non_vulnerable_version = serializers.SerializerMethodField()
315+
latest_non_vulnerable_version = serializers.SerializerMethodField()
316316

317317
class Meta:
318318
model = Package
@@ -348,6 +348,14 @@ def get_affected_by_vulnerabilities(self, package):
348348
def get_fixing_vulnerabilities(self, package):
349349
return [impact.advisory.avid for impact in package.fixed_in_impacts.all()]
350350

351+
def get_next_non_vulnerable_version(self, package):
352+
if next_non_vulnerable := package.get_non_vulnerable_versions()[0]:
353+
return next_non_vulnerable.version
354+
355+
def get_latest_non_vulnerable_version(self, package):
356+
if latest_non_vulnerable := package.get_non_vulnerable_versions()[-1]:
357+
return latest_non_vulnerable.version
358+
351359

352360
class PackageurlListSerializer(serializers.Serializer):
353361
purls = serializers.ListField(
@@ -1164,6 +1172,7 @@ def bulk_search(self, request):
11641172
),
11651173
)
11661174
.with_is_vulnerable()
1175+
.order_by("package_url")
11671176
)
11681177

11691178
packages = query

vulnerabilities/models.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3123,17 +3123,12 @@ def get_non_vulnerable_versions(self):
31233123
self, fix=False
31243124
).only_non_vulnerable()
31253125

3126-
later_non_vulnerable_versions = non_vulnerable_versions.filter(
3127-
version_rank__gt=self.version_rank
3128-
)
3129-
3130-
later_non_vulnerable_versions = list(later_non_vulnerable_versions)
3126+
later_non_vulnerable = non_vulnerable_versions.filter(
3127+
version_rank__gte=self.version_rank
3128+
).order_by("version_rank")
31313129

3132-
if later_non_vulnerable_versions:
3133-
sorted_versions = later_non_vulnerable_versions
3134-
next_non_vulnerable = sorted_versions[0]
3135-
latest_non_vulnerable = sorted_versions[-1]
3136-
return next_non_vulnerable, latest_non_vulnerable
3130+
if later_non_vulnerable.exists():
3131+
return later_non_vulnerable.first(), later_non_vulnerable.last()
31373132

31383133
return None, None
31393134

0 commit comments

Comments
 (0)