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