Skip to content

Commit f3fbd24

Browse files
committed
Add Filter set
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent d5baac8 commit f3fbd24

1 file changed

Lines changed: 36 additions & 4 deletions

File tree

vulnerabilities/api.py

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

704714
class 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

738747
class 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+
760791
class 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):
784815
class 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

Comments
 (0)