Skip to content

Commit 0b622a7

Browse files
authored
fix: relaxed allow header json formatting (#406)
* fix: relaxed allow header json formatting * pr-style: remove blank line * pr-fix: use only weight in tests between 0-1
1 parent 31acc88 commit 0b622a7

2 files changed

Lines changed: 41 additions & 2 deletions

File tree

src/Arcus.WebApi.Hosting.AzureFunctions/Formatting/AzureFunctionsJsonFormattingMiddleware.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ private static bool AcceptsJson(HttpRequestData request, ILogger logger)
8080
{
8181
if (request.Headers.TryGetValues("Accept", out IEnumerable<string> headerValues))
8282
{
83-
if (headerValues.Any(value => value == "application/json" || value == "*/*"))
83+
if (headerValues.Any(value => value?.Contains("application/json") is true || value?.Contains("*/*") is true))
8484
{
8585
return true;
8686
}

src/Arcus.WebApi.Tests.Unit/Hosting/Formatting/AzureFunctionsJsonFormattingMiddlewareTests.cs

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
using System.Text;
33
using System.Threading.Tasks;
44
using Arcus.WebApi.Hosting.AzureFunctions.Formatting;
5-
using Arcus.WebApi.Logging.AzureFunctions;
65
using Arcus.WebApi.Tests.Unit.Logging.Fixture.AzureFunctions;
6+
using Bogus;
77
using Microsoft.Azure.Functions.Worker;
88
using Microsoft.Azure.Functions.Worker.Http;
99
using Xunit;
@@ -12,6 +12,8 @@ namespace Arcus.WebApi.Tests.Unit.Hosting.Formatting
1212
{
1313
public class AzureFunctionsJsonFormattingMiddlewareTests
1414
{
15+
private static readonly Faker BogusGenerator = new Faker();
16+
1517
[Fact]
1618
public async Task Request_WithoutJsonFormattingHeaders_ReturnsFailure()
1719
{
@@ -131,6 +133,43 @@ public async Task Request_WithAllAllowAndJsonContentTypeHeaders_ReturnsOk()
131133
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
132134
}
133135

136+
[Fact]
137+
public async Task Request_WithJsonAllowHeaderWithExtension_ReturnsOk()
138+
{
139+
// Arrange
140+
var middleware = new AzureFunctionsJsonFormattingMiddleware();
141+
var weight = BogusGenerator.Random.Double();
142+
var context = TestFunctionContext.Create(req =>
143+
{
144+
req.Headers.TryAddWithoutValidation("allow", $"application/json, q={weight}");
145+
});
146+
147+
// Act
148+
await middleware.Invoke(context, CreateOkResponse);
149+
150+
// Assert
151+
HttpResponseData response = context.GetHttpResponseData();
152+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
153+
}
154+
155+
[Fact]
156+
public async Task Request_WithAllAllowHeaderWithExtension_ReturnsOk()
157+
{
158+
// Arrange
159+
var middleware = new AzureFunctionsJsonFormattingMiddleware();
160+
var context = TestFunctionContext.Create(req =>
161+
{
162+
req.Headers.TryAddWithoutValidation("allow", "q=0.8, */*");
163+
});
164+
165+
// Act
166+
await middleware.Invoke(context, CreateOkResponse);
167+
168+
// Assert
169+
HttpResponseData response = context.GetHttpResponseData();
170+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
171+
}
172+
134173
private static async Task CreateOkResponse(FunctionContext context)
135174
{
136175
HttpRequestData request = await context.GetHttpRequestDataAsync();

0 commit comments

Comments
 (0)