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())
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, ])
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'))
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)
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'))
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, }
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)
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)
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)