Example #1
0
    def test_users_domain_membership(self):
        web_user = WebUser.create(
            self.domain.name,
            f'webuser@{self.domain.name}.{HQ_ACCOUNT_ROOT}',
            '******',
            created_by=None,
            created_via=None)

        another_domain = Domain(name="another-test", is_active=True)
        another_domain.save()
        self.addCleanup(another_domain.delete)

        # add more than 1 domain membership to trigger _log_web_user_membership_removed in tests
        web_user.add_domain_membership(another_domain.name)
        web_user.save()

        self.domain.delete()

        user_history = UserHistory.objects.last()
        self.assertEqual(user_history.by_domain, None)
        self.assertEqual(user_history.for_domain, self.domain.name)
        self.assertEqual(user_history.changed_by, SYSTEM_USER_ID)
        self.assertEqual(user_history.user_id, web_user.get_id)
        self.assertEqual(user_history.change_messages,
                         UserChangeMessage.domain_removal(self.domain.name))
        self.assertEqual(
            user_history.changed_via,
            'corehq.apps.domain.deletion._delete_web_user_membership')
        self.assertEqual(user_history.changes, {})
Example #2
0
 def post(self, request, *args, **kwargs):
     if self.request.couch_user.is_domain_admin(self.domain_to_remove):
         messages.error(
             request,
             _("Unable remove membership because you are the admin of %s") %
             self.domain_to_remove)
     else:
         try:
             self.request.couch_user.delete_domain_membership(
                 self.domain_to_remove, create_record=True)
             self.request.couch_user.save()
             log_user_change(
                 by_domain=None,
                 for_domain=self.domain_to_remove,
                 couch_user=request.couch_user,
                 changed_by_user=request.couch_user,
                 changed_via=USER_CHANGE_VIA_WEB,
                 change_messages=UserChangeMessage.domain_removal(
                     self.domain_to_remove),
                 by_domain_required_for_log=False,
             )
             messages.success(
                 request,
                 _("You are no longer part of the project %s") %
                 self.domain_to_remove)
         except Exception:
             messages.error(
                 request,
                 _("There was an error removing you from this project."))
     return self.get(request, *args, **kwargs)
Example #3
0
def remove_web_user_from_domain(domain,
                                user,
                                username,
                                upload_user,
                                user_change_logger=None,
                                is_web_upload=False):
    if not user or not user.is_member_of(domain):
        if is_web_upload:
            remove_invited_web_user(domain, username)
            if user_change_logger:
                user_change_logger.add_info(
                    UserChangeMessage.invitation_revoked_for_domain(domain))
        else:
            raise UserUploadError(
                _("You cannot remove a web user that is not a member of this project."
                  " {web_user} is not a member.").format(web_user=user))
    elif username == upload_user.username:
        raise UserUploadError(
            _("You cannot remove yourself from a domain via bulk upload"))
    else:
        user.delete_domain_membership(domain)
        user.save()
        if user_change_logger:
            user_change_logger.add_info(
                UserChangeMessage.domain_removal(domain))
Example #4
0
def _log_web_user_membership_removed(user, domain, via):
    log_user_change(by_domain=None,
                    for_domain=domain,
                    couch_user=user,
                    changed_by_user=SYSTEM_USER_ID,
                    changed_via=via,
                    change_messages=UserChangeMessage.domain_removal(domain))