Ejemplo n.º 1
0
 public ErrorHandler(IErrorBuilder errorBuilder, DateTime firstValidDate = default, DateTime lastValidDate = default)
 {
     _errorBuilder          = errorBuilder;
     _firstValidDate        = firstValidDate == default ? GetDefaultFirstValidDate() : firstValidDate;
     _lastValidDate         = lastValidDate == default ? GetDefaultLastValidDate() : lastValidDate;
     _jsonSerializerOptions = GetDefaultJsonSerializerOptions();
 }
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IErrorBuilder errorBuilder)
        {
            if (env.IsDevelopment())
            {
                //app.UseDeveloperExceptionPage();
            }
            else
            {
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpStatusCodeExceptionMiddleware();

            //HandleExceptions(app);

            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
            });

            app.UseHttpsRedirection();
            app.UseMvc();
        }
Ejemplo n.º 3
0
        private static void ReportErrors(
            NameString schemaName,
            IResolverContext context,
            IEnumerable <IError> errors)
        {
            foreach (IError error in errors)
            {
                IErrorBuilder builder = ErrorBuilder.FromError(error)
                                        .SetExtension(_remoteErrorField, error.RemoveException())
                                        .SetExtension(_schemaNameErrorField, schemaName.Value);

                if (error.Path != null)
                {
                    Path path = RewriteErrorPath(error, context.Path);
                    builder.SetPath(path)
                    .ClearLocations()
                    .AddLocation(context.FieldSelection);
                }
                else if (IsHttpError(error))
                {
                    builder.SetPath(context.Path)
                    .ClearLocations()
                    .AddLocation(context.FieldSelection);
                }

                context.ReportError(builder.Build());
            }
        }
Ejemplo n.º 4
0
        public IResult <TData> ValidationError <TData>(ValidationResult result, string target = "")
        {
            if (result == null)
            {
                throw new VanthException("Cannot create a validation error without the validation result");
            }
            if (result.IsValid || !result.Errors.Any())
            {
                return(new Result <TData>());
            }


            IErrorBuilder error = DefaultError <TData>(CommonErrorCode.ValidationError,
                                                       CommonErrorType.ValidationError,
                                                       CommonErrorMessage.ValidationError,
                                                       target);

            foreach (ValidationFailure failure in result.Errors)
            {
                error.WithDetail(builder => builder.WithErrorCode(failure.ErrorCode)
                                 .WithMessage(failure.ErrorMessage)
                                 .WithTarget($"Property: {failure.PropertyName}")
                                 .Build());
            }

            return(DefaultResult <TData>(error, null, CommonErrorCode.ValidationError));
        }
Ejemplo n.º 5
0
        public static GraphQLException VariableValueInvalidType(
            VariableDefinitionNode variableDefinition,
            Exception?exception = null)
        {
            IErrorBuilder errorBuilder = ErrorBuilder.New()
                                         .SetMessage(
                "Variable `{0}` got an invalid value.",
                variableDefinition.Variable.Name.Value)
                                         .SetCode(ErrorCodes.Execution.InvalidType)
                                         .SetExtension("variable", variableDefinition.Variable.Name.Value)
                                         .AddLocation(variableDefinition);

            switch (exception)
            {
            case ScalarSerializationException ex:
                errorBuilder.SetExtension("scalarError", ex.Message);
                break;

            case InputObjectSerializationException ex:
                errorBuilder.SetExtension("inputObjectError", ex.Message);
                break;

            default:
                errorBuilder.SetException(exception);
                break;
            }

            return(new GraphQLException(errorBuilder.Build()));
        }
