Skip to content

Commit d32ef52

Browse files
committed
Add the filting via forms
Signed-off-by: RISHI GARG <134256793+Rishi-source@users.noreply.github.com>
1 parent 9c10e69 commit d32ef52

File tree

4 files changed

+47
-13
lines changed

4 files changed

+47
-13
lines changed

vulnerabilities/api_v2.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,6 @@ def get_queryset(self):
293293
queryset = queryset.with_is_vulnerable()
294294
is_vulnerable = is_vulnerable.lower() == "true"
295295
queryset = queryset.filter(is_vulnerable=is_vulnerable)
296-
297-
queryset = queryset.exclude(version="")
298296
return queryset.with_is_vulnerable()
299297

300298
def list(self, request, *args, **kwargs):

vulnerabilities/forms.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ class PackageSearchForm(forms.Form):
2323
attrs={"placeholder": "Package name, purl or purl fragment"},
2424
),
2525
)
26+
vulnerable_only = forms.ChoiceField(
27+
required=False,
28+
choices=[
29+
("", "All Packages"),
30+
("true", "Vulnerable Only"),
31+
("false", "Non-Vulnerable Only"),
32+
],
33+
)
2634

2735

2836
class VulnerabilitySearchForm(forms.Form):

vulnerabilities/templates/packages.html

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,37 @@
1818
<div>
1919
{{ page_obj.paginator.count|intcomma }} results
2020
</div>
21-
<form method="get" style="display: inline;">
22-
{% if search %}<input type="hidden" name="search" value="{{ search }}">{% endif %}
23-
<select name="vulnerable_only" class="select" id="vulnerable-select" onchange="this.form.submit()">
24-
<option value="">All Packages</option>
25-
<option value="true" {% if request.GET.vulnerable_only == 'true' %}selected{% endif %}>Vulnerable Only</option>
26-
<option value="false" {% if request.GET.vulnerable_only == 'false' %}selected{% endif %}>Non-Vulnerable Only</option>
27-
</select>
28-
</form>
21+
<div class="dropdown is-hoverable">
22+
<div class="dropdown-trigger">
23+
<button class="button" aria-haspopup="true" aria-controls="dropdown-menu">
24+
<span>
25+
{% if request.GET.vulnerable_only == 'true' %}
26+
Vulnerable Only
27+
{% elif request.GET.vulnerable_only == 'false' %}
28+
Non-Vulnerable Only
29+
{% else %}
30+
All Packages
31+
{% endif %}
32+
</span>
33+
<span class="icon is-small">
34+
<i class="fa fa-filter" aria-hidden="true"></i>
35+
</span>
36+
</button>
37+
</div>
38+
<div class="dropdown-menu" id="dropdown-menu" role="menu">
39+
<div class="dropdown-content">
40+
<a href="?search={{ search }}" class="dropdown-item {% if not request.GET.vulnerable_only %}is-active{% endif %}">
41+
All Packages
42+
</a>
43+
<a href="?search={{ search }}&vulnerable_only=true" class="dropdown-item {% if request.GET.vulnerable_only == 'true' %}is-active{% endif %}">
44+
Vulnerable Only
45+
</a>
46+
<a href="?search={{ search }}&vulnerable_only=false" class="dropdown-item {% if request.GET.vulnerable_only == 'false' %}is-active{% endif %}">
47+
Non-Vulnerable Only
48+
</a>
49+
</div>
50+
</div>
51+
</div>
2952
{% if is_paginated %}
3053
{% include 'includes/pagination.html' with page_obj=page_obj %}
3154
{% endif %}
@@ -89,4 +112,4 @@
89112

90113
</section>
91114
{% endif %}
92-
{% endblock %}
115+
{% endblock %}

vulnerabilities/views.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ def get_context_data(self, **kwargs):
4949
request_query = self.request.GET
5050
context["package_search_form"] = PackageSearchForm(request_query)
5151
context["search"] = request_query.get("search")
52+
context["vulnerable_only"] = request_query.get("vulnerable_only", "")
5253
return context
5354

5455
def get_queryset(self, query=None):
@@ -57,18 +58,22 @@ def get_queryset(self, query=None):
5758
Make a best effort approach to find matching packages either based
5859
on exact purl, partial purl or just name and namespace.
5960
"""
61+
form = PackageSearchForm(self.request.GET)
6062
query = query or self.request.GET.get("search") or ""
63+
6164
queryset = (
6265
self.model.objects.search(query)
6366
.with_vulnerability_counts()
6467
.prefetch_related()
6568
.order_by("package_url")
6669
)
67-
if hasattr(self, "request"):
68-
vulnerable_only = self.request.GET.get("vulnerable_only", "").lower()
70+
71+
if form.is_valid():
72+
vulnerable_only = form.cleaned_data.get("vulnerable_only", "")
6973
if vulnerable_only in ["true", "false"]:
7074
queryset = queryset.with_is_vulnerable()
7175
queryset = queryset.filter(is_vulnerable=vulnerable_only == "true")
76+
7277
return queryset
7378

7479

0 commit comments

Comments
 (0)