Skip to content

Commit 85d0caf

Browse files
committed
Fix headers to be case-insensitive
Signed-off-by: Dmitry Sulman <[email protected]>
1 parent 6f9ee11 commit 85d0caf

File tree

6 files changed

+40
-8
lines changed

6 files changed

+40
-8
lines changed

logback-access-reactor-netty/src/main/kotlin/io/github/dmitrysulman/logback/access/reactor/netty/AccessEvent.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ class AccessEvent(
120120
?.mapNotNull { (name, value) ->
121121
if (name.isNullOrEmpty()) return@mapNotNull null
122122
if (value == null) return@mapNotNull null
123-
name.toString() to value.toString()
123+
name.toString().lowercase() to value.toString()
124124
}?.toMap()
125125
?: emptyMap()
126126
}
@@ -193,7 +193,7 @@ class AccessEvent(
193193

194194
override fun getRemoteAddr() = _remoteAddr
195195

196-
override fun getRequestHeader(key: String) = _requestHeaderMap[key] ?: NA
196+
override fun getRequestHeader(key: String) = _requestHeaderMap[key.lowercase()] ?: NA
197197

198198
override fun getRequestHeaderNames(): Enumeration<String> = enumeration(_requestHeaderMap.keys)
199199

@@ -223,7 +223,7 @@ class AccessEvent(
223223

224224
override fun getServerAdapter() = _serverAdapter
225225

226-
override fun getResponseHeader(key: String) = _responseHeaderMap[key] ?: NA
226+
override fun getResponseHeader(key: String) = _responseHeaderMap[key.lowercase()] ?: NA
227227

228228
override fun getResponseHeaderMap() = _responseHeaderMap
229229

logback-access-reactor-netty/src/main/kotlin/io/github/dmitrysulman/logback/access/reactor/netty/ReactorNettyServerAdapter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class ReactorNettyServerAdapter(
1919
?.mapNotNull { (name, value) ->
2020
if (name.isNullOrEmpty()) return@mapNotNull null
2121
if (value == null) return@mapNotNull null
22-
name.toString() to value.toString()
22+
name.toString().lowercase() to value.toString()
2323
}?.toMap()
2424
?: emptyMap()
2525
}

logback-access-reactor-netty/src/test/kotlin/io/github/dmitrysulman/logback/access/reactor/netty/AccessEventTests.kt

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,13 +417,22 @@ class AccessEventTests {
417417
mapOf(
418418
"name1" to "value1",
419419
"name2" to "value2",
420+
"name3" to "value3",
420421
"empty_value" to "",
421422
)
422423
accessEvent.requestHeaderNames
423424
.asIterator()
424425
.asSequence()
425426
.toList() shouldBe
426-
listOf("name1", "name2", "empty_value")
427+
listOf("name1", "name2", "name3", "empty_value")
428+
429+
accessEvent.getRequestHeader("name1") shouldBe "value1"
430+
accessEvent.getRequestHeader("NaMe1") shouldBe "value1"
431+
accessEvent.getRequestHeader("NAME1") shouldBe "value1"
432+
433+
accessEvent.getRequestHeader("name3") shouldBe "value3"
434+
accessEvent.getRequestHeader("NaMe3") shouldBe "value3"
435+
accessEvent.getRequestHeader("NAME3") shouldBe "value3"
427436
}
428437

429438
@Test
@@ -438,10 +447,19 @@ class AccessEventTests {
438447
mapOf(
439448
"name1" to "value1",
440449
"name2" to "value2",
450+
"name3" to "value3",
441451
"empty_value" to "",
442452
)
443453
accessEvent.responseHeaderNameList shouldBe
444-
listOf("name1", "name2", "empty_value")
454+
listOf("name1", "name2", "name3", "empty_value")
455+
456+
accessEvent.getResponseHeader("name1") shouldBe "value1"
457+
accessEvent.getResponseHeader("NaMe1") shouldBe "value1"
458+
accessEvent.getResponseHeader("NAME1") shouldBe "value1"
459+
460+
accessEvent.getResponseHeader("name3") shouldBe "value3"
461+
accessEvent.getResponseHeader("NaMe3") shouldBe "value3"
462+
accessEvent.getResponseHeader("NAME3") shouldBe "value3"
445463
}
446464

447465
@Test

logback-access-reactor-netty/src/test/kotlin/io/github/dmitrysulman/logback/access/reactor/netty/ReactorNettyServerAdapterTests.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class ReactorNettyServerAdapterTests {
2929
mapOf(
3030
"name1" to "value1",
3131
"name2" to "value2",
32+
"name3" to "value3",
3233
"empty_value" to "",
3334
)
3435
}

logback-access-reactor-netty/src/test/kotlin/io/github/dmitrysulman/logback/access/reactor/netty/TestsHelper.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ val headerList =
1010
override val key = "name2"
1111
override val value = "value2"
1212
},
13+
object : Map.Entry<CharSequence, CharSequence> {
14+
override val key = "NAME3"
15+
override val value = "value3"
16+
},
1317
object : Map.Entry<CharSequence, CharSequence> {
1418
override val key = ""
1519
override val value = "empty_name"

logback-access-reactor-netty/src/test/kotlin/io/github/dmitrysulman/logback/access/reactor/netty/integration/IntegrationTests.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,9 @@ class IntegrationTests {
188188
accessEvent.timeStamp shouldBeGreaterThan now
189189
accessEvent.remoteUser shouldBe "-"
190190
accessEvent.getRequestHeader(TEST_REQUEST_HEADER_NAME) shouldBe TEST_REQUEST_HEADER_VALUE
191+
accessEvent.getRequestHeader(TEST_REQUEST_HEADER_NAME_IGNORE_CASE.lowercase()) shouldBe TEST_REQUEST_HEADER_VALUE_IGNORE_CASE
191192
accessEvent.getResponseHeader(TEST_RESPONSE_HEADER_NAME) shouldBe TEST_RESPONSE_HEADER_VALUE
193+
accessEvent.getResponseHeader(TEST_RESPONSE_HEADER_NAME_IGNORE_CASE.lowercase()) shouldBe TEST_RESPONSE_HEADER_VALUE_IGNORE_CASE
192194
accessEvent.getCookie(TEST_COOKIE_NAME) shouldBe TEST_COOKIE_VALUE
193195
accessEvent.contentLength shouldBe (response.responseHeaders().get(CONTENT_LENGTH)?.toLongOrNull() ?: 0)
194196
}
@@ -206,6 +208,7 @@ class IntegrationTests {
206208
.addHeader(REMOTE_HOST_HEADER, remoteHost)
207209
.addHeader(REMOTE_ADDRESS_HEADER, remoteAddress)
208210
.addHeader(TEST_RESPONSE_HEADER_NAME, TEST_RESPONSE_HEADER_VALUE)
211+
.addHeader(TEST_RESPONSE_HEADER_NAME_IGNORE_CASE, TEST_RESPONSE_HEADER_VALUE_IGNORE_CASE)
209212
.sendByteArray(Mono.just(responseContent.toByteArray()))
210213
}.bindNow()
211214

@@ -223,8 +226,10 @@ class IntegrationTests {
223226
private fun performGetRequest(uri: String): Mono<HttpClientResponse> =
224227
client
225228
.port(server.port())
226-
.headers { it.add(TEST_REQUEST_HEADER_NAME, TEST_REQUEST_HEADER_VALUE) }
227-
.cookie(DefaultCookie(TEST_COOKIE_NAME, TEST_COOKIE_VALUE))
229+
.headers {
230+
it.add(TEST_REQUEST_HEADER_NAME, TEST_REQUEST_HEADER_VALUE)
231+
it.add(TEST_REQUEST_HEADER_NAME_IGNORE_CASE, TEST_REQUEST_HEADER_VALUE_IGNORE_CASE)
232+
}.cookie(DefaultCookie(TEST_COOKIE_NAME, TEST_COOKIE_VALUE))
228233
.get()
229234
.uri(uri)
230235
.response()
@@ -234,8 +239,12 @@ class IntegrationTests {
234239
private const val REMOTE_ADDRESS_HEADER = "Remote-Address"
235240
private const val TEST_RESPONSE_HEADER_NAME = "Test-Response-Header"
236241
private const val TEST_RESPONSE_HEADER_VALUE = "testResponseHeaderValue"
242+
private const val TEST_RESPONSE_HEADER_NAME_IGNORE_CASE = "Test-Response-Header-Ignore-Case"
243+
private const val TEST_RESPONSE_HEADER_VALUE_IGNORE_CASE = "testResponseHeaderValueIgnoreCase"
237244
private const val TEST_REQUEST_HEADER_NAME = "Test-Request-Header"
238245
private const val TEST_REQUEST_HEADER_VALUE = "testRequestHeaderValue"
246+
private const val TEST_REQUEST_HEADER_NAME_IGNORE_CASE = "Test-Request-Header-Ignore-Case"
247+
private const val TEST_REQUEST_HEADER_VALUE_IGNORE_CASE = "testRequestHeaderValueIgnoreCase"
239248
private const val TEST_COOKIE_NAME = "cookieName"
240249
private const val TEST_COOKIE_VALUE = "cookieValue"
241250
}

0 commit comments

Comments
 (0)