@@ -700,6 +700,16 @@ class Meta:
700700 model = Weakness
701701 fields = ["cwe_id" , "name" , "description" ]
702702
703+ class VulnerabilityFilter (filters .FilterSet ):
704+ vulnerability_id = filters .CharFilter (field_name = 'vulnerability_id' , lookup_expr = 'exact' )
705+ vulnerability_id__in = filters .BaseInFilter (field_name = 'vulnerability_id' , lookup_expr = 'in' )
706+ alias = filters .CharFilter (field_name = 'aliases__alias' , lookup_expr = 'exact' )
707+ alias__in = filters .BaseInFilter (field_name = 'aliases__alias' , lookup_expr = 'in' )
708+
709+ class Meta :
710+ model = Vulnerability
711+ fields = ['vulnerability_id' , 'vulnerability_id__in' , 'alias' , 'alias__in' ]
712+
703713
704714class VulnerabilityReferenceV2Serializer (serializers .ModelSerializer ):
705715 url = serializers .CharField ()
@@ -710,11 +720,11 @@ class Meta:
710720 model = VulnerabilityReference
711721 fields = ["url" , "reference_type" , "reference_id" ]
712722
713- class VulnerabilityV2Serializer (serializers . ModelSerializer ):
723+ class VulnerabilityV2Serializer (BaseResourceSerializer ):
714724 aliases = serializers .SerializerMethodField ()
715- severities = serializers .SerializerMethodField ()
716725 weaknesses = WeaknessV2Serializer (many = True )
717726 references = VulnerabilityReferenceV2Serializer (many = True , source = 'vulnerabilityreference_set' )
727+ severities = VulnerabilitySeveritySerializer (many = True )
718728
719729 class Meta :
720730 model = Vulnerability
@@ -731,8 +741,7 @@ def get_aliases(self, obj):
731741 return [alias .alias for alias in obj .aliases .all ()]
732742
733743 def get_severities (self , obj ):
734- #TODO: Need data model changes
735- return []
744+ return obj .severities
736745
737746
738747class VulnerabilityV2ViewSet (viewsets .ReadOnlyModelViewSet ):
@@ -757,6 +766,28 @@ def list(self, request, *args, **kwargs):
757766 return Response ({'vulnerabilities' : vulnerabilities })
758767
759768
769+ class PackageFilter (filters .FilterSet ):
770+ purl = filters .CharFilter (field_name = 'package_url' , lookup_expr = 'exact' )
771+ purl__in = filters .BaseInFilter (field_name = 'package_url' , lookup_expr = 'in' )
772+ affected_by_vulnerability = filters .CharFilter (
773+ field_name = 'affected_by_vulnerabilities__vulnerability_id' ,
774+ lookup_expr = 'exact'
775+ )
776+ fixing_vulnerability = filters .CharFilter (
777+ field_name = 'fixing_vulnerabilities__vulnerability_id' ,
778+ lookup_expr = 'exact'
779+ )
780+
781+ class Meta :
782+ model = Package
783+ fields = [
784+ 'purl' ,
785+ 'purl__in' ,
786+ 'affected_by_vulnerability' ,
787+ 'fixing_vulnerability' ,
788+ ]
789+
790+
760791class PackageV2Serializer (serializers .ModelSerializer ):
761792 purl = serializers .CharField (source = 'package_url' )
762793 affected_by_vulnerabilities = serializers .SerializerMethodField ()
@@ -784,6 +815,7 @@ def get_fixing_vulnerabilities(self, obj):
784815class PackageV2ViewSet (viewsets .ReadOnlyModelViewSet ):
785816 queryset = Package .objects .all ()
786817 serializer_class = PackageV2Serializer
818+ filterset_class = PackageFilter
787819
788820 def list (self , request , * args , ** kwargs ):
789821 queryset = self .get_queryset ().with_is_vulnerable ()
0 commit comments