Skip to content

Commit e389ce5

Browse files
committed
Add Filter set
Signed-off-by: Tushar Goel <[email protected]>
1 parent 05f1ba1 commit e389ce5

File tree

1 file changed

+36
-4
lines changed

1 file changed

+36
-4
lines changed

vulnerabilities/api.py

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,16 @@ class Meta:
701701
model = Weakness
702702
fields = ["cwe_id", "name", "description"]
703703

704+
class VulnerabilityFilter(filters.FilterSet):
705+
vulnerability_id = filters.CharFilter(field_name='vulnerability_id', lookup_expr='exact')
706+
vulnerability_id__in = filters.BaseInFilter(field_name='vulnerability_id', lookup_expr='in')
707+
alias = filters.CharFilter(field_name='aliases__alias', lookup_expr='exact')
708+
alias__in = filters.BaseInFilter(field_name='aliases__alias', lookup_expr='in')
709+
710+
class Meta:
711+
model = Vulnerability
712+
fields = ['vulnerability_id', 'vulnerability_id__in', 'alias', 'alias__in']
713+
704714

705715
class VulnerabilityReferenceV2Serializer(serializers.ModelSerializer):
706716
url = serializers.CharField()
@@ -711,11 +721,11 @@ class Meta:
711721
model = VulnerabilityReference
712722
fields = ["url", "reference_type", "reference_id"]
713723

714-
class VulnerabilityV2Serializer(serializers.ModelSerializer):
724+
class VulnerabilityV2Serializer(BaseResourceSerializer):
715725
aliases = serializers.SerializerMethodField()
716-
severities = serializers.SerializerMethodField()
717726
weaknesses = WeaknessV2Serializer(many=True)
718727
references = VulnerabilityReferenceV2Serializer(many=True, source='vulnerabilityreference_set')
728+
severities = VulnerabilitySeveritySerializer(many=True)
719729

720730
class Meta:
721731
model = Vulnerability
@@ -732,8 +742,7 @@ def get_aliases(self, obj):
732742
return [alias.alias for alias in obj.aliases.all()]
733743

734744
def get_severities(self, obj):
735-
#TODO: Need data model changes
736-
return []
745+
return obj.severities
737746

738747

739748
class VulnerabilityV2ViewSet(viewsets.ReadOnlyModelViewSet):
@@ -758,6 +767,28 @@ def list(self, request, *args, **kwargs):
758767
return Response({'vulnerabilities': vulnerabilities})
759768

760769

770+
class PackageFilter(filters.FilterSet):
771+
purl = filters.CharFilter(field_name='package_url', lookup_expr='exact')
772+
purl__in = filters.BaseInFilter(field_name='package_url', lookup_expr='in')
773+
affected_by_vulnerability = filters.CharFilter(
774+
field_name='affected_by_vulnerabilities__vulnerability_id',
775+
lookup_expr='exact'
776+
)
777+
fixing_vulnerability = filters.CharFilter(
778+
field_name='fixing_vulnerabilities__vulnerability_id',
779+
lookup_expr='exact'
780+
)
781+
782+
class Meta:
783+
model = Package
784+
fields = [
785+
'purl',
786+
'purl__in',
787+
'affected_by_vulnerability',
788+
'fixing_vulnerability',
789+
]
790+
791+
761792
class PackageV2Serializer(serializers.ModelSerializer):
762793
purl = serializers.CharField(source='package_url')
763794
affected_by_vulnerabilities = serializers.SerializerMethodField()
@@ -785,6 +816,7 @@ def get_fixing_vulnerabilities(self, obj):
785816
class PackageV2ViewSet(viewsets.ReadOnlyModelViewSet):
786817
queryset = Package.objects.all()
787818
serializer_class = PackageV2Serializer
819+
filterset_class = PackageFilter
788820

789821
def list(self, request, *args, **kwargs):
790822
queryset = self.get_queryset().with_is_vulnerable()

0 commit comments

Comments
 (0)