Esempio n. 1
0
 def test_get_application_access_for_domain(self):
     application_access_objects = []
     domain = 'application-access-dbaccessors'
     try:
         self.assertIsNone(get_application_access_for_domain(domain))
         o = ApplicationAccess(domain=domain)
         o.save()
         application_access_objects.append(o)
         self.assertEqual(
             o.to_json(),
             get_application_access_for_domain(domain).to_json())
         o = ApplicationAccess(domain=domain)
         o.save()
         application_access_objects.append(o)
         self.assertIn(
             get_application_access_for_domain(domain).to_json(),
             [o.to_json() for o in application_access_objects])
     finally:
         ApplicationAccess.get_db().bulk_delete(application_access_objects)
Esempio n. 2
0
 def put(self, request, *args, **kwargs):
     body = json.loads(request.body.decode('utf-8'))
     access = get_application_access_for_domain(self.domain)
     access.restrict = body['restrict']
     access.sqlappgroup_set.all().delete()
     access.sqlappgroup_set.set([
         SQLAppGroup(app_id=app_group['app_id'], group_id=app_group.get('group_id'))
         for app_group in body['app_groups']
     ], bulk=False)
     access.save()
     return json_response({'success': 1})
Esempio n. 3
0
 def test_get_application_access_for_domain(self):
     application_access_objects = []
     domain = 'application-access-dbaccessors'
     try:
         self.assertIsNone(get_application_access_for_domain(domain))
         o = ApplicationAccess(domain=domain)
         o.save()
         application_access_objects.append(o)
         self.assertEqual(
             o.to_json(),
             get_application_access_for_domain(domain).to_json()
         )
         o = ApplicationAccess(domain=domain)
         o.save()
         application_access_objects.append(o)
         self.assertIn(
             get_application_access_for_domain(domain).to_json(),
             [o.to_json() for o in application_access_objects]
         )
     finally:
         ApplicationAccess.get_db().bulk_delete(application_access_objects)
Esempio n. 4
0
    def test_application_access(self):
        app1 = MockApplication(self.domain, "One")
        app2 = MockApplication(self.domain, "Two")
        app3 = MockApplication(self.domain, "Three")
        app4 = MockApplication(self.domain, "Four")

        o = get_application_access_for_domain(self.domain)
        o.sqlappgroup_set.set([
            SQLAppGroup(app_id=app1._id, group_id="321"),
            SQLAppGroup(app_id=app2._id, group_id="432"),
            SQLAppGroup(app_id=app3._id, group_id="543"),
        ],
                              bulk=False)
        o.save()

        refreshed = get_application_access_for_domain(self.domain)
        self.assertEqual(o.domain, refreshed.domain)
        self.assertEqual(3, refreshed.sqlappgroup_set.count())

        self.assertEqual(
            o.get_template_json([app1, app2, app4]), {
                "domain":
                self.domain,
                "restrict":
                False,
                "app_groups": [
                    {
                        "app_id": app4._id,
                        "group_id": None,
                    },
                    {
                        "app_id": app1._id,
                        "group_id": "321",
                    },
                    {
                        "app_id": app2._id,
                        "group_id": "432",
                    },
                ],
            })
Esempio n. 5
0
    def get(self, request, domain, app_id, **kwargs):
        app_access = get_application_access_for_domain(domain)

        app = get_current_app(domain, app_id)

        if not app_access.user_can_access_app(request.couch_user, app):
            raise Http404()

        role = request.couch_user.get_role(domain)
        if role and not role.permissions.view_web_app(app.master_id):
            raise Http404()

        def _default_lang():
            try:
                return app['langs'][0]
            except Exception:
                return 'en'

        # default language to user's preference, followed by
        # first app's default, followed by english
        language = request.couch_user.language or _default_lang()
        domain_obj = Domain.get_by_name(domain)

        context = {
            "domain":
            domain,
            "default_geocoder_location":
            domain_obj.default_geocoder_location,
            "language":
            language,
            "apps": [_format_app(app)],
            "mapbox_access_token":
            settings.MAPBOX_ACCESS_TOKEN,
            "username":
            request.user.username,
            "formplayer_url":
            settings.FORMPLAYER_URL,
            "single_app_mode":
            True,
            "home_url":
            reverse(self.urlname, args=[domain, app_id]),
            "environment":
            WEB_APPS_ENVIRONMENT,
            'use_live_query':
            toggles.FORMPLAYER_USE_LIVEQUERY.enabled(domain),
            "integrations":
            integration_contexts(domain),
            "has_geocoder_privs":
            domain_has_privilege(domain, privileges.GEOCODER),
        }
        return render(request, "cloudcare/formplayer_home.html", context)
Esempio n. 6
0
    def get_web_apps_available_to_user(self, domain, user):
        app_access = get_application_access_for_domain(domain)
        app_ids = get_app_ids_in_domain(domain)

        apps = list(
            map(
                lambda app_id: self.fetch_app(domain, app_id),
                app_ids,
            ))
        apps = filter(None, apps)
        apps = filter(lambda app: app.get('cloudcare_enabled') or self.preview,
                      apps)
        apps = filter(lambda app: app_access.user_can_access_app(user, app),
                      apps)
        apps = [_format_app_doc(app) for app in apps]
        apps = sorted(apps, key=lambda app: app['name'])
        return apps
Esempio n. 7
0
    def get_web_apps_available_to_user(self, domain, user):
        app_access = get_application_access_for_domain(domain)
        app_ids = get_app_ids_in_domain(domain)

        apps = list(map(
            lambda app_id: self.fetch_app(domain, app_id),
            app_ids,
        ))
        apps = filter(None, apps)
        apps = filter(lambda app: app.get('cloudcare_enabled') or self.preview, apps)
        apps = filter(lambda app: app_access.user_can_access_app(user, app), apps)
        role = None
        try:
            role = user.get_role(domain)
        except DomainMembershipError:
            # User has access via domain mirroring
            pass
        if role:
            apps = [_format_app(app) for app in apps if role.permissions.view_web_app(app)]
        apps = sorted(apps, key=lambda app: app['name'])
        return apps
Esempio n. 8
0
 def get_by_domain(cls, domain):
     from corehq.apps.cloudcare.dbaccessors import \
         get_application_access_for_domain
     self = get_application_access_for_domain(domain)
     return self or cls(domain=domain)
Esempio n. 9
0
 def get_by_domain(cls, domain):
     from corehq.apps.cloudcare.dbaccessors import \
         get_application_access_for_domain
     self = get_application_access_for_domain(domain)
     return self or cls(domain=domain)