fix(kobo): prevent double URL encoding when proxying

Closes: #2130
This commit is contained in:
Jason 2025-11-10 23:52:32 -08:00 committed by GitHub
parent b925f3e19d
commit ce3ad4c1c7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -18,6 +18,7 @@ import org.springframework.util.LinkedMultiValueMap
import org.springframework.web.client.RestClient import org.springframework.web.client.RestClient
import org.springframework.web.client.toEntity import org.springframework.web.client.toEntity
import org.springframework.web.server.ResponseStatusException import org.springframework.web.server.ResponseStatusException
import org.springframework.web.util.DefaultUriBuilderFactory
import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.minutes
import kotlin.time.toJavaDuration import kotlin.time.toJavaDuration
@ -29,18 +30,26 @@ class KoboProxy(
private val komgaSyncTokenGenerator: KomgaSyncTokenGenerator, private val komgaSyncTokenGenerator: KomgaSyncTokenGenerator,
private val komgaSettingsProvider: KomgaSettingsProvider, private val komgaSettingsProvider: KomgaSettingsProvider,
) { ) {
private val koboApiClient = private val koboApiClient: RestClient
RestClient
.builder() init {
.baseUrl("https://storeapi.kobo.com") val uriBuilderFactory = DefaultUriBuilderFactory("https://storeapi.kobo.com")
.requestFactory( uriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE)
ClientHttpRequestFactoryBuilder.reactor().build(
ClientHttpRequestFactorySettings koboApiClient =
.defaults() RestClient
.withReadTimeout(1.minutes.toJavaDuration()) .builder()
.withConnectTimeout(1.minutes.toJavaDuration()), .uriBuilderFactory(
), uriBuilderFactory,
).build() ).requestFactory(
ClientHttpRequestFactoryBuilder.reactor().build(
ClientHttpRequestFactorySettings
.defaults()
.withReadTimeout(1.minutes.toJavaDuration())
.withConnectTimeout(1.minutes.toJavaDuration()),
),
).build()
}
private val pathRegex = """\/kobo\/[-\w]*(.*)""".toRegex() private val pathRegex = """\/kobo\/[-\w]*(.*)""".toRegex()