示例#1
0
        private IReadOnlyList <HCError> ValidateQueryDocuments(ISchema schema)
        {
            var errors = new List <HCError>();

            try
            {
                var serviceCollection = new ServiceCollection();
                serviceCollection.AddValidation();
                IDocumentValidator validator = serviceCollection.BuildServiceProvider()
                                               .GetService <IDocumentValidatorFactory>().CreateValidator();

                foreach (DocumentInfo documentInfo in _queries.Values)
                {
                    DocumentValidatorResult validationResult =
                        validator.Validate(schema, documentInfo.Document);

                    if (validationResult.HasErrors)
                    {
                        foreach (HCError error in validationResult.Errors)
                        {
                            errors.Add(HCErrorBuilder.FromError(error)
                                       .SetExtension("fileName", documentInfo.FileName)
                                       .SetExtension("document", documentInfo.Document)
                                       .Build());
                        }
                    }
                }
            }
            catch (GeneratorException ex)
            {
                errors.AddRange(ex.Errors);
            }

            return(errors);
        }
示例#2
0
        private static bool TryValidateRequest(
            ISchema schema,
            IReadOnlyList <GraphQLFile> executableFiles,
            Dictionary <ISyntaxNode, string> fileLookup,
            List <IError> errors)
        {
            IDocumentValidator validator = CreateDocumentValidator();

            DocumentNode            document         = MergeDocuments(executableFiles);
            DocumentValidatorResult validationResult = validator.Validate(schema, document);

            if (validationResult.HasErrors)
            {
                errors.AddRange(
                    validationResult.Errors.Select(
                        error => error.WithFileReference(fileLookup)));
                return(false);
            }

            return(true);
        }
示例#3
0
        public async ValueTask InvokeAsync(IRequestContext context)
        {
            if (context.Document is null)
            {
                context.Result = StateInvalidForDocumentValidation();
            }
            else
            {
                using (_diagnosticEvents.ValidateDocument(context))
                {
                    context.ValidationResult = _documentValidator.Validate(
                        context.Schema,
                        context.Document,
                        context.ContextData,
                        context.ValidationResult is not null);
                }

                if (context.IsValidDocument)
                {
                    await _next(context).ConfigureAwait(false);
                }
                else
                {
                    DocumentValidatorResult validationResult = context.ValidationResult;

                    context.Result = QueryResultBuilder.CreateError(
                        validationResult.Errors,
                        new Dictionary <string, object?>
                    {
                        { WellKnownContextData.ValidationErrors, true }
                    });

                    _diagnosticEvents.ValidationErrors(context, validationResult.Errors);
                }
            }
        }