aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorMichał Siatkowski <msiatkowski@pl.imshealth.com>2017-10-29 14:59:14 +0100
committerMichał Siatkowski <msiatkowski@pl.imshealth.com>2017-10-30 15:37:42 +0100
commit329b37d6fa8a53f211df81b894da971bf16aba71 (patch)
tree086273334b486725a9fd4270b4a506a418dd2f40 /core
parentae0d7f698c407413339b45067f959f611fbe90ef (diff)
downloadsttp-329b37d6fa8a53f211df81b894da971bf16aba71.tar.gz
sttp-329b37d6fa8a53f211df81b894da971bf16aba71.tar.bz2
sttp-329b37d6fa8a53f211df81b894da971bf16aba71.zip
Loading system proxy values by default
Diffstat (limited to 'core')
-rw-r--r--core/src/main/scala/com/softwaremill/sttp/SttpBackendOptions.scala39
1 files changed, 34 insertions, 5 deletions
diff --git a/core/src/main/scala/com/softwaremill/sttp/SttpBackendOptions.scala b/core/src/main/scala/com/softwaremill/sttp/SttpBackendOptions.scala
index dbf64b2..ef9ffbb 100644
--- a/core/src/main/scala/com/softwaremill/sttp/SttpBackendOptions.scala
+++ b/core/src/main/scala/com/softwaremill/sttp/SttpBackendOptions.scala
@@ -2,9 +2,11 @@ package com.softwaremill.sttp
import java.net.InetSocketAddress
-import scala.concurrent.duration._
import com.softwaremill.sttp.SttpBackendOptions._
+import scala.concurrent.duration._
+import scala.util.Try
+
case class SttpBackendOptions(
connectionTimeout: FiniteDuration,
proxy: Option[Proxy]
@@ -28,6 +30,7 @@ object SttpBackendOptions {
sealed trait ProxyType {
def asJava: java.net.Proxy.Type
}
+
object ProxyType {
case object Http extends ProxyType {
override def asJava: java.net.Proxy.Type = java.net.Proxy.Type.HTTP
@@ -37,12 +40,38 @@ object SttpBackendOptions {
}
}
- val Default: SttpBackendOptions = SttpBackendOptions(30.seconds, None)
+ private val Empty: SttpBackendOptions =
+ SttpBackendOptions(30.seconds, None)
+
+ val Default: SttpBackendOptions =
+ Empty.copy(proxy = loadSystemProxy)
def connectionTimeout(ct: FiniteDuration): SttpBackendOptions =
- Default.connectionTimeout(ct)
+ Empty.connectionTimeout(ct)
+
def httpProxy(host: String, port: Int): SttpBackendOptions =
- Default.httpProxy(host, port)
+ Empty.httpProxy(host, port)
+
def socksProxy(host: String, port: Int): SttpBackendOptions =
- Default.socksProxy(host, port)
+ Empty.socksProxy(host, port)
+
+ private def loadSystemProxy: Option[Proxy] = {
+ def system(hostProp: String,
+ portProp: String,
+ make: (String, Int) => Proxy,
+ defaultPort: Int) = {
+ val host = Option(System.getProperty(hostProp))
+ def port = Try(System.getProperty(portProp).toInt).getOrElse(defaultPort)
+ host.map(make(_, port))
+ }
+
+ def proxy(t: ProxyType)(host: String, port: Int) = Proxy(host, port, t)
+
+ import ProxyType._
+ val socks = system("socksProxyHost", "socksProxyPort", proxy(Socks), 1080)
+ val http = system("http.proxyHost", "http.proxyPort", proxy(Http), 80)
+
+ Seq(socks, http).find(_.isDefined).flatten
+ }
+
}