Skip to content

Commit ad5ec07

Browse files
committed
remove orphaned API ViewSets, serializers, and permissions for groups/roles
The dojo_groups, dojo_group_members, global_roles, product_groups, product_type_groups, and roles routes were unregistered from v2_api in 0519010 (or earlier merge); their ViewSet/Serializer/Permission classes have lived on as dead code that Pro extends. Pro now owns standalone implementations under pro/{groups,group_members, global_roles,product_groups,product_type_groups,roles}/api so these OS classes are safe to drop. - dojo/api_v2/views.py: drop RoleViewSet, DojoGroupViewSet, DojoGroupMemberViewSet, GlobalRoleViewSet, ProductGroupViewSet, ProductTypeGroupViewSet; clean unused imports (get_authorized_groups, get_authorized_group_members, get_authorized_product_groups, get_authorized_product_type_groups, Dojo_Group_Member, Global_Role, Product_Group, Product_Type_Group). Strip global_role and dojo_group_member sections from UserProfileView (matches slice 4 user-page strip). - dojo/api_v2/serializers.py: drop RoleSerializer, DojoGroupSerializer, DojoGroupMemberSerializer, GlobalRoleSerializer, ProductGroupSerializer, ProductTypeGroupSerializer; remove the same nested fields from UserProfileSerializer; clean unused imports. - dojo/authorization/api_permissions.py: drop UserHasDojoGroupPermission, UserHasDojoGroupMemberPermission, UserHasProductGroupPermission, UserHasProductTypeGroupPermission. IsSuperUserOrGlobalOwner stays because UsersViewSet.reset_api_token still uses it.
1 parent 88f1c3b commit ad5ec07

3 files changed

Lines changed: 1 addition & 495 deletions

File tree

dojo/api_v2/serializers.py

Lines changed: 1 addition & 273 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import six
1010
import tagulous
1111
from django.conf import settings
12-
from django.contrib.auth.models import Group, Permission
12+
from django.contrib.auth.models import Permission
1313
from django.contrib.auth.password_validation import validate_password
1414
from django.core.exceptions import PermissionDenied, ValidationError
1515
from django.db import transaction
@@ -27,13 +27,8 @@
2727
import dojo.risk_acceptance.helper as ra_helper
2828
from dojo.authorization.authorization import user_has_permission
2929
from dojo.authorization.models import (
30-
Dojo_Group_Member,
31-
Global_Role,
32-
Product_Group,
3330
Product_Member,
34-
Product_Type_Group,
3531
Product_Type_Member,
36-
Role,
3732
)
3833
from dojo.celery_dispatch import dojo_dispatch_task
3934
from dojo.endpoint.utils import endpoint_filter, endpoint_meta_import
@@ -43,7 +38,6 @@
4338
save_vulnerability_ids_template,
4439
)
4540
from dojo.finding.queries import get_authorized_findings
46-
from dojo.group.utils import get_auth_group_name
4741
from dojo.importers.auto_create_context import AutoCreateContextManager
4842
from dojo.importers.base_importer import BaseImporter
4943
from dojo.importers.default_importer import DefaultImporter
@@ -66,7 +60,6 @@
6660
Cred_Mapping,
6761
Cred_User,
6862
Development_Environment,
69-
Dojo_Group,
7063
Dojo_User,
7164
DojoMeta,
7265
Endpoint,
@@ -666,187 +659,6 @@ class Meta:
666659
fields = ("id", "username", "first_name", "last_name")
667660

668661

