Example #1
0
    def test_update(self):
        self.client.login(username=self.username, password=self.password)

        user = WebUser.create(domain=self.domain.name, username="******", password="******")

        user_json = {
            "email":"*****@*****.**",
            "first_name":"Joe",
            "is_admin": True,
            "last_name":"Admin",
            "permissions":{
                "edit_apps":True,
                "edit_commcare_users":True,
                "edit_data":True,
                "edit_web_users":True,
                "view_reports":True
            },
            "phone_numbers":[
            ],
            "role":"admin"
        }

        backend_id = user._id
        response = self.client.put(self.single_endpoint(backend_id),
                                   simplejson.dumps(user_json),
                                   content_type='application/json')
        self.assertEqual(response.status_code, 204, response.content)
        modified = WebUser.get(backend_id)
        self.assertEqual(modified.username, "test")
        self.assertEqual(modified.first_name, "Joe")
        self.assertEqual(modified.last_name, "Admin")
        self.assertEqual(modified.email, "*****@*****.**")
        modified.delete()
Example #2
0
    def handle(self, *args, **options):
        from corehq.apps.users.models import WebUser
        if len(args) != 3:
            raise CommandError('Usage: manage.py bootstrap <domain> <email> <password>')
        domain_name, username, passwd = args
        domain = Domain.get_or_create_with_name(domain_name, is_active=True)

        couch_user = WebUser.get_by_username(username)
        membership = None
        if couch_user:
            if not isinstance(couch_user, WebUser):
                raise CommandError('Username already in use by a non-web user')

            membership = couch_user.get_domain_membership(domain_name)
        else:
            couch_user = WebUser.create(domain_name, username, passwd)

        if not membership:
            couch_user.add_domain_membership(domain_name, is_admin=True)

        couch_user.is_superuser = True
        couch_user.is_staff = True
        couch_user.save()

        print "user %s created and added to domain %s" % (couch_user.username, domain)

        if not getattr(settings, 'BASE_ADDRESS', None):
            print ("Warning: You must set BASE_ADDRESS setting "
                   "in your localsettings.py file in order for commcare-hq "
                   "to be able to generate absolute urls. "
                   "This is necessary for a number of features.")
Example #3
0
 def obj_get_list(self, bundle, **kwargs):
     domain = kwargs['domain']
     username = bundle.request.GET.get('username')
     if username:
         user = WebUser.get_by_username(username)
         return [user] if user else []
     return list(WebUser.by_domain(domain))
Example #4
0
def _delete_web_user_membership(domain_name):
    from corehq.apps.users.models import WebUser
    active_web_users = WebUser.by_domain(domain_name)
    inactive_web_users = WebUser.by_domain(domain_name, is_active=False)
    for web_user in list(active_web_users) + list(inactive_web_users):
        web_user.delete_domain_membership(domain_name)
        web_user.save()
Example #5
0
    def handle(self, username, **options):
        from corehq.apps.users.models import WebUser
        try:
            validate_email(username)
        except EmailSyntaxError:
            raise CommandError('Your username must be an email address')
        couch_user = WebUser.get_by_username(username)
        if couch_user:
            if not isinstance(couch_user, WebUser):
                raise CommandError('Username already in use by a non-web user')
            print("✓ User {} exists".format(couch_user.username))
        else:
            password = self.get_password_from_user()
            couch_user = WebUser.create(None, username, password)
            print("→ User {} created".format(couch_user.username))

        is_superuser_changed = not couch_user.is_superuser
        is_staff_changed = not couch_user.is_staff
        couch_user.is_superuser = True
        couch_user.is_staff = True

        if is_superuser_changed or is_staff_changed:
            couch_user.save()

        if is_superuser_changed:
            print("→ User {} is now a superuser".format(couch_user.username))
        else:
            print("✓ User {} is a superuser".format(couch_user.username))

        if is_staff_changed:
            print("→ User {} can now access django admin".format(couch_user.username))
        else:
            print("✓ User {} can access django admin".format(couch_user.username))
Example #6
0
def sync_ilsgateway_webuser(domain, ilsgateway_webuser):
    user = WebUser.get_by_username(ilsgateway_webuser.email.lower())
    user_dict = {
        'first_name': ilsgateway_webuser.first_name,
        'last_name': ilsgateway_webuser.last_name,
        'is_staff': ilsgateway_webuser.is_staff,
        'is_active': ilsgateway_webuser.is_active,
        'is_superuser': ilsgateway_webuser.is_superuser,
        'last_login': force_to_datetime(ilsgateway_webuser.last_login),
        'date_joined': force_to_datetime(ilsgateway_webuser.date_joined),
        'password_hashed': True,
    }
    sp = SupplyPointCase.view('hqcase/by_domain_external_id',
                              key=[domain, str(ilsgateway_webuser.location)],
                              reduce=False,
                              include_docs=True,
                              limit=1).first()
    role_id = ilsgateway_webuser.role_id if hasattr(ilsgateway_webuser, 'role_id') else None
    location_id = sp.location_id if sp else None

    if user is None:
        try:
            user = WebUser.create(domain=None, username=ilsgateway_webuser.email.lower(),
                                  password=ilsgateway_webuser.password, email=ilsgateway_webuser.email, **user_dict)
            user.add_domain_membership(domain, role_id=role_id, location_id=location_id)
            user.save()
        except Exception as e:
            logging.error(e)
    else:
        if domain not in user.get_domains():
            user.add_domain_membership(domain, role_id=role_id, location_id=location_id)
            user.save()

    return user
Example #7
0
def orgs_team_members(request, org, team_id, template="orgs/orgs_team_members.html"):
    #organization and teams
    organization = Organization.get_by_name(org)
    teams = Team.get_by_org(org)
    current_domains = Domain.get_by_organization(org)

    #check that the team exists
    team = Team.get(team_id)
    if team is None:
        raise Http404("Group %s does not exist" % team_id)

    #inspect the members of the team
    member_ids = team.get_member_ids()
    members = WebUser.view("_all_docs", keys=member_ids, include_docs=True).all()
    members.sort(key=lambda user: user.username)

    #inspect the domains of the team
    domain_names = team.get_domains()
    domains = list()
    for name in domain_names:
        domains.append([Domain.get_by_name(name), team.role_label(domain=name)])

    all_org_domains = Domain.get_by_organization(org)
    non_domains = [domain for domain in all_org_domains if domain.name not in domain_names]

    all_org_member_ids = organization.members
    all_org_members = WebUser.view("_all_docs", keys=all_org_member_ids, include_docs=True).all()
    non_members = [member for member in all_org_members if member.user_id not in member_ids]

    vals = dict(org=organization, team=team, teams=teams, members=members, nonmembers=non_members, domains=current_domains, team_domains=domains, team_nondomains=non_domains)
    return render_to_response(request, template, vals)
Example #8
0
    def setUpClass(cls):
        super(GetRestoreUserTest, cls).setUpClass()
        cls.project = Domain(name=cls.domain)
        cls.project.save()

        cls.other_project = Domain(name=cls.other_domain)
        cls.other_project.save()

        cls.web_user = WebUser.create(
            username='******',
            domain=cls.domain,
            password='******',
        )
        cls.commcare_user = CommCareUser.create(
            username=format_username('jane', cls.domain),
            domain=cls.domain,
            password='******',
        )
        cls.other_commcare_user = CommCareUser.create(
            username=format_username('john', cls.domain),
            domain=cls.domain,
            password='******',
        )
        cls.super_user = WebUser.create(
            username='******',
            domain=cls.other_domain,
            password='******',
        )
        cls.super_user.is_superuser = True
        cls.super_user.save()
 def make_web_user(cls, email, domain=None):
     domain = domain or cls.domain
     domains = [domain]
     user = WebUser(username=email, domains=domains)
     user.domain_memberships = [DomainMembership(domain=cls.domain)]
     UserESFake.save_doc(user._doc)
     return user
