Skip to content

Commit 46acb38

Browse files
committed
made headers case insensitive, closes #96
1 parent f7e7048 commit 46acb38

File tree

4 files changed

+12
-7
lines changed

4 files changed

+12
-7
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
}
55

66
group 'com.github.papsign'
7-
version '0.2-beta.16-SNAPSHOT'
7+
version '0.2-beta.17-SNAPSHOT'
88

99
repositories {
1010
mavenCentral()

src/main/kotlin/com/papsign/ktor/openapigen/annotations/mapping/OpenAPIName.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.papsign.ktor.openapigen.annotations.mapping
22

3+
import com.papsign.ktor.openapigen.annotations.parameters.HeaderParam
34
import java.util.*
45
import kotlin.reflect.KParameter
56
import kotlin.reflect.full.findAnnotation
@@ -10,7 +11,10 @@ annotation class OpenAPIName(val name: String)
1011
private val cache = Collections.synchronizedMap(HashMap<KParameter, String?>())
1112

1213
val KParameter.openAPIName: String?
13-
get() = cache.getOrPut(this) { findAnnotation<OpenAPIName>()?.name ?: name }
14+
get() = cache.getOrPut(this) {
15+
val caseSensitiveName = findAnnotation<OpenAPIName>()?.name ?: name
16+
if (findAnnotation<HeaderParam>() != null) caseSensitiveName?.toLowerCase() else caseSensitiveName
17+
}
1418

1519
fun <T> KParameter.remapOpenAPINames(map: Map<String, T>): Map<String, T> {
1620
val replace = this.openAPIName

src/main/kotlin/com/papsign/ktor/openapigen/parameters/handlers/ModularParameterHandler.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class ModularParameterHandler<T>(val parsers: Map<KParameter, Builder<*>>, val c
2929

3030
override fun parse(parameters: Parameters, headers: Headers): T {
3131
return constructor.callBy(parsers.mapValues {
32-
val value = it.value.build(it.key.name.toString(), it.key.remapOpenAPINames(parameters.toMap() + headers.toMap()))
32+
val value = it.value.build(it.key.name.toString(), it.key.remapOpenAPINames(parameters.toMap() + headers.toMap().mapKeys { it.key.toLowerCase() }))
3333
if (value != null || it.key.type.isMarkedNullable) {
3434
value
3535
} else {

src/test/kotlin/com/papsign/ktor/openapigen/routing/RoutingTest.kt

+5-4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import kotlin.test.assertTrue
2222
class RoutingTest {
2323

2424
data class TestHeaderParams(@HeaderParam("test param") val `Test-Header`: Long)
25+
data class TestHeaderParams2(@HeaderParam("test param") val `test-header`: Long)
2526
data class TestBodyParams(val xyz: Long)
2627
data class TestResponse(val msg: String)
2728

@@ -43,7 +44,7 @@ class RoutingTest {
4344
handleRequest(HttpMethod.Post, route) {
4445
addHeader(HttpHeaders.ContentType, "application/json")
4546
addHeader(HttpHeaders.Accept, "application/json")
46-
addHeader("Test-Header", "123")
47+
addHeader("test-header", "123")
4748
setBody("{\"xyz\":456}")
4849
}.apply {
4950
assertTrue { response.contentType().match("application/json") }
@@ -64,7 +65,7 @@ class RoutingTest {
6465
apiRouting {
6566
(this.ktorRoute as Routing).trace { println(it.buildText()) }
6667
route(route) {
67-
get<TestHeaderParams, TestResponse> { params ->
68+
get<TestHeaderParams2, TestResponse> { params ->
6869
respond(TestResponse("$params"))
6970
}
7071
}
@@ -76,7 +77,7 @@ class RoutingTest {
7677
}.apply {
7778
assertTrue { response.contentType().match("application/json") }
7879
assertEquals(
79-
"{\"msg\":\"${TestHeaderParams(123)}\"}",
80+
"{\"msg\":\"${TestHeaderParams2(123)}\"}",
8081
response.content
8182
)
8283
}
@@ -136,4 +137,4 @@ class RoutingTest {
136137
}
137138
}
138139
}
139-
}
140+
}

0 commit comments

Comments
 (0)