def embedded( self, dashboard_id_or_slug: str, add_extra_log_payload: Callable[..., None] = lambda **kwargs: None, ) -> FlaskResponse: """ Server side rendering for a dashboard :param dashboard_id_or_slug: identifier for dashboard. used in the decorators :param add_extra_log_payload: added by `log_this_with_manual_updates`, set a default value to appease pylint """ if not is_feature_enabled("EMBEDDED_SUPERSET"): return Response(status=404) # Log in as an anonymous user, just for this view. # This view needs to be visible to all users, # and building the page fails if g.user and/or ctx.user aren't present. login_manager: LoginManager = security_manager.lm login_manager.reload_user(AnonymousUserMixin()) add_extra_log_payload( dashboard_id=dashboard_id_or_slug, dashboard_version="v2", ) bootstrap_data = { "common": common_bootstrap_payload(), } return self.render_template( "superset/spa.html", entry="embedded", bootstrap_data=json.dumps( bootstrap_data, default=utils.pessimistic_json_iso_dttm_ser ), )
def add(self) -> FlaskResponse: payload = { "common": common_bootstrap_payload(), "user": bootstrap_user_data(g.user), } return self.render_template("superset/add_slice.html", bootstrap_data=json.dumps(payload))
def add(self) -> FlaskResponse: datasources = [{ "value": str(d.id) + "__" + d.type, "label": repr(d) } for d in ConnectorRegistry.get_all_datasources(db.session)] payload = { "datasources": sorted(datasources, key=lambda d: d["label"]), "common": common_bootstrap_payload(), } return self.render_template("superset/add_slice.html", bootstrap_data=json.dumps(payload))
def embedded( self, uuid: str, add_extra_log_payload: Callable[..., None] = lambda **kwargs: None, ) -> FlaskResponse: """ Server side rendering for the embedded dashboard page :param uuid: identifier for embedded dashboard :param add_extra_log_payload: added by `log_this_with_manual_updates`, set a default value to appease pylint """ if not is_feature_enabled("EMBEDDED_SUPERSET"): abort(404) embedded = EmbeddedDAO.find_by_id(uuid) if not embedded: abort(404) # validate request referrer in allowed domains is_referrer_allowed = not embedded.allowed_domains for domain in embedded.allowed_domains: if same_origin(request.referrer, domain): is_referrer_allowed = True break if not is_referrer_allowed: abort(403) # Log in as an anonymous user, just for this view. # This view needs to be visible to all users, # and building the page fails if g.user and/or ctx.user aren't present. login_manager: LoginManager = security_manager.lm login_manager.reload_user(AnonymousUserMixin()) add_extra_log_payload( embedded_dashboard_id=uuid, dashboard_version="v2", ) bootstrap_data = { "common": common_bootstrap_payload(), "embedded": { "dashboard_id": embedded.dashboard_id, }, } return self.render_template( "superset/spa.html", entry="embedded", bootstrap_data=json.dumps( bootstrap_data, default=utils.pessimistic_json_iso_dttm_ser), )
def add(self) -> FlaskResponse: datasources = [{ "value": str(d.id) + "__" + d.type, "label": repr(d) } for d in security_manager.get_user_datasources()] payload = { "datasources": sorted( datasources, key=lambda d: d["label"].lower() if isinstance(d["label"], str) else "", ), "common": common_bootstrap_payload(), "user": bootstrap_user_data(g.user), } return self.render_template("superset/add_slice.html", bootstrap_data=json.dumps(payload))
def add(self) -> FlaskResponse: allowed_datasources = [] datasources = [] # only if gamma is_gamma = False logging.debug('-------------------------') for role in g.user.roles: if str(role) == 'Gamma': is_gamma = True logging.debug(role.permissions) for perm in role.permissions: if str(perm).startswith('datasource access on ['): #'datasource access on [DB].[DATASOURCE](id:ID)') data_search = re.search( 'datasource access on \[([^\]]+)\]\.\[([^\]]+)\]\(id:([^\)]+)\)', str(perm)) if data_search: allowed_datasources.append({ "connection": data_search.group(1), "name": data_search.group(2), "id": data_search.group(3) }) for d in ConnectorRegistry.get_all_datasources(db.session): if (is_gamma): for a in allowed_datasources: table_name = d.short_data.get("name").split('.')[-1] if table_name == a.get("name") and d.short_data.get( "connection") == a.get("connection") and str( d.short_data.get("id")) == str(a.get("id")): if hasattr(d, 'custom_label'): datasources.append({ "value": str(d.id) + "__" + d.type, "label": d.custom_label }) else: datasources.append({ "value": str(d.id) + "__" + d.type, "label": repr(d) }) else: if hasattr(d, 'custom_label'): datasources.append({ "value": str(d.id) + "__" + d.type, "label": d.custom_label }) else: datasources.append({ "value": str(d.id) + "__" + d.type, "label": repr(d) }) payload = { "datasources": sorted(datasources, key=lambda d: d["label"]), "common": common_bootstrap_payload(), "user": bootstrap_user_data(g.user), } return self.render_template("superset/add_slice.html", bootstrap_data=json.dumps(payload))