Skip to content

Commit 3b45890

Browse files
committed
feat(config): add support for authorization header on blockchain http requests
1 parent 9e7c55c commit 3b45890

5 files changed

Lines changed: 99 additions & 7 deletions

File tree

cmd/cartesi-rollups-claimer/root/root.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package root
55

66
import (
77
"context"
8+
"net/http"
89

910
"github.com/cartesi/rollups-node/internal/claimer"
1011
"github.com/cartesi/rollups-node/internal/config"
@@ -105,14 +106,22 @@ func run(cmd *cobra.Command, args []string) {
105106
Config: *cfg,
106107
}
107108

109+
clientOptions := []rpc.ClientOption{}
108110
rclient := retryablehttp.NewClient()
109111
rclient.Logger = service.NewLogger(cfg.LogLevel, cfg.LogColor).With("service", serviceName)
110112
rclient.RetryMax = int(cfg.BlockchainHttpMaxRetries)
111113
rclient.RetryWaitMin = cfg.BlockchainHttpRetryMinWait
112114
rclient.RetryWaitMax = cfg.BlockchainHttpRetryMaxWait
115+
clientOptions = append(clientOptions, rpc.WithHTTPClient(rclient.StandardClient()))
113116

114-
clientOption := rpc.WithHTTPClient(rclient.StandardClient())
115-
rpcClient, err := rpc.DialOptions(ctx, cfg.BlockchainHttpEndpoint.String(), clientOption)
117+
if cfg.BlockchainHttpAuthorization.Value != "undefined" {
118+
clientOptions = append(clientOptions, rpc.WithHTTPAuth(func(h http.Header) error {
119+
h.Set("Authorization", cfg.BlockchainHttpAuthorization.Value)
120+
return nil
121+
}))
122+
}
123+
124+
rpcClient, err := rpc.DialOptions(ctx, cfg.BlockchainHttpEndpoint.String(), clientOptions...)
116125
cobra.CheckErr(err)
117126
createInfo.EthConn = ethclient.NewClient(rpcClient)
118127

cmd/cartesi-rollups-evm-reader/root/root.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package root
66
import (
77
"context"
88
"log/slog"
9+
"net/http"
910

1011
"github.com/cartesi/rollups-node/internal/config"
1112
"github.com/cartesi/rollups-node/internal/evmreader"
@@ -90,14 +91,22 @@ func init() {
9091
}
9192

9293
func createEthClient(ctx context.Context, endpoint string, logger *slog.Logger) (*ethclient.Client, error) {
94+
clientOptions := []rpc.ClientOption{}
9395
rclient := retryablehttp.NewClient()
9496
rclient.Logger = logger
9597
rclient.RetryMax = int(cfg.BlockchainHttpMaxRetries)
9698
rclient.RetryWaitMin = cfg.BlockchainHttpRetryMinWait
9799
rclient.RetryWaitMax = cfg.BlockchainHttpRetryMaxWait
98-
clientOption := rpc.WithHTTPClient(rclient.StandardClient())
100+
clientOptions = append(clientOptions, rpc.WithHTTPClient(rclient.StandardClient()))
99101

100-
rpcClient, err := rpc.DialOptions(ctx, endpoint, clientOption)
102+
if cfg.BlockchainHttpAuthorization.Value != "undefined" {
103+
clientOptions = append(clientOptions, rpc.WithHTTPAuth(func(h http.Header) error {
104+
h.Set("Authorization", cfg.BlockchainHttpAuthorization.Value)
105+
return nil
106+
}))
107+
}
108+
109+
rpcClient, err := rpc.DialOptions(ctx, endpoint, clientOptions...)
101110
if err != nil {
102111
return nil, err
103112
}

cmd/cartesi-rollups-node/root/root.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package root
66
import (
77
"context"
88
"log/slog"
9+
"net/http"
910

1011
"github.com/cartesi/rollups-node/internal/config"
1112
"github.com/cartesi/rollups-node/internal/node"
@@ -132,14 +133,22 @@ func init() {
132133
}
133134

134135
func createEthClient(ctx context.Context, endpoint string, logger *slog.Logger) (*ethclient.Client, error) {
136+
clientOptions := []rpc.ClientOption{}
135137
rclient := retryablehttp.NewClient()
136138
rclient.Logger = logger
137139
rclient.RetryMax = int(cfg.BlockchainHttpMaxRetries)
138140
rclient.RetryWaitMin = cfg.BlockchainHttpRetryMinWait
139141
rclient.RetryWaitMax = cfg.BlockchainHttpRetryMaxWait
140-
clientOption := rpc.WithHTTPClient(rclient.StandardClient())
142+
clientOptions = append(clientOptions, rpc.WithHTTPClient(rclient.StandardClient()))
141143

142-
rpcClient, err := rpc.DialOptions(ctx, endpoint, clientOption)
144+
if cfg.BlockchainHttpAuthorization.Value != "undefined" {
145+
clientOptions = append(clientOptions, rpc.WithHTTPAuth(func(h http.Header) error {
146+
h.Set("Authorization", cfg.BlockchainHttpAuthorization.Value)
147+
return nil
148+
}))
149+
}
150+
151+
rpcClient, err := rpc.DialOptions(ctx, endpoint, clientOptions...)
143152
if err != nil {
144153
return nil, err
145154
}

internal/config/generate/Config.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,14 @@ description = """
106106
HTTP endpoint for the blockchain RPC provider."""
107107
used-by = ["evmreader", "claimer", "node"]
108108

109+
[blockchain.CARTESI_BLOCKCHAIN_HTTP_AUTHORIZATION]
110+
file = true
111+
default = "undefined"
112+
go-type = "RedactedString"
113+
description = """
114+
HTTP Authorization header."""
115+
used-by = ["evmreader", "claimer", "node"]
116+
109117
[blockchain.CARTESI_BLOCKCHAIN_WS_ENDPOINT]
110118
file = true
111119
go-type = "URL"

internal/config/generated.go

Lines changed: 58 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)