2323from vulnerabilities .models import VulnerabilityReference
2424from vulnerabilities .models import VulnerabilitySeverity
2525from vulnerabilities .models import get_purl_query_lookups
26+ from vulnerabilities .throttling import StaffUserRateThrottle
2627
2728
2829class VulnerabilitySeveritySerializer (serializers .ModelSerializer ):
@@ -228,9 +229,11 @@ class PackageViewSet(viewsets.ReadOnlyModelViewSet):
228229 serializer_class = PackageSerializer
229230 filter_backends = (filters .DjangoFilterBackend ,)
230231 filterset_class = PackageFilterSet
232+ throttle_classes = [StaffUserRateThrottle ]
233+ throttle_scope = "packages"
231234
232235 # TODO: Fix the swagger documentation for this endpoint
233- @action (detail = False , methods = ["post" ])
236+ @action (detail = False , methods = ["post" ], throttle_scope = "bulk_search_packages" )
234237 def bulk_search (self , request ):
235238 """
236239 Lookup for vulnerable packages using many Package URLs at once.
@@ -254,15 +257,15 @@ def bulk_search(self, request):
254257 if purl_data :
255258 purl_response = PackageSerializer (purl_data [0 ], context = {"request" : request }).data
256259 else :
257- purl_response = purl
260+ purl_response = purl . to_dict ()
258261 purl_response ["unresolved_vulnerabilities" ] = []
259262 purl_response ["resolved_vulnerabilities" ] = []
260263 purl_response ["purl" ] = purl_string
261264 response .append (purl_response )
262265
263266 return Response (response )
264267
265- @action (detail = False , methods = ["get" ])
268+ @action (detail = False , methods = ["get" ], throttle_scope = "vulnerable_packages" )
266269 def all (self , request ):
267270 """
268271 Return the Package URLs of all packages known to be vulnerable.
@@ -314,6 +317,8 @@ def get_queryset(self):
314317 serializer_class = VulnerabilitySerializer
315318 filter_backends = (filters .DjangoFilterBackend ,)
316319 filterset_class = VulnerabilityFilterSet
320+ throttle_classes = [StaffUserRateThrottle ]
321+ throttle_scope = "vulnerabilities"
317322
318323
319324class CPEFilterSet (filters .FilterSet ):
@@ -334,9 +339,11 @@ class CPEViewSet(viewsets.ReadOnlyModelViewSet):
334339 ).distinct ()
335340 serializer_class = VulnerabilitySerializer
336341 filter_backends = (filters .DjangoFilterBackend ,)
342+ throttle_classes = [StaffUserRateThrottle ]
337343 filterset_class = CPEFilterSet
344+ throttle_scope = "cpes"
338345
339- @action (detail = False , methods = ["post" ])
346+ @action (detail = False , methods = ["post" ], throttle_scope = "bulk_search_cpes" )
340347 def bulk_search (self , request ):
341348 """
342349 Lookup for vulnerabilities using many CPEs at once.
@@ -378,3 +385,5 @@ class AliasViewSet(viewsets.ReadOnlyModelViewSet):
378385 serializer_class = VulnerabilitySerializer
379386 filter_backends = (filters .DjangoFilterBackend ,)
380387 filterset_class = AliasFilterSet
388+ throttle_classes = [StaffUserRateThrottle ]
389+ throttle_scope = "aliases"
0 commit comments