Example #1
0
    def get_url_for_impersonation(cls, url: URL, impersonate_user: bool,
                                  username: Optional[str]) -> URL:
        """
        Return a modified URL with the username set.

        :param url: SQLAlchemy URL object
        :param impersonate_user: Flag indicating if impersonation is enabled
        :param username: Effective username
        """
        if impersonate_user and username is not None:
            if url.drivername == "drill+odbc":
                url = url.update_query_dict({"DelegationUID": username})
            elif url.drivername in ["drill+sadrill", "drill+jdbc"]:
                url = url.update_query_dict({"impersonation_target": username})
            else:
                raise SupersetDBAPIProgrammingError(
                    f"impersonation is not supported for {url.drivername}")

        return url
Example #2
0
    def get_url_for_impersonation(
        cls,
        url: URL,
        impersonate_user: bool,
        username: Optional[str],
    ) -> URL:
        if impersonate_user and username is not None:
            user = security_manager.find_user(username=username)
            if user and user.email:
                url = url.update_query_dict({"subject": user.email})

        return url