Skip to content

Commit

Permalink
BCP config, error details and middleware improvements (#2483)
Browse files Browse the repository at this point in the history
  • Loading branch information
rstaib committed Oct 26, 2020
1 parent 4ac43f5 commit a1b2499
Show file tree
Hide file tree
Showing 43 changed files with 525 additions and 176 deletions.
Expand Up @@ -33,12 +33,14 @@ public static class HttpEndpointRouteBuilderExtensions
NameString schemaNameOrDefault = schemaName.HasValue ? schemaName : Schema.DefaultName;
IFileProvider fileProvider = CreateFileProvider();

requestPipeline.UseMiddleware<WebSocketSubscriptionMiddleware>(schemaNameOrDefault);
requestPipeline.UseMiddleware<HttpPostMiddleware>(schemaNameOrDefault);
requestPipeline.UseMiddleware<HttpGetSchemaMiddleware>(schemaNameOrDefault);
requestPipeline.UseMiddleware<ToolDefaultFileMiddleware>(fileProvider, path);
requestPipeline.UseMiddleware<ToolStaticFileMiddleware>(fileProvider, path);
requestPipeline.UseMiddleware<HttpGetMiddleware>(schemaNameOrDefault);
requestPipeline
.UseMiddleware<WebSocketSubscriptionMiddleware>(schemaNameOrDefault)
.UseMiddleware<HttpPostMiddleware>(schemaNameOrDefault)
.UseMiddleware<HttpGetSchemaMiddleware>(schemaNameOrDefault)
.UseMiddleware<ToolDefaultFileMiddleware>(fileProvider, path)
.UseMiddleware<ToolOptionsFileMiddleware>(schemaNameOrDefault, path)
.UseMiddleware<ToolStaticFileMiddleware>(fileProvider, path)
.UseMiddleware<HttpGetMiddleware>(schemaNameOrDefault);

return endpointRouteBuilder
.Map(pattern, requestPipeline.Build())
Expand Down
@@ -0,0 +1,47 @@
using System;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Primitives;
using Microsoft.Net.Http.Headers;

namespace HotChocolate.AspNetCore
{
internal static class HttpRequestExtensions
{
internal static bool AcceptHeaderContainsHtml(this HttpRequest request)
{
return request.Headers.TryGetValue(HeaderNames.Accept, out StringValues values) &&
values.Count > 0 && values[0].Contains("text/html");
}

internal static bool IsGetOrHeadMethod(this HttpRequest request)
{
return HttpMethods.IsGet(request.Method) || HttpMethods.IsHead(request.Method);
}

internal static bool PathEndsInSlash(this HttpRequest request)
{
return request.Path.Value?.EndsWith("/", StringComparison.Ordinal) ?? false;
}

internal static bool TryMatchPath(
this HttpRequest request,
PathString matchUrl,
bool forDirectory,
out PathString subpath)
{
var path = request.Path;

if (forDirectory && !request.PathEndsInSlash())
{
path += new PathString("/");
}

if (path.StartsWithSegments(matchUrl, out subpath))
{
return true;
}

return false;
}
}
}
@@ -0,0 +1,32 @@
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using HotChocolate.AspNetCore.Utilities;
using Microsoft.AspNetCore.Http;

namespace HotChocolate.AspNetCore
{
internal static class HttpResponseExtensions
{
private static readonly JsonSerializerOptions _serializerOptions = new JsonSerializerOptions
{
IgnoreNullValues = true,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};

internal static Task WriteAsJsonAsync<TValue>(
this HttpResponse response,
TValue value,
CancellationToken cancellationToken = default)
{
response.ContentType = ContentType.Json;
response.StatusCode = 200;

return JsonSerializer.SerializeAsync(
response.Body,
value,
_serializerOptions,
cancellationToken);
}
}
}
@@ -0,0 +1,13 @@
using HotChocolate.AspNetCore;

namespace Microsoft.AspNetCore.Builder
{
public static class RoutingEndpointConventionBuilderExtensions
{
public static TBuilder WithToolOptions<TBuilder>(this TBuilder builder, ToolOptions options)
where TBuilder : IEndpointConventionBuilder
{
return builder.WithMetadata(options);
}
}
}
@@ -1,20 +1,20 @@
{
"files": {
"static/js/0.4488805c.chunk.js": "./static/js/0.4488805c.chunk.js",
"static/js/0.1cfbb971.chunk.js": "./static/js/0.1cfbb971.chunk.js",
"static/js/1.2b57407c.chunk.js": "./static/js/1.2b57407c.chunk.js",
"static/js/2.e915aa79.chunk.js": "./static/js/2.e915aa79.chunk.js",
"main.css": "./static/css/main.cc3afb38.chunk.css",
"main.js": "./static/js/main.71953f18.chunk.js",
"runtime-main.js": "./static/js/runtime-main.3f58c569.js",
"main.js": "./static/js/main.8e40e632.chunk.js",
"runtime-main.js": "./static/js/runtime-main.addc0bd1.js",
"runtime-schema.worker.js": "./static/js/runtime-schema.worker.620115f9.js",
"schema.worker.js": "./schema.worker.js",
"static/css/7.82f2daa0.chunk.css": "./static/css/7.82f2daa0.chunk.css",
"static/js/7.5c623481.chunk.js": "./static/js/7.5c623481.chunk.js",
"static/js/8.2926b7b4.chunk.js": "./static/js/8.2926b7b4.chunk.js",
"static/js/9.50ef72aa.chunk.js": "./static/js/9.50ef72aa.chunk.js",
"static/js/10.168b2de3.chunk.js": "./static/js/10.168b2de3.chunk.js",
"static/js/11.f103f8c7.chunk.js": "./static/js/11.f103f8c7.chunk.js",
"static/js/12.6a2075ce.chunk.js": "./static/js/12.6a2075ce.chunk.js",
"static/js/7.1b7c0878.chunk.js": "./static/js/7.1b7c0878.chunk.js",
"static/js/8.94e6333b.chunk.js": "./static/js/8.94e6333b.chunk.js",
"static/js/9.142a949c.chunk.js": "./static/js/9.142a949c.chunk.js",
"static/js/10.f8349765.chunk.js": "./static/js/10.f8349765.chunk.js",
"static/js/11.5697221c.chunk.js": "./static/js/11.5697221c.chunk.js",
"static/js/12.c7d59199.chunk.js": "./static/js/12.c7d59199.chunk.js",
"static/js/13.a15acf04.chunk.js": "./static/js/13.a15acf04.chunk.js",
"static/js/14.9e198614.chunk.js": "./static/js/14.9e198614.chunk.js",
"static/js/15.96ac70d0.chunk.js": "./static/js/15.96ac70d0.chunk.js",
Expand All @@ -30,9 +30,9 @@
"static/js/25.1cf2e04f.chunk.js": "./static/js/25.1cf2e04f.chunk.js",
"static/js/26.db445ff6.chunk.js": "./static/js/26.db445ff6.chunk.js",
"static/js/27.5146f9c4.chunk.js": "./static/js/27.5146f9c4.chunk.js",
"static/js/28.8a61fdef.chunk.js": "./static/js/28.8a61fdef.chunk.js",
"static/js/28.a57085ef.chunk.js": "./static/js/28.a57085ef.chunk.js",
"static/js/29.6b0cc614.chunk.js": "./static/js/29.6b0cc614.chunk.js",
"static/js/30.946d4f99.chunk.js": "./static/js/30.946d4f99.chunk.js",
"static/js/30.a8d3020e.chunk.js": "./static/js/30.a8d3020e.chunk.js",
"static/js/31.7f8afa57.chunk.js": "./static/js/31.7f8afa57.chunk.js",
"static/js/32.3633c7e8.chunk.js": "./static/js/32.3633c7e8.chunk.js",
"static/js/33.49ee5883.chunk.js": "./static/js/33.49ee5883.chunk.js",
Expand All @@ -54,9 +54,9 @@
"static/js/49.d24ae294.chunk.js": "./static/js/49.d24ae294.chunk.js",
"static/js/50.8b7228d8.chunk.js": "./static/js/50.8b7228d8.chunk.js",
"static/js/51.e3deb32a.chunk.js": "./static/js/51.e3deb32a.chunk.js",
"static/js/52.abf251fd.chunk.js": "./static/js/52.abf251fd.chunk.js",
"static/js/52.7411ef52.chunk.js": "./static/js/52.7411ef52.chunk.js",
"static/js/53.861a2d9a.chunk.js": "./static/js/53.861a2d9a.chunk.js",
"static/js/54.f325d565.chunk.js": "./static/js/54.f325d565.chunk.js",
"static/js/54.f13d24e3.chunk.js": "./static/js/54.f13d24e3.chunk.js",
"static/js/55.fc056b0d.chunk.js": "./static/js/55.fc056b0d.chunk.js",
"static/js/56.8d0dae08.chunk.js": "./static/js/56.8d0dae08.chunk.js",
"static/js/57.a5c2281a.chunk.js": "./static/js/57.a5c2281a.chunk.js",
Expand All @@ -74,33 +74,33 @@
"static/js/69.27a7035c.chunk.js": "./static/js/69.27a7035c.chunk.js",
"static/js/70.ffc14921.chunk.js": "./static/js/70.ffc14921.chunk.js",
"static/js/71.c1403467.chunk.js": "./static/js/71.c1403467.chunk.js",
"static/js/72.0fd083d4.chunk.js": "./static/js/72.0fd083d4.chunk.js",
"static/js/72.2b38103d.chunk.js": "./static/js/72.2b38103d.chunk.js",
"static/js/73.3e67292d.chunk.js": "./static/js/73.3e67292d.chunk.js",
"static/js/74.185c576c.chunk.js": "./static/js/74.185c576c.chunk.js",
"static/js/75.7a374cd6.chunk.js": "./static/js/75.7a374cd6.chunk.js",
"static/js/76.901186b4.chunk.js": "./static/js/76.901186b4.chunk.js",
"static/js/76.b1db24fb.chunk.js": "./static/js/76.b1db24fb.chunk.js",
"css.worker.js": "./css.worker.js",
"editor.worker.js": "./editor.worker.js",
"html.worker.js": "./html.worker.js",
"index.html": "./index.html",
"json.worker.js": "./json.worker.js",
"precache-manifest.5138d5294037173394347b085c9cff06.js": "./precache-manifest.5138d5294037173394347b085c9cff06.js",
"precache-manifest.246e6e20cce37623aefa0135a6f27242.js": "./precache-manifest.246e6e20cce37623aefa0135a6f27242.js",
"schema.worker.js.LICENSE.txt": "./schema.worker.js.LICENSE.txt",
"service-worker.js": "./service-worker.js",
"static/js/0.4488805c.chunk.js.LICENSE.txt": "./static/js/0.4488805c.chunk.js.LICENSE.txt",
"static/js/0.1cfbb971.chunk.js.LICENSE.txt": "./static/js/0.1cfbb971.chunk.js.LICENSE.txt",
"static/js/69.27a7035c.chunk.js.LICENSE.txt": "./static/js/69.27a7035c.chunk.js.LICENSE.txt",
"static/js/7.5c623481.chunk.js.LICENSE.txt": "./static/js/7.5c623481.chunk.js.LICENSE.txt",
"static/js/8.2926b7b4.chunk.js.LICENSE.txt": "./static/js/8.2926b7b4.chunk.js.LICENSE.txt",
"static/js/7.1b7c0878.chunk.js.LICENSE.txt": "./static/js/7.1b7c0878.chunk.js.LICENSE.txt",
"static/js/8.94e6333b.chunk.js.LICENSE.txt": "./static/js/8.94e6333b.chunk.js.LICENSE.txt",
"static/media/codicon.css": "./static/media/codicon.22349029.ttf",
"ts.worker.js": "./ts.worker.js",
"ts.worker.js.LICENSE.txt": "./ts.worker.js.LICENSE.txt"
},
"entrypoints": [
"static/js/runtime-main.3f58c569.js",
"static/js/0.4488805c.chunk.js",
"static/js/runtime-main.addc0bd1.js",
"static/js/0.1cfbb971.chunk.js",
"static/css/7.82f2daa0.chunk.css",
"static/js/7.5c623481.chunk.js",
"static/js/7.1b7c0878.chunk.js",
"static/css/main.cc3afb38.chunk.css",
"static/js/main.71953f18.chunk.js"
"static/js/main.8e40e632.chunk.js"
]
}

0 comments on commit a1b2499

Please sign in to comment.