Example #10
0
    def web_user_sync(self, ews_webuser):
        username = ews_webuser.email.lower()
        if not username:
            try:
                validate_email(ews_webuser.username)
                username = ews_webuser.username
            except ValidationError:
                return None
        user = WebUser.get_by_username(username)
        user_dict = {
            'first_name': ews_webuser.first_name,
            'last_name': ews_webuser.last_name,
            'is_active': ews_webuser.is_active,
            'last_login': force_to_datetime(ews_webuser.last_login),
            'date_joined': force_to_datetime(ews_webuser.date_joined),
            'password_hashed': True,
        }
        location_id = None
        if ews_webuser.location:
            try:
                location = SQLLocation.objects.get(domain=self.domain, external_id=ews_webuser.location)
                location_id = location.location_id
            except SQLLocation.DoesNotExist:
                pass

        if user is None:
            try:
                user = WebUser.create(domain=None, username=username,
                                      password=ews_webuser.password, email=ews_webuser.email,
                                      **user_dict)
                user.add_domain_membership(self.domain, location_id=location_id)
            except Exception as e:
                logging.error(e)
        else:
            if self.domain not in user.get_domains():
                user.add_domain_membership(self.domain, location_id=location_id)

        ews_webuser_extension(user, ews_webuser)
        dm = user.get_domain_membership(self.domain)

        if dm.location_id != location_id:
            dm.location_id = location_id

        if ews_webuser.is_superuser:
            dm.role_id = UserRole.by_domain_and_name(self.domain, 'Administrator')[0].get_id
        elif ews_webuser.groups and ews_webuser.groups[0].name == 'facility_manager':
            dm.role_id = UserRole.by_domain_and_name(self.domain, 'Facility manager')[0].get_id
        else:
            if ews_webuser.supply_point:
                supply_point = get_supply_point_case_by_domain_external_id(self.domain, ews_webuser.supply_point)
                if supply_point:
                    dm.location_id = supply_point.location_id
                    dm.role_id = UserRole.by_domain_and_name(self.domain, 'Web Reporter')[0].get_id
                else:
                    dm.role_id = UserRole.get_read_only_role_by_domain(self.domain).get_id
            else:
                dm.role_id = UserRole.get_read_only_role_by_domain(self.domain).get_id
        user.save()
        return user
 def make_web_user(cls, email, domain=None):
     domain = domain or cls.domain
     domains = [domain]
     user = WebUser(username=email, domains=domains)
     user.domain_memberships = [DomainMembership(domain=domain)]
     doc = user._doc
     doc['username.exact'] = doc['username']
     doc['base_username'] = email
     UserESFake.save_doc(doc)
     return user
Example #12
0
def request_new_domain(request, form, org, domain_type=None, new_user=True):
    now = datetime.utcnow()
    current_user = CouchUser.from_django_user(request.user)

    commtrack_enabled = domain_type == 'commtrack'

    dom_req = RegistrationRequest()
    if new_user:
        dom_req.request_time = now
        dom_req.request_ip = get_ip(request)
        dom_req.activation_guid = uuid.uuid1().hex

    new_domain = Domain(
        name=form.cleaned_data['domain_name'],
        is_active=False,
        date_created=datetime.utcnow(),
        commtrack_enabled=commtrack_enabled,
        creating_user=current_user.username,
        secure_submissions=True,
    )

    if form.cleaned_data.get('domain_timezone'):
        new_domain.default_timezone = form.cleaned_data['domain_timezone']

    if org:
        new_domain.organization = org
        new_domain.hr_name = request.POST.get('domain_hrname', None) or new_domain.name

    if not new_user:
        new_domain.is_active = True

    # ensure no duplicate domain documents get created on cloudant
    new_domain.save(**get_safe_write_kwargs())

    if not new_domain.name:
        new_domain.name = new_domain._id
        new_domain.save() # we need to get the name from the _id

    create_30_day_trial(new_domain)

    dom_req.domain = new_domain.name

    if request.user.is_authenticated():
        if not current_user:
            current_user = WebUser()
            current_user.sync_from_django_user(request.user)
            current_user.save()
        current_user.add_domain_membership(new_domain.name, is_admin=True)
        current_user.save()
        dom_req.requesting_user_username = request.user.username
        dom_req.new_user_username = request.user.username

    if new_user:
        dom_req.save()
        send_domain_registration_email(request.user.email,
                                       dom_req.domain,
                                       dom_req.activation_guid)
    else:
        send_global_domain_registration_email(request.user, new_domain.name)
    send_new_request_update_email(request.user, get_ip(request), new_domain.name, is_new_user=new_user)
Example #13
0
def arbitrary_web_user(save=True, is_dimagi=False):
    domain = data_gen.arbitrary_unique_name().lower()[:25]
    username = "******" % (data_gen.arbitrary_username(), 'dimagi' if is_dimagi else 'gmail')
    try:
        web_user = WebUser.create(domain, username, 'test123')
    except Exception:
        web_user = WebUser.get_by_username(username)
    web_user.is_active = True
    if save:
        web_user.save()
    return web_user
    def setUpClass(cls):
        cls.domain = 'my-test-views'
        cls.username = '******'
        cls.regular_name = 'ron'
        cls.password = '******'
        cls.user = WebUser.create(cls.domain, cls.username, cls.password, is_active=True)

        cls.user.is_superuser = True
        cls.user.save()
        cls.mobile_worker = CommCareUser.create('potter', '*****@*****.**', '123')
        cls.regular = WebUser.create(cls.domain, cls.regular_name, cls.password, is_active=True)
    def test_create_facility_manager(self):
        with open(os.path.join(self.datapath, 'sample_webusers.json')) as f:
            webuser = EWSUser(json.loads(f.read())[1])

        self.assertEqual(0, len(WebUser.by_domain(TEST_DOMAIN)))
        self.api_object.web_user_sync(webuser)
        web_users = list(WebUser.by_domain(TEST_DOMAIN))
        self.assertEqual(1, len(web_users))
        self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN)))
        facility_manager_role = UserRole.by_domain_and_name(TEST_DOMAIN, 'Facility manager')[0]
        dm = web_users[0].get_domain_membership(TEST_DOMAIN)
        self.assertEqual(facility_manager_role.get_id, dm.role_id)
Example #16
0
def arbitrary_web_user(save=True, is_dimagi=False):
    domain = Domain(name=unique_name()[:25])
    domain.save()
    username = "******" % (unique_name(), "dimagi" if is_dimagi else "gmail")
    try:
        web_user = WebUser.create(domain.name, username, "test123")
    except Exception:
        web_user = WebUser.get_by_username(username)
    web_user.is_active = True
    if save:
        web_user.save()
    return web_user
Example #17
0
    def web_user_sync(self, ilsgateway_webuser):
        username = ilsgateway_webuser.email.lower()
        if not username:
            try:
                validate_email(ilsgateway_webuser.username)
                username = ilsgateway_webuser.username
            except ValidationError:
                return None
        user = WebUser.get_by_username(username)
        user_dict = {
            'first_name': ilsgateway_webuser.first_name,
            'last_name': ilsgateway_webuser.last_name,
            'is_active': ilsgateway_webuser.is_active,
            # I don't know why sample_webusers.json has these in a number o
            # different formats, w/ and w/o 'T', with timezone offset, etc
            # I do not know how timezones are meant to be handled, so I am
            # conservatively keeping the behavior the same by explicitly
            # stripping the timezone with no conversion
            # todo: this is almost certainly not what was intended
            'last_login': force_to_datetime(ilsgateway_webuser.last_login).replace(tzinfo=None),
            'date_joined': force_to_datetime(ilsgateway_webuser.date_joined).replace(tzinfo=None),
            'password_hashed': True,
        }
        location_id = None
        if ilsgateway_webuser.location:
            try:
                sql_location = SQLLocation.objects.get(domain=self.domain, external_id=ilsgateway_webuser.location)
                location_id = sql_location.location_id
            except SQLLocation.DoesNotExist:
                location_id = None

        if user is None:
            try:
                user = WebUser.create(domain=None, username=username,
                                      password=ilsgateway_webuser.password, email=ilsgateway_webuser.email.lower(),
                                      **user_dict)
                user.add_domain_membership(self.domain, location_id=location_id)
                user.save()
            except Exception as e:
                if settings.UNIT_TESTING:
                    raise
                logging.error(e)
        else:
            if self.domain not in user.get_domains():
                user.add_domain_membership(self.domain, location_id=location_id)
                user.save()
            else:
                dm = user.get_domain_membership(self.domain)
                if dm.location_id != location_id:
                    dm.location_id = location_id
                    user.save()
        return user
