コード例 #1
0
    def handle_success(self):
        messages.add_message(
            self.request, messages.SUCCESS,
            _('You have been added to the %r organization.') %
            (self.om.organization.name.encode('utf-8'), )
        )

        member_joined.send_robust(
            member=self.om, organization=self.om.organization, sender=self.instance)
コード例 #2
0
    def handle_success(self):
        messages.add_message(
            self.request, messages.SUCCESS,
            _('You have been added to the %r organization.') %
            (self.om.organization.name.encode('utf-8'), ))

        member_joined.send_robust(member=self.om,
                                  organization=self.om.organization,
                                  sender=self.instance)
コード例 #3
0
 def handle_success(self):
     member_joined.send_robust(member=self.om,
                               organization=self.om.organization,
                               sender=self.instance)
コード例 #4
0
    def handle(self, request, member_id, token):
        assert request.method in ('POST', 'GET')

        try:
            om = OrganizationMember.objects.select_related('organization').get(pk=member_id)
        except OrganizationMember.DoesNotExist:
            messages.add_message(
                request,
                messages.ERROR,
                ERR_INVITE_INVALID,
            )

            return self.redirect(reverse('sentry'))

        if not om.is_pending:
            messages.add_message(
                request,
                messages.ERROR,
                ERR_INVITE_INVALID,
            )

            return self.redirect(reverse('sentry'))

        if not constant_time_compare(om.token or om.legacy_token, token):
            messages.add_message(
                request,
                messages.ERROR,
                ERR_INVITE_INVALID,
            )
            return self.redirect(reverse('sentry'))

        organization = om.organization

        qs = Project.objects.filter(
            organization=organization,
        )
        project_list = list(qs[:25])
        project_count = qs.count()

        org_requires_2fa = organization.flags.require_2fa.is_set
        user_has_2fa = Authenticator.objects.user_has_2fa(request.user.id)
        needs_2fa = org_requires_2fa and not user_has_2fa

        context = {
            'org_name': organization.name,
            'project_list': project_list,
            'project_count': project_count,
            'needs_authentication': not request.user.is_authenticated(),
            'needs_2fa': needs_2fa,
            'logout_url': u'{}?next={}'.format(
                reverse('sentry-logout'),
                request.path,
            ),
            'login_url': u'{}?next={}'.format(
                reverse('sentry-login'),
                request.path,
            ),
            'register_url': u'{}?next={}'.format(
                reverse('sentry-register'),
                request.path,
            ),
        }

        if not request.user.is_authenticated():
            # Show login or register form
            auth.initiate_login(request, next_url=request.get_full_path())
            request.session['can_register'] = True
            request.session['invite_email'] = om.email

            return self.respond('sentry/accept-organization-invite.html', context)

        if needs_2fa:
            # redirect to setup 2fa
            response = self.respond('sentry/accept-organization-invite.html', context)
            response.set_cookie(PENDING_INVITE, request.path, max_age=MAX_AGE)
            return response

        # if they're already a member of the organization its likely they're
        # using a shared account and either previewing this invite or
        # are incorrectly expecting this to create a new account for them
        context['existing_member'] = OrganizationMember.objects.filter(
            user=request.user.id,
            organization=om.organization_id,
        ).exists()

        form = self.get_form(request)
        if form.is_valid():
            if OrganizationMember.objects.filter(
                organization=organization, user=request.user
            ).exists():
                messages.add_message(
                    request, messages.SUCCESS,
                    _('You are already a member of the %r organization.') %
                    (organization.name.encode('utf-8'), )
                )

                om.delete()
            else:
                om.user = request.user
                om.email = None
                om.save()

                self.create_audit_entry(
                    request,
                    organization=organization,
                    target_object=om.id,
                    target_user=request.user,
                    event=AuditLogEntryEvent.MEMBER_ACCEPT,
                    data=om.get_audit_log_data(),
                )

                messages.add_message(
                    request, messages.SUCCESS,
                    _('You have been added to the %r organization.') %
                    (organization.name.encode('utf-8'), )
                )

                member_joined.send_robust(member=om, organization=organization, sender=self)

            request.session.pop('can_register', None)
            response = self.redirect(reverse('sentry-organization-home', args=[organization.slug]))

            if PENDING_INVITE in request.COOKIES:
                response.delete_cookie(PENDING_INVITE)
            return response

        context['form'] = form

        return self.respond('sentry/accept-organization-invite.html', context)