diff --git a/gradle.properties b/gradle.properties index 1b94115a..60eacc94 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,7 +15,7 @@ springVersion=5.1.4.RELEASE reactorVersion=3.2.9.RELEASE # Our Libs -etherjarVersion=0.7.0-SNAPSHOT +etherjarVersion=0.8.0-SNAPSHOT # Testing spockVersion=1.2-groovy-2.5 diff --git a/src/main/kotlin/io/emeraldpay/dshackle/config/UpstreamsConfig.kt b/src/main/kotlin/io/emeraldpay/dshackle/config/UpstreamsConfig.kt index 0fcc2eaa..08d22006 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/config/UpstreamsConfig.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/config/UpstreamsConfig.kt @@ -68,6 +68,7 @@ class UpstreamsConfig { class EthereumConnection : UpstreamConnection() { var rpc: HttpEndpoint? = null var ws: WsEndpoint? = null + var auth: BasicAuth? = null } class HttpEndpoint(val url: URI) { @@ -82,9 +83,10 @@ class UpstreamsConfig { var type: String? = null } - class BasicAuth : Auth() { - var key: String? = null - } + class BasicAuth( + val username: String, + val password: String + ) : Auth() class TlsAuth : Auth() { var ca: String? = null diff --git a/src/main/kotlin/io/emeraldpay/dshackle/config/UpstreamsConfigReader.kt b/src/main/kotlin/io/emeraldpay/dshackle/config/UpstreamsConfigReader.kt index 7a65d69d..5a0b1678 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/config/UpstreamsConfigReader.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/config/UpstreamsConfigReader.kt @@ -57,6 +57,9 @@ class UpstreamsConfigReader { connection.rpc = http http.auth = readAuth(getMapping(node, "auth")) } + readAuth(getMapping(node, "auth"))?.let { auth -> + connection.auth = auth as UpstreamsConfig.BasicAuth + } } getMapping(connConfigNode, "ws")?.let { node -> getValueAsString(node, "url")?.let { url -> @@ -129,9 +132,14 @@ class UpstreamsConfigReader { auth } "basic" -> { - val auth = UpstreamsConfig.BasicAuth() - auth.key = getValueAsString(authNode, "key") - auth + val username = getValueAsString(authNode, "username") + val password = getValueAsString(authNode, "password") + if (username != null && password != null) { + UpstreamsConfig.BasicAuth(username, password) + } else { + log.warn("Basic auth is not fully configured") + null + } } else -> { log.warn("Invalid Auth type: $it") diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt index 8c26614e..a3c4b6c1 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt @@ -98,8 +98,13 @@ open class ConfiguredUpstreams( var wsApi: EthereumWs? = null val urls = ArrayList() up.rpc?.let { endpoint -> + val rpcTransport = DefaultRpcTransport(endpoint.url) + up.auth?.let { auth -> + rpcTransport.setBasicAuth(auth.username, auth.password) + } + val rpcClient = DefaultRpcClient(rpcTransport) rpcApi = EthereumApi( - DefaultRpcClient(DefaultRpcTransport(endpoint.url)), + rpcClient, objectMapper, chain, availableChains.targetFor(chain) diff --git a/src/test/groovy/io/emeraldpay/dshackle/config/UpstreamsConfigReaderSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/config/UpstreamsConfigReaderSpec.groovy index d48b3cb2..47d1d8d9 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/config/UpstreamsConfigReaderSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/config/UpstreamsConfigReaderSpec.groovy @@ -40,9 +40,11 @@ class UpstreamsConfigReaderSpec extends Specification { connection instanceof UpstreamsConfig.EthereumConnection with((UpstreamsConfig.EthereumConnection)connection) { rpc.url == new URI("https://mainnet.infura.io/v3/fa28c968191849c1aff541ad1d8511f2") + rpc.auth != null rpc.auth instanceof UpstreamsConfig.BasicAuth with((UpstreamsConfig.BasicAuth)rpc.auth) { - key == "4fc258fe41a68149c199ad8f281f2015" + username == "4fc258fe41a68149c199ad8f281f2015" + password == "1a68f20154fc258fe4149c199ad8f281" } ws == null } diff --git a/src/test/resources/upstreams-basic.yaml b/src/test/resources/upstreams-basic.yaml index 24b74db1..461b22fe 100644 --- a/src/test/resources/upstreams-basic.yaml +++ b/src/test/resources/upstreams-basic.yaml @@ -25,4 +25,5 @@ upstreams: url: "https://mainnet.infura.io/v3/fa28c968191849c1aff541ad1d8511f2" auth: type: basic - key: 4fc258fe41a68149c199ad8f281f2015 \ No newline at end of file + username: 4fc258fe41a68149c199ad8f281f2015 + password: 1a68f20154fc258fe4149c199ad8f281 \ No newline at end of file