Skip to content

Commit 353a134

Browse files
chore: disable introspection by default
1 parent 675c429 commit 353a134

File tree

8 files changed

+74
-35
lines changed

8 files changed

+74
-35
lines changed

hypertrace-core-graphql

hypertrace-graphql-impl/src/main/java/org/hypertrace/graphql/impl/GraphQlFactory.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,25 @@
55
import graphql.kickstart.servlet.GraphQLConfiguration;
66
import graphql.schema.GraphQLSchema;
77
import org.hypertrace.core.graphql.context.GraphQlRequestContextBuilder;
8+
import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig;
89
import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle;
910
import org.hypertrace.core.grpcutils.client.GrpcChannelRegistry;
1011
import org.hypertrace.graphql.config.HypertraceGraphQlServiceConfig;
1112

1213
public class GraphQlFactory {
1314
public static GraphQLConfiguration build(
14-
HypertraceGraphQlServiceConfig config,
15+
HypertraceGraphQlServiceConfig serviceConfig,
16+
GraphQlEndpointConfig endpointConfig,
1517
GraphQlServiceLifecycle serviceLifecycle,
1618
GrpcChannelRegistry grpcChannelRegistry) {
1719
final Injector injector =
18-
Guice.createInjector(new GraphQlModule(config, serviceLifecycle, grpcChannelRegistry));
20+
Guice.createInjector(
21+
new GraphQlModule(
22+
serviceConfig, endpointConfig, serviceLifecycle, grpcChannelRegistry));
1923

2024
return GraphQLConfiguration.with(injector.getInstance(GraphQLSchema.class))
2125
.with(injector.getInstance(GraphQlRequestContextBuilder.class))
22-
.asyncTimeout(config.getGraphQlTimeout().toMillis())
26+
.asyncTimeout(endpointConfig.getTimeout().toMillis())
2327
.build();
2428
}
2529
}

hypertrace-graphql-impl/src/main/java/org/hypertrace/graphql/impl/GraphQlModule.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.hypertrace.core.graphql.rx.RxUtilModule;
1414
import org.hypertrace.core.graphql.schema.registry.GraphQlSchemaRegistryModule;
1515
import org.hypertrace.core.graphql.span.SpanSchemaModule;
16+
import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig;
1617
import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig;
1718
import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle;
1819
import org.hypertrace.core.graphql.trace.TraceSchemaModule;
@@ -35,24 +36,28 @@
3536

