def get(self, request, organization, member_id): try: member = self._get_member(organization, member_id) except OrganizationMember.DoesNotExist: raise ResourceDoesNotExist return Response( serialize(member, serializer=OrganizationMemberWithTeamsSerializer()), status=status.HTTP_200_OK, )
def _serialize_member(self, member, request, allowed_roles=None): context = serialize(member, serializer=OrganizationMemberWithTeamsSerializer()) if request.access.has_scope('member:admin'): context['invite_link'] = member.get_invite_link() context['roles'] = serialize(roles.get_all(), serializer=RoleSerializer(), allowed_roles=allowed_roles) return context
def _serialize_member(self, member, request, allowed_roles=None): context = serialize(member, serializer=OrganizationMemberWithTeamsSerializer()) if request.access.has_scope("member:admin"): context["invite_link"] = member.get_invite_link() context["user"] = serialize(member.user, request.user, DetailedUserSerializer()) context["isOnlyOwner"] = self.is_only_owner(member) context["roles"] = serialize( roles.get_all(), serializer=RoleSerializer(), allowed_roles=allowed_roles ) return context
def get(self, request, organization): queryset = OrganizationMember.objects.filter( Q(user__isnull=True), Q(invite_status=InviteStatus.REQUESTED_TO_BE_INVITED.value) | Q(invite_status=InviteStatus.REQUESTED_TO_JOIN.value), organization=organization, ).order_by("invite_status", "email") return self.paginate( request=request, queryset=queryset, on_results=lambda x: serialize( x, request.user, OrganizationMemberWithTeamsSerializer()), paginator_cls=OffsetPaginator, )
def put(self, request, organization, member_id): """ Update an invite request to Organization ```````````````````````````````````````` Update and/or approve an invite request to an organization. :pparam string organization_slug: the slug of the organization the member will belong to :param string member_id: the member ID :param boolean approve: allows the member to be invited :param string role: the suggested role of the new member :param array teams: the suggested slugs of the teams the member should belong to. :auth: required """ try: member = self._get_member(organization, member_id) except OrganizationMember.DoesNotExist: raise ResourceDoesNotExist serializer = OrganizationMemberSerializer( data=request.data, context={ "organization": organization, "allowed_roles": roles.get_all() }, partial=True, ) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) result = serializer.validated_data if result.get("role"): member.update(role=result["role"]) if "teams" in result: save_team_assignments(member, result["teams"]) if "approve" in request.data: _, allowed_roles = get_allowed_roles(request, organization) serializer = ApproveInviteRequestSerializer( data=request.data, context={ "request": request, "organization": organization, "member": member, "allowed_roles": allowed_roles, }, ) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) result = serializer.validated_data if result.get("approve") and not member.invite_approved: member.approve_invite() member.save() if settings.SENTRY_ENABLE_INVITES: member.send_invite_email() member_invited.send_robust( member=member, user=request.user, sender=self, referrer=request.data.get("referrer"), ) self.create_audit_entry( request=request, organization_id=organization.id, target_object=member.id, data=member.get_audit_log_data(), event=AuditLogEntryEvent.MEMBER_INVITE if settings.SENTRY_ENABLE_INVITES else AuditLogEntryEvent.MEMBER_ADD, ) return Response( serialize(member, serializer=OrganizationMemberWithTeamsSerializer()), status=status.HTTP_200_OK, )