Ejemplo n.º 6
0
        public IError Handle(
            Exception exception,
            Action <IErrorBuilder> configure)
        {
            if (exception == null)
            {
                throw new ArgumentNullException(nameof(exception));
            }

            if (configure == null)
            {
                throw new ArgumentNullException(nameof(configure));
            }



            IErrorBuilder builder = CreateErrorFromException(exception);

            configure(builder);

            IError current = builder.Build();

            foreach (IErrorFilter filter in _filters)
            {
                current = filter.OnError(current);

                if (current == null)
                {
                    throw new InvalidOperationException(
                              "IErrorFilter.OnError mustn't return null.");
                }
            }

            return(current);
        }
 public static void Default(IErrorBuilder errorBuilder, ErrorMappingContext mappingContext)
 {
     errorBuilder
     .SetCode(Code)
     .SetPath(mappingContext.MiddlewareContext.Path)
     .SetMessage(mappingContext.ValidationFailure.ErrorMessage);
 }
Ejemplo n.º 8
0
        public static GraphQLException VariableValueInvalidType(
            VariableDefinitionNode variableDefinition,
            Exception?exception = null)
        {
            var underlyingError = exception is SerializationException serializationException
                ? serializationException.Message
                : null;

            IErrorBuilder errorBuilder = ErrorBuilder.New()
                                         .SetMessage(
                ThrowHelper_VariableValueInvalidType_Message,
                variableDefinition.Variable.Name.Value)
                                         .SetCode(ErrorCodes.Execution.InvalidType)
                                         .SetExtension("variable", variableDefinition.Variable.Name.Value)
                                         .AddLocation(variableDefinition);

            if (exception is not null)
            {
                errorBuilder.SetException(exception);
            }

            if (underlyingError is not null)
            {
                errorBuilder.SetExtension(nameof(underlyingError), underlyingError);
            }

            return(new GraphQLException(errorBuilder.Build()));
        }
 public static IErrorBuilder SetMessage(
     this IErrorBuilder builder,
     string format,
     params object[] args) =>
 builder.SetMessage(string.Format(
                        CultureInfo.InvariantCulture,
                        format,
                        args));
Ejemplo n.º 10
0
        public IResult <TData> IntegrationError <TData>(IErrorDetail detail, string service, string target = "")
        {
            IErrorBuilder error = DefaultError <TData>(CommonErrorCode.IntegrationError,
                                                       CommonErrorType.IntegrationError,
                                                       CommonErrorMessage.IntegrationError(service),
                                                       target);

            return(DefaultResult <TData>(error, detail, CommonErrorCode.IntegrationError));
        }
Ejemplo n.º 11
0
        public IResult <TData> DatabaseError <TData>(IErrorDetail detail, string database, string target = "")
        {
            IErrorBuilder error = DefaultError <TData>(CommonErrorCode.DatabaseError,
                                                       CommonErrorType.DatabaseError,
                                                       CommonErrorMessage.DatabaseError(database),
                                                       target);

            return(DefaultResult <TData>(error, detail, CommonErrorCode.DatabaseError));
        }
 public static void Details(IErrorBuilder errorBuilder, ErrorMappingContext mappingContext)
 {
     errorBuilder
     .SetExtension(ExtensionKeys.ValidatorKey, mappingContext.ValidationFailure.ErrorCode)
     .SetExtension(ExtensionKeys.FieldKey, mappingContext.MiddlewareContext.Field.Name)
     .SetExtension(ExtensionKeys.ArgumentKey, mappingContext.Argument.Name)
     .SetExtension(ExtensionKeys.PropertyKey, mappingContext.ValidationFailure.PropertyName)
     .SetExtension(ExtensionKeys.SeverityKey, mappingContext.ValidationFailure.Severity);
 }
 public static void Extended(IErrorBuilder errorBuilder, ErrorMappingContext mappingContext)
 {
     errorBuilder
     .SetExtension(ExtensionKeys.AttemptedValueKey, mappingContext.ValidationFailure.AttemptedValue)
     .SetExtension(ExtensionKeys.CustomStateKey, mappingContext.ValidationFailure.CustomState)
     .SetExtension(
         ExtensionKeys.FormattedMessagePlaceholderValuesKey,
         mappingContext.ValidationFailure.FormattedMessagePlaceholderValues);
 }
