solution: support Basic Auth

This commit is contained in:
Igor Artamonov
2019-08-06 00:00:20 -04:00
parent 2b7109cea3
commit ed6b674c9d
6 changed files with 28 additions and 10 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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")

View File

@@ -98,8 +98,13 @@ open class ConfiguredUpstreams(
var wsApi: EthereumWs? = null
val urls = ArrayList<URI>()
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)

View File

@@ -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
}

View File

@@ -25,4 +25,5 @@ upstreams:
url: "https://mainnet.infura.io/v3/fa28c968191849c1aff541ad1d8511f2"
auth:
type: basic
key: 4fc258fe41a68149c199ad8f281f2015
username: 4fc258fe41a68149c199ad8f281f2015
password: 1a68f20154fc258fe4149c199ad8f281