Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import com.google.common.base.Joiner;
import com.openblocks.plugin.es.model.EsConnection;
import com.openblocks.plugin.es.model.EsDatasourceConfig;
import com.openblocks.sdk.config.CommonConfig;
import com.openblocks.sdk.config.dynamic.Conf;
import com.openblocks.sdk.config.dynamic.ConfigCenter;
import com.openblocks.sdk.exception.BizError;
Expand All @@ -44,7 +45,6 @@
import com.openblocks.sdk.util.ExceptionUtils;
import com.openblocks.sdk.util.JsonUtils;
import com.openblocks.sdk.util.Preconditions;
import com.openblocks.sdk.webclient.NameResolver;

import lombok.extern.slf4j.Slf4j;
import reactor.core.publisher.Mono;
Expand All @@ -61,10 +61,12 @@ public class EsConnector implements DatasourceConnector<EsConnection, EsDatasour
private static final Joiner JOINER = Joiner.on("/");

private final Conf<Duration> datasourceValidateTimeout;
private final CommonConfig commonConfig;

public EsConnector(ConfigCenter configCenter) {
public EsConnector(ConfigCenter configCenter, CommonConfig commonConfig) {
datasourceValidateTimeout = configCenter.mongoPlugin().ofInteger("datasourceValidateTimeoutMillis", 6000)
.then(Duration::ofMillis);
this.commonConfig = commonConfig;
}

@Nonnull
Expand Down Expand Up @@ -100,7 +102,7 @@ public Mono<EsConnection> createConnection(EsDatasourceConfig connectionConfig)
*/
private RestClient buildRestClient(EsDatasourceConfig esDatasourceConfig) {
ConnectionStringParseResult parseResult = parseConnectionString(esDatasourceConfig.getConnectionString());
if (NameResolver.DISALLOWED_HOSTS.contains(parseResult.getHost())) {
if (commonConfig.getDisallowedHosts().contains(parseResult.getHost())) {
throw new BizException(BizError.INVALID_DATASOURCE_CONFIG_TYPE, "INVALID_CONNECTION_STRING");
}
HttpHost httpHost = new HttpHost(parseResult.getHost(), parseResult.getPort(), parseResult.getSchema());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
import static com.openblocks.sdk.util.MustacheHelper.renderMustacheString;
import static com.openblocks.sdk.util.StreamUtils.collectList;
import static com.openblocks.sdk.util.StreamUtils.distinctByKey;
import static com.openblocks.sdk.webclient.WebClients.builder;
import static com.openblocks.sdk.webclient.WebClients.withSafeHost;
import static org.apache.commons.lang3.StringUtils.firstNonBlank;
import static org.apache.commons.lang3.StringUtils.trimToEmpty;

Expand Down Expand Up @@ -61,6 +59,7 @@
import com.openblocks.plugin.graphql.helpers.BufferingFilter;
import com.openblocks.plugin.graphql.model.GraphQLQueryConfig;
import com.openblocks.plugin.graphql.model.GraphQLQueryExecutionContext;
import com.openblocks.sdk.config.CommonConfig;
import com.openblocks.sdk.exception.PluginException;
import com.openblocks.sdk.models.Property;
import com.openblocks.sdk.models.QueryExecutionResult;
Expand All @@ -76,6 +75,7 @@
import com.openblocks.sdk.util.JsonUtils;
import com.openblocks.sdk.util.MoreMapUtils;
import com.openblocks.sdk.util.MustacheHelper;
import com.openblocks.sdk.webclient.WebClientBuildHelper;

import lombok.Builder;
import lombok.Getter;
Expand All @@ -100,6 +100,12 @@ public class GraphQLExecutor implements QueryExecutor<GraphQLDatasourceConfig, O
private final DataUtils dataUtils = DataUtils.getInstance();
Consumer<HttpHeaders> DEFAULT_HEADERS_CONSUMER = httpHeaders -> {};

private final CommonConfig commonConfig;

public GraphQLExecutor(CommonConfig commonConfig) {
this.commonConfig = commonConfig;
}

private static List<Property> renderMustacheValueInProperties(List<Property> properties, Map<String, Object> paramMap) {
return properties.stream()
.map(it -> {
Expand Down Expand Up @@ -244,7 +250,9 @@ private List<Property> buildBodyParams(List<Property> datasourceBodyFormData, Li
public Mono<QueryExecutionResult> executeQuery(Object o, GraphQLQueryExecutionContext context) {
return Mono.defer(() -> {
URI uri = RestApiUriBuilder.buildUri(context.getUrl(), new HashMap<>(), context.getUrlParams());
WebClient.Builder webClientBuilder = withSafeHost(builder());
WebClient.Builder webClientBuilder = WebClientBuildHelper.builder()
.disallowedHosts(commonConfig.getDisallowedHosts())
.toWebClientBuilder();

Map<String, String> allHeaders = context.getHeaders();
String contentType = context.getContentType();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
import static com.openblocks.sdk.util.StreamUtils.collectList;
import static org.apache.commons.collections4.MapUtils.emptyIfNull;
import static org.apache.commons.lang3.StringUtils.trimToEmpty;
import static org.springframework.web.reactive.function.client.WebClient.builder;

import java.io.IOException;
import java.net.URI;
Expand Down Expand Up @@ -103,7 +102,7 @@
import com.openblocks.sdk.plugin.restapi.auth.BasicAuthConfig;
import com.openblocks.sdk.plugin.restapi.auth.RestApiAuthType;
import com.openblocks.sdk.query.QueryVisitorContext;
import com.openblocks.sdk.webclient.WebClients;
import com.openblocks.sdk.webclient.WebClientBuildHelper;

import lombok.Builder;
import lombok.Getter;
Expand Down Expand Up @@ -238,7 +237,10 @@ public Mono<QueryExecutionResult> executeQuery(Object webClientFilter, RestApiQu

return Mono.defer(() -> authByOauth2InheritFromLogin(context))
.then(Mono.defer(() -> {
WebClient.Builder webClientBuilder = WebClients.withSafeHostAndSecure(builder(), context.getSslConfig());
WebClient.Builder webClientBuilder = WebClientBuildHelper.builder()
.disallowedHosts(commonConfig.getDisallowedHosts())
.sslConfig(context.getSslConfig())
.toWebClientBuilder();

Map<String, String> allHeaders = context.getHeaders();
String contentType = context.getContentType();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public class RestApiEngineTest {
private static final RestApiConnector connector = new RestApiConnector();

private final QueryVisitorContext queryVisitorContext = new QueryVisitorContext("userId1",
"workspace1", 8080, null, null);
"workspace1", 8080, null, null, null);

@Test
public void testUrlConcatenationWithUriBuilder() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -34,6 +36,7 @@ public class CommonConfig {
private int maxQueryResponseSizeInMb = 10;
private Cookie cookie = new Cookie();
private JsExecutor jsExecutor = new JsExecutor();
private Set<String> disallowedHosts = new HashSet<>();

public boolean isSelfHost() {
return !isCloud();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.openblocks.sdk.query;

import java.util.List;
import java.util.Set;

import org.springframework.http.HttpCookie;
import org.springframework.util.MultiValueMap;
Expand All @@ -20,13 +21,15 @@ public class QueryVisitorContext {
private final int systemPort;

private final Mono<List<Property>> authTokenMono;
private final Set<String> disallowedHosts;

public QueryVisitorContext(String visitorId, String applicationOrgId, int systemPort,
MultiValueMap<String, HttpCookie> cookies, Mono<List<Property>> authTokenMono) {
MultiValueMap<String, HttpCookie> cookies, Mono<List<Property>> authTokenMono, Set<String> disallowedHosts) {
this.visitorId = visitorId;
this.applicationOrgId = applicationOrgId;
this.systemPort = systemPort;
this.cookies = cookies;
this.authTokenMono = authTokenMono;
this.disallowedHosts = disallowedHosts;
}
}

This file was deleted.

This file was deleted.

This file was deleted.

Loading