コード例 #1
0
ファイル: test_importer.py プロジェクト: solleks/commcare-hq
    def test_update_pending_user_role(self, mock_send_activation_email):
        import_users_and_groups(self.domain.name, [
            self._get_spec(web_user='******',
                           is_account_confirmed='False',
                           send_confirmation_email='True',
                           role=self.role.name)
        ], [], self.uploading_user, mock.MagicMock())
        self.assertEqual(mock_send_activation_email.call_count, 1)
        self.assertEqual(
            self.user.get_role(self.domain_name).name, self.role.name)
        self.assertEqual(
            Invitation.by_email('*****@*****.**')[0].role.split(":")[1],
            self.role._id)

        added_user_id = self.user._id
        import_users_and_groups(self.domain.name, [
            self._get_spec(web_user='******',
                           user_id=added_user_id,
                           is_account_confirmed='False',
                           send_confirmation_email='True',
                           role=self.other_role.name)
        ], [], self.uploading_user, mock.MagicMock())
        self.assertEqual(mock_send_activation_email.call_count,
                         1)  # invite only sent once
        self.assertEqual(len(Invitation.by_email('*****@*****.**')),
                         1)  # only one invite associated with user
        self.assertEqual(
            self.user.get_role(self.domain.name).name, self.other_role.name)
        self.assertEqual(
            Invitation.by_email('*****@*****.**')[0].role,
            self.other_role.get_qualified_id())
コード例 #2
0
 def redirect_to_on_success(self, email, domain):
     if Invitation.by_email(email).count() > 0 and not self.request.GET.get(
             'no_redirect'):
         return reverse("domain_select_redirect")
     else:
         return reverse("domain_homepage", args=[
             domain,
         ])
コード例 #3
0
def accept_all_invitations(request):
    user = request.couch_user
    invites = Invitation.by_email(user.username)
    for invitation in invites:
        if not invitation.is_expired:
            invitation.accept_invitation_and_join_domain(user)
            messages.success(
                request,
                _(f'You have been added to the "{invitation.domain}" project space.'
                  ))
    return HttpResponseRedirect(reverse('domain_select_redirect'))
コード例 #4
0
def select(request, do_not_redirect=False, next_view=None):
    if not hasattr(request, 'couch_user'):
        return redirect('registration_domain')

    # next_view must be a url that expects exactly one parameter, a domain name
    next_view = next_view or request.GET.get('next_view')
    show_invitations = False
    if not next_view:
        next_view = "domain_homepage"
        show_invitations = True
    domain_links = get_domain_links_for_dropdown(request.couch_user, view_name=next_view)
    if not domain_links:
        return redirect('registration_domain')
    domain_links += get_mirror_domain_links_for_dropdown(request.couch_user, view_name=next_view)
    domain_links = sorted(domain_links, key=lambda link: link['display_name'].lower())

    email = request.couch_user.get_email()
    open_invitations = [e for e in Invitation.by_email(email) if not e.is_expired]

    additional_context = {
        'domain_links': domain_links,
        'invitation_links': [{
            'display_name': i.domain,
            'url': reverse("domain_accept_invitation", args=[i.domain, i.uuid]) + '?no_redirect=true',
        } for i in open_invitations] if show_invitations else [],
        'current_page': {'page_name': _('Select A Project')},
    }

    domain_select_template = "domain/select.html"
    last_visited_domain = get_last_visited_domain(request.couch_user)
    if open_invitations \
       or do_not_redirect \
       or not last_visited_domain:
        return render(request, domain_select_template, additional_context)
    else:
        domain_obj = Domain.get_by_name(last_visited_domain)
        if domain_obj and domain_obj.is_active:
            # mirrors logic in login_and_domain_required
            if (
                request.couch_user.is_member_of(domain_obj, allow_mirroring=True)
                or (request.user.is_superuser and not domain_obj.restrict_superusers)
                or domain_obj.is_snapshot
            ):
                try:
                    return HttpResponseRedirect(reverse(next_view or 'dashboard_default',
                                                args=[last_visited_domain]))
                except Http404:
                    pass

        set_last_visited_domain(request.couch_user, None)
        return render(request, domain_select_template, additional_context)