Example #18
0
    def web_user_sync(self, ilsgateway_webuser):
        email = ilsgateway_webuser.email.lower()
        if not email:
            try:
                validate_email(ilsgateway_webuser.username)
                email = ilsgateway_webuser.username
            except ValidationError:
                return None
        user = WebUser.get_by_username(email)
        user_dict = {
            'first_name': ilsgateway_webuser.first_name,
            'last_name': ilsgateway_webuser.last_name,
            'is_active': ilsgateway_webuser.is_active,
            'password_hashed': True,
        }
        location_id = None
        if ilsgateway_webuser.location:
            try:
                sql_location = SQLLocation.objects.get(domain=self.domain, external_id=ilsgateway_webuser.location)
                location_id = sql_location.location_id
            except SQLLocation.DoesNotExist:
                location_id = None

        if user is None:
            try:
                ils_sql_web_user = ILSGatewayWebUser.objects.get(external_id=ilsgateway_webuser.id)
            except ILSGatewayWebUser.DoesNotExist:
                ils_sql_web_user = None

            if ils_sql_web_user:
                # if user exists in db it means he was already migrated but he changed email in v1
                old_email = ils_sql_web_user.email
                user = WebUser.get_by_username(old_email)
                if user:
                    user.delete_domain_membership(self.domain)
                    user.save()
                user = self._create_web_user(email, ilsgateway_webuser, location_id, user_dict)
                ils_sql_web_user.email = email
                ils_sql_web_user.save()
                return user

            else:
                user = self._create_web_user(email, ilsgateway_webuser, location_id, user_dict)
        else:
            self._edit_web_user(user, location_id)

        ilsgateway_webuser, _ = ILSGatewayWebUser.objects.get_or_create(
            external_id=ilsgateway_webuser.id,
        )
        ilsgateway_webuser.email = email
        ilsgateway_webuser.save()
        return user
Example #19
0
    def setUpClass(cls):
        super(RestorePermissionsTest, cls).setUpClass()

        cls.other_project = Domain(name=cls.other_domain)
        cls.other_project.save()

        cls.web_user = WebUser.create(
            username='******',
            domain=cls.domain,
            password='******',
        )
        cls.super_user = WebUser.create(
            username='******',
            domain=cls.other_domain,
            password='******',
        )
        cls.super_user.is_superuser = True
        cls.super_user.save()
        cls.commcare_user = CommCareUser.create(
            username=format_username('super', cls.domain),
            domain=cls.domain,
            password='******',
        )
        cls.no_edit_commcare_user = CommCareUser.create(
            username=format_username('noedit', cls.domain),
            domain=cls.domain,
            password='******',
        )
        cls.location_user = CommCareUser.create(
            username=format_username('location', cls.domain),
            domain=cls.domain,
            password='******',
        )
        cls.wrong_location_user = CommCareUser.create(
            username=format_username('wrong-location', cls.domain),
            domain=cls.domain,
            password='******',
        )
        cls.web_location_user = WebUser.create(
            username='******',
            domain=cls.domain,
            password='******',
        )

        cls.commcare_user.set_location(cls.locations['usa'])
        cls.web_location_user.set_location(cls.domain, cls.locations['usa'])
        cls.no_edit_commcare_user.set_location(cls.locations['usa'])
        cls.location_user.set_location(cls.locations['ma'])
        cls.wrong_location_user.set_location(cls.locations['montreal'])

        cls.restrict_user_to_assigned_locations(cls.commcare_user)
        cls.restrict_user_to_assigned_locations(cls.web_location_user)
    def test_basic_workflow(self):
        """
        This should execute a basic transferring of domains. user will transfer a
        domain to muggle. user should be able to see status of transferred domain
        and muggle will accept transfer request.
        """

        # Get the transfer request page
        resp = self.client.get(reverse(TransferDomainView.urlname, args=[self.domain.name]))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(type(resp.context['form']), TransferDomainForm,
                         "Should get TransferRequestForm")

        form = resp.context['form']
        form.data['domain'] = self.domain.name
        form.data['to_username'] = self.muggle.username

        # Post the form data
        resp = self.client.post(reverse(TransferDomainView.urlname, args=[self.domain.name]),
                                form.data, follow=True)
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(len(mail.outbox), 2,
                         "Should send an email to both requester and requestee")

        transfer = TransferDomainRequest.objects.get(to_username=self.muggle.username,
                                                     from_username=self.user.username,
                                                     domain=self.domain.name)
        self.assertIsNotNone(transfer)
        self.assertIsNone(transfer.confirm_time)
        self.assertTrue(transfer.active)

        # Land on the activate transfer page
        self.client.login(username=self.muggle.username, password=self.password)
        resp = self.client.get(reverse('activate_transfer_domain', args=[transfer.transfer_guid]), follow=True)
        self.assertEqual(resp.status_code, 200)
        self.assertIsNotNone(resp.context['transfer'])

        # Finally accept the transfer
        mail.outbox = []  # Clear outbox
        resp = self.client.post(reverse('activate_transfer_domain', args=[transfer.transfer_guid]), follow=True)
        self.assertEqual(len(mail.outbox), 1, "Send an email to Dimagi to confirm")

        # Reload from DB
        user = WebUser.get_by_username(self.user.username)
        muggle = WebUser.get_by_username(self.muggle.username)
        transfer = TransferDomainRequest.objects.get(to_username=self.muggle.username,
                                                     from_username=self.user.username,
                                                     domain=self.domain.name)
        self.assertFalse(user.is_member_of(self.domain.name))
        self.assertTrue(muggle.is_member_of(self.domain.name))
        self.assertTrue(muggle.get_domain_membership(self.domain.name).is_admin)
        self.assertIsNotNone(transfer.confirm_time)
Example #21
0
    def save(self, request, domain):
        try:
            if self.can_use_custom_logo:
                logo = self.cleaned_data['logo']
                if logo:

                    input_image = Image.open(io.BytesIO(logo.read()))
                    input_image.load()
                    input_image.thumbnail(LOGO_SIZE)
                    # had issues trying to use a BytesIO instead
                    tmpfilename = "/tmp/%s_%s" % (uuid.uuid4(), logo.name)
                    input_image.save(tmpfilename, 'PNG')

                    with open(tmpfilename) as tmpfile:
                        domain.put_attachment(tmpfile, name=LOGO_ATTACHMENT)
                elif self.cleaned_data['delete_logo']:
                    domain.delete_attachment(LOGO_ATTACHMENT)

            domain.call_center_config.enabled = self.cleaned_data.get('call_center_enabled', False)
            if domain.call_center_config.enabled:
                domain.internal.using_call_center = True
                domain.call_center_config.case_owner_id = self.cleaned_data.get('call_center_case_owner', None)
                domain.call_center_config.case_type = self.cleaned_data.get('call_center_case_type', None)

            global_tz = self.cleaned_data['default_timezone']
            if domain.default_timezone != global_tz:
                domain.default_timezone = global_tz
                users = WebUser.by_domain(domain.name)
                users_to_save = []
                for user in users:
                    dm = user.get_domain_membership(domain.name)
                    if not dm.override_global_tz and dm.timezone != global_tz:
                        dm.timezone = global_tz
                        users_to_save.append(user)
                if users_to_save:
                    WebUser.bulk_save(users_to_save)

            secure_submissions = self.cleaned_data.get(
                'secure_submissions', False)
            apps_to_save = []
            if secure_submissions != domain.secure_submissions:
                for app in get_apps_in_domain(domain.name):
                    if app.secure_submissions != secure_submissions:
                        app.secure_submissions = secure_submissions
                        apps_to_save.append(app)
            domain.secure_submissions = secure_submissions
            domain.save()
            if apps_to_save:
                ApplicationBase.bulk_save(apps_to_save)
            return True
        except Exception:
            return False
    def setUpClass(cls):
        super(AuthenticateAsIntegrationTest, cls).setUpClass()
        cls.domain = Domain(name="my-test-views")
        cls.domain.save()
        cls.username = "******"
        cls.regular_name = "ron"
        cls.password = "******"
        cls.user = WebUser.create(cls.domain.name, cls.username, cls.password, is_active=True)

        cls.user.is_superuser = True
        cls.user.save()
        cls.mobile_worker = CommCareUser.create("potter", "*****@*****.**", "123")
        cls.regular = WebUser.create(cls.domain.name, cls.regular_name, cls.password, is_active=True)