669-
class RoleSerializer(serializers.ModelSerializer):
670-
class Meta:
671-
model = Role
672-
fields = "__all__"
673-
674-
675-
class DojoGroupSerializer(serializers.ModelSerializer):
676-
configuration_permissions = serializers.PrimaryKeyRelatedField(
677-
allow_null=True,
678-
queryset=Permission.objects.filter(
679-
codename__in=get_configuration_permissions_codenames(),
680-
),
681-
many=True,
682-
required=False,
683-
source="auth_group.permissions",
684-
)
685-
686-
class Meta:
687-
model = Dojo_Group
688-
exclude = ("auth_group",)
689-
690-
def to_representation(self, instance):
691-
if not instance.auth_group:
692-
auth_group = Group(name=get_auth_group_name(instance))
693-
auth_group.save()
694-
instance.auth_group = auth_group
695-
members = instance.users.all()
696-
for member in members:
697-
auth_group.user_set.add(member)
698-
instance.save()
699-
ret = super().to_representation(instance)
700-
# This will show only "configuration_permissions" even if user has also
701-
# other permissions
702-
all_permissions = set(ret["configuration_permissions"])
703-
allowed_configuration_permissions = set(
704-
self.fields[
705-
"configuration_permissions"
706-
].child_relation.queryset.values_list("id", flat=True),
707-
)
708-
ret["configuration_permissions"] = list(
709-
all_permissions.intersection(allowed_configuration_permissions),
710-
)
711-
712-
return ret
713-
714-
def create(self, validated_data):
715-
new_configuration_permissions = None
716-
if (
717-
"auth_group" in validated_data
718-
and "permissions" in validated_data["auth_group"]
719-
): # This field was renamed from "configuration_permissions" in the meantime
720-
new_configuration_permissions = set(
721-
validated_data.pop("auth_group")["permissions"],
722-
)
723-
724-
instance = super().create(validated_data)
725-
726-
# This will update only Permissions from category
727-
# "configuration_permissions". There are no other Permissions.
728-
if new_configuration_permissions:
729-
instance.auth_group.permissions.set(new_configuration_permissions)
730-
731-
return instance
732-
733-
def update(self, instance, validated_data):
734-
permissions_in_payload = None
735-
new_configuration_permissions = None
736-
if (
737-
"auth_group" in validated_data
738-
and "permissions" in validated_data["auth_group"]
739-
): # This field was renamed from "configuration_permissions" in the meantime
740-
permissions_in_payload = validated_data.pop("auth_group")["permissions"]
741-
new_configuration_permissions = set(permissions_in_payload)
742-
743-
instance = super().update(instance, validated_data)
744-
745-
# This will update only Permissions from category
746-
# "configuration_permissions". Others will be untouched
747-
if new_configuration_permissions:
748-
allowed_configuration_permissions = set(
749-
self.fields[
750-
"configuration_permissions"
751-
].child_relation.queryset.all(),
752-
)
753-
non_configuration_permissions = (
754-
set(instance.auth_group.permissions.all())
755-
- allowed_configuration_permissions
756-
)
757-
new_permissions = non_configuration_permissions.union(
758-
new_configuration_permissions,
759-
)
760-
instance.auth_group.permissions.set(new_permissions)
761-
762-
# Clear all configuration permissions if an empty list is provided
763-
if isinstance(permissions_in_payload, list) and len(permissions_in_payload) == 0:
764-
instance.auth_group.permissions.clear()
765-
766-
return instance
767-
768-
769-
class DojoGroupMemberSerializer(serializers.ModelSerializer):
770-
class Meta:
771-
model = Dojo_Group_Member
772-
fields = "__all__"
773-
774-
def validate(self, data):
775-
if (
776-
self.instance is not None
777-
and data.get("group") != self.instance.group
778-
and not user_has_permission(
779-
self.context["request"].user,
780-
data.get("group"),
781-
"staff_only",
782-
)
783-
):
784-
msg = "You are not permitted to add a user to this group"
785-
raise PermissionDenied(msg)
786-
787-
if (
788-
self.instance is None
789-
or data.get("group") != self.instance.group
790-
or data.get("user") != self.instance.user
791-
):
792-
members = Dojo_Group_Member.objects.filter(
793-
group=data.get("group"), user=data.get("user"),
794-
)
795-
if members.count() > 0:
796-
msg = "Dojo_Group_Member already exists"
797-
raise ValidationError(msg)
798-
799-
if self.instance is not None and not data.get("role").is_owner:
800-
owners = (
801-
Dojo_Group_Member.objects.filter(
802-
group=data.get("group"), role__is_owner=True,
803-
)
804-
.exclude(id=self.instance.id)
805-
.count()
806-
)
807-
if owners < 1:
808-
msg = "There must be at least one owner"
809-
raise ValidationError(msg)
810-
811-
if data.get("role").is_owner and not user_has_permission(
812-
self.context["request"].user,
813-
data.get("group"),
814-
"staff_only",
815-
):
816-
msg = "You are not permitted to add a user as Owner to this group"
817-
raise PermissionDenied(msg)
818-
819-
return data
820-
821-
822-
class GlobalRoleSerializer(serializers.ModelSerializer):
823-
class Meta:
824-
model = Global_Role
825-
fields = "__all__"
826-
827-
def validate(self, data):
828-
user = None
829-
group = None
830-
831-
if self.instance is not None:
832-
user = self.instance.user
833-
group = self.instance.group
834-
835-
if "user" in data:
836-
user = data.get("user")
837-
if "group" in data:
838-
group = data.get("group")
839-
840-
if user is None and group is None:
841-
msg = "Global_Role must have either user or group"
842-
raise ValidationError(msg)
843-
if user is not None and group is not None:
844-
msg = "Global_Role cannot have both user and group"
845-
raise ValidationError(msg)
846-
847-
return data
848-
849-
850662
class AddUserSerializer(serializers.ModelSerializer):
851663
class Meta:
852664
model = User
@@ -966,47 +778,6 @@ def validate(self, data):
966778
return data
967779

