@@ -1625,6 +1625,7 @@ class ApiFindingFilter(DojoFilter):
16251625 verified = BooleanFilter (field_name = "verified" )
16261626 has_jira = BooleanFilter (field_name = "jira_issue" , lookup_expr = "isnull" , exclude = True )
16271627 fix_available = BooleanFilter (field_name = "fix_available" )
1628+ mitigation_available = BooleanFilter (method = "filter_mitigation_available" , label = "Mitigation Available" )
16281629 # CharFilter
16291630 component_version = CharFilter (lookup_expr = "icontains" )
16301631 component_name = CharFilter (lookup_expr = "icontains" )
@@ -1797,6 +1798,11 @@ def filter_mitigated_on(self, queryset, name, value):
17971798
17981799 return queryset .filter (mitigated = value )
17991800
1801+ def filter_mitigation_available (self , queryset , name , value ):
1802+ if value :
1803+ return queryset .exclude (mitigation__isnull = True ).exclude (mitigation__exact = "" )
1804+ return queryset .filter (Q (mitigation__isnull = True ) | Q (mitigation__exact = "" ))
1805+
18001806
18011807class PercentageFilter (NumberFilter ):
18021808 def __init__ (self , * args , ** kwargs ):
@@ -1831,6 +1837,8 @@ class FindingFilterHelper(FilterSet):
18311837 duplicate = ReportBooleanFilter ()
18321838 is_mitigated = ReportBooleanFilter ()
18331839 fix_available = ReportBooleanFilter ()
1840+ mitigation = CharFilter (lookup_expr = "icontains" )
1841+ mitigation_available = BooleanFilter (method = "filter_mitigation_available" , label = "Mitigation Available" )
18341842 mitigated = DateRangeFilter (field_name = "mitigated" , label = "Mitigated Date" )
18351843 mitigated_on = DateTimeFilter (field_name = "mitigated" , lookup_expr = "exact" , label = "Mitigated On" , method = "filter_mitigated_on" )
18361844 mitigated_before = DateTimeFilter (field_name = "mitigated" , lookup_expr = "lt" , label = "Mitigated Before" )
@@ -2020,6 +2028,11 @@ def filter_mitigated_on(self, queryset, name, value):
20202028
20212029 return queryset .filter (mitigated = value )
20222030
2031+ def filter_mitigation_available (self , queryset , name , value ):
2032+ if value :
2033+ return queryset .exclude (mitigation__isnull = True ).exclude (mitigation__exact = "" )
2034+ return queryset .filter (Q (mitigation__isnull = True ) | Q (mitigation__exact = "" ))
2035+
20232036
20242037def get_finding_group_queryset_for_context (pid = None , eid = None , tid = None ):
20252038 """
@@ -3399,6 +3412,7 @@ class ReportFindingFilterHelper(FilterSet):
33993412 out_of_scope = ReportBooleanFilter ()
34003413 outside_of_sla = FindingSLAFilter (label = "Outside of SLA" )
34013414 file_path = CharFilter (lookup_expr = "icontains" )
3415+ mitigation_available = BooleanFilter (method = "filter_mitigation_available" , label = "Mitigation Available" )
34023416
34033417 o = OrderingFilter (
34043418 fields = (
@@ -3421,6 +3435,11 @@ class Meta:
34213435 "numerical_severity" , "reporter" , "last_reviewed" ,
34223436 "jira_creation" , "jira_change" , "files" ]
34233437
3438+ def filter_mitigation_available (self , queryset , name , value ):
3439+ if value :
3440+ return queryset .exclude (mitigation__isnull = True ).exclude (mitigation__exact = "" )
3441+ return queryset .filter (Q (mitigation__isnull = True ) | Q (mitigation__exact = "" ))
3442+
34243443 def manage_kwargs (self , kwargs ):
34253444 self .prod_type = None
34263445 self .product = None
0 commit comments