in ktor-server/ktor-server-core/jvm/src/io/ktor/features/OriginConnectionPoint.kt [90:138]
override fun install(pipeline: ApplicationCallPipeline, configure: Config.() -> Unit): Config {
val config = Config()
configure(config)
pipeline.intercept(ApplicationCallPipeline.Features) {
call.forEachHeader(config.protoHeaders) { value ->
call.mutableOriginConnectionPoint.let { route ->
route.scheme = value
URLProtocol.byName[value]?.let {
route.port = it.defaultPort
}
}
}
call.forEachHeader(config.httpsFlagHeaders) { value ->
if (value.toBoolean()) {
call.mutableOriginConnectionPoint.let { route ->
route.scheme = "https"
URLProtocol.byName[route.scheme]?.let {
route.port = it.defaultPort
}
}
}
}
call.forEachHeader(config.hostHeaders) { value ->
val host = value.substringBefore(':')
val port = value.substringAfter(':', "")
call.mutableOriginConnectionPoint.let { route ->
route.host = host
port.tryParseInt()?.let {
route.port = it
} ?: URLProtocol.byName[route.scheme]?.let {
route.port = it.defaultPort
}
}
}
call.forEachHeader(config.forHeaders) { xForwardedFor ->
val remoteHost = xForwardedFor.split(",").first().trim()
if (remoteHost.isNotBlank()) {
call.mutableOriginConnectionPoint.remoteHost = remoteHost
}
}
}
return config
}