File tree Expand file tree Collapse file tree 4 files changed +47
-13
lines changed
Expand file tree Collapse file tree 4 files changed +47
-13
lines changed Original file line number Diff line number Diff 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 ):
Original file line number Diff line number Diff 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
2836class VulnerabilitySearchForm (forms .Form ):
Original file line number Diff line number Diff line change 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 %}
89112
90113 </ section >
91114{% endif %}
92- {% endblock %}
115+ {% endblock %}
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments