1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 08:27:12 -07:00

* proxy handling improved for repositories defined in transitive dependencies.

proxy config now looks like:
<proxies>
       <proxy>
           <host>mycompany.com</host>
           <port>3128</port>
            <type>http</type>
            <nonProxyHosts>localhost</nonProxyHosts>
       </proxy>
       <proxy>
           <host>mycompany.com</host>
           <port>3128</port>
            <type>https</type>
           <nonProxyHosts>localhost</nonProxyHosts>
       </proxy>
   </proxies>
This commit is contained in:
Dmitry Zhuravlev 2016-06-14 15:56:32 +03:00
parent e0dc269a89
commit e9416db9e7
7 changed files with 43 additions and 16 deletions

View file

@ -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 toAetherProxy() = Proxy(type, host, port) // TODO make support for proxy auth

View file

@ -23,8 +23,8 @@ class KobaltSettingsXml {
@XmlElement(name = "default-repos") @JvmField
var defaultRepos: DefaultReposXml? = null
@XmlElement(name = "proxy") @JvmField
var proxy: ProxyXml? = null
@XmlElement(name = "proxies") @JvmField
var proxies: ProxiesXml? = null
@XmlElement(name = "kobalt-compiler-version") @JvmField
var kobaltCompilerVersion: String = "1.0.0"
@ -33,6 +33,11 @@ class KobaltSettingsXml {
var kobaltCompilerRepo: String? = null
}
class ProxiesXml {
@XmlElement @JvmField
var proxy: List<ProxyXml> = arrayListOf()
}
class ProxyXml {
@XmlElement @JvmField
var host: String = ""
@ -42,6 +47,9 @@ class ProxyXml {
@XmlElement @JvmField
var type: String = ""
@XmlElement @JvmField
var nonProxyHosts: String = ""
}
class DefaultReposXml {
@ -49,6 +57,8 @@ class DefaultReposXml {
var repo: List<String> = arrayListOf()
}
fun List<ProxyConfig>.getProxy(protocol:String) = find { it.type==protocol }
/**
* The object Kobalt refers to for settings.
*/
@ -61,7 +71,7 @@ class KobaltSettings @Inject constructor(val xmlFile: KobaltSettingsXml) {
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
s.toInt()
} catch(e: NumberFormatException) {
@ -69,7 +79,9 @@ class KobaltSettings @Inject constructor(val xmlFile: KobaltSettingsXml) {
}
if (this != null) {
ProxyConfig(host, toIntOr(port, 0), type)
map {proxyXml->
ProxyConfig(proxyXml.host, toIntOr(proxyXml.port, 0), proxyXml.type, proxyXml.nonProxyHosts)
}
} else null
}

View file

@ -21,7 +21,7 @@ class Http @Inject constructor(val settings:KobaltSettings) {
}
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)
if (user != null) {
request.header("Authorization", Credentials.basic(user, password))
@ -75,7 +75,7 @@ class Http @Inject constructor(val settings:KobaltSettings) {
.build()
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) {
error(response)
} else {

View file

@ -6,6 +6,7 @@ import com.beust.kobalt.api.Kobalt
import com.beust.kobalt.homeDir
import com.beust.kobalt.internal.KobaltSettings
import com.beust.kobalt.internal.KobaltSettingsXml
import com.beust.kobalt.internal.getProxy
import com.beust.kobalt.maven.CompletedFuture
import com.beust.kobalt.maven.MavenId
import com.beust.kobalt.misc.KobaltLogger
@ -73,17 +74,21 @@ class ExcludeOptionalDependencyFilter: DependencyFilter {
@Singleton
class Aether(val localRepo: File, val settings: KobaltSettings) {
private val system = Booter.newRepositorySystem()
private val session = Booter.newRepositorySystemSession(system, localRepo)
private val session = Booter.newRepositorySystemSession(system, localRepo, settings)
private val classpathFilter = AndDependencyFilter(
ExcludeOptionalDependencyFilter(),
DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE))
private val kobaltRepositories : List<RemoteRepository>
get() = Kobalt.repos.map {
RemoteRepository.Builder("maven", "default", it.url)
.setProxy(settings.proxyConfig?.toAetherProxy())
get() = Kobalt.repos.map {
RemoteRepository.Builder("maven", "default", it.url)
// .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 {
with(CollectRequest()) {

View file

@ -1,5 +1,6 @@
package com.beust.kobalt.maven.aether
import com.beust.kobalt.internal.KobaltSettings
import org.eclipse.aether.DefaultRepositorySystemSession
import org.eclipse.aether.RepositorySystem
import org.eclipse.aether.repository.LocalRepository
@ -14,8 +15,8 @@ object Booter {
// return org.eclipse.aether.examples.plexus.PlexusRepositorySystemFactory.newRepositorySystem();
}
fun newRepositorySystemSession(system: RepositorySystem, repo: File): DefaultRepositorySystemSession {
val session = MavenRepositorySystemUtils.newSession()
fun newRepositorySystemSession(system: RepositorySystem, repo: File, settings: KobaltSettings): DefaultRepositorySystemSession {
val session = MavenRepositorySystemUtils.newSession(settings)
val localRepo = LocalRepository(repo.absolutePath)
session.localRepositoryManager = system.newLocalRepositoryManager(session, localRepo)

View file

@ -1,5 +1,6 @@
package com.beust.kobalt.maven.aether
import com.beust.kobalt.internal.KobaltSettings
import org.apache.maven.repository.internal.*
import org.eclipse.aether.DefaultRepositorySystemSession
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.transformer.*
import org.eclipse.aether.util.graph.traverser.FatArtifactTraverser
import org.eclipse.aether.util.repository.DefaultProxySelector
import org.eclipse.aether.util.repository.SimpleArtifactDescriptorPolicy
object MavenRepositorySystemUtils {
@ -26,7 +28,7 @@ object MavenRepositorySystemUtils {
return locator
}
fun newSession(): DefaultRepositorySystemSession {
fun newSession(settings: KobaltSettings): DefaultRepositorySystemSession {
val session = DefaultRepositorySystemSession()
val depTraverser = FatArtifactTraverser()
session.dependencyTraverser = depTraverser
@ -55,6 +57,13 @@ object MavenRepositorySystemUtils {
val sysProps = System.getProperties()
session.setSystemProperties(sysProps)
session.setConfigProperties(sysProps)
settings.proxyConfigs?.let { proxyConfigs->
session.proxySelector = DefaultProxySelector().apply {
proxyConfigs.forEach {config->
add(config.toAetherProxy(), config.nonProxyHosts)
}
}
}
return session
}
}

View file

@ -59,7 +59,7 @@ class GithubApi2 @Inject constructor(
// Read only Api
//
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")
.addConverterFactory(GsonConverterFactory.create())
.build()