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,11 +30,18 @@ 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
init {
val uriBuilderFactory = DefaultUriBuilderFactory("https://storeapi.kobo.com")
uriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE)
koboApiClient =
RestClient RestClient
.builder() .builder()
.baseUrl("https://storeapi.kobo.com") .uriBuilderFactory(
.requestFactory( uriBuilderFactory,
).requestFactory(
ClientHttpRequestFactoryBuilder.reactor().build( ClientHttpRequestFactoryBuilder.reactor().build(
ClientHttpRequestFactorySettings ClientHttpRequestFactorySettings
.defaults() .defaults()
@ -41,6 +49,7 @@ class KoboProxy(
.withConnectTimeout(1.minutes.toJavaDuration()), .withConnectTimeout(1.minutes.toJavaDuration()),
), ),
).build() ).build()
}
private val pathRegex = """\/kobo\/[-\w]*(.*)""".toRegex() private val pathRegex = """\/kobo\/[-\w]*(.*)""".toRegex()