Skip to content

Commit 7528fc2

Browse files
committed
Get vulnerabilities from CPE
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 6bebd6b commit 7528fc2

2 files changed

Lines changed: 31 additions & 0 deletions

File tree

vulnerabilities/api.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,3 +177,32 @@ class VulnerabilityViewSet(viewsets.ReadOnlyModelViewSet):
177177
paginate_by = 50
178178
filter_backends = (filters.DjangoFilterBackend,)
179179
filterset_class = VulnerabilityFilterSet
180+
181+
182+
class CPEFilterSet(filters.FilterSet):
183+
cpe = filters.CharFilter(method="filter_cpe")
184+
185+
class Meta:
186+
model = VulnerabilityReference
187+
fields = ["reference_id"]
188+
189+
def filter_cpe(self, queryset, name, value):
190+
cpe = unquote(value)
191+
return self.queryset.filter(reference_id=cpe)
192+
193+
194+
class CPESerializer(serializers.HyperlinkedModelSerializer):
195+
196+
vulnerability = MinimalVulnerabilitySerializer(read_only=True)
197+
198+
class Meta:
199+
model = VulnerabilityReference
200+
fields = ["vulnerability"]
201+
202+
203+
class CPEViewSet(viewsets.ReadOnlyModelViewSet):
204+
queryset = VulnerabilityReference.objects.filter(reference_id__startswith="cpe")
205+
serializer_class = CPESerializer
206+
paginate_by = 50
207+
filter_backends = (filters.DjangoFilterBackend,)
208+
filterset_class = CPEFilterSet

vulnerablecode/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from django.urls import path
2727
from rest_framework.routers import DefaultRouter
2828

29+
from vulnerabilities.api import CPEViewSet
2930
from vulnerabilities.api import PackageViewSet
3031
from vulnerabilities.api import VulnerabilityViewSet
3132
from vulnerabilities.views import HomePage
@@ -47,6 +48,7 @@ def __init__(self, *args, **kwargs):
4748
api_router.register(r"packages", PackageViewSet)
4849
# `DefaultRouter` requires `basename` when registering viewsets that don't define a queryset.
4950
api_router.register(r"vulnerabilities", VulnerabilityViewSet, basename="vulnerability")
51+
api_router.register(r"cpes", CPEViewSet, basename="cpe")
5052

5153
urlpatterns = [
5254
path("admin/", admin.site.urls),

0 commit comments

Comments
 (0)