Search in sources :

Example 1 with Validator

use of graphql.validation.Validator in project graphql-java by graphql-java.

the class GraphQL method validate.

private List<ValidationError> validate(ExecutionInput executionInput, Document document, GraphQLSchema graphQLSchema, InstrumentationState instrumentationState) {
    InstrumentationContext<List<ValidationError>> validationCtx = instrumentation.beginValidation(new InstrumentationValidationParameters(executionInput, document, graphQLSchema, instrumentationState));
    Validator validator = new Validator();
    List<ValidationError> validationErrors = validator.validateDocument(graphQLSchema, document);
    validationCtx.onCompleted(validationErrors, null);
    return validationErrors;
}
Also used : List(java.util.List) ValidationError(graphql.validation.ValidationError) InstrumentationValidationParameters(graphql.execution.instrumentation.parameters.InstrumentationValidationParameters) Validator(graphql.validation.Validator)

Example 2 with Validator

use of graphql.validation.Validator in project structr by structr.

the class GraphQLServlet method handleGraphQLRequest.

// ----- private methods -----
private void handleGraphQLRequest(final HttpServletRequest request, final HttpServletResponse response, final String query) throws IOException, FrameworkException {
    final SecurityContext securityContext;
    final Authenticator authenticator;
    try {
        // isolate request authentication in a transaction
        try (final Tx tx = StructrApp.getInstance().tx()) {
            authenticator = config.getAuthenticator();
            securityContext = authenticator.initializeAndExamineRequest(request, response);
            tx.success();
        }
        final App app = StructrApp.getInstance(securityContext);
        if (securityContext != null) {
            // isolate write output
            try (final Tx tx = app.tx()) {
                final Document doc = GraphQLRequest.parse(new Parser(), query);
                if (doc != null) {
                    final List<ValidationError> errors = new Validator().validateDocument(SchemaService.getGraphQLSchema(), doc);
                    if (errors.isEmpty()) {
                        // no validation errors in query, do request
                        final GraphQLWriter graphQLWriter = new GraphQLWriter(true);
                        // no trailing semicolon so we dont trip MimeTypes.getContentTypeWithoutCharset
                        response.setContentType("application/json; charset=utf-8");
                        final Writer writer = response.getWriter();
                        graphQLWriter.stream(securityContext, writer, new GraphQLRequest(securityContext, doc, query));
                        // useful newline
                        writer.append("\n");
                    } else {
                        final Map<String, Object> map = new LinkedHashMap<>();
                        final Writer writer = response.getWriter();
                        final Gson gson = getGson();
                        map.put("errors", errors);
                        gson.toJson(map, writer);
                        // useful newline
                        writer.append("\n");
                        // send 422 status
                        response.setStatus(422);
                    }
                }
                tx.success();
            }
        }
    } catch (FrameworkException frameworkException) {
        // set status & write JSON output
        response.setStatus(frameworkException.getStatus());
        getGson().toJson(frameworkException, response.getWriter());
        response.getWriter().println();
    } catch (IllegalStateException | IllegalArgumentException iex) {
        final Map<String, Object> map = new LinkedHashMap<>();
        map.put("code", 422);
        map.put("message", iex.getMessage());
        // set status & write JSON output
        response.setStatus(422);
        getGson().toJson(map, response.getWriter());
        response.getWriter().println();
    } catch (UnsupportedOperationException uoe) {
        logger.warn("POST not supported");
        int code = HttpServletResponse.SC_BAD_REQUEST;
        response.setStatus(code);
        response.getWriter().append(RestMethodResult.jsonError(code, "POST not supported: " + uoe.getMessage()));
    } catch (Throwable t) {
        logger.warn("Exception in POST", t);
        int code = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
        response.setStatus(code);
        response.getWriter().append(RestMethodResult.jsonError(code, "JsonSyntaxException in POST: " + t.getMessage()));
    } finally {
        try {
            // response.getWriter().flush();
            response.getWriter().close();
        } catch (Throwable t) {
            logger.warn("Unable to flush and close response: {}", t.getMessage());
        }
    }
}
Also used : StructrApp(org.structr.core.app.StructrApp) App(org.structr.core.app.App) Gson(com.google.gson.Gson) Document(graphql.language.Document) LinkedHashMap(java.util.LinkedHashMap) GraphQLRequest(org.structr.core.graphql.GraphQLRequest) GraphQLWriter(org.structr.rest.serialization.GraphQLWriter) ValidationError(graphql.validation.ValidationError) Authenticator(org.structr.core.auth.Authenticator) Tx(org.structr.core.graph.Tx) FrameworkException(org.structr.common.error.FrameworkException) Parser(graphql.parser.Parser) SecurityContext(org.structr.common.SecurityContext) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) Validator(graphql.validation.Validator) Writer(java.io.Writer) GraphQLWriter(org.structr.rest.serialization.GraphQLWriter)