Ejemplo n.º 14
0
        public IResult <TData> TransportError <TData>(IErrorDetail detail, string target = "")
        {
            IErrorBuilder error = DefaultError <TData>(CommonErrorCode.TransportError,
                                                       CommonErrorType.TransportError,
                                                       CommonErrorMessage.TransportError,
                                                       target);

            return(DefaultResult <TData>(error, detail, CommonErrorCode.ValidationError));
        }
Ejemplo n.º 15
0
        public IResult <TData> NullObjectError <TData>(IErrorDetail detail, string operation, string target = "")
        {
            IErrorBuilder error = DefaultError <TData>(CommonErrorCode.NullObjectError,
                                                       CommonErrorType.NullObjectError,
                                                       CommonErrorMessage.NullObjectError(operation),
                                                       target);

            return(DefaultResult <TData>(error, detail, CommonErrorCode.NullObjectError));
        }
 public static IErrorBuilder SetFragmentName(
     this IErrorBuilder errorBuilder,
     ISyntaxNode node)
 {
     if (node.Kind == SyntaxKind.FragmentDefinition)
     {
         errorBuilder.SetExtension("fragment", ((FragmentDefinitionNode)node).Name.Value);
     }
     return(errorBuilder);
 }
Ejemplo n.º 17
0
    public static IErrorBuilder AddLocation(
        this IErrorBuilder builder,
        ISyntaxNode?syntaxNode)
    {
        if (builder is null)
        {
            throw new ArgumentNullException(nameof(builder));
        }

        if (syntaxNode is { Location : not null })
 public IErrorBuilder BuildError(
     IErrorBuilder builder,
     ValidationFailure failure,
     IInputField argument,
     IMiddlewareContext context)
 {
     return(builder.SetCode("VALIDATION_ERROR")
            .SetMessage(failure.ErrorMessage)
            .SetExtension("argument", argument.Name)
            .SetPath(context.Path));
 }
Ejemplo n.º 19
0
        private IResult <TData> DefaultResult <TData>(IErrorBuilder builder, IErrorDetail detail, string errorCode)
        {
            var statusCode = Convert.ToInt32(errorCode);

            if (detail is null)
            {
                return(new Result <TData>().AddError(builder.Build()).AddStatusCode(statusCode));
            }

            builder.WithDetail(detail);
            return(new Result <TData>().AddError(builder.Build()).AddStatusCode(statusCode));
        }
Ejemplo n.º 20
0
        public static IError ArgumentNotUnique(
            this IDocumentValidatorContext context,
            ArgumentNode node,
            IOutputField?field      = null,
            DirectiveType?directive = null)
        {
            IErrorBuilder builder = ErrorBuilder.New()
                                    .SetMessage(Resources.ErrorHelper_ArgumentNotUnique)
                                    .AddLocation(node)
                                    .SetPath(context.CreateErrorPath());

            if (field is { })
Ejemplo n.º 21
0
 public ExceptionRuleForErrorProvider(
     Func <ISetErrorBuilder <TException>, IProvideErrorBuilder <TException> > errorBuilderProvider,
     Func <TException, bool> predicate)
 {
     if (errorBuilderProvider == null)
     {
         throw new ArgumentNullException(nameof(errorBuilderProvider));
     }
     _predicate     = predicate ?? throw new ArgumentNullException(nameof(predicate));
     _exceptionType = typeof(TException);
     TypeFullName   = _exceptionType.FullName;
     _errorBuilder  = errorBuilderProvider(new ErrorBuilderConfiguration <TException>()).GetBuilder();
 }
Ejemplo n.º 22
0
        private IErrorBuilder CreateErrorFromException(Exception exception)
        {
            IErrorBuilder builder = ErrorBuilder.New()
                                    .SetMessage("Unexpected Execution Error");

            if (_includeExceptionDetails)
            {
                builder.SetException(exception)
                .SetExtension("message", exception.Message)
                .SetExtension("stackTrace", exception.StackTrace);
            }

            return(builder);
        }
Ejemplo n.º 23
0
        private void CreateError(IMiddlewareContext context, Exception ex = default)
        {
            IErrorBuilder errorBuilder = ErrorBuilder.New()
                                         .SetMessage("NotAuthorized")
                                         .SetPath(context.Path)
                                         .AddLocation(context.FieldSelection);

            if (ex != default)
            {
                errorBuilder.SetException(ex);
            }

            context.Result = errorBuilder.Build();
        }
Ejemplo n.º 24
0
        private IErrorBuilder CreateErrorFromException(Exception exception)
        {
            IErrorBuilder builder = ErrorBuilder.New()
                                    .SetMessage(CoreResources.ErrorHandler_UnexpectedError)
                                    .SetException(exception);

            if (_includeExceptionDetails)
            {
                builder
                .SetExtension(_messageProperty, exception.Message)
                .SetExtension(_stackTraceProperty, exception.StackTrace);
            }

            return(builder);
        }
Ejemplo n.º 25
0
        public IResult <TData> Exception <TData>(Exception exception, bool shouldAddStackTrace, string target = "")
        {
            if (exception == null)
            {
                throw new ArgumentNullException(nameof(exception), "Cannot create exception error from a null exception object");
            }


            IErrorBuilder error = DefaultError <TData>(CommonErrorCode.ExceptionError,
                                                       CommonErrorType.Exception,
                                                       CommonErrorMessage.ExceptionError,
                                                       target)
                                  .WithDetail(exception.ExtractDetailsFromException(shouldAddStackTrace));

            return(DefaultResult <TData>(error, null, CommonErrorCode.ExceptionError));
        }
Ejemplo n.º 26
0
        public static IErrorBuilder AddLocation(
            this IErrorBuilder builder,
            ISyntaxNode syntaxNode)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (syntaxNode == null)
            {
                throw new ArgumentNullException(nameof(syntaxNode));
            }

            return(builder.AddLocation(
                       syntaxNode.Location.StartToken.Line,
                       syntaxNode.Location.StartToken.Column));
        }
Ejemplo n.º 27
0
        public static GraphQLException VariableValueInvalidType(
            VariableDefinitionNode variableDefinition,
            Exception?exception = null)
        {
            IErrorBuilder errorBuilder = ErrorBuilder.New()
                                         .SetMessage(
                "Variable `{0}` got an invalid value.",
                variableDefinition.Variable.Name.Value)
                                         .SetCode(ErrorCodes.Execution.InvalidType)
                                         .SetExtension("variable", variableDefinition.Variable.Name.Value)
                                         .AddLocation(variableDefinition);

            if (exception is not null)
            {
                errorBuilder.SetException(exception);
            }

            return(new GraphQLException(errorBuilder.Build()));
        }
Ejemplo n.º 28
0
        private static void ReportErrors(
            IResolverContext context,
            IEnumerable <IError> errors)
        {
            foreach (IError error in errors)
            {
                IErrorBuilder builder = ErrorBuilder.FromError(error)
                                        .SetExtension("remote", error);

                if (error.Path != null)
                {
                    Path path = RewriteErrorPath(error, context.Path);
                    builder.SetPath(path)
                    .ClearLocations()
                    .AddLocation(context.FieldSelection);
                }

                context.ReportError(builder.Build());
            }
        }
 public static IErrorBuilder UseExponentiationOverflow(this IErrorBuilder builder)
 {
     builder.Services.AddTransient <IErrorExpressionProvider, ExponentFunctionErrorExpressionProvider>();
     return(builder);
 }
 public static IErrorBuilder SpecifiedBy(
     this IErrorBuilder errorBuilder,
     string section) =>
 errorBuilder.SetExtension(
     "specifiedBy",
     "http://spec.graphql.org/June2018/#" + section);