Example #23
0
    def testDomainMemberships(self):
        w_username = "******"
        w_email = "*****@*****.**"
        w2_username = "******"
        w2_email = "*****@*****.**"
        cc_username = "******"
        password = "******"
        domain = "test-domain"

        # check that memberships are added on creation
        webuser = WebUser.create(domain, w_username, password, w_email)
        webuser2 = WebUser.create('nodomain', w2_username, password, w2_email)
        ccuser = CommCareUser.create(domain, cc_username, password)

        self.assertEquals(webuser.is_member_of('test-domain'), True)
        self.assertEquals(ccuser.is_member_of('test-domain'), True)

        # getting memberships
        self.assertEquals(webuser.get_domain_membership(domain).domain, domain)
        self.assertEquals(ccuser.get_domain_membership(domain).domain, domain)

        permission_to = 'view_reports'
        self.assertEquals(webuser.has_permission(domain, permission_to), False)
        self.assertEquals(ccuser.has_permission(domain, permission_to), False)
        webuser.set_role(domain, "field-implementer")
        ccuser.set_role(domain, "field-implementer")
        self.assertEquals(  webuser.get_domain_membership(domain).role_id,
                            ccuser.get_domain_membership(domain).role_id)
        self.assertEquals(webuser.role_label(), ccuser.role_label())
        self.assertEquals(webuser.has_permission(domain, permission_to), True)
        self.assertEquals(ccuser.has_permission(domain, permission_to), True)

        self.assertEquals(webuser.is_domain_admin(domain), False)
        self.assertEquals(ccuser.is_domain_admin(domain), False)

        # deleting memberships
        webuser.delete_domain_membership(domain)

        with self.assertRaises(NotImplementedError):
            ccuser.delete_domain_membership(domain)

        self.assertEquals(webuser.is_member_of(domain), False)
        self.assertEquals(webuser2.is_member_of(domain), False)
        self.assertEquals(ccuser.is_member_of(domain), True)
        self.assertEquals(ccuser.get_domain_membership(domain).domain, domain)

        webuser.add_domain_membership(domain)
        webuser.transfer_domain_membership(domain, webuser2)

        self.assertEquals(webuser.is_member_of(domain), False)
        self.assertEquals(webuser2.is_member_of(domain), True)
Example #24
0
    def setUpClass(cls):
        super(FormEditRestrictionsMixin, cls).setUpClass()

        cls.middlesex_web_user = cls.make_web_user('Middlesex')
        cls.massachusetts_web_user = cls.make_web_user('Massachusetts')

        cambridge_user = cls.make_mobile_user('Cambridge')
        cls.cambridge_form = cls.make_form(cambridge_user)

        boston_user = cls.make_mobile_user('Boston')
        cls.boston_form = cls.make_form(boston_user)

        cls.locationless_web_user = WebUser.create(cls.domain, 'joeshmoe', 'password')
        cls.project_admin = WebUser.create(cls.domain, 'kennedy', 'password')
Example #25
0
    def setUpClass(cls):
        super(SchedulingRecipientTest, cls).setUpClass()

        cls.domain_obj = create_domain(cls.domain)

        cls.location_types = setup_location_types(cls.domain, ['country', 'state', 'city'])
        cls.country_location = make_loc('usa', domain=cls.domain, type='country')
        cls.state_location = make_loc('ma', domain=cls.domain, type='state', parent=cls.country_location)
        cls.city_location = make_loc('boston', domain=cls.domain, type='city', parent=cls.state_location)

        cls.mobile_user = CommCareUser.create(cls.domain, 'mobile', 'abc')
        cls.mobile_user.set_location(cls.city_location)

        cls.mobile_user2 = CommCareUser.create(cls.domain, 'mobile2', 'abc')
        cls.mobile_user2.set_location(cls.state_location)

        cls.mobile_user3 = CommCareUser.create(cls.domain, 'mobile3', 'abc')
        cls.mobile_user3.user_data['role'] = 'pharmacist'
        cls.mobile_user3.save()

        cls.mobile_user4 = CommCareUser.create(cls.domain, 'mobile4', 'abc')
        cls.mobile_user4.user_data['role'] = 'nurse'
        cls.mobile_user4.save()

        cls.mobile_user5 = CommCareUser.create(cls.domain, 'mobile5', 'abc')
        cls.mobile_user5.user_data['role'] = ['nurse', 'pharmacist']
        cls.mobile_user5.save()

        cls.web_user = WebUser.create(cls.domain, 'web', 'abc')

        cls.web_user2 = WebUser.create(cls.domain, 'web2', 'abc')
        cls.web_user2.user_data['role'] = 'nurse'
        cls.web_user2.save()

        cls.group = Group(domain=cls.domain, users=[cls.mobile_user.get_id])
        cls.group.save()

        cls.group2 = Group(
            domain=cls.domain,
            users=[
                cls.mobile_user.get_id,
                cls.mobile_user3.get_id,
                cls.mobile_user4.get_id,
                cls.mobile_user5.get_id,
            ]
        )
        cls.group2.save()

        cls.case_group = CommCareCaseGroup(domain=cls.domain)
        cls.case_group.save()
Example #26
0
 def setUp(self):
     self.factory = RequestFactory()
     domain = Domain.get_or_create_with_name('champ-cameroon')
     domain.is_active = True
     domain.save()
     self.domain = domain
     user = WebUser.all().first()
     if not user:
         user = WebUser.create(domain.name, 'test', 'passwordtest')
     user.is_authenticated = True
     user.is_superuser = True
     user.is_authenticated = True
     user.is_active = True
     self.user = user
Example #27
0
 def setUp(self):
     self.factory = RequestFactory()
     domain = Domain.get_or_create_with_name('test-pna')
     domain.is_active = True
     domain.save()
     self.domain = domain
     user = WebUser.get_by_username('test')
     if not user:
         user = WebUser.create(domain.name, 'test', 'passwordtest')
     user.is_authenticated = True
     user.is_superuser = True
     user.is_authenticated = True
     user.is_active = True
     self.user = user
    def test_edit_webuser_email(self):
        with open(os.path.join(self.datapath, 'sample_webusers.json')) as f:
            webuser = ILSUser(json.loads(f.read())[0])
        self.assertEqual(len(WebUser.by_domain(TEST_DOMAIN)), 0)

        ils_webuser = self.api_object.web_user_sync(webuser)
        self.assertEqual(len(WebUser.by_domain(TEST_DOMAIN)), 1)

        webuser.email = '*****@*****.**'
        ils_webuser2 = self.api_object.web_user_sync(webuser)
        ils_webuser = WebUser.get(docid=ils_webuser.get_id)

        self.assertEqual(len(WebUser.by_domain(TEST_DOMAIN)), 1)
        self.assertIsNone(ils_webuser.get_domain_membership(TEST_DOMAIN))
        self.assertEqual(ils_webuser2.username, '*****@*****.**')
