MCPcopy Index your code
hub / github.com/aboutcode-org/vulnerablecode / PackageViewSet

Class PackageViewSet

vulnerabilities/api.py:464–624  ·  view source on GitHub ↗

Lookup for vulnerable packages by Package URL.

Source from the content-addressed store, hash-verified

462
463
464class PackageViewSet(viewsets.ReadOnlyModelViewSet):
465 """
466 Lookup for vulnerable packages by Package URL.
467 """
468
469 queryset = Package.objects.all()
470 serializer_class = PackageSerializer
471 filter_backends = (filters.DjangoFilterBackend,)
472 filterset_class = PackageFilterSet
473 throttle_classes = [PermissionBasedUserRateThrottle]
474
475 def get_queryset(self):
476 return super().get_queryset().with_is_vulnerable()
477
478 @extend_schema(
479 request=PackageBulkSearchRequestSerializer,
480 responses={200: PackageSerializer(many=True)},
481 )
482 @action(
483 detail=False,
484 methods=["post"],
485 serializer_class=PackageBulkSearchRequestSerializer,
486 filter_backends=[],
487 pagination_class=None,
488 )
489 def bulk_search(self, request):
490 """
491 Lookup for vulnerable packages using many Package URLs at once.
492 """
493 serializer = self.serializer_class(data=request.data)
494 if not serializer.is_valid():
495 return Response(
496 status=status.HTTP_400_BAD_REQUEST,
497 data={
498 "error": serializer.errors,
499 "message": "A non-empty 'purls' list of PURLs is required.",
500 },
501 )
502 validated_data = serializer.validated_data
503 purls = validated_data.get("purls")
504 purl_only = validated_data.get("purl_only", False)
505 plain_purl = validated_data.get("plain_purl", False)
506
507 if plain_purl:
508 purl_objects = [PackageURL.from_string(purl) for purl in purls]
509 plain_purl_objects = [
510 PackageURL(
511 type=purl.type,
512 namespace=purl.namespace,
513 name=purl.name,
514 version=purl.version,
515 )
516 for purl in purl_objects
517 ]
518 plain_purls = [str(purl) for purl in plain_purl_objects]
519
520 query = (
521 Package.objects.filter(plain_package_url__in=plain_purls)

Callers

nothing calls this directly

Calls 1

allMethod · 0.45

Tested by

no test coverage detected