Skip to content

Commit 064d0e0

Browse files
committed
Update the API so it returns an empty list if no filter
Make sure to use api_v3 Fix a css width for rule_metadat and rule text Signed-off-by: ziad hany <ziadhany2016@gmail.com>
1 parent 7792d40 commit 064d0e0

4 files changed

Lines changed: 48 additions & 36 deletions

File tree

vulnerabilities/api_v2.py

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -852,36 +852,3 @@ def get_view_name(self):
852852
if self.detail:
853853
return "Pipeline Instance"
854854
return "Pipeline Jobs"
855-
856-
857-
class DetectionRuleFilter(filters.FilterSet):
858-
advisory_avid = filters.CharFilter(field_name="related_advisories__avid", lookup_expr="exact")
859-
860-
rule_text_contains = filters.CharFilter(field_name="rule_text", lookup_expr="icontains")
861-
862-
class Meta:
863-
model = DetectionRule
864-
fields = ["rule_type"]
865-
866-
867-
class DetectionRuleSerializer(serializers.ModelSerializer):
868-
advisory_avid = serializers.SerializerMethodField()
869-
870-
class Meta:
871-
model = DetectionRule
872-
fields = ["rule_type", "source_url", "rule_metadata", "rule_text", "advisory_avid"]
873-
874-
def get_advisory_avid(self, obj):
875-
avids = set(advisory.avid for advisory in obj.related_advisories.all())
876-
return sorted(list(avids))
877-
878-
879-
class DetectionRuleViewSet(viewsets.ReadOnlyModelViewSet):
880-
advisories_prefetch = Prefetch(
881-
"related_advisories", queryset=AdvisoryV2.objects.only("id", "avid").distinct()
882-
)
883-
queryset = DetectionRule.objects.prefetch_related(advisories_prefetch)
884-
serializer_class = DetectionRuleSerializer
885-
throttle_classes = [AnonRateThrottle, PermissionBasedUserRateThrottle]
886-
filter_backends = [filters.DjangoFilterBackend]
887-
filterset_class = DetectionRuleFilter

vulnerabilities/api_v3.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from vulnerabilities.models import AdvisorySeverity
3131
from vulnerabilities.models import AdvisoryV2
3232
from vulnerabilities.models import AdvisoryWeakness
33+
from vulnerabilities.models import DetectionRule
3334
from vulnerabilities.models import Group
3435
from vulnerabilities.models import GroupedAdvisory
3536
from vulnerabilities.models import ImpactedPackageAffecting
@@ -704,3 +705,47 @@ def get_fixing_advisories_bulk(packages):
704705
result[package.id] = grouped
705706

706707
return result
708+
709+
710+
class DetectionRuleFilter(filters.FilterSet):
711+
advisory_avid = filters.CharFilter(field_name="related_advisories__avid", lookup_expr="exact")
712+
713+
rule_text_contains = filters.CharFilter(field_name="rule_text", lookup_expr="icontains")
714+
715+
class Meta:
716+
model = DetectionRule
717+
fields = ["rule_type"]
718+
719+
720+
class DetectionRuleSerializer(serializers.ModelSerializer):
721+
advisory_avid = serializers.SerializerMethodField()
722+
723+
class Meta:
724+
model = DetectionRule
725+
fields = ["rule_type", "source_url", "rule_metadata", "rule_text", "advisory_avid"]
726+
727+
def get_advisory_avid(self, obj):
728+
avids = {advisory.avid for advisory in obj.related_advisories.all()}
729+
return sorted(avids)
730+
731+
732+
class DetectionRuleViewSet(viewsets.ReadOnlyModelViewSet):
733+
advisories_prefetch = Prefetch(
734+
"related_advisories", queryset=AdvisoryV2.objects.only("id", "avid").distinct()
735+
)
736+
queryset = DetectionRule.objects.prefetch_related(advisories_prefetch)
737+
serializer_class = DetectionRuleSerializer
738+
throttle_classes = [AnonRateThrottle, PermissionBasedUserRateThrottle]
739+
filter_backends = [filters.DjangoFilterBackend]
740+
filterset_class = DetectionRuleFilter
741+
742+
def get_queryset(self):
743+
queryset = super().get_queryset()
744+
query_params = ["advisory_avid", "rule_text_contains", "rule_type"]
745+
has_query_params = any(
746+
query_param in self.request.query_params for query_param in query_params
747+
)
748+
if not has_query_params:
749+
return queryset.none()
750+
751+
return queryset

vulnerabilities/templates/detection_rules.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
<thead>
3131
<tr>
3232
<th>Type</th>
33-
<th>Metadata</th>
34-
<th>Text</th>
33+
<th colspan="width: 200px;">Metadata</th>
34+
<th colspan="width: 100px;">Text</th>
3535
<th>Source URL</th>
3636
<th>Advisory IDs</th>
3737
</tr>

vulnerablecode/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@
2222
from vulnerabilities.api import VulnerabilityViewSet
2323
from vulnerabilities.api_v2 import CodeFixV2ViewSet
2424
from vulnerabilities.api_v2 import CodeFixViewSet
25-
from vulnerabilities.api_v2 import DetectionRuleViewSet
2625
from vulnerabilities.api_v2 import PackageV2ViewSet
2726
from vulnerabilities.api_v2 import PipelineScheduleV2ViewSet
2827
from vulnerabilities.api_v2 import VulnerabilityV2ViewSet
2928
from vulnerabilities.api_v3 import AdvisoryV3ViewSet
3029
from vulnerabilities.api_v3 import AffectedByAdvisoriesViewSet
30+
from vulnerabilities.api_v3 import DetectionRuleViewSet
3131
from vulnerabilities.api_v3 import FixingAdvisoriesViewSet
3232
from vulnerabilities.api_v3 import PackageV3ViewSet
3333
from vulnerabilities.views import AdminLoginView

0 commit comments

Comments
 (0)