diff options
author | Peter Broadhurst <peter@themumbles.net> | 2018-09-20 00:09:03 +0800 |
---|---|---|
committer | Felix Lange <fjl@users.noreply.github.com> | 2018-09-20 00:09:03 +0800 |
commit | c35659c6a0d8c9dd7b7616bb91700385292f403a (patch) | |
tree | b003b38459060a5f20da802be41c9b0943c12b86 /rpc/websocket.go | |
parent | 6f004c46d53958e2fe0e8aad5584a46f9f4bce6c (diff) | |
download | dexon-c35659c6a0d8c9dd7b7616bb91700385292f403a.tar dexon-c35659c6a0d8c9dd7b7616bb91700385292f403a.tar.gz dexon-c35659c6a0d8c9dd7b7616bb91700385292f403a.tar.bz2 dexon-c35659c6a0d8c9dd7b7616bb91700385292f403a.tar.lz dexon-c35659c6a0d8c9dd7b7616bb91700385292f403a.tar.xz dexon-c35659c6a0d8c9dd7b7616bb91700385292f403a.tar.zst dexon-c35659c6a0d8c9dd7b7616bb91700385292f403a.zip |
rpc: enable basic auth for websocket client (#17699)
Diffstat (limited to 'rpc/websocket.go')
-rw-r--r-- | rpc/websocket.go | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/rpc/websocket.go b/rpc/websocket.go index e7a86ddae..eae8320e5 100644 --- a/rpc/websocket.go +++ b/rpc/websocket.go @@ -20,6 +20,7 @@ import ( "bytes" "context" "crypto/tls" + "encoding/base64" "encoding/json" "fmt" "net" @@ -118,12 +119,7 @@ func wsHandshakeValidator(allowedOrigins []string) func(*websocket.Config, *http return f } -// DialWebsocket creates a new RPC client that communicates with a JSON-RPC server -// that is listening on the given endpoint. -// -// The context is used for the initial connection establishment. It does not -// affect subsequent interactions with the client. -func DialWebsocket(ctx context.Context, endpoint, origin string) (*Client, error) { +func wsGetConfig(endpoint, origin string) (*websocket.Config, error) { if origin == "" { var err error if origin, err = os.Hostname(); err != nil { @@ -140,6 +136,25 @@ func DialWebsocket(ctx context.Context, endpoint, origin string) (*Client, error return nil, err } + if config.Location.User != nil { + b64auth := base64.StdEncoding.EncodeToString([]byte(config.Location.User.String())) + config.Header.Add("Authorization", "Basic "+b64auth) + config.Location.User = nil + } + return config, nil +} + +// DialWebsocket creates a new RPC client that communicates with a JSON-RPC server +// that is listening on the given endpoint. +// +// The context is used for the initial connection establishment. It does not +// affect subsequent interactions with the client. +func DialWebsocket(ctx context.Context, endpoint, origin string) (*Client, error) { + config, err := wsGetConfig(endpoint, origin) + if err != nil { + return nil, err + } + return newClient(ctx, func(ctx context.Context) (net.Conn, error) { return wsDialContext(ctx, config) }) |