diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/SettingsMutation.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/SettingsMutation.kt index e6c0de505..c88b1e85e 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/SettingsMutation.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/SettingsMutation.kt @@ -37,6 +37,7 @@ class SettingsMutation { // proxy updateSetting(settings.socksProxyEnabled, serverConfig.socksProxyEnabled) + updateSetting(settings.socksProxyVersion, serverConfig.socksProxyVersion) updateSetting(settings.socksProxyHost, serverConfig.socksProxyHost) updateSetting(settings.socksProxyPort, serverConfig.socksProxyPort) updateSetting(settings.socksProxyUsername, serverConfig.socksProxyUsername) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/SettingsType.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/SettingsType.kt index 4b3b15386..5a28e5135 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/SettingsType.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/SettingsType.kt @@ -21,6 +21,7 @@ interface Settings : Node { // proxy val socksProxyEnabled: Boolean? + val socksProxyVersion: Int? val socksProxyHost: String? val socksProxyPort: String? val socksProxyUsername: String? @@ -94,6 +95,7 @@ data class PartialSettingsType( override val port: Int?, // proxy override val socksProxyEnabled: Boolean?, + override val socksProxyVersion: Int?, override val socksProxyHost: String?, override val socksProxyPort: String?, override val socksProxyUsername: String?, @@ -154,6 +156,7 @@ class SettingsType( override val port: Int, // proxy override val socksProxyEnabled: Boolean, + override val socksProxyVersion: Int, override val socksProxyHost: String, override val socksProxyPort: String, override val socksProxyUsername: String, @@ -213,6 +216,7 @@ class SettingsType( config.port.value, // proxy config.socksProxyEnabled.value, + config.socksProxyVersion.value, config.socksProxyHost.value, config.socksProxyPort.value, config.socksProxyUsername.value, diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt index 7e1edc678..afab08317 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt @@ -80,6 +80,7 @@ class ServerConfig(getConfig: () -> Config, val moduleName: String = SERVER_CONF // proxy val socksProxyEnabled: MutableStateFlow by OverrideConfigValue(BooleanConfigAdapter) + val socksProxyVersion: MutableStateFlow by OverrideConfigValue(IntConfigAdapter) val socksProxyHost: MutableStateFlow by OverrideConfigValue(StringConfigAdapter) val socksProxyPort: MutableStateFlow by OverrideConfigValue(StringConfigAdapter) val socksProxyUsername: MutableStateFlow by OverrideConfigValue(StringConfigAdapter) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt index 4dc34d14b..1661fc5c8 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/ServerSetup.kt @@ -17,6 +17,7 @@ import io.javalin.plugin.json.JavalinJackson import io.javalin.plugin.json.JsonMapper import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.serialization.json.Json import mu.KotlinLogging import org.bouncycastle.jce.provider.BouncyCastleProvider @@ -234,32 +235,52 @@ fun applicationSetup() { serverConfig.subscribeTo( combine( serverConfig.socksProxyEnabled, + serverConfig.socksProxyVersion, serverConfig.socksProxyHost, serverConfig.socksProxyPort, serverConfig.socksProxyUsername, serverConfig.socksProxyPassword, - ) { proxyEnabled, proxyHost, proxyPort, proxyUsername, proxyPassword -> - data class DataClassForDestruction( + ) { vargs -> + data class ProxySettings( val proxyEnabled: Boolean, + val socksProxyVersion: Int, val proxyHost: String, val proxyPort: String, val proxyUsername: String, val proxyPassword: String, ) - DataClassForDestruction(proxyEnabled, proxyHost, proxyPort, proxyUsername, proxyPassword) - }, - { (proxyEnabled, proxyHost, proxyPort, proxyUsername, proxyPassword) -> + ProxySettings( + vargs[0] as Boolean, + vargs[1] as Int, + vargs[2] as String, + vargs[3] as String, + vargs[4] as String, + vargs[5] as String, + ) + }.distinctUntilChanged(), + { (proxyEnabled, proxyVersion, proxyHost, proxyPort, proxyUsername, proxyPassword) -> logger.info( "Socks Proxy changed - enabled=$proxyEnabled address=$proxyHost:$proxyPort , username=$proxyUsername, password=[REDACTED]", ) if (proxyEnabled) { - System.getProperties()["socksProxyHost"] = proxyHost - System.getProperties()["socksProxyPort"] = proxyPort - System.getProperties()["java.net.socks.username"] = proxyUsername - System.getProperties()["java.net.socks.password"] = proxyPassword + System.setProperty("socksProxyHost", proxyHost) + System.setProperty("socksProxyPort", proxyPort) + System.setProperty("socksProxyVersion", proxyVersion.toString()) + + if (proxyUsername.isNotBlank()) { + System.setProperty("java.net.socks.username", proxyUsername) + } else { + System.clearProperty("java.net.socks.username") + } + if (proxyPassword.isNotBlank()) { + System.setProperty("java.net.socks.password", proxyPassword) + } else { + System.clearProperty("java.net.socks.password") + } } else { - System.getProperties()["socksProxyHost"] = "" - System.getProperties()["socksProxyPort"] = "" + System.clearProperty("socksProxyHost") + System.clearProperty("socksProxyPort") + System.clearProperty("socksProxyVersion") } }, ignoreInitialValue = false, diff --git a/server/src/main/resources/server-reference.conf b/server/src/main/resources/server-reference.conf index fa9218bee..5b4bd174c 100644 --- a/server/src/main/resources/server-reference.conf +++ b/server/src/main/resources/server-reference.conf @@ -4,6 +4,7 @@ server.port = 4567 # Socks5 proxy server.socksProxyEnabled = false +server.socksProxyVersion = 5 # 4 or 5 server.socksProxyHost = "" server.socksProxyPort = "" server.socksProxyUsername = ""