Skip to content

Commit

Permalink
feat: http proxy config for httpAudioSourceManager (lavalink-devs#595)
Browse files Browse the repository at this point in the history
* feat: http proxy config for httpAudioSourceManager

* feat(application.yml.example): add httpProxy example
fix(HttpConfig): indentation

* feat: http proxy auth

* chore: add missing config examples and comments

* chore(application.yml.example): description httpconfig
  • Loading branch information
ToxicMushroom authored Jan 7, 2022
1 parent 9f9aa3a commit 067243f
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 14 deletions.
5 changes: 5 additions & 0 deletions LavalinkServer/application.yml.example
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ lavalink:
#youtubeConfig: # Required for avoiding age restrictions by YouTube. Guide https://github.com/Walkyst/lavaplayer-fork/issues/18
#PAPISID: ""
#PSID: ""
#httpConfig: # Useful for blocking bad-actors from ip-grabbing your music node and attacking it, this way only the http proxy will be attacked
#proxyHost: "localhost" # Hostname of the proxy, (ip or domain)
#proxyPort: 3128 # Proxy port, 3128 is the default for squidProxy
#proxyUser: "" # Optional user for basic authentication fields, leave blank if you don't use basic auth
#proxyPassword: "" # Password for basic authentication

metrics:
prometheus:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,21 @@ import com.sedmelluq.discord.lavaplayer.source.bandcamp.BandcampAudioSourceManag
import com.sedmelluq.discord.lavaplayer.source.beam.BeamAudioSourceManager
import com.sedmelluq.discord.lavaplayer.source.http.HttpAudioSourceManager
import com.sedmelluq.discord.lavaplayer.source.local.LocalAudioSourceManager
import com.sedmelluq.discord.lavaplayer.source.soundcloud.DefaultSoundCloudDataLoader
import com.sedmelluq.discord.lavaplayer.source.soundcloud.DefaultSoundCloudDataReader
import com.sedmelluq.discord.lavaplayer.source.soundcloud.DefaultSoundCloudFormatHandler
import com.sedmelluq.discord.lavaplayer.source.soundcloud.DefaultSoundCloudPlaylistLoader
import com.sedmelluq.discord.lavaplayer.source.soundcloud.SoundCloudAudioSourceManager
import com.sedmelluq.discord.lavaplayer.source.soundcloud.*
import com.sedmelluq.discord.lavaplayer.source.twitch.TwitchStreamAudioSourceManager
import com.sedmelluq.discord.lavaplayer.source.vimeo.VimeoAudioSourceManager
import com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioSourceManager
import com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeHttpContextFilter
import com.sedmelluq.lava.extensions.youtuberotator.YoutubeIpRotatorSetup
import com.sedmelluq.lava.extensions.youtuberotator.planner.AbstractRoutePlanner
import com.sedmelluq.lava.extensions.youtuberotator.planner.BalancingIpRoutePlanner
import com.sedmelluq.lava.extensions.youtuberotator.planner.NanoIpRoutePlanner
import com.sedmelluq.lava.extensions.youtuberotator.planner.RotatingIpRoutePlanner
import com.sedmelluq.lava.extensions.youtuberotator.planner.RotatingNanoIpRoutePlanner
import com.sedmelluq.lava.extensions.youtuberotator.planner.*
import com.sedmelluq.lava.extensions.youtuberotator.tools.ip.Ipv4Block
import com.sedmelluq.lava.extensions.youtuberotator.tools.ip.Ipv6Block
import dev.arbjerg.lavalink.api.AudioPlayerManagerConfiguration
import org.apache.http.HttpHost
import org.apache.http.auth.AuthScope
import org.apache.http.auth.UsernamePasswordCredentials
import org.apache.http.client.CredentialsProvider
import org.apache.http.impl.client.BasicCredentialsProvider
import org.slf4j.LoggerFactory
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
Expand Down Expand Up @@ -70,7 +67,8 @@ class AudioPlayerConfiguration {
val retryLimit = serverConfig.ratelimit?.retryLimit ?: -1
when {
retryLimit < 0 -> YoutubeIpRotatorSetup(routePlanner).forSource(youtube).setup()
retryLimit == 0 -> YoutubeIpRotatorSetup(routePlanner).forSource(youtube).withRetryLimit(Int.MAX_VALUE).setup()
retryLimit == 0 -> YoutubeIpRotatorSetup(routePlanner).forSource(youtube)
.withRetryLimit(Int.MAX_VALUE).setup()
else -> YoutubeIpRotatorSetup(routePlanner).forSource(youtube).withRetryLimit(retryLimit).setup()

}
Expand All @@ -97,13 +95,15 @@ class AudioPlayerConfiguration {
val dataLoader = DefaultSoundCloudDataLoader()
val formatHandler = DefaultSoundCloudFormatHandler()

audioPlayerManager.registerSourceManager(SoundCloudAudioSourceManager(
audioPlayerManager.registerSourceManager(
SoundCloudAudioSourceManager(
serverConfig.isSoundcloudSearchEnabled,
dataReader,
dataLoader,
formatHandler,
DefaultSoundCloudPlaylistLoader(dataLoader, dataReader, formatHandler)
))
)
)
}
if (sources.isBandcamp) audioPlayerManager.registerSourceManager(BandcampAudioSourceManager())
if (sources.isTwitch) audioPlayerManager.registerSourceManager(TwitchStreamAudioSourceManager())
Expand All @@ -125,7 +125,28 @@ class AudioPlayerConfiguration {
}

// This must be loaded last
if (sources.isHttp) audioPlayerManager.registerSourceManager(HttpAudioSourceManager())
if (sources.isHttp) {
val httpAudioSourceManager = HttpAudioSourceManager()

serverConfig.httpConfig?.let { httpConfig ->
httpAudioSourceManager.configureBuilder {
if (httpConfig.proxyHost.isNotBlank()) {
val credsProvider: CredentialsProvider = BasicCredentialsProvider()
credsProvider.setCredentials(
AuthScope(httpConfig.proxyHost, httpConfig.proxyPort),
UsernamePasswordCredentials(httpConfig.proxyUser, httpConfig.proxyPassword)
)

it.setProxy(HttpHost(httpConfig.proxyHost, httpConfig.proxyPort))
if (httpConfig.proxyUser.isNotBlank()) {
it.setDefaultCredentialsProvider(credsProvider)
}
}
}
}

audioPlayerManager.registerSourceManager(httpAudioSourceManager)
}

return am
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package lavalink.server.config

data class HttpConfig(
var proxyHost: String = "",
var proxyPort: Int = 3128,
var proxyUser: String = "",
var proxyPassword: String = ""
)
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,5 @@ class ServerConfig {
var isSoundcloudSearchEnabled = true
var ratelimit: RateLimitConfig? = null
var youtubeConfig: YoutubeConfig? = null
var httpConfig: HttpConfig? = null
}

0 comments on commit 067243f

Please sign in to comment.