Skip to content

Commit 252e85b

Browse files
committed
Added functionality to risk acceptance
1 parent f224469 commit 252e85b

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

dojo/risk_acceptance/api.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
from abc import ABC, abstractmethod
22
from typing import NamedTuple
33

4+
from django.core.exceptions import PermissionDenied
45
from django.db.models import QuerySet
56
from django.utils import timezone
67
from drf_spectacular.utils import extend_schema
78
from rest_framework import serializers, status
89
from rest_framework.decorators import action
9-
from rest_framework.permissions import IsAdminUser
10+
from rest_framework.permissions import IsAuthenticated
1011
from rest_framework.response import Response
1112

13+
from dojo.api_v2.permissions import UserHasRiskAcceptancePermission
1214
from dojo.api_v2.serializers import RiskAcceptanceSerializer
1315
from dojo.authorization.roles_permissions import Permissions
1416
from dojo.engagement.queries import get_authorized_engagements
@@ -40,10 +42,14 @@ def risk_application_model_class(self):
4042
request=AcceptedRiskSerializer(many=True),
4143
responses={status.HTTP_201_CREATED: RiskAcceptanceSerializer(many=True)},
4244
)
43-
@action(methods=["post"], detail=True, permission_classes=[IsAdminUser], serializer_class=AcceptedRiskSerializer,
44-
filter_backends=[], pagination_class=None)
45+
@action(methods=["post"], detail=True, permission_classes=(IsAuthenticated, UserHasRiskAcceptancePermission),
46+
serializer_class=AcceptedRiskSerializer, filter_backends=[], pagination_class=None)
4547
def accept_risks(self, request, pk=None):
4648
model = self.get_object()
49+
product = model.product if hasattr(model, "product") else model.engagement.product
50+
if not product.enable_full_risk_acceptance:
51+
msg = "Full risk acceptance is not enabled for this product"
52+
raise PermissionDenied(msg)
4753
serializer = AcceptedRiskSerializer(data=request.data, many=True)
4854
if serializer.is_valid():
4955
accepted_risks = serializer.save()
@@ -63,7 +69,7 @@ class AcceptedFindingsMixin(ABC):
6369
request=AcceptedRiskSerializer(many=True),
6470
responses={status.HTTP_201_CREATED: RiskAcceptanceSerializer(many=True)},
6571
)
66-
@action(methods=["post"], detail=False, permission_classes=[IsAdminUser], serializer_class=AcceptedRiskSerializer)
72+
@action(methods=["post"], detail=False, permission_classes=[IsAuthenticated], serializer_class=AcceptedRiskSerializer)
6773
def accept_risks(self, request):
6874
serializer = AcceptedRiskSerializer(data=request.data, many=True)
6975
if serializer.is_valid():
@@ -72,7 +78,9 @@ def accept_risks(self, request):
7278
return Response(data=serializer.errors, status=status.HTTP_400_BAD_REQUEST)
7379
owner = request.user
7480
accepted_result = []
75-
for engagement in get_authorized_engagements(Permissions.Engagement_View):
81+
for engagement in get_authorized_engagements(Permissions.Risk_Acceptance):
82+
if not engagement.product.enable_full_risk_acceptance:
83+
continue
7684
base_findings = engagement.unaccepted_open_findings
7785
accepted = _accept_risks(accepted_risks, base_findings, owner)
7886
engagement.accept_risks(accepted)

0 commit comments

Comments
 (0)