feat: логирование заголовков запроса и заголовков в апстрим; маскировка секретов; Content-Type прокси-овнер
This commit is contained in:
@@ -289,6 +289,7 @@ class ConfigLogicTest {
|
||||
"Proxy-Connection" to listOf("keep-alive"),
|
||||
"Upgrade" to listOf("h2c"),
|
||||
"Authorization" to listOf("Bearer client-secret"),
|
||||
"Content-Type" to listOf("application/x-www-form-urlencoded"),
|
||||
"Accept" to listOf("*/*"),
|
||||
)
|
||||
val out = headersToForward(req)
|
||||
@@ -297,6 +298,7 @@ class ConfigLogicTest {
|
||||
assertEquals(listOf("*/*"), out["Accept"])
|
||||
assertEquals(3, out.size)
|
||||
assertEquals(null, out["Authorization"])
|
||||
assertEquals(null, out["Content-Type"])
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -312,6 +314,32 @@ class ConfigLogicTest {
|
||||
assertEquals(listOf("s"), out["x-opencode-session"])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun formatHeadersForLogMasksSecretsAndKeepsOthers() {
|
||||
val line = formatHeadersForLog(
|
||||
headersOf(
|
||||
"X-Opencode-Session" to listOf("abc-123"),
|
||||
"Authorization" to listOf("Bearer super-secret"),
|
||||
"x-api-key" to listOf("key-1"),
|
||||
"Cookie" to listOf("session=deadbeef"),
|
||||
),
|
||||
)
|
||||
assertTrue(line.contains("X-Opencode-Session=abc-123"))
|
||||
assertTrue(line.contains("Authorization=***"))
|
||||
assertTrue(line.contains("x-api-key=***"))
|
||||
assertTrue(line.contains("Cookie=***"))
|
||||
assertFalse(line.contains("super-secret"))
|
||||
assertFalse(line.contains("deadbeef"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun formatHeadersForLogJoinsMultipleValues() {
|
||||
val line = formatHeadersForLog(
|
||||
headersOf("X-Custom" to listOf("a", "b")),
|
||||
)
|
||||
assertEquals("X-Custom=a|b", line)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun rebuildFromChunksPreservesAllUpstreamFields() {
|
||||
val sse = """
|
||||
|
||||
Reference in New Issue
Block a user