From e0dec3c88852332ebfa51490f04245abf7b01c96 Mon Sep 17 00:00:00 2001 From: NucleonGodX Date: Fri, 24 Jan 2025 00:51:18 +0530 Subject: [PATCH 1/3] initial push sorting added in api and ui Signed-off-by: NucleonGodX --- vulnerabilities/api_v2.py | 12 ++++++------ vulnerabilities/views.py | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/vulnerabilities/api_v2.py b/vulnerabilities/api_v2.py index 10ffb6d98..b9424ffbd 100644 --- a/vulnerabilities/api_v2.py +++ b/vulnerabilities/api_v2.py @@ -141,7 +141,7 @@ def get_queryset(self): if aliases: queryset = queryset.filter(aliases__alias__in=aliases).distinct() - return queryset + return queryset.order_by("-aliases__alias") def get_serializer_class(self): if self.action == "list": @@ -284,7 +284,7 @@ def get_queryset(self): queryset = queryset.filter( fixing_vulnerabilities__vulnerability_id=fixing_vulnerability ) - return queryset.with_is_vulnerable() + return queryset.with_is_vulnerable().order_by("type", "namespace", "name", "-version") def list(self, request, *args, **kwargs): queryset = self.get_queryset() @@ -427,8 +427,8 @@ def bulk_search(self, request): query = ( Package.objects.filter(plain_package_url__in=plain_purls) - .order_by("plain_package_url") - .distinct("plain_package_url") + .order_by("type", "namespace", "name", "-version") + .distinct("type", "namespace", "name", "version") .with_is_vulnerable() ) @@ -498,8 +498,8 @@ def all(self, request): vulnerable_purls = ( Package.objects.vulnerable() .only("package_url") - .order_by("package_url") - .distinct() + .order_by("type", "namespace", "name", "-version") + .distinct("type", "namespace", "name", "version") .values_list("package_url", flat=True) ) return Response(vulnerable_purls) diff --git a/vulnerabilities/views.py b/vulnerabilities/views.py index 77f75238d..2e9c5b1e5 100644 --- a/vulnerabilities/views.py +++ b/vulnerabilities/views.py @@ -86,14 +86,14 @@ def get_queryset(self, query=None): self.model.objects.search(query) .with_vulnerability_counts() .prefetch_related() - .order_by("package_url") + .order_by("type", "namespace", "name", "-version") ) class VulnerabilitySearch(ListView): model = models.Vulnerability template_name = "vulnerabilities.html" - ordering = ["vulnerability_id"] + ordering = ["aliases"] paginate_by = PAGE_SIZE def get_context_data(self, **kwargs): @@ -105,7 +105,7 @@ def get_context_data(self, **kwargs): def get_queryset(self, query=None): query = query or self.request.GET.get("search") or "" - return self.model.objects.search(query=query).with_package_counts() + return self.model.objects.search(query=query).with_package_counts().order_by("-aliases") class PackageDetails(DetailView): @@ -118,10 +118,10 @@ def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) package = self.object context["package"] = package - context["affected_by_vulnerabilities"] = package.affected_by.order_by("vulnerability_id") + context["affected_by_vulnerabilities"] = package.affected_by.order_by("-aliases") # Ghost package should not fix any vulnerability. context["fixing_vulnerabilities"] = ( - None if package.is_ghost else package.fixing.order_by("vulnerability_id") + None if package.is_ghost else package.fixing.order_by("-aliases") ) context["package_search_form"] = PackageSearchForm(self.request.GET) context["fixed_package_details"] = package.fixed_package_details From c52d92a94a2bdfd7db5521b4f295f31cabb14894 Mon Sep 17 00:00:00 2001 From: NucleonGodX Date: Tue, 28 Jan 2025 20:55:59 +0530 Subject: [PATCH 2/3] version_rank and aliases used for sorting Signed-off-by: NucleonGodX --- vulnerabilities/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vulnerabilities/views.py b/vulnerabilities/views.py index 3be0cf0e4..9d9789973 100644 --- a/vulnerabilities/views.py +++ b/vulnerabilities/views.py @@ -41,7 +41,7 @@ class PackageSearch(ListView): model = models.Package template_name = "packages.html" - ordering = ["type", "namespace", "name", "version"] + ordering = ["type", "namespace", "name", "-version_rank"] paginate_by = PAGE_SIZE def get_context_data(self, **kwargs): @@ -62,7 +62,7 @@ def get_queryset(self, query=None): self.model.objects.search(query) .with_vulnerability_counts() .prefetch_related() - .order_by("type", "namespace", "name", "-version") + .order_by("type", "namespace", "name", "-version_rank") ) From a0f33fb8d1910a0b78e780952ff3b33e16f320c3 Mon Sep 17 00:00:00 2001 From: NucleonGodX Date: Wed, 29 Jan 2025 22:51:54 +0530 Subject: [PATCH 3/3] version_rank added in api Signed-off-by: NucleonGodX --- vulnerabilities/api_v2.py | 12 +++++++----- vulnerabilities/views.py | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/vulnerabilities/api_v2.py b/vulnerabilities/api_v2.py index b9424ffbd..b7f06c23d 100644 --- a/vulnerabilities/api_v2.py +++ b/vulnerabilities/api_v2.py @@ -284,7 +284,9 @@ def get_queryset(self): queryset = queryset.filter( fixing_vulnerabilities__vulnerability_id=fixing_vulnerability ) - return queryset.with_is_vulnerable().order_by("type", "namespace", "name", "-version") + return queryset.with_is_vulnerable().order_by( + "type", "namespace", "name", "-version_rank", "version" + ) def list(self, request, *args, **kwargs): queryset = self.get_queryset() @@ -427,8 +429,8 @@ def bulk_search(self, request): query = ( Package.objects.filter(plain_package_url__in=plain_purls) - .order_by("type", "namespace", "name", "-version") - .distinct("type", "namespace", "name", "version") + .order_by("type", "namespace", "name", "-version_rank", "version") + .distinct("type", "namespace", "name", "version_rank", "version") .with_is_vulnerable() ) @@ -498,8 +500,8 @@ def all(self, request): vulnerable_purls = ( Package.objects.vulnerable() .only("package_url") - .order_by("type", "namespace", "name", "-version") - .distinct("type", "namespace", "name", "version") + .order_by("type", "namespace", "name", "-version_rank", "version") + .distinct("type", "namespace", "name", "version_rank", "version") .values_list("package_url", flat=True) ) return Response(vulnerable_purls) diff --git a/vulnerabilities/views.py b/vulnerabilities/views.py index 9d9789973..0bf7c266c 100644 --- a/vulnerabilities/views.py +++ b/vulnerabilities/views.py @@ -41,7 +41,7 @@ class PackageSearch(ListView): model = models.Package template_name = "packages.html" - ordering = ["type", "namespace", "name", "-version_rank"] + ordering = ["type", "namespace", "name", "-version_rank", "version"] paginate_by = PAGE_SIZE def get_context_data(self, **kwargs): @@ -62,7 +62,7 @@ def get_queryset(self, query=None): self.model.objects.search(query) .with_vulnerability_counts() .prefetch_related() - .order_by("type", "namespace", "name", "-version_rank") + .order_by("type", "namespace", "name", "-version_rank", "version") )