@@ -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
705715class 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
739748class 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+
761792class 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):
785816class 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