Skip to content

Commit 2cf964b

Browse files
committed
Moved subject proxy out of the core logic
1 parent 80236b4 commit 2cf964b

File tree

3 files changed

+50
-24
lines changed

3 files changed

+50
-24
lines changed

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/GraphQLInvoker.java

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,41 @@
11
package graphql.kickstart.execution;
22

3-
import graphql.ExecutionInput;
43
import graphql.ExecutionResult;
54
import graphql.GraphQL;
65
import graphql.kickstart.execution.context.ContextSetting;
76
import graphql.kickstart.execution.input.GraphQLBatchedInvocationInput;
87
import graphql.kickstart.execution.input.GraphQLInvocationInput;
98
import graphql.kickstart.execution.input.GraphQLSingleInvocationInput;
10-
import java.security.AccessController;
11-
import java.security.PrivilegedAction;
129
import java.util.List;
1310
import java.util.concurrent.CompletableFuture;
1411
import java.util.stream.Collectors;
15-
import javax.security.auth.Subject;
12+
import lombok.AllArgsConstructor;
1613
import lombok.RequiredArgsConstructor;
1714

15+
@AllArgsConstructor
1816
@RequiredArgsConstructor
1917
public class GraphQLInvoker {
2018

2119
private final GraphQL graphQL;
20+
private GraphQLInvokerProxy proxy = GraphQL::executeAsync;
21+
22+
public CompletableFuture<ExecutionResult> executeAsync(GraphQLSingleInvocationInput invocationInput) {
23+
return proxy.executeAsync(graphQL, invocationInput.getExecutionInput());
24+
}
2225

2326
public GraphQLQueryResult query(GraphQLInvocationInput invocationInput) {
2427
if (invocationInput instanceof GraphQLSingleInvocationInput) {
2528
return GraphQLQueryResult.create(query((GraphQLSingleInvocationInput) invocationInput));
2629
}
2730
GraphQLBatchedInvocationInput batchedInvocationInput = (GraphQLBatchedInvocationInput) invocationInput;
28-
return GraphQLQueryResult.create(query(batchedInvocationInput.getExecutionInputs(), batchedInvocationInput.getContextSetting()));
31+
return GraphQLQueryResult
32+
.create(query(batchedInvocationInput.getExecutionInputs(), batchedInvocationInput.getContextSetting()));
2933
}
3034

3135
private ExecutionResult query(GraphQLSingleInvocationInput singleInvocationInput) {
3236
return executeAsync(singleInvocationInput).join();
3337
}
3438

35-
public CompletableFuture<ExecutionResult> executeAsync(GraphQLSingleInvocationInput invocationInput) {
36-
if (Subject.getSubject(AccessController.getContext()) == null && invocationInput.getSubject().isPresent()) {
37-
return Subject
38-
.doAs(invocationInput.getSubject().get(), (PrivilegedAction<CompletableFuture<ExecutionResult>>) () -> {
39-
try {
40-
return query(invocationInput.getExecutionInput());
41-
} catch (Exception e) {
42-
throw new RuntimeException(e);
43-
}
44-
});
45-
}
46-
47-
return query(invocationInput.getExecutionInput());
48-
}
49-
50-
private CompletableFuture<ExecutionResult> query(ExecutionInput executionInput) {
51-
return graphQL.executeAsync(executionInput);
52-
}
53-
5439
private List<ExecutionResult> query(List<GraphQLSingleInvocationInput> batchedInvocationInput,
5540
ContextSetting contextSetting) {
5641
// List<ExecutionInput> executionIds = batchedInvocationInput.stream()
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package graphql.kickstart.execution;
2+
3+
import graphql.ExecutionInput;
4+
import graphql.ExecutionResult;
5+
import graphql.GraphQL;
6+
import java.util.concurrent.CompletableFuture;
7+
8+
public interface GraphQLInvokerProxy {
9+
10+
CompletableFuture<ExecutionResult> executeAsync(GraphQL graphQL, ExecutionInput executionInput);
11+
12+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package graphql.kickstart.execution;
2+
3+
import graphql.ExecutionInput;
4+
import graphql.ExecutionResult;
5+
import graphql.kickstart.execution.context.GraphQLContext;
6+
import java.security.AccessController;
7+
import java.security.PrivilegedAction;
8+
import java.util.concurrent.CompletableFuture;
9+
import javax.security.auth.Subject;
10+
11+
public class GraphQLInvokerSubjectProxy implements GraphQLInvokerProxy {
12+
13+
@Override
14+
public CompletableFuture<ExecutionResult> executeAsync(GraphQLInvoker graphQLInvoker, ExecutionInput executionInput) {
15+
GraphQLContext context = (GraphQLContext) executionInput.getContext();
16+
if (Subject.getSubject(AccessController.getContext()) == null && context.getSubject().isPresent()) {
17+
return Subject
18+
.doAs(context.getSubject().get(), (PrivilegedAction<CompletableFuture<ExecutionResult>>) () -> {
19+
try {
20+
return graphQLInvoker.executeAsync(executionInput);
21+
} catch (Exception e) {
22+
throw new RuntimeException(e);
23+
}
24+
});
25+
}
26+
return graphQLInvoker.executeAsync(executionInput);
27+
}
28+
29+
}

0 commit comments

Comments
 (0)