mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 16:28:12 -07:00
Merge pull request #248 from dmitry-zhuravlev/master
proxy handling improved
This commit is contained in:
commit
be866c17b3
7 changed files with 43 additions and 16 deletions
|
@ -32,7 +32,7 @@ fun plugins(vararg dependencies : String) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class ProxyConfig(var host: String = "", var port: Int = 0, val type: String = "") {
|
data class ProxyConfig(val host: String = "", val port: Int = 0, val type: String = "", val nonProxyHosts: String = "") {
|
||||||
fun toProxy() = java.net.Proxy(java.net.Proxy.Type.HTTP, InetSocketAddress(host, port))
|
fun toProxy() = java.net.Proxy(java.net.Proxy.Type.HTTP, InetSocketAddress(host, port))
|
||||||
|
|
||||||
fun toAetherProxy() = Proxy(type, host, port) // TODO make support for proxy auth
|
fun toAetherProxy() = Proxy(type, host, port) // TODO make support for proxy auth
|
||||||
|
|
|
@ -23,8 +23,8 @@ class KobaltSettingsXml {
|
||||||
@XmlElement(name = "default-repos") @JvmField
|
@XmlElement(name = "default-repos") @JvmField
|
||||||
var defaultRepos: DefaultReposXml? = null
|
var defaultRepos: DefaultReposXml? = null
|
||||||
|
|
||||||
@XmlElement(name = "proxy") @JvmField
|
@XmlElement(name = "proxies") @JvmField
|
||||||
var proxy: ProxyXml? = null
|
var proxies: ProxiesXml? = null
|
||||||
|
|
||||||
@XmlElement(name = "kobalt-compiler-version") @JvmField
|
@XmlElement(name = "kobalt-compiler-version") @JvmField
|
||||||
var kobaltCompilerVersion: String = "1.0.2"
|
var kobaltCompilerVersion: String = "1.0.2"
|
||||||
|
@ -33,6 +33,11 @@ class KobaltSettingsXml {
|
||||||
var kobaltCompilerRepo: String? = null
|
var kobaltCompilerRepo: String? = null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ProxiesXml {
|
||||||
|
@XmlElement @JvmField
|
||||||
|
var proxy: List<ProxyXml> = arrayListOf()
|
||||||
|
}
|
||||||
|
|
||||||
class ProxyXml {
|
class ProxyXml {
|
||||||
@XmlElement @JvmField
|
@XmlElement @JvmField
|
||||||
var host: String = ""
|
var host: String = ""
|
||||||
|
@ -42,6 +47,9 @@ class ProxyXml {
|
||||||
|
|
||||||
@XmlElement @JvmField
|
@XmlElement @JvmField
|
||||||
var type: String = ""
|
var type: String = ""
|
||||||
|
|
||||||
|
@XmlElement @JvmField
|
||||||
|
var nonProxyHosts: String = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
class DefaultReposXml {
|
class DefaultReposXml {
|
||||||
|
@ -49,6 +57,8 @@ class DefaultReposXml {
|
||||||
var repo: List<String> = arrayListOf()
|
var repo: List<String> = arrayListOf()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun List<ProxyConfig>.getProxy(protocol:String) = find { it.type==protocol }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The object Kobalt refers to for settings.
|
* The object Kobalt refers to for settings.
|
||||||
*/
|
*/
|
||||||
|
@ -61,7 +71,7 @@ class KobaltSettings @Inject constructor(val xmlFile: KobaltSettingsXml) {
|
||||||
|
|
||||||
val defaultRepos = xmlFile.defaultRepos?.repo
|
val defaultRepos = xmlFile.defaultRepos?.repo
|
||||||
|
|
||||||
val proxyConfig = with(xmlFile.proxy) {
|
val proxyConfigs = with(xmlFile.proxies?.proxy) {
|
||||||
fun toIntOr(s: String, defaultValue: Int) = try { //TODO can be extracted to some global Utils
|
fun toIntOr(s: String, defaultValue: Int) = try { //TODO can be extracted to some global Utils
|
||||||
s.toInt()
|
s.toInt()
|
||||||
} catch(e: NumberFormatException) {
|
} catch(e: NumberFormatException) {
|
||||||
|
@ -69,7 +79,9 @@ class KobaltSettings @Inject constructor(val xmlFile: KobaltSettingsXml) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this != null) {
|
if (this != null) {
|
||||||
ProxyConfig(host, toIntOr(port, 0), type)
|
map {proxyXml->
|
||||||
|
ProxyConfig(proxyXml.host, toIntOr(proxyXml.port, 0), proxyXml.type, proxyXml.nonProxyHosts)
|
||||||
|
}
|
||||||
} else null
|
} else null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ class Http @Inject constructor(val settings:KobaltSettings) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun get(user: String?, password: String?, url: String) : Response {
|
fun get(user: String?, password: String?, url: String) : Response {
|
||||||
val client = OkHttpClient.Builder().proxy(settings.proxyConfig?.toProxy()).build()
|
val client = OkHttpClient.Builder().proxy(settings.proxyConfigs?.firstOrNull()?.toProxy()).build()
|
||||||
val request = Request.Builder().url(url)
|
val request = Request.Builder().url(url)
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
request.header("Authorization", Credentials.basic(user, password))
|
request.header("Authorization", Credentials.basic(user, password))
|
||||||
|
@ -75,7 +75,7 @@ class Http @Inject constructor(val settings:KobaltSettings) {
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
log(2, "Uploading $file to $url")
|
log(2, "Uploading $file to $url")
|
||||||
val response = OkHttpClient.Builder().proxy(settings.proxyConfig?.toProxy()).build().newCall(request).execute()
|
val response = OkHttpClient.Builder().proxy(settings.proxyConfigs?.firstOrNull()?.toProxy()).build().newCall(request).execute()
|
||||||
if (! response.isSuccessful) {
|
if (! response.isSuccessful) {
|
||||||
error(response)
|
error(response)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -6,6 +6,7 @@ import com.beust.kobalt.api.Kobalt
|
||||||
import com.beust.kobalt.homeDir
|
import com.beust.kobalt.homeDir
|
||||||
import com.beust.kobalt.internal.KobaltSettings
|
import com.beust.kobalt.internal.KobaltSettings
|
||||||
import com.beust.kobalt.internal.KobaltSettingsXml
|
import com.beust.kobalt.internal.KobaltSettingsXml
|
||||||
|
import com.beust.kobalt.internal.getProxy
|
||||||
import com.beust.kobalt.maven.CompletedFuture
|
import com.beust.kobalt.maven.CompletedFuture
|
||||||
import com.beust.kobalt.maven.MavenId
|
import com.beust.kobalt.maven.MavenId
|
||||||
import com.beust.kobalt.misc.KobaltLogger
|
import com.beust.kobalt.misc.KobaltLogger
|
||||||
|
@ -73,17 +74,21 @@ class ExcludeOptionalDependencyFilter: DependencyFilter {
|
||||||
@Singleton
|
@Singleton
|
||||||
class Aether(val localRepo: File, val settings: KobaltSettings) {
|
class Aether(val localRepo: File, val settings: KobaltSettings) {
|
||||||
private val system = Booter.newRepositorySystem()
|
private val system = Booter.newRepositorySystem()
|
||||||
private val session = Booter.newRepositorySystemSession(system, localRepo)
|
private val session = Booter.newRepositorySystemSession(system, localRepo, settings)
|
||||||
private val classpathFilter = AndDependencyFilter(
|
private val classpathFilter = AndDependencyFilter(
|
||||||
ExcludeOptionalDependencyFilter(),
|
ExcludeOptionalDependencyFilter(),
|
||||||
DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE))
|
DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE))
|
||||||
private val kobaltRepositories : List<RemoteRepository>
|
private val kobaltRepositories : List<RemoteRepository>
|
||||||
get() = Kobalt.repos.map {
|
get() = Kobalt.repos.map {
|
||||||
RemoteRepository.Builder("maven", "default", it.url)
|
RemoteRepository.Builder("maven", "default", it.url)
|
||||||
.setProxy(settings.proxyConfig?.toAetherProxy())
|
|
||||||
// .setSnapshotPolicy(RepositoryPolicy(false, null, null))
|
// .setSnapshotPolicy(RepositoryPolicy(false, null, null))
|
||||||
.build()
|
.build().let { repository ->
|
||||||
|
val proxyConfigs = settings.proxyConfigs ?: return@map repository
|
||||||
|
RemoteRepository.Builder(repository).apply {
|
||||||
|
setProxy(proxyConfigs.getProxy(repository.protocol)?.toAetherProxy())
|
||||||
|
}.build()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun collectRequest(artifact: Artifact) : CollectRequest {
|
private fun collectRequest(artifact: Artifact) : CollectRequest {
|
||||||
with(CollectRequest()) {
|
with(CollectRequest()) {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.beust.kobalt.maven.aether
|
package com.beust.kobalt.maven.aether
|
||||||
|
|
||||||
|
import com.beust.kobalt.internal.KobaltSettings
|
||||||
import org.eclipse.aether.DefaultRepositorySystemSession
|
import org.eclipse.aether.DefaultRepositorySystemSession
|
||||||
import org.eclipse.aether.RepositorySystem
|
import org.eclipse.aether.RepositorySystem
|
||||||
import org.eclipse.aether.repository.LocalRepository
|
import org.eclipse.aether.repository.LocalRepository
|
||||||
|
@ -14,8 +15,8 @@ object Booter {
|
||||||
// return org.eclipse.aether.examples.plexus.PlexusRepositorySystemFactory.newRepositorySystem();
|
// return org.eclipse.aether.examples.plexus.PlexusRepositorySystemFactory.newRepositorySystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
fun newRepositorySystemSession(system: RepositorySystem, repo: File): DefaultRepositorySystemSession {
|
fun newRepositorySystemSession(system: RepositorySystem, repo: File, settings: KobaltSettings): DefaultRepositorySystemSession {
|
||||||
val session = MavenRepositorySystemUtils.newSession()
|
val session = MavenRepositorySystemUtils.newSession(settings)
|
||||||
|
|
||||||
val localRepo = LocalRepository(repo.absolutePath)
|
val localRepo = LocalRepository(repo.absolutePath)
|
||||||
session.localRepositoryManager = system.newLocalRepositoryManager(session, localRepo)
|
session.localRepositoryManager = system.newLocalRepositoryManager(session, localRepo)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.beust.kobalt.maven.aether
|
package com.beust.kobalt.maven.aether
|
||||||
|
|
||||||
|
import com.beust.kobalt.internal.KobaltSettings
|
||||||
import org.apache.maven.repository.internal.*
|
import org.apache.maven.repository.internal.*
|
||||||
import org.eclipse.aether.DefaultRepositorySystemSession
|
import org.eclipse.aether.DefaultRepositorySystemSession
|
||||||
import org.eclipse.aether.artifact.DefaultArtifactType
|
import org.eclipse.aether.artifact.DefaultArtifactType
|
||||||
|
@ -12,6 +13,7 @@ import org.eclipse.aether.util.graph.selector.OptionalDependencySelector
|
||||||
import org.eclipse.aether.util.graph.selector.ScopeDependencySelector
|
import org.eclipse.aether.util.graph.selector.ScopeDependencySelector
|
||||||
import org.eclipse.aether.util.graph.transformer.*
|
import org.eclipse.aether.util.graph.transformer.*
|
||||||
import org.eclipse.aether.util.graph.traverser.FatArtifactTraverser
|
import org.eclipse.aether.util.graph.traverser.FatArtifactTraverser
|
||||||
|
import org.eclipse.aether.util.repository.DefaultProxySelector
|
||||||
import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy
|
import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy
|
||||||
|
|
||||||
object MavenRepositorySystemUtils {
|
object MavenRepositorySystemUtils {
|
||||||
|
@ -26,7 +28,7 @@ object MavenRepositorySystemUtils {
|
||||||
return locator
|
return locator
|
||||||
}
|
}
|
||||||
|
|
||||||
fun newSession(): DefaultRepositorySystemSession {
|
fun newSession(settings: KobaltSettings): DefaultRepositorySystemSession {
|
||||||
val session = DefaultRepositorySystemSession()
|
val session = DefaultRepositorySystemSession()
|
||||||
val depTraverser = FatArtifactTraverser()
|
val depTraverser = FatArtifactTraverser()
|
||||||
session.dependencyTraverser = depTraverser
|
session.dependencyTraverser = depTraverser
|
||||||
|
@ -55,6 +57,13 @@ object MavenRepositorySystemUtils {
|
||||||
val sysProps = System.getProperties()
|
val sysProps = System.getProperties()
|
||||||
session.setSystemProperties(sysProps)
|
session.setSystemProperties(sysProps)
|
||||||
session.setConfigProperties(sysProps)
|
session.setConfigProperties(sysProps)
|
||||||
|
settings.proxyConfigs?.let { proxyConfigs->
|
||||||
|
session.proxySelector = DefaultProxySelector().apply {
|
||||||
|
proxyConfigs.forEach {config->
|
||||||
|
add(config.toAetherProxy(), config.nonProxyHosts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return session
|
return session
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ class GithubApi2 @Inject constructor(
|
||||||
// Read only Api
|
// Read only Api
|
||||||
//
|
//
|
||||||
private val service = Retrofit.Builder()
|
private val service = Retrofit.Builder()
|
||||||
.client(OkHttpClient.Builder().proxy(settings.proxyConfig?.toProxy()).build())
|
.client(OkHttpClient.Builder().proxy(settings.proxyConfigs?.firstOrNull()?.toProxy()).build())
|
||||||
.baseUrl("https://api.github.com")
|
.baseUrl("https://api.github.com")
|
||||||
.addConverterFactory(GsonConverterFactory.create())
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
.build()
|
.build()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue