예제 #1
0
    def get(self, request, organization):
        queryset = OrganizationMember.objects.filter(
            Q(user__is_active=True) | Q(user__isnull=True),
            organization=organization,
        ).select_related('user').order_by('email', 'user__email')

        query = request.GET.get('query')
        if query:
            tokens = tokenize_query(query)
            for key, value in six.iteritems(tokens):
                if key == 'email':
                    queryset = queryset.filter(Q(email__in=value) |
                                               Q(user__email__in=value) |
                                               Q(user__emails__email__in=value))

                elif key == 'scope':
                    queryset = queryset.filter(role__in=[r.id for r in roles.with_any_scope(value)])

                elif key == 'role':
                    queryset = queryset.filter(role__in=value)

                elif key == 'query':
                    value = ' '.join(value)
                    queryset = queryset.filter(Q(email__icontains=value) |
                                               Q(user__email__icontains=value) |
                                               Q(user__name__icontains=value))
                else:
                    queryset = queryset.none()

        return self.paginate(
            request=request,
            queryset=queryset,
            on_results=lambda x: serialize(x, request.user),
            paginator_cls=OffsetPaginator,
        )
예제 #2
0
    def get(self, request, organization):
        queryset = (OrganizationMember.objects.filter(
            Q(user__is_active=True) | Q(user__isnull=True),
            organization=organization,
            invite_status=InviteStatus.APPROVED.value,
        ).select_related("user").order_by("email", "user__email"))

        query = request.GET.get("query")
        if query:
            tokens = tokenize_query(query)
            for key, value in six.iteritems(tokens):
                if key == "email":
                    queryset = queryset.filter(
                        Q(email__in=value)
                        | Q(user__email__in=value)
                        | Q(user__emails__email__in=value))

                elif key == "scope":
                    queryset = queryset.filter(
                        role__in=[r.id for r in roles.with_any_scope(value)])

                elif key == "role":
                    queryset = queryset.filter(role__in=value)

                elif key == "query":
                    value = " ".join(value)
                    queryset = queryset.filter(
                        Q(email__icontains=value)
                        | Q(user__email__icontains=value)
                        | Q(user__name__icontains=value))
                else:
                    queryset = queryset.none()

        return self.paginate(
            request=request,
            queryset=queryset,
            on_results=lambda x: serialize(x, request.user),
            paginator_cls=OffsetPaginator,
        )
예제 #3
0
    def get(self, request, organization):
        queryset = OrganizationMember.objects.filter(
            Q(user__is_active=True) | Q(user__isnull=True),
            organization=organization,
        ).select_related('user').order_by('email', 'user__email')

        query = request.GET.get('query')
        if query:
            tokens = tokenize_query(query)
            for key, value in six.iteritems(tokens):
                if key == 'email':
                    queryset = queryset.filter(
                        Q(email__in=value) | Q(user__email__in=value)
                        | Q(user__emails__email__in=value))

                elif key == 'scope':
                    queryset = queryset.filter(
                        role__in=[r.id for r in roles.with_any_scope(value)])

                elif key == 'role':
                    queryset = queryset.filter(role__in=value)

                elif key == 'query':
                    value = ' '.join(value)
                    queryset = queryset.filter(
                        Q(email__icontains=value)
                        | Q(user__email__icontains=value)
                        | Q(user__name__icontains=value))
                else:
                    queryset = queryset.none()

        return self.paginate(
            request=request,
            queryset=queryset,
            on_results=lambda x: serialize(x, request.user),
            paginator_cls=OffsetPaginator,
        )
    def get(self, request, organization):
        queryset = (OrganizationMember.objects.filter(
            Q(user__is_active=True) | Q(user__isnull=True),
            organization=organization,
            invite_status=InviteStatus.APPROVED.value,
        ).select_related("user").order_by("email", "user__email"))

        query = request.GET.get("query")

        if query:
            tokens = tokenize_query(query)
            for key, value in six.iteritems(tokens):
                if key == "email":
                    queryset = queryset.filter(
                        Q(email__in=value)
                        | Q(user__email__in=value)
                        | Q(user__emails__email__in=value))

                elif key == "scope":
                    queryset = queryset.filter(
                        role__in=[r.id for r in roles.with_any_scope(value)])

                elif key == "role":
                    queryset = queryset.filter(role__in=value)

                elif key == "isInvited":
                    isInvited = "true" in value
                    queryset = queryset.filter(user__isnull=isInvited)

                elif key == "ssoLinked":
                    ssoFlag = OrganizationMember.flags["sso:linked"]
                    ssoLinked = "true" in value
                    if ssoLinked:
                        queryset = queryset.filter(
                            flags=F("flags").bitor(ssoFlag))
                    else:
                        queryset = queryset.filter(
                            flags=F("flags").bitand(~ssoFlag))

                elif key == "has2fa":
                    has2fa = "true" in value
                    if has2fa:
                        types = [
                            a.type for a in available_authenticators(
                                ignore_backup=True)
                        ]
                        queryset = queryset.filter(
                            user__authenticator__isnull=False,
                            user__authenticator__type__in=types)
                    else:
                        queryset = queryset.filter(
                            user__authenticator__isnull=True)

                elif key == "query":
                    value = " ".join(value)
                    queryset = queryset.filter(
                        Q(email__icontains=value)
                        | Q(user__email__icontains=value)
                        | Q(user__name__icontains=value))
                else:
                    queryset = queryset.none()

        return self.paginate(
            request=request,
            queryset=queryset,
            on_results=lambda x: serialize(x, request.user),
            paginator_cls=OffsetPaginator,
        )