Example #29
0
    def setUpClass(cls):
        w_username = "******"
        w_email = "*****@*****.**"
        w2_username = "******"
        w2_email = "*****@*****.**"
        cc_username = "******"
        password = "******"
        cls.domain_obj = create_domain(cls.domain)
        cls.nodomain_obj = create_domain('nodomain')
        cls.project = Domain(name=cls.domain)
        cls.project.save()

        cls.webuser = WebUser.create(cls.domain, w_username, password, w_email)
        cls.webuser2 = WebUser.create('nodomain', w2_username, password, w2_email)
        cls.ccuser = CommCareUser.create(cls.domain, cc_username, password)
Example #30
0
    def web_user_sync(self, ews_webuser):
        if not ews_webuser.is_superuser and ews_webuser.groups:
            group = ews_webuser.groups[0]
            if group.name == 'facility_manager':
                return self.convert_web_user_to_sms_user(ews_webuser)

        username = ews_webuser.email.lower()
        if not username:
            try:
                validate_email(ews_webuser.username)
                username = ews_webuser.username
            except ValidationError:
                return None
        user = WebUser.get_by_username(username)
        user_dict = {
            'first_name': ews_webuser.first_name,
            'last_name': ews_webuser.last_name,
            'is_active': ews_webuser.is_active,
            'last_login': force_to_datetime(ews_webuser.last_login),
            'date_joined': force_to_datetime(ews_webuser.date_joined),
            'password_hashed': True,
        }
        sp = SupplyPointCase.view('hqcase/by_domain_external_id',
                                  key=[self.domain, str(ews_webuser.location)],
                                  reduce=False,
                                  include_docs=True,
                                  limit=1).first()
        location_id = sp.location_id if sp else None

        if user is None:
            try:
                user = WebUser.create(domain=None, username=username,
                                      password=ews_webuser.password, email=ews_webuser.email,
                                      **user_dict)
                user.add_domain_membership(self.domain, location_id=location_id)
            except Exception as e:
                logging.error(e)
        else:
            if self.domain not in user.get_domains():
                user.add_domain_membership(self.domain, location_id=location_id)
        ews_webuser_extension(user, ews_webuser)
        dm = user.get_domain_membership(self.domain)
        if ews_webuser.is_superuser:
            dm.is_admin = True
        else:
            dm.role_id = UserRole.get_read_only_role_by_domain(self.domain).get_id
        user.save()
        return user
Example #31
0
 def setUpClass(cls):
     super(TestBetsUpdates, cls).setUpClass()
     cls.domain_obj = Domain(name=cls.domain, is_active=True)
     cls.domain_obj.save()
     cls.web_user = WebUser.create(cls.domain, 'blah', 'password')
Example #32
0
 def test_update_domain_date_web_user(self):
     self.assertIsNone(self._last_accessed(self.web_user, self.domain.name))
     update_domain_date(self.web_user.user_id, self.domain.name)
     self.web_user = WebUser.get_by_username(self.web_user.username)
     self.assertEqual(self._last_accessed(self.web_user, self.domain.name),
                      self.today)
Example #33
0
def notify_dimagi_project_admins(domain, message):
    users = list(WebUser.get_dimagi_emails_by_domain(domain))
    # if there isn't a dimagi email in the project, notify admins
    notify_admins = len(users) == 0
    _assert = soft_assert(users, notify_admins=notify_admins, send_to_ops=False)
    _assert(False, message)
Example #34
0
 def handle(self, username, **options):
     print("Deleting user %s" % username)
     WebUser.get_by_username(username).delete()
     print("Operation completed")
Example #35
0
def request_new_domain(request, form, is_new_user=True):
    now = datetime.utcnow()
    current_user = CouchUser.from_django_user(request.user)

    dom_req = RegistrationRequest()
    if is_new_user:
        dom_req.request_time = now
        dom_req.request_ip = get_ip(request)
        dom_req.activation_guid = uuid.uuid1().hex

    project_name = form.cleaned_data.get('hr_name') or form.cleaned_data.get('project_name')
    name = name_to_url(project_name, "project")
    with CriticalSection(['request_domain_name_{}'.format(name)]):
        name = Domain.generate_name(name)
        new_domain = Domain(
            name=name,
            hr_name=project_name,
            is_active=False,
            date_created=datetime.utcnow(),
            creating_user=current_user.username,
            secure_submissions=True,
            use_sql_backend=True,
            first_domain_for_user=is_new_user
        )

        if form.cleaned_data.get('domain_timezone'):
            new_domain.default_timezone = form.cleaned_data['domain_timezone']

        if not is_new_user:
            new_domain.is_active = True

        # ensure no duplicate domain documents get created on cloudant
        new_domain.save(**get_safe_write_kwargs())

    if not new_domain.name:
        new_domain.name = new_domain._id
        new_domain.save()  # we need to get the name from the _id

    if is_new_user:
        # Only new-user domains are eligible for Advanced trial
        # domains with no subscription are equivalent to be on free Community plan
        create_30_day_advanced_trial(new_domain, current_user.username)
    else:
        ensure_explicit_community_subscription(new_domain.name, date.today())

    UserRole.init_domain_with_presets(new_domain.name)

    dom_req.domain = new_domain.name

    if request.user.is_authenticated():
        if not current_user:
            current_user = WebUser()
            current_user.sync_from_django_user(request.user)
            current_user.save()
        current_user.add_domain_membership(new_domain.name, is_admin=True)
        current_user.save()
        dom_req.requesting_user_username = request.user.username
        dom_req.new_user_username = request.user.username

    if is_new_user:
        dom_req.save()
        send_domain_registration_email(request.user.email,
                                       dom_req.domain,
                                       dom_req.activation_guid,
                                       request.user.get_full_name())
    send_new_request_update_email(request.user, get_ip(request), new_domain.name, is_new_user=is_new_user)

    set_toggle(toggles.USE_FORMPLAYER_FRONTEND.slug, new_domain.name, True, namespace=toggles.NAMESPACE_DOMAIN)
    meta = get_meta(request)
    track_created_new_project_space_on_hubspot.delay(current_user, request.COOKIES, meta)
    return new_domain.name
Example #36
0
def orgs_landing(request,
                 org,
                 template="orgs/orgs_landing.html",
                 form=None,
                 add_form=None,
                 invite_member_form=None,
                 add_team_form=None,
                 update_form=None,
                 tab=None):
    organization = request.organization

    class LandingNotification(Notification):
        doc_type = 'OrgLandingNotification'

        def template(self):
            return 'orgs/partials/landing_notification.html'

    MainNotification.display_if_needed(messages,
                                       request,
                                       ctxt={"org": organization})
    LandingNotification.display_if_needed(messages, request)

    reg_form_empty = not form
    add_form_empty = not add_form
    invite_member_form_empty = not invite_member_form
    add_team_form_empty = not add_team_form

    reg_form = form or DomainRegistrationForm(
        initial={'org': organization.name})
    add_form = add_form or AddProjectForm(org)
    invite_member_form = invite_member_form or InviteMemberForm(org)
    add_team_form = add_team_form or AddTeamForm(org)

    ctxt = base_context(request, organization, update_form=update_form)
    user_domains = []
    req_domains = []
    # display a notification for each org request that hasn't previously been seen
    if request.couch_user.is_org_admin(org):
        requests = OrgRequest.get_requests(org)
        for req in requests:
            if req.seen or req.domain in [d.name for d in ctxt["domains"]]:
                continue
            messages.info(
                request,
                render_to_string(
                    "orgs/partials/org_request_notification.html", {
                        "requesting_user": WebUser.get(
                            req.requested_by).username,
                        "org_req": req,
                        "org": organization
                    }),
                extra_tags="html")

        def format_domains(dom_list, extra=None):
            extra = extra or []
            dom_list = list(
                set(
                    filter(lambda d: d not in ctxt["domains"] + extra,
                           dom_list)))
            return [Domain.get_by_name(d) for d in dom_list]

        # get the existing domains that an org admin would add to the organization
        user_domains = request.couch_user.domains or []
        user_domains = filter(
            lambda x: domain_has_privilege(x, privileges.CROSS_PROJECT_REPORTS
                                           ), user_domains)
        req_domains = [req.domain for req in requests]
        user_domains = format_domains(user_domains)
        req_domains = format_domains(req_domains,
                                     [d.name for d in user_domains if d])
        filter(
            lambda x: domain_has_privilege(x, privileges.CROSS_PROJECT_REPORTS
                                           ), req_domains)

    ctxt.update(
        dict(reg_form=reg_form,
             add_form=add_form,
             reg_form_empty=reg_form_empty,
             add_form_empty=add_form_empty,
             invite_member_form=invite_member_form,
             invite_member_form_empty=invite_member_form_empty,
             add_team_form=add_team_form,
             add_team_form_empty=add_team_form_empty,
             tab="projects",
             user_domains=user_domains,
             req_domains=req_domains))
    return render(request, template, ctxt)
