Ejemplo n.º 1
0
    def get(self, request, *args, **kwargs):  # noqa
        """
        Process GET from link click and let user in to team.

        If user is already logged in, link the team member to that account. If
        the user is not logged in, and doesn't have an account, the user will be
        prompted to sign up.
        """
        # Linter doesn't like declaring `self.object` outside `__init__`.
        member = self.object = self.get_object()  # noqa
        if member is not None:
            if not request.user.is_authenticated:
                member.invite.count += 1
                member.invite.save()
                self.request.session.update({
                    'invite:allow_signup': True,
                    'invite:email': member.invite.email,
                    'invite': member.invite.pk,

                    # Auto-verify EmailAddress via django-allauth
                    'account_verified_email': member.invite.email,
                })
                url = reverse('account_signup')

                if AdminPermission.has_sso_enabled(member.team.organization):
                    url += f'?organization={member.team.organization.slug}'

                return HttpResponseRedirect(url)

            # If use is logged in, try to set the request user on the
            # fetched team member. If the member already exists on the team,
            # just delete the current member. Finally, get rid of the
            # invite too.
            org_slug = member.team.organization.slug
            invite = member.invite

            queryset = TeamMember.objects.filter(
                team=invite.team,
                member=self.request.user,
            )
            if queryset.exists():
                member.delete()
            else:
                member.member = self.request.user
                member.save()
            invite.delete()
            return HttpResponseRedirect(
                reverse(
                    'organization_detail',
                    kwargs={'slug': org_slug},
                ),
            )

        return HttpResponseRedirect(reverse('homepage'))
Ejemplo n.º 2
0
def has_sso_enabled_filter(obj, provider=None):
    """Check if `obj` has sso enabled for `provider`."""
    return AdminPermission.has_sso_enabled(obj, provider)