Example 3 with Validator

use of graphql.validation.Validator in project structr by structr.

the class GraphQLCommand method processMessage.

@Override
public void processMessage(final WebSocketMessage webSocketData) {
    final StructrWebSocket socket = getWebSocket();
    final SecurityContext securityContext = socket.getSecurityContext();
    final List<GraphObject> result = new LinkedList<>();
    final String query = (String) webSocketData.getNodeData().get("query");
    if (query != null) {
        if (securityContext != null) {
            try {
                final Document doc = GraphQLRequest.parse(new Parser(), query);
                if (doc != null) {
                    final List<ValidationError> errors = new Validator().validateDocument(SchemaService.getGraphQLSchema(), doc);
                    if (errors.isEmpty()) {
                        // no validation errors in query, do request
                        result.addAll(createResult(securityContext, new GraphQLRequest(securityContext, doc, query)));
                    } else {
                        final Map<String, Object> map = new LinkedHashMap<>();
                        map.put("errors", errors);
                        logger.warn("Errors occured while processing GraphQL request.");
                        getWebSocket().send(MessageBuilder.status().data(map).code(422).message("Errors occured while processing GraphQL request.").build(), true);
                        return;
                    }
                }
            } catch (IOException ioex) {
                logger.warn("Could not process GraphQL request.", ioex);
                getWebSocket().send(MessageBuilder.status().code(422).message(ioex.getMessage()).build(), true);
                return;
            } catch (FrameworkException ex) {
                logger.warn("Could not process GraphQL request.", ex);
                getWebSocket().send(MessageBuilder.status().code(ex.getStatus()).message(ex.getMessage()).build(), true);
                return;
            }
        }
    }
    webSocketData.setResult(result);
    // send only over local connection (no broadcast)
    getWebSocket().send(webSocketData, true);
}
Also used : FrameworkException(org.structr.common.error.FrameworkException) StructrWebSocket(org.structr.websocket.StructrWebSocket) IOException(java.io.IOException) GraphObject(org.structr.core.GraphObject) Document(graphql.language.Document) LinkedList(java.util.LinkedList) Parser(graphql.parser.Parser) LinkedHashMap(java.util.LinkedHashMap) GraphQLRequest(org.structr.core.graphql.GraphQLRequest) SecurityContext(org.structr.common.SecurityContext) GraphObject(org.structr.core.GraphObject) ValidationError(graphql.validation.ValidationError) Validator(graphql.validation.Validator)

Aggregations

ValidationError (graphql.validation.ValidationError)3 Validator (graphql.validation.Validator)3 Document (graphql.language.Document)2 Parser (graphql.parser.Parser)2 LinkedHashMap (java.util.LinkedHashMap)2 SecurityContext (org.structr.common.SecurityContext)2 FrameworkException (org.structr.common.error.FrameworkException)2 GraphQLRequest (org.structr.core.graphql.GraphQLRequest)2 Gson (com.google.gson.Gson)1 InstrumentationValidationParameters (graphql.execution.instrumentation.parameters.InstrumentationValidationParameters)1 IOException (java.io.IOException)1 Writer (java.io.Writer)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Map (java.util.Map)1 GraphObject (org.structr.core.GraphObject)1 App (org.structr.core.app.App)1 StructrApp (org.structr.core.app.StructrApp)1 Authenticator (org.structr.core.auth.Authenticator)1 Tx (org.structr.core.graph.Tx)1