コード例 #5
0
def accept_all_invitations(request):
    def _invite(invitation, user):
        user.add_as_web_user(invitation.domain, role=invitation.role,
                             location_id=invitation.supply_point, program_id=invitation.program)
        invitation.is_accepted = True
        invitation.save()
        send_confirmation_email(invitation)

    user = request.couch_user
    invites = Invitation.by_email(user.username)
    for invitation in invites:
        if not invitation.is_expired:
            _invite(invitation, user)
            messages.success(request, _(f'You have been added to the "{invitation.domain}" project space.'))
    return HttpResponseRedirect(reverse('domain_select_redirect'))
コード例 #6
0
ファイル: views.py プロジェクト: soitun/commcare-hq
 def extra_context(self):
     invitations = [
         e for e in Invitation.by_email(self.request.user.username)
         if not e.is_expired
     ]
     return {
         'invitation_links': [{
             'domain':
             i.domain,
             'url':
             reverse("domain_accept_invitation", args=[i.domain, i.uuid]) +
             '?no_redirect=true',
         } for i in invitations],
         'show_multiple_invites':
         len(invitations) > 1,
     }
コード例 #7
0
def select(request,
           domain_select_template='domain/select.html',
           do_not_redirect=False):
    domains_for_user = Domain.active_for_user(request.user)
    if not domains_for_user:
        from corehq.apps.registration.views import track_domainless_new_user
        track_domainless_new_user(request)
        return redirect('registration_domain')

    email = request.couch_user.get_email()
    open_invitations = [
        e for e in Invitation.by_email(email) if not e.is_expired
    ]

    additional_context = {
        'domains_for_user': domains_for_user,
        'open_invitations': open_invitations,
        'current_page': {
            'page_name': _('Select A Project')
        },
    }

    last_visited_domain = request.session.get('last_visited_domain')
    if open_invitations \
       or do_not_redirect \
       or not last_visited_domain:
        return render(request, domain_select_template, additional_context)
    else:
        domain_obj = Domain.get_by_name(last_visited_domain)
        if domain_obj and domain_obj.is_active:
            # mirrors logic in login_and_domain_required
            if (request.couch_user.is_member_of(domain_obj)
                    or (request.user.is_superuser
                        and not domain_obj.restrict_superusers)
                    or domain_obj.is_snapshot):
                try:
                    from corehq.apps.dashboard.views import dashboard_default
                    return dashboard_default(request, last_visited_domain)
                except Http404:
                    pass

        del request.session['last_visited_domain']
        return render(request, domain_select_template, additional_context)
コード例 #8
0
ファイル: base.py プロジェクト: dimagi/commcare-hq
def select(request, domain_select_template='domain/select.html', do_not_redirect=False):
    domains_for_user = Domain.active_for_user(request.user)
    if not domains_for_user:
        from corehq.apps.registration.views import track_domainless_new_user
        track_domainless_new_user(request)
        return redirect('registration_domain')

    email = request.couch_user.get_email()
    open_invitations = [e for e in Invitation.by_email(email) if not e.is_expired]

    additional_context = {
        'domains_for_user': domains_for_user,
        'open_invitations': open_invitations,
        'current_page': {'page_name': _('Select A Project')},
    }

    last_visited_domain = request.session.get('last_visited_domain')
    if open_invitations \
       or do_not_redirect \
       or not last_visited_domain:
        return render(request, domain_select_template, additional_context)
    else:
        domain_obj = Domain.get_by_name(last_visited_domain)
        if domain_obj and domain_obj.is_active:
            # mirrors logic in login_and_domain_required
            if (
                request.couch_user.is_member_of(domain_obj)
                or (request.user.is_superuser and not domain_obj.restrict_superusers)
                or domain_obj.is_snapshot
            ):
                try:
                    from corehq.apps.dashboard.views import dashboard_default
                    return dashboard_default(request, last_visited_domain)
                except Http404:
                    pass

        del request.session['last_visited_domain']
        return render(request, domain_select_template, additional_context)
コード例 #9
0
 def test_by_email(self):
     self.assertEqual(len(Invitation.by_email('*****@*****.**')), 1)
     self.assertEqual(len(Invitation.by_email('*****@*****.**')), 1)
     self.assertEqual(len(Invitation.by_email('*****@*****.**')), 0)
コード例 #10
0
ファイル: test_models.py プロジェクト: ansarbek/commcare-hq
 def test_by_email(self):
     self.assertEqual(len(Invitation.by_email('*****@*****.**')), 1)
     self.assertEqual(len(Invitation.by_email('*****@*****.**')), 1)
     self.assertEqual(len(Invitation.by_email('*****@*****.**')), 0)