Skip to content

Commit c4b6f71

Browse files
Return not acceptable when failing to parse media type (#24)
* Return not acceptable when failing to parse media type * Update router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt Co-Authored-By: Nihal Gonsalves <[email protected]>
1 parent 9c61b64 commit c4b6f71

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

router/src/main/kotlin/io/moia/router/APIGatewayProxyEventExtensions.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ fun APIGatewayProxyRequestEvent.acceptHeader() = getHeaderCaseInsensitive("accep
1010
fun APIGatewayProxyRequestEvent.acceptedMediaTypes() = acceptHeader()
1111
?.split(",")
1212
?.map { it.trim() }
13-
?.map { MediaType.parse(it) }
13+
?.mapNotNull { parseMediaTypeSafe(it) }
1414
.orEmpty()
1515
fun APIGatewayProxyRequestEvent.contentType() = getHeaderCaseInsensitive("content-type")
1616

@@ -68,3 +68,10 @@ private fun getCaseInsensitive(key: String, map: Map<String, String>?): String?
6868
?.value
6969

7070
fun APIGatewayProxyResponseEvent.bodyAsBytes() = Base64.getDecoder().decode(body)
71+
72+
private fun parseMediaTypeSafe(input: String): MediaType? =
73+
try {
74+
MediaType.parse(input)
75+
} catch (e: IllegalArgumentException) {
76+
null
77+
}

router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,21 @@ class RequestHandlerTest {
336336
assert(response.body).isEqualTo("""{"greeting":"some"}""")
337337
}
338338

339+
@Test
340+
fun `should fail with 406 Not Acceptable on an unparsable media type`() {
341+
342+
val response = testRequestHandler.handleRequest(
343+
POST("/some")
344+
.withHeaders(mapOf(
345+
"Accept" to "*",
346+
"Content-Type" to "application/json"
347+
))
348+
.withBody("""{ "greeting": "some" }"""), mockk()
349+
)
350+
351+
assert(response.statusCode).isEqualTo(406)
352+
}
353+
339354
@Test
340355
fun `should match request requiring permission`() {
341356

0 commit comments

Comments
 (0)