Example #37
0
 def test_load_session_data_for_web_user(self):
     user = WebUser(username='******', _id=uuid.uuid4().hex)
     data = get_user_contributions_to_touchforms_session(user)
     self.assertEqual('*****@*****.**', data['username'])
     self.assertEqual(user._id, data['user_id'])
     self.assertTrue(isinstance(data['user_data'], dict))
Example #38
0
 def setUpClass(cls):
     delete_all_docs_by_doc_type(WebUser.get_db(),
                                 ['CommCareUser', 'WebUser'])
     super(TestUserStagingTable, cls).setUpClass()
Example #39
0
 def setUpClass(cls):
     super(DropboxUploadHelperTest, cls).setUpClass()
     cls.domain = create_domain('adomain')
     cls.user = WebUser.create('adomain', 'ben', '***')
Example #40
0
def register_fcm_device_token(request, domain, couch_user_id, device_token):
    user = WebUser.get_by_user_id(couch_user_id)
    user.fcm_device_token = device_token
    user.save()
    return HttpResponse()
Example #41
0
 def editable_user(self):
     try:
         return WebUser.get(self.editable_user_id)
     except (ResourceNotFound, CouchUser.AccountTypeError):
         raise Http404()
Example #42
0
def confirm_domain(request, guid=None):
    # Did we get a guid?
    vals = {}
    if guid is None:
        vals['message_title'] = _('Missing Activation Key')
        vals['message_subtitle'] = _('Account Activation Failed')
        vals['message_body'] = _(
            'An account activation key was not provided.  If you think this '
            'is an error, please contact the system administrator.')
        vals['is_error'] = True
        return render(request, 'registration/confirmation_complete.html', vals)

    # Does guid exist in the system?
    req = RegistrationRequest.get_by_guid(guid)
    if not req:
        vals['message_title'] = _('Invalid Activation Key')
        vals['message_subtitle'] = _('Account Activation Failed')
        vals['message_body'] = _(
            'The account activation key "%s" provided is invalid. If you '
            'think this is an error, please contact the system '
            'administrator.') % guid
        vals['is_error'] = True
        return render(request, 'registration/confirmation_complete.html', vals)

    requested_domain = Domain.get_by_name(req.domain)
    context = get_domain_context(requested_domain.domain_type)
    context['requested_domain'] = req.domain

    # Has guid already been confirmed?
    if requested_domain.is_active:
        assert (req.confirm_time is not None and req.confirm_ip is not None)
        context['message_title'] = _('Already Activated')
        context['message_body'] = _(
            'Your account %s has already been activated. No further '
            'validation is required.') % req.new_user_username
        context['is_error'] = False
        return render(request, 'registration/confirmation_complete.html',
                      context)

    # Set confirm time and IP; activate domain and new user who is in the
    req.confirm_time = datetime.utcnow()
    req.confirm_ip = get_ip(request)
    req.save()
    requested_domain.is_active = True
    requested_domain.save()
    requesting_user = WebUser.get_by_username(req.new_user_username)

    send_new_request_update_email(requesting_user,
                                  get_ip(request),
                                  requested_domain.name,
                                  is_confirming=True)

    context['message_title'] = _('Account Confirmed')
    context['message_subtitle'] = _(
        'Thank you for activating your account, %s!'
    ) % requesting_user.first_name
    context['message_body'] = _(
        'Your account has been successfully activated.  Thank you for taking '
        'the time to confirm your email address: %s.'
    ) % requesting_user.username
    context['is_error'] = False
    return render(request, 'registration/confirmation_complete.html', context)
Example #43
0
def update_subscription_properties_by_user(web_user_id, properties):
    web_user = WebUser.get_by_user_id(web_user_id)
    identify_v2(web_user.username, properties)
    update_hubspot_properties_v2(web_user, properties)
Example #44
0
    def setUpClass(cls):
        super().setUpClass()

        cls.domain = 'old_shelf'
        cls.domain_obj = create_domain(cls.domain)

        cls.role = UserRole.create(domain=cls.domain, name='App Editor')
        cls.qualified_role_id = cls.role.get_qualified_id()

        cls.user1 = WebUser.create(
            cls.domain_obj.name,
            '*****@*****.**',
            'badpassword',
            None,
            None,
            email='*****@*****.**',
            first_name='Edith',
            last_name='Wharton',
            role_id=cls.role.get_id,
        )

        cls.user2 = WebUser.create(
            cls.domain_obj.name,
            '*****@*****.**',
            'anotherbadpassword',
            None,
            None,
            email='*****@*****.**',
            first_name='George',
            last_name='Eliot',
            is_admin=True,
        )

        cls.invited_user = Invitation.objects.create(
            email='*****@*****.**',
            domain=cls.domain_obj.name,
            invited_by='*****@*****.**',
            invited_on=datetime.utcnow(),
            role=cls.qualified_role_id,
        )

        cls.other_domain = 'new_shelf'
        cls.other_domain_obj = create_domain(cls.other_domain)

        cls.other_role = UserRole.create(domain=cls.domain, name='User Admin')

        cls.user10 = WebUser.create(
            cls.other_domain_obj.name,
            '*****@*****.**',
            'secret',
            None,
            None,
            email='*****@*****.**',
            first_name='Susan',
            last_name='Choi',
            role_id=cls.other_role.get_id,
        )

        cls.user11 = WebUser.create(
            cls.other_domain_obj.name,
            '*****@*****.**',
            'secret',
            None,
            None,
            email='*****@*****.**',
            first_name='Zadie',
            last_name='Smith',
            role_id=cls.other_role.get_id,
        )

        cls.other_invited_user = Invitation.objects.create(
            email='*****@*****.**',
            domain=cls.other_domain_obj.name,
            invited_by='*****@*****.**',
            invited_on=datetime.utcnow(),
            role=cls.other_role.get_qualified_id())

        populate_user_index([cls.user1, cls.user2, cls.user10, cls.user11])
 def setUp(self):
     super(TestRestrictedUserUpload, self).setUp()
     self.user = WebUser.create(self.domain, 'username', 'password')
     self.user.set_location(self.domain, self.locations['Middlesex'])
     restrict_user_by_location(self.domain, self.user)
Example #46
0
 def admins(self):
     return [
         admin.email or admin.username
         for admin in WebUser.get_admins_by_domain(self.domain)
     ]
Example #47
0
 def _setup_web_user(cls):
     cls.web_user = WebUser.create(cls.DOMAIN_NAME, cls.WEB_USER, '*****')
     cls.web_user.save()
     cls.request.couch_user = cls.web_user
