From 39a8542d22a502e351a26e96f50c0e121948d3f6 Mon Sep 17 00:00:00 2001 From: Luke Korth Date: Wed, 8 Jun 2022 17:50:29 +0000 Subject: [PATCH] Add GraphQLContext access to ValidationEnvironment This allows for access to the current request context making it possible to, for example, write rules that validate based on the current method of authentication. --- .../rules/ValidationEnvironment.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/graphql/validation/rules/ValidationEnvironment.java b/src/main/java/graphql/validation/rules/ValidationEnvironment.java index 088063b..9fdfbfb 100644 --- a/src/main/java/graphql/validation/rules/ValidationEnvironment.java +++ b/src/main/java/graphql/validation/rules/ValidationEnvironment.java @@ -1,5 +1,13 @@ package graphql.validation.rules; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.function.Consumer; + +import graphql.GraphQLContext; import graphql.PublicApi; import graphql.execution.ResultPath; import graphql.language.SourceLocation; @@ -11,13 +19,6 @@ import graphql.schema.GraphQLInputType; import graphql.validation.interpolation.MessageInterpolator; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.function.Consumer; - /** * The environment in which validation runs */ @@ -56,6 +57,7 @@ public enum ValidatedElement { private final GraphQLInputType validatedType; private final ValidatedElement validatedElement; private final List directives; + private final GraphQLContext graphQLContext; private ValidationEnvironment(Builder builder) { this.argument = builder.argument; @@ -72,6 +74,7 @@ private ValidationEnvironment(Builder builder) { this.validatedValue = builder.validatedValue; this.validatedElement = builder.validatedElement; this.directives = builder.directives; + this.graphQLContext = builder.graphQLContext; } public static Builder newValidationEnvironment() { @@ -135,6 +138,10 @@ public List getDirectives() { return directives; } + public GraphQLContext getGraphQLContext() { + return graphQLContext; + } + public ValidationEnvironment transform(Consumer builderConsumer) { Builder builder = newValidationEnvironment().validationEnvironment(this); builderConsumer.accept(builder); @@ -156,6 +163,7 @@ public static class Builder { private GraphQLInputType validatedType; private ValidatedElement validatedElement; private List directives = Collections.emptyList(); + private GraphQLContext graphQLContext; public Builder validationEnvironment(ValidationEnvironment validationEnvironment) { this.argument = validationEnvironment.argument; @@ -172,6 +180,7 @@ public Builder validationEnvironment(ValidationEnvironment validationEnvironment this.validatedValue = validationEnvironment.validatedValue; this.validatedElement = validationEnvironment.validatedElement; this.directives = validationEnvironment.directives; + this.graphQLContext = validationEnvironment.graphQLContext; return this; } @@ -184,6 +193,7 @@ public Builder dataFetchingEnvironment(DataFetchingEnvironment dataFetchingEnvir location(dataFetchingEnvironment.getField().getSourceLocation()); argumentValues(dataFetchingEnvironment.getArguments()); validatedElement(ValidatedElement.FIELD); + this.graphQLContext = dataFetchingEnvironment.getGraphQlContext(); return this; }