968780

969-
class ProductGroupSerializer(serializers.ModelSerializer):
970-
class Meta:
971-
model = Product_Group
972-
fields = "__all__"
973-
974-
def validate(self, data):
975-
if (
976-
self.instance is not None
977-
and data.get("product") != self.instance.product
978-
and not user_has_permission(
979-
self.context["request"].user,
980-
data.get("product"),
981-
"add",
982-
)
983-
):
984-
msg = "You are not permitted to add a group to this product"
985-
raise PermissionDenied(msg)
986-
987-
if (
988-
self.instance is None
989-
or data.get("product") != self.instance.product
990-
or data.get("group") != self.instance.group
991-
):
992-
members = Product_Group.objects.filter(
993-
product=data.get("product"), group=data.get("group"),
994-
)
995-
if members.count() > 0:
996-
msg = "Product_Group already exists"
997-
raise ValidationError(msg)
998-
999-
if data.get("role").is_owner and not user_has_permission(
1000-
self.context["request"].user,
1001-
data.get("product"),
1002-
"staff_only",
1003-
):
1004-
msg = "You are not permitted to add a group as Owner to this product"
1005-
raise PermissionDenied(msg)
1006-
1007-
return data
1008-
1009-
1010781
class ProductTypeMemberSerializer(serializers.ModelSerializer):
1011782
class Meta:
1012783
model = Product_Type_Member
@@ -1060,47 +831,6 @@ def validate(self, data):
1060831
return data
1061832

1062833

1063-
class ProductTypeGroupSerializer(serializers.ModelSerializer):
1064-
class Meta:
1065-
model = Product_Type_Group
1066-
fields = "__all__"
1067-
1068-
def validate(self, data):
1069-
if (
1070-
self.instance is not None
1071-
and data.get("product_type") != self.instance.product_type
1072-
and not user_has_permission(
1073-
self.context["request"].user,
1074-
data.get("product_type"),
1075-
"add",
1076-
)
1077-
):
1078-
msg = "You are not permitted to add a group to this product type"
1079-
raise PermissionDenied(msg)
1080-
1081-
if (
1082-
self.instance is None
1083-
or data.get("product_type") != self.instance.product_type
1084-
or data.get("group") != self.instance.group
1085-
):
1086-
members = Product_Type_Group.objects.filter(
1087-
product_type=data.get("product_type"), group=data.get("group"),
1088-
)
1089-
if members.count() > 0:
1090-
msg = "Product_Type_Group already exists"
1091-
raise ValidationError(msg)
1092-
1093-
if data.get("role").is_owner and not user_has_permission(
1094-
self.context["request"].user,
1095-
data.get("product_type"),
1096-
"staff_only",
1097-
):
1098-
msg = "You are not permitted to add a group as Owner to this product type"
1099-
raise PermissionDenied(msg)
1100-
1101-
return data
1102-
1103-
1104834
class ProductTypeSerializer(serializers.ModelSerializer):
1105835
class Meta:
1106836
model = Product_Type
@@ -3089,8 +2819,6 @@ def validate(self, data):
30892819
class UserProfileSerializer(serializers.Serializer):
30902820
user = UserSerializer(many=False)
30912821
user_contact_info = UserContactInfoSerializer(many=False, required=False)
3092-
global_role = GlobalRoleSerializer(many=False, required=False)
3093-
dojo_group_member = DojoGroupMemberSerializer(many=True)
30942822
product_type_member = ProductTypeMemberSerializer(many=True)
30952823
product_member = ProductMemberSerializer(many=True)
30962824

0 commit comments

Comments
 (0)