3637
class GraphQlModule extends AbstractModule {
3738

38-
private final HypertraceGraphQlServiceConfig config;
39+
private final HypertraceGraphQlServiceConfig serviceConfig;
40+
private final GraphQlEndpointConfig endpointConfig;
3941
private final GraphQlServiceLifecycle serviceLifecycle;
4042

4143
private final GrpcChannelRegistry grpcChannelRegistry;
4244

4345
public GraphQlModule(
44-
final HypertraceGraphQlServiceConfig config,
46+
final HypertraceGraphQlServiceConfig serviceConfig,
47+
final GraphQlEndpointConfig endpointConfig,
4548
final GraphQlServiceLifecycle serviceLifecycle,
4649
final GrpcChannelRegistry grpcChannelRegistry) {
47-
this.config = config;
50+
this.serviceConfig = serviceConfig;
51+
this.endpointConfig = endpointConfig;
4852
this.serviceLifecycle = serviceLifecycle;
4953
this.grpcChannelRegistry = grpcChannelRegistry;
5054
}
5155

5256
@Override
5357
protected void configure() {
54-
bind(GraphQlServiceConfig.class).toInstance(this.config);
55-
bind(HypertraceGraphQlServiceConfig.class).toInstance(this.config);
58+
bind(GraphQlServiceConfig.class).toInstance(this.serviceConfig);
59+
bind(HypertraceGraphQlServiceConfig.class).toInstance(this.serviceConfig);
60+
bind(GraphQlEndpointConfig.class).toInstance(this.endpointConfig);
5661
bind(GraphQlServiceLifecycle.class).toInstance(this.serviceLifecycle);
5762
bind(GrpcChannelRegistry.class).toInstance(this.grpcChannelRegistry);
5863
bind(Clock.class).toInstance(Clock.systemUTC());

hypertrace-graphql-impl/src/test/java/org/hypertrace/graphql/impl/GraphQlModuleTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import com.google.inject.Guice;
77
import graphql.schema.GraphQLSchema;
8+
import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig;
89
import org.hypertrace.core.graphql.spi.lifecycle.GraphQlServiceLifecycle;
910
import org.hypertrace.core.grpcutils.client.GrpcChannelRegistry;
1011
import org.hypertrace.graphql.config.HypertraceGraphQlServiceConfig;
@@ -19,6 +20,7 @@ public void testResolveBindings() {
1920
Guice.createInjector(
2021
new GraphQlModule(
2122
mock(HypertraceGraphQlServiceConfig.class),
23+
mock(GraphQlEndpointConfig.class),
2224
mock(GraphQlServiceLifecycle.class),
2325
mock(GrpcChannelRegistry.class)))
2426
.getAllBindings());
@@ -31,6 +33,7 @@ public void testResolveSchema() {
3133
Guice.createInjector(
3234
new GraphQlModule(
3335
mock(HypertraceGraphQlServiceConfig.class),
36+
mock(GraphQlEndpointConfig.class),
3437
mock(GraphQlServiceLifecycle.class),
3538
mock(GrpcChannelRegistry.class)))
3639
.getInstance(GraphQLSchema.class));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.hypertrace.graphql.service;
2+
3+
import com.typesafe.config.Config;
4+
import java.time.Duration;
5+
import lombok.AccessLevel;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Builder;
8+
import lombok.Value;
9+
import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig;
10+
11+
@Value
12+
@AllArgsConstructor(access = AccessLevel.PRIVATE)
13+
@Builder(access = AccessLevel.PRIVATE)
14+
class DefaultGraphQlEndpointConfig implements GraphQlEndpointConfig {
15+
private static final String URL_PATH_PROP_KEY = "graphql.urlPath";
16+
private static final String TIMEOUT_PROP_KEY = "graphql.timeout";
17+
private static final String MAX_IO_THREADS_PROP_KEY = "threads.io.max";
18+
private static final String MAX_REQUEST_THREADS_PROP_KEY = "threads.request.max";
19+
private static final String CORS_ENABLED_PROP_KEY = "graphql.corsEnabled";
20+
private static final String INTROSPECTION_ENABLED_PROP_KEY = "introspection.enabled";
21+
22+
String urlPath;
23+
Duration timeout;
24+
int maxRequestThreads;
25+
int maxIoThreads;
26+
boolean corsEnabled;
27+
boolean introspectionAllowed;
28+
29+
static GraphQlEndpointConfig fromConfig(Config config) {
30+
return new DefaultGraphQlEndpointConfigBuilder()
31+
.urlPath(config.getString(URL_PATH_PROP_KEY))
32+
.timeout(config.getDuration(TIMEOUT_PROP_KEY))
33+
.maxRequestThreads(config.getInt(MAX_REQUEST_THREADS_PROP_KEY))
34+
.maxIoThreads(config.getInt(MAX_IO_THREADS_PROP_KEY))
35+
.corsEnabled(config.getBoolean(CORS_ENABLED_PROP_KEY))
36+
.introspectionAllowed(config.getBoolean(INTROSPECTION_ENABLED_PROP_KEY))
37+
.build();
38+
}
39+
}

hypertrace-graphql-service/src/main/java/org/hypertrace/graphql/service/DefaultGraphQlServiceConfig.java

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,8 @@ class DefaultGraphQlServiceConfig implements HypertraceGraphQlServiceConfig {
1414

1515
private static final String SERVICE_NAME_CONFIG = "service.name";
1616
private static final String SERVICE_PORT_CONFIG = "service.port";
17-
18-
private static final String GRAPHQL_URL_PATH = "graphql.urlPath";
19-
private static final String GRAPHQL_CORS_ENABLED = "graphql.corsEnabled";
20-
private static final String GRAPHQL_TIMEOUT = "graphql.timeout";
21-
2217
private static final String DEFAULT_TENANT_ID = "defaultTenantId";
2318

24-
private static final String MAX_IO_THREADS_PROPERTY = "threads.io.max";
25-
private static final String MAX_REQUEST_THREADS_PROPERTY = "threads.request.max";
26-
2719
private static final String ATTRIBUTE_SERVICE_HOST_PROPERTY = "attribute.service.host";
2820
private static final String ATTRIBUTE_SERVICE_PORT_PROPERTY = "attribute.service.port";
2921
private static final String ATTRIBUTE_SERVICE_CLIENT_TIMEOUT = "attribute.service.timeout";
@@ -44,12 +36,7 @@ class DefaultGraphQlServiceConfig implements HypertraceGraphQlServiceConfig {
4436

4537
String serviceName;
4638
int servicePort;
47-
String graphQlUrlPath;
48-
boolean corsEnabled;
49-
Duration graphQlTimeout;
5039
Optional<String> defaultTenantId;
51-
int maxIoThreads;
52-
int maxRequestThreads;
5340
String attributeServiceHost;
5441
int attributeServicePort;
5542
Duration attributeServiceTimeout;
@@ -67,12 +54,7 @@ class DefaultGraphQlServiceConfig implements HypertraceGraphQlServiceConfig {
6754
DefaultGraphQlServiceConfig(Config untypedConfig) {
6855
this.serviceName = untypedConfig.getString(SERVICE_NAME_CONFIG);
6956
this.servicePort = untypedConfig.getInt(SERVICE_PORT_CONFIG);
70-
this.graphQlUrlPath = untypedConfig.getString(GRAPHQL_URL_PATH);
71-
this.corsEnabled = untypedConfig.getBoolean(GRAPHQL_CORS_ENABLED);
72-
this.graphQlTimeout = untypedConfig.getDuration(GRAPHQL_TIMEOUT);
7357
this.defaultTenantId = optionallyGet(() -> untypedConfig.getString(DEFAULT_TENANT_ID));
74-
this.maxIoThreads = untypedConfig.getInt(MAX_IO_THREADS_PROPERTY);
75-
this.maxRequestThreads = untypedConfig.getInt(MAX_REQUEST_THREADS_PROPERTY);
7658

7759
this.attributeServiceHost = untypedConfig.getString(ATTRIBUTE_SERVICE_HOST_PROPERTY);
7860
this.attributeServicePort = untypedConfig.getInt(ATTRIBUTE_SERVICE_PORT_PROPERTY);

hypertrace-graphql-service/src/main/java/org/hypertrace/graphql/service/GraphQlServiceFactory.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package org.hypertrace.graphql.service;
22

3+
import com.typesafe.config.Config;
34
import java.util.List;
4-
import org.hypertrace.core.graphql.spi.config.GraphQlServiceConfig;
5+
import org.hypertrace.core.graphql.spi.config.GraphQlEndpointConfig;
56
import org.hypertrace.core.serviceframework.http.HttpContainerEnvironment;
67
import org.hypertrace.core.serviceframework.http.HttpHandlerDefinition;
78
import org.hypertrace.core.serviceframework.http.HttpHandlerDefinition.CorsConfig;
@@ -14,25 +15,29 @@ public class GraphQlServiceFactory implements HttpHandlerFactory {
1415

1516
@Override
1617
public List<HttpHandlerDefinition> buildHandlers(HttpContainerEnvironment environment) {
17-
HypertraceGraphQlServiceConfig config =
18-
new DefaultGraphQlServiceConfig(environment.getConfig(SERVICE_NAME));
18+
Config rawConfig = environment.getConfig(SERVICE_NAME);
19+
HypertraceGraphQlServiceConfig serviceConfig = new DefaultGraphQlServiceConfig(rawConfig);
20+
GraphQlEndpointConfig endpointConfig = DefaultGraphQlEndpointConfig.fromConfig(rawConfig);
1921
DefaultGraphQlServiceLifecycle serviceLifecycle = new DefaultGraphQlServiceLifecycle();
2022
environment.getLifecycle().shutdownComplete().thenRun(serviceLifecycle::shutdown);
2123

2224
return List.of(
2325
HttpHandlerDefinition.builder()
2426
.name("graphql")
25-
.port(config.getServicePort())
26-
.contextPath(config.getGraphQlUrlPath())
27-
.corsConfig(buildCorsConfig(config))
27+
.port(serviceConfig.getServicePort())
28+
.contextPath(endpointConfig.getUrlPath())
29+
.corsConfig(buildCorsConfig(endpointConfig))
2830
.servlet(
2931
new GraphQlServiceHttpServlet(
3032
GraphQlFactory.build(
31-
config, serviceLifecycle, environment.getChannelRegistry())))
33+
serviceConfig,
34+
endpointConfig,
35+
serviceLifecycle,
36+
environment.getChannelRegistry())))
3237
.build());
3338
}
3439

35-
private CorsConfig buildCorsConfig(GraphQlServiceConfig config) {
40+
private CorsConfig buildCorsConfig(GraphQlEndpointConfig config) {
3641
if (!config.isCorsEnabled()) {
3742
return null;
3843
}

hypertrace-graphql-service/src/main/resources/configs/common/application.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ service.admin.port = 23432
66
graphql.urlPath = /graphql
77
graphql.corsEnabled = true
88
graphql.timeout = 30s
9+
introspection.enabled = false
910

1011
defaultTenantId = ${?DEFAULT_TENANT_ID}
1112

0 commit comments

Comments
 (0)