|
36 | 36 | from vulnerabilities.forms import AdminLoginForm |
37 | 37 | from vulnerabilities.forms import AdvisorySearchForm |
38 | 38 | from vulnerabilities.forms import ApiUserCreationForm |
| 39 | +from vulnerabilities.forms import DetectionRuleSearchForm |
39 | 40 | from vulnerabilities.forms import PackageSearchForm |
40 | 41 | from vulnerabilities.forms import PipelineSchedulePackageForm |
41 | 42 | from vulnerabilities.forms import VulnerabilitySearchForm |
@@ -944,6 +945,44 @@ def get_queryset(self): |
944 | 945 | ) |
945 | 946 |
|
946 | 947 |
|
| 948 | +class DetectionRuleSearch(ListView): |
| 949 | + model = models.DetectionRule |
| 950 | + template_name = "detection_rules.html" |
| 951 | + paginate_by = PAGE_SIZE |
| 952 | + |
| 953 | + def get_context_data(self, **kwargs): |
| 954 | + context = super().get_context_data(**kwargs) |
| 955 | + request_query = self.request.GET |
| 956 | + context["detection_search_form"] = DetectionRuleSearchForm(request_query) |
| 957 | + page_obj = context["page_obj"] |
| 958 | + context["elided_page_range"] = page_obj.paginator.get_elided_page_range( |
| 959 | + page_obj.number, on_each_side=2, on_ends=1 |
| 960 | + ) |
| 961 | + return context |
| 962 | + |
| 963 | + def get_queryset(self): |
| 964 | + advisories_prefetch = Prefetch( |
| 965 | + "related_advisories", queryset=AdvisoryV2.objects.only("id", "avid") |
| 966 | + ) |
| 967 | + |
| 968 | + queryset = super().get_queryset().prefetch_related(advisories_prefetch) |
| 969 | + form = DetectionRuleSearchForm(self.request.GET) |
| 970 | + if form.is_valid(): |
| 971 | + rule_type = form.cleaned_data.get("rule_type") |
| 972 | + advisory_avid = form.cleaned_data.get("advisory_avid") |
| 973 | + rule_text = form.cleaned_data.get("rule_text_contains") |
| 974 | + |
| 975 | + if rule_type: |
| 976 | + queryset = queryset.filter(rule_type=rule_type) |
| 977 | + |
| 978 | + if advisory_avid: |
| 979 | + queryset = queryset.filter(related_advisories__avid=advisory_avid) |
| 980 | + |
| 981 | + if rule_text: |
| 982 | + queryset = queryset.filter(rule_text__icontains=rule_text) |
| 983 | + return queryset |
| 984 | + |
| 985 | + |
947 | 986 | class PipelineScheduleListView(VulnerableCodeListView, FormMixin): |
948 | 987 | model = PipelineSchedule |
949 | 988 | context_object_name = "schedule_list" |
|
0 commit comments