Skip to content

Commit a02e211

Browse files
authored
Merge branch 'main' into 1627-migrate-pysec
2 parents cd9afea + 45070e8 commit a02e211

File tree

4 files changed

+51
-9
lines changed

4 files changed

+51
-9
lines changed

vulnerabilities/api.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -642,17 +642,13 @@ def filter_cpe(self, queryset, name, value):
642642
return self.queryset.filter(vulnerabilityreference__reference_id__startswith=cpe).distinct()
643643

644644

645-
class CPEViewSet(viewsets.ReadOnlyModelViewSet):
646-
"""
647-
Lookup for vulnerabilities by CPE (https://nvd.nist.gov/products/cpe)
648-
"""
645+
class CPEViewSet(VulnerabilityViewSet):
646+
"""Lookup for vulnerabilities by CPE (https://nvd.nist.gov/products/cpe)"""
649647

650648
queryset = Vulnerability.objects.filter(
651649
vulnerabilityreference__reference_id__startswith="cpe"
652650
).distinct()
653-
serializer_class = VulnerabilitySerializer
654-
filter_backends = (filters.DjangoFilterBackend,)
655-
throttle_classes = [StaffUserRateThrottle, AnonRateThrottle]
651+
656652
filterset_class = CPEFilterSet
657653

658654
@action(detail=False, methods=["post"])

vulnerabilities/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ def __str__(self):
406406
@property
407407
def is_cpe(self):
408408
"""
409-
Return Trueis this is a CPE reference.
409+
Return True if this is a CPE reference.
410410
"""
411411
return self.reference_id.startswith("cpe")
412412

@@ -557,7 +557,7 @@ def for_cve(self, cve):
557557

558558
def with_is_vulnerable(self):
559559
"""
560-
Annotate Package with ``with_is_vulnerable`` boolean attribute.
560+
Annotate Package with ``is_vulnerable`` boolean attribute.
561561
"""
562562
return self.annotate(
563563
is_vulnerable=Exists(

vulnerabilities/tests/test_api.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -705,6 +705,46 @@ def test_api_response(self):
705705
self.assertEqual(response["count"], 1)
706706

707707

708+
class TestCPEApiWithPackageVulnerabilityRelation(TestCase):
709+
def setUp(self):
710+
self.user = ApiUser.objects.create_api_user(username="[email protected]")
711+
self.auth = f"Token {self.user.auth_token.key}"
712+
self.csrf_client = APIClient(enforce_csrf_checks=True)
713+
self.csrf_client.credentials(HTTP_AUTHORIZATION=self.auth)
714+
self.vulnerability = Vulnerability.objects.create(summary="test")
715+
self.affected_package, _ = Package.objects.get_or_create_from_purl(
716+
purl="pkg:nginx/[email protected]"
717+
)
718+
self.fixed_package, _ = Package.objects.get_or_create_from_purl(purl="pkg:nginx/[email protected]")
719+
AffectedByPackageRelatedVulnerability.objects.create(
720+
vulnerability=self.vulnerability,
721+
created_by="test",
722+
package=self.affected_package,
723+
confidence=100,
724+
)
725+
FixingPackageRelatedVulnerability.objects.create(
726+
vulnerability=self.vulnerability,
727+
created_by="test",
728+
package=self.fixed_package,
729+
confidence=100,
730+
)
731+
for i in range(0, 10):
732+
ref, _ = VulnerabilityReference.objects.get_or_create(
733+
reference_id=f"cpe:/a:nginx:{i}",
734+
url=f"https://nvd.nist.gov/vuln/search/results?adv_search=true&isCpeNameSearch=true&query=cpe:/a:nginx:{i}",
735+
)
736+
VulnerabilityRelatedReference.objects.create(
737+
reference=ref, vulnerability=self.vulnerability
738+
)
739+
740+
def test_cpe_api(self):
741+
response = self.csrf_client.get("/api/cpes/", format="json")
742+
self.assertEqual(status.HTTP_200_OK, response.status_code)
743+
744+
response_data = response.json()
745+
self.assertEqual(1, response_data["count"])
746+
747+
708748
class AliasApi(TestCase):
709749
def setUp(self):
710750
self.user = ApiUser.objects.create_api_user(username="[email protected]")

vulnerablecode/settings.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,3 +349,9 @@
349349
},
350350
},
351351
}
352+
353+
if DEBUG:
354+
LOGGING["django"] = {
355+
"handlers": ["console"],
356+
"level": "ERROR",
357+
}

0 commit comments

Comments
 (0)