from django.utils.translation import gettext as _ from rest_framework.exceptions import NotFound, PermissionDenied from pingcap_sso.api.base import Endpoint from pingcap_sso.api.exceptions import Conflict from pingcap_sso.models import Organization, OrganizationUser, OrganizationApply class OrganizationEnrollEndpoint(Endpoint): def convert_args(self, request, *args, **kwargs): user = request.user if OrganizationUser.objects.filter(user=user).exists() or \ OrganizationApply.objects.filter( created_by_user=user, audit_status=OrganizationApply.AUDIT_STATUS_PEDNING).exists(): raise Conflict(_('you have joined or applied for an organization')) return (args, kwargs) class OrganizationEndpoint(Endpoint): def convert_args(self, request, org_slug, *args, **kwargs): try: org = Organization.objects.get(slug=org_slug) except Organization.DoesNotExist: raise NotFound(_('organization does not exist')) user = request.user if not (user.is_superuser or user.is_staff): if not OrganizationUser.objects.filter( organization=org, user=user).exists(): raise PermissionDenied(_('you do not have permission to access this organization')) kwargs['org'] = org return (args, kwargs) class OrganizationAdminEndpoint(Endpoint): def convert_args(self, request, org_slug, *args, **kwargs): try: org = Organization.objects.get(slug=org_slug) except Organization.DoesNotExist: raise NotFound(_('organization does not exist')) user = request.user if not (user.is_superuser or user.is_staff): if not OrganizationUser.objects.filter( organization=org, user=user, role=OrganizationUser.ROLE_ADMIN).exists(): raise PermissionDenied(_('you do not have permission to perform this action')) kwargs['org'] = org return (args, kwargs)