Example #48
0
 def setUpClass(cls):
     super(TestSendToHubspot, cls).setUpClass()
     cls.domain_obj = create_domain(cls.domain)
     cls.user = WebUser.create(cls.domain, "*****@*****.**", "*****")
     cls.user.save()
Example #49
0
def request_new_domain(request, form, is_new_user=True):
    now = datetime.utcnow()
    current_user = CouchUser.from_django_user(request.user, strict=True)

    dom_req = RegistrationRequest()
    if is_new_user:
        dom_req.request_time = now
        dom_req.request_ip = get_ip(request)
        dom_req.activation_guid = uuid.uuid1().hex

    project_name = form.cleaned_data.get('hr_name') or form.cleaned_data.get(
        'project_name')
    name = name_to_url(project_name, "project")
    with CriticalSection(['request_domain_name_{}'.format(name)]):
        name = Domain.generate_name(name)
        new_domain = Domain(name=name,
                            hr_name=project_name,
                            is_active=False,
                            date_created=datetime.utcnow(),
                            creating_user=current_user.username,
                            secure_submissions=True,
                            use_sql_backend=True,
                            first_domain_for_user=is_new_user)

        # Avoid projects created by dimagi.com staff members as self started
        new_domain.internal.self_started = not current_user.is_dimagi

        if form.cleaned_data.get('domain_timezone'):
            new_domain.default_timezone = form.cleaned_data['domain_timezone']

        if not is_new_user:
            new_domain.is_active = True

        # ensure no duplicate domain documents get created on cloudant
        new_domain.save(**get_safe_write_kwargs())

    if not new_domain.name:
        new_domain.name = new_domain._id
        new_domain.save()  # we need to get the name from the _id
    dom_req.domain = new_domain.name

    if not settings.ENTERPRISE_MODE:
        _setup_subscription(new_domain.name, current_user)

    UserRole.init_domain_with_presets(new_domain.name)

    if request.user.is_authenticated:
        if not current_user:
            current_user = WebUser()
            current_user.sync_from_django_user(request.user)
            current_user.save()
        current_user.add_domain_membership(new_domain.name, is_admin=True)
        current_user.save()
        dom_req.requesting_user_username = request.user.username
        dom_req.new_user_username = request.user.username

    if is_new_user:
        dom_req.save()
        if settings.IS_SAAS_ENVIRONMENT:
            #  Load template apps to the user's new domain in parallel
            from corehq.apps.app_manager.tasks import load_appcues_template_app
            header = [
                load_appcues_template_app.si(new_domain.name,
                                             current_user.username, slug)
                for slug in APPCUES_APP_SLUGS
            ]
            callback = send_domain_registration_email.si(
                request.user.email, dom_req.domain, dom_req.activation_guid,
                request.user.get_full_name(), request.user.first_name)
            chord(header)(callback)
        else:
            send_domain_registration_email(request.user.email, dom_req.domain,
                                           dom_req.activation_guid,
                                           request.user.get_full_name(),
                                           request.user.first_name)
    send_new_request_update_email(request.user,
                                  get_ip(request),
                                  new_domain.name,
                                  is_new_user=is_new_user)

    send_hubspot_form(HUBSPOT_CREATED_NEW_PROJECT_SPACE_FORM_ID, request)
    return new_domain.name
Example #50
0
def normal_user():
    user = WebUser.create(DOMAIN_NAME, USERNAME, PASSWORD, None, None)
    try:
        yield
    finally:
        user.delete()
Example #51
0
 def from_user(self):
     from corehq.apps.users.models import WebUser
     return WebUser.get_by_username(self.from_username)
Example #52
0
 def setUpClass(cls):
     super().setUpClass()
     cls.user = WebUser.create(cls.domain, 'fiona', 'secret', None, None)
Example #53
0
def confirm_domain(request, guid=None):
    error = None
    # Did we get a guid?
    if guid is None:
        error = _(
            'An account activation key was not provided.  If you think this '
            'is an error, please contact the system administrator.')

    # Does guid exist in the system?
    else:
        req = RegistrationRequest.get_by_guid(guid)
        if not req:
            error = _(
                'The account activation key "%s" provided is invalid. If you '
                'think this is an error, please contact the system '
                'administrator.') % guid

    if error is not None:
        context = {
            'message_body': error,
            'current_page': {
                'page_name': 'Account Not Activated'
            },
        }
        return render(request, 'registration/confirmation_error.html', context)

    requested_domain = Domain.get_by_name(req.domain)
    view_name = "dashboard_default"
    if not domain_has_apps(req.domain):
        view_name = "default_new_app"

    # Has guid already been confirmed?
    if requested_domain.is_active:
        assert (req.confirm_time is not None and req.confirm_ip is not None)
        messages.success(
            request, 'Your account %s has already been activated. '
            'No further validation is required.' % req.new_user_username)
        return HttpResponseRedirect(reverse(view_name,
                                            args=[requested_domain]))

    # Set confirm time and IP; activate domain and new user who is in the
    req.confirm_time = datetime.utcnow()
    req.confirm_ip = get_ip(request)
    req.save()
    requested_domain.is_active = True
    requested_domain.save()
    requesting_user = WebUser.get_by_username(req.new_user_username)

    send_new_request_update_email(requesting_user,
                                  get_ip(request),
                                  requested_domain.name,
                                  is_confirming=True)

    messages.success(
        request,
        'Your account has been successfully activated.  Thank you for taking '
        'the time to confirm your email address: %s.' %
        (requesting_user.username))
    track_workflow(requesting_user.email, "Confirmed new project")
    track_confirmed_account_on_hubspot.delay(requesting_user)
    request.session['CONFIRM'] = True
    return HttpResponseRedirect(reverse(view_name, args=[requested_domain]))
Example #54
0
    def setUpClass(cls):
        super(ReportTestCase, cls).setUpClass()
        cls.domain = create_domain('test-domain')
        cls.web_user = WebUser.get_by_username('test')
        if not cls.web_user:
            cls.web_user = WebUser.create('test-domain', 'test', 'test', None,
                                          None)

        SQLProduct.objects.create(domain=cls.domain.name,
                                  name='Product 2',
                                  code='p2',
                                  product_id='p2')

        SQLProduct.objects.create(domain=cls.domain.name,
                                  name='Product 3',
                                  code='p3',
                                  product_id='p3')

        SQLProduct.objects.create(domain=cls.domain.name,
                                  name='Product 1',
                                  code='p1',
                                  product_id='p1')

        region_location_type = LocationType.objects.create(
            domain=cls.domain.name,
            name='Region',
        )

        SQLLocation.objects.create(domain=cls.domain.name,
                                   name='Region 1',
                                   location_id='r1',
                                   location_type=region_location_type)

        district_location_type = LocationType.objects.create(
            domain=cls.domain.name,
            name='District',
        )

        SQLLocation.objects.create(domain=cls.domain.name,
                                   name='District 1',
                                   location_id='d1',
                                   location_type=district_location_type)

        cls.engine = connection_manager.get_engine(DEFAULT_ENGINE_ID)
        cls.intra_table = IntraHealthFluff._table
        cls.couverture_table = CouvertureFluff._table
        cls.taux_table = TauxDeRuptureFluff._table
        cls.taux_de_satisfaction_table = TauxDeSatisfactionFluff._table
        cls.livraison_table = LivraisonFluff._table
        cls.recouvrement_table = RecouvrementFluff._table

        with cls.engine.begin() as connection:
            cls.couverture_table.create(connection, checkfirst=True)
            cls.intra_table.create(connection, checkfirst=True)
            cls.taux_table.create(connection, checkfirst=True)
            cls.taux_de_satisfaction_table.create(connection, checkfirst=True)
            cls.recouvrement_table.create(connection, checkfirst=True)
            cls.livraison_table.create(connection, checkfirst=True)

            insert = cls.intra_table.insert().values([
                dict(doc_id='1',
                     date=datetime(2017, 11, 17),
                     product_name='Product 1',
                     product_id='p1',
                     district_id='d1',
                     district_name='District 1',
                     location_id='pps1',
                     region_id='r1',
                     PPS_name='PPS 1',
                     actual_consumption_total=10,
                     billed_consumption_total=5,
                     stock_total=33,
                     total_stock_total=70,
                     quantity_total=13,
                     cmm_total=16),
                dict(doc_id='1',
                     date=datetime(2017, 11, 17),
                     product_name='Product 2',
                     product_id='p2',
                     district_id='d1',
                     district_name='District 1',
                     location_id='pps1',
                     region_id='r1',
                     PPS_name='PPS 1',
                     actual_consumption_total=2,
                     billed_consumption_total=2,
                     stock_total=1,
                     total_stock_total=2,
                     quantity_total=3,
                     cmm_total=4),
                dict(doc_id='1',
                     date=datetime(2017, 11, 17),
                     product_name='Product 3',
                     product_id='p3',
                     district_id='d1',
                     district_name='District 1',
                     location_id='pps1',
                     region_id='r1',
                     PPS_name='PPS 1',
                     actual_consumption_total=6,
                     billed_consumption_total=4,
                     stock_total=14,
                     total_stock_total=0,
                     quantity_total=88,
                     cmm_total=99),
                dict(doc_id='2',
                     date=datetime(2017, 11, 17),
                     product_name='Product 1',
                     product_id='p1',
                     district_id='d1',
                     district_name='District 1',
                     location_id='pps2',
                     region_id='r1',
                     PPS_name='PPS 2',
                     actual_consumption_total=13,
                     billed_consumption_total=11,
                     stock_total=50,
                     total_stock_total=100,
                     quantity_total=1,
                     cmm_total=8),
                dict(doc_id='2',
                     date=datetime(2017, 11, 17),
                     product_name='Product 2',
                     product_id='p2',
                     district_id='d1',
                     district_name='District 1',
                     location_id='pps2',
                     region_id='r1',
                     PPS_name='PPS 2',
                     actual_consumption_total=0,
                     billed_consumption_total=0,
                     stock_total=2,
                     total_stock_total=17,
                     quantity_total=3,
                     cmm_total=15),
                dict(doc_id='2',
                     date=datetime(2017, 11, 17),
                     product_name='Product 3',
                     product_id='p3',
                     district_id='d1',
                     district_name='District 1',
                     location_id='pps2',
                     region_id='r1',
                     PPS_name='PPS 2',
                     actual_consumption_total=150,
                     billed_consumption_total=11,
                     stock_total=4,
                     total_stock_total=0,
                     quantity_total=11,
                     cmm_total=12)
            ])
            connection.execute(insert)
Example #55
0
    def setUpClass(cls):
        super(AllCommCareUsersTest, cls).setUpClass()
        delete_all_users()
        hard_delete_deleted_users()
        cls.ccdomain = Domain(name='cc_user_domain')
        cls.ccdomain.save()
        cls.other_domain = Domain(name='other_domain')
        cls.other_domain.save()
        bootstrap_location_types(cls.ccdomain.name)

        initialize_domain_with_default_roles(cls.ccdomain.name)
        cls.user_roles = UserRole.objects.get_by_domain(cls.ccdomain.name)
        cls.custom_role = UserRole.create(cls.ccdomain.name, "Custom Role")

        cls.loc1 = make_loc('spain', domain=cls.ccdomain.name, type="district")
        cls.loc2 = make_loc('madagascar',
                            domain=cls.ccdomain.name,
                            type="district")

        cls.ccuser_1 = CommCareUser.create(
            domain=cls.ccdomain.name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            email='*****@*****.**',
        )
        cls.ccuser_1.set_location(cls.loc1)
        cls.ccuser_1.save()
        cls.ccuser_2 = CommCareUser.create(
            domain=cls.ccdomain.name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            email='*****@*****.**',
        )
        cls.ccuser_2.set_role(cls.ccdomain.name,
                              cls.custom_role.get_qualified_id())
        cls.ccuser_2.set_location(cls.loc2)
        cls.ccuser_2.save()

        cls.web_user = WebUser.create(
            domain=cls.ccdomain.name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            email='*****@*****.**',
        )
        cls.location_restricted_web_user = WebUser.create(
            domain=cls.ccdomain.name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            email='*****@*****.**',
        )
        cls.location_restricted_web_user.add_to_assigned_locations(
            domain=cls.ccdomain.name, location=cls.loc2)

        cls.ccuser_other_domain = CommCareUser.create(
            domain=cls.other_domain.name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            email='*****@*****.**',
        )
        cls.retired_user = CommCareUser.create(
            domain=cls.ccdomain.name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            email='*****@*****.**',
        )
        cls.retired_user.retire(cls.ccdomain.name, deleted_by=None)

        cls.ccuser_inactive = CommCareUser.create(
            domain=cls.ccdomain.name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            email='*****@*****.**',
        )
        cls.ccuser_inactive.is_active = False
        cls.ccuser_inactive.save()
        cls.ccuser_inactive.set_location(cls.loc2)
 def setUp(self):
     super(TestBulkManagementWithInitialLocs, self).setUp()
     self.user = WebUser.create(self.domain, 'username', 'password')
Example #57
0
    def setUpClass(cls):
        super(AllCommCareUsersTest, cls).setUpClass()
        delete_all_users()
        hard_delete_deleted_users()
        cls.ccdomain = Domain(name='cc_user_domain')
        cls.ccdomain.save()
        cls.other_domain = Domain(name='other_domain')
        cls.other_domain.save()
        bootstrap_location_types(cls.ccdomain.name)

        UserRole.init_domain_with_presets(cls.ccdomain.name)
        cls.user_roles = UserRole.by_domain(cls.ccdomain.name)
        cls.custom_role = UserRole.get_or_create_with_permissions(
            cls.ccdomain.name,
            Permissions(
                edit_apps=True,
                edit_web_users=True,
                view_web_users=True,
                view_roles=True,
            ), "Custom Role")
        cls.custom_role.save()

        cls.loc1 = make_loc('spain', domain=cls.ccdomain.name, type="district")
        cls.loc2 = make_loc('madagascar',
                            domain=cls.ccdomain.name,
                            type="district")

        cls.ccuser_1 = CommCareUser.create(
            domain=cls.ccdomain.name,
            username='******',
            password='******',
            email='*****@*****.**',
        )
        cls.ccuser_1.set_location(cls.loc1)
        cls.ccuser_1.save()
        cls.ccuser_2 = CommCareUser.create(
            domain=cls.ccdomain.name,
            username='******',
            password='******',
            email='*****@*****.**',
        )
        cls.ccuser_2.set_role(cls.ccdomain.name,
                              cls.custom_role.get_qualified_id())
        cls.ccuser_2.set_location(cls.loc2)
        cls.ccuser_2.save()

        cls.web_user = WebUser.create(
            domain=cls.ccdomain.name,
            username='******',
            password='******',
            email='*****@*****.**',
        )
        cls.ccuser_other_domain = CommCareUser.create(
            domain=cls.other_domain.name,
            username='******',
            password='******',
            email='*****@*****.**',
        )
        cls.retired_user = CommCareUser.create(
            domain=cls.ccdomain.name,
            username='******',
            password='******',
            email='*****@*****.**',
        )
        cls.retired_user.retire()
 def setUp(self):
     super(TestTreeValidator, self).setUp()
     self.domain_obj = create_domain(self.domain)
     self.user = WebUser.create(self.domain, 'username', 'password')
 def setUp(self):
     super(WebUserLocationAssignmentTest, self).setUp()
     self.user = WebUser.create(domain=self.domain,
                                username='******',
                                password='******',
                                last_login=datetime.now())
 def setup_webuser(cls, username, domain, role):
     user = WebUser.create(domain.name, username, '{}-password'.format(username))
     user.set_role(domain.name, role)
     user.save()
     return user