def get_extra_params(database: "Database") -> Dict[str, Any]: """ Some databases require adding elements to connection parameters, like passing certificates to `extra`. This can be done here. :param database: database instance from which to extract extras :raises CertificateException: If certificate is not valid/unparseable """ extra: Dict[str, Any] = BaseEngineSpec.get_extra_params(database) engine_params: Dict[str, Any] = extra.setdefault("engine_params", {}) connect_args: Dict[str, Any] = engine_params.setdefault("connect_args", {}) if database.server_cert: connect_args["http_scheme"] = "https" connect_args["verify"] = utils.create_ssl_cert_file(database.server_cert) return extra
def get_extra_params(database: "Database") -> Dict[str, Any]: """ For Druid, the path to a SSL certificate is placed in `connect_args`. :param database: database instance from which to extract extras :raises CertificateException: If certificate is not valid/unparseable """ try: extra = json.loads(database.extra or "{}") except json.JSONDecodeError as ex: logger.error(ex) raise ex if database.server_cert: engine_params = extra.get("engine_params", {}) connect_args = engine_params.get("connect_args", {}) connect_args["scheme"] = "https" path = utils.create_ssl_cert_file(database.server_cert) connect_args["ssl_verify_cert"] = path engine_params["connect_args"] = connect_args extra["engine_params"] = engine_params return extra
def get_extra_params(database: "Database") -> Dict[str, Any]: """ For Postgres, the path to a SSL certificate is placed in `connect_args`. :param database: database instance from which to extract extras :raises CertificateException: If certificate is not valid/unparseable :raises SupersetException: If database extra json payload is unparseable """ try: extra = json.loads(database.extra or "{}") except json.JSONDecodeError: raise SupersetException("Unable to parse database extras") if database.server_cert: engine_params = extra.get("engine_params", {}) connect_args = engine_params.get("connect_args", {}) connect_args["sslmode"] = connect_args.get("sslmode", "verify-full") path = utils.create_ssl_cert_file(database.server_cert) connect_args["sslrootcert"] = path engine_params["connect_args"] = connect_args extra["engine_params"] = engine_params return extra
def test_ssl_certificate_file_creation(self): path = create_ssl_cert_file(ssl_certificate) expected_filename = md5_sha_from_str(ssl_certificate) self.assertIn(expected_filename, path) self.assertTrue(os.path.exists(path))
def test_ssl_certificate_file_creation(self): path = create_ssl_cert_file(ssl_certificate) expected_filename = hashlib.md5( ssl_certificate.encode("utf-8")).hexdigest() self.assertIn(expected_filename, path) self.assertTrue(os.path.exists(path))