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.
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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;
}
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
Original file line number Diff line number Diff line change
@@ -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.