Skip to content

Commit d6897b8

Browse files
committed
✨ Add pagination to vulnerability search
Signed-off-by: Shivam Sandbhor <shivam.sandbhor@gmail.com>
1 parent c09bbdd commit d6897b8

2 files changed

Lines changed: 22 additions & 9 deletions

File tree

vulnerabilities/templates/vulnerabilities.html

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
{% extends 'base.html' %}
2-
32
{% block title %}
43
<h1 class="title">
54
Explore Vulnerabilities
@@ -23,15 +22,16 @@ <h1 class="title">
2322
</div>
2423

2524
{% if vulnerabilities %}
26-
<section class="section is-medium has-text-centered">
27-
<div class="container ">
28-
<h1 class="title" id="results">Results of your query</h1>
25+
<section class="section is-medium has-text-centered">
26+
<div class="container">
27+
<h1 class="title" id="results">Results of your query "{{searched_for}}"</h1>
2928
<h3 class="subtitle" id="results">Total {{vulnerabilities|length}} results</h3>
3029
</div>
3130
</section>
3231

3332
<section class="section has-background-dark">
34-
<div class="content is-medium">
33+
34+
<div class="content is-large">
3535
<table class="table is-bordered is-striped is-narrow is-hoverable is-fullwidth">
3636
<tr>
3737
<th>Vulnerabilities</th>
@@ -47,6 +47,17 @@ <h3 class="subtitle" id="results">Total {{vulnerabilities|length}} results</h3>
4747
{% endfor %}
4848
</table>
4949
</div>
50+
51+
<div class="is-field is-horizontal">
52+
{% if vulnerabilities.has_previous %}
53+
<a class="button" href="?vuln_id={{ searched_for }}&page={{ vulnerabilities.previous_page_number }}">Previous Page</a>
54+
{% endif %}
55+
56+
{% if vulnerabilities.has_next %}
57+
<a class="button" href="?vuln_id={{ searched_for }}&page={{ vulnerabilities.next_page_number}}">Next Page</a>
58+
{% endif %}
59+
</div>
60+
5061
</section>
5162

5263
{% endif %}

vulnerabilities/views.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
# VulnerableCode is a free software code scanning tool from nexB Inc. and others.
2121
# Visit https://github.com/nexB/vulnerablecode/ for support and download.
2222

23+
from django.core.paginator import Paginator
2324
from django.shortcuts import render
2425
from django.urls import reverse
2526
from django.views.generic.list import ListView
@@ -66,19 +67,21 @@ class VulnerabilitySearchView(View):
6667

6768
def get(self, request):
6869
context = {"form": forms.VulnerabilitySearchForm()}
69-
70+
print(request.GET)
7071
if request.GET:
7172
vulnerabilities = self.request_to_queryset(request)
73+
pages = Paginator(vulnerabilities, 50)
74+
vulnerabilities = pages.get_page(int(self.request.GET.get('page', 1)))
7275
context["vulnerabilities"] = vulnerabilities
76+
context["searched_for"] = request.GET.get("vuln_id")
7377

7478
return render(request, self.template_name, context)
7579

7680
@staticmethod
7781
def request_to_queryset(request):
78-
7982
if request.GET["vuln_id"]:
8083
vuln_id = request.GET["vuln_id"]
81-
return models.Vulnerability.objects.filter(cve_id__contains=vuln_id).select_related()
84+
return models.Vulnerability.objects.filter(cve_id__contains=vuln_id)
8285

8386

8487
class PackageUpdate(UpdateView):
@@ -183,7 +186,6 @@ def get_form(self, *args, **kwargs):
183186
return form
184187

185188
def form_valid(self, form):
186-
187189
is_vulnerable = "impacted" in self.request.headers["Referer"]
188190
package = models.Package.objects.get(id=self.kwargs["pid"])
189191
form.instance.package = package

0 commit comments

Comments
 (0)