mirror of
https://github.com/muun/recovery.git
synced 2025-11-13 07:11:45 -05:00
Release v0.3.0
This commit is contained in:
133
vendor/github.com/btcsuite/btcd/rpcclient/infrastructure.go
generated
vendored
133
vendor/github.com/btcsuite/btcd/rpcclient/infrastructure.go
generated
vendored
@@ -19,12 +19,14 @@ import (
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/btcsuite/btcd/btcjson"
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/go-socks/socks"
|
||||
"github.com/btcsuite/websocket"
|
||||
)
|
||||
@@ -138,6 +140,10 @@ type Client struct {
|
||||
// config holds the connection configuration assoiated with this client.
|
||||
config *ConnConfig
|
||||
|
||||
// chainParams holds the params for the chain that this client is using,
|
||||
// and is used for many wallet methods.
|
||||
chainParams *chaincfg.Params
|
||||
|
||||
// wsConn is the underlying websocket connection when not in HTTP POST
|
||||
// mode.
|
||||
wsConn *websocket.Conn
|
||||
@@ -283,31 +289,29 @@ func (c *Client) trackRegisteredNtfns(cmd interface{}) {
|
||||
}
|
||||
}
|
||||
|
||||
type (
|
||||
// inMessage is the first type that an incoming message is unmarshaled
|
||||
// into. It supports both requests (for notification support) and
|
||||
// responses. The partially-unmarshaled message is a notification if
|
||||
// the embedded ID (from the response) is nil. Otherwise, it is a
|
||||
// response.
|
||||
inMessage struct {
|
||||
ID *float64 `json:"id"`
|
||||
*rawNotification
|
||||
*rawResponse
|
||||
}
|
||||
// inMessage is the first type that an incoming message is unmarshaled
|
||||
// into. It supports both requests (for notification support) and
|
||||
// responses. The partially-unmarshaled message is a notification if
|
||||
// the embedded ID (from the response) is nil. Otherwise, it is a
|
||||
// response.
|
||||
type inMessage struct {
|
||||
ID *float64 `json:"id"`
|
||||
*rawNotification
|
||||
*rawResponse
|
||||
}
|
||||
|
||||
// rawNotification is a partially-unmarshaled JSON-RPC notification.
|
||||
rawNotification struct {
|
||||
Method string `json:"method"`
|
||||
Params []json.RawMessage `json:"params"`
|
||||
}
|
||||
// rawNotification is a partially-unmarshaled JSON-RPC notification.
|
||||
type rawNotification struct {
|
||||
Method string `json:"method"`
|
||||
Params []json.RawMessage `json:"params"`
|
||||
}
|
||||
|
||||
// rawResponse is a partially-unmarshaled JSON-RPC response. For this
|
||||
// to be valid (according to JSON-RPC 1.0 spec), ID may not be nil.
|
||||
rawResponse struct {
|
||||
Result json.RawMessage `json:"result"`
|
||||
Error *btcjson.RPCError `json:"error"`
|
||||
}
|
||||
)
|
||||
// rawResponse is a partially-unmarshaled JSON-RPC response. For this
|
||||
// to be valid (according to JSON-RPC 1.0 spec), ID may not be nil.
|
||||
type rawResponse struct {
|
||||
Result json.RawMessage `json:"result"`
|
||||
Error *btcjson.RPCError `json:"error"`
|
||||
}
|
||||
|
||||
// response is the raw bytes of a JSON-RPC result, or the error if the response
|
||||
// error object was non-null.
|
||||
@@ -848,7 +852,12 @@ func (c *Client) sendPost(jReq *jsonRequest) {
|
||||
httpReq.Header.Set("Content-Type", "application/json")
|
||||
|
||||
// Configure basic access authorization.
|
||||
httpReq.SetBasicAuth(c.config.User, c.config.Pass)
|
||||
user, pass, err := c.config.getAuth()
|
||||
if err != nil {
|
||||
jReq.responseChan <- &response{result: nil, err: err}
|
||||
return
|
||||
}
|
||||
httpReq.SetBasicAuth(user, pass)
|
||||
|
||||
log.Tracef("Sending command [%s] with id %d", jReq.method, jReq.id)
|
||||
c.sendPostRequest(httpReq, jReq)
|
||||
@@ -1093,6 +1102,22 @@ type ConnConfig struct {
|
||||
// Pass is the passphrase to use to authenticate to the RPC server.
|
||||
Pass string
|
||||
|
||||
// CookiePath is the path to a cookie file containing the username and
|
||||
// passphrase to use to authenticate to the RPC server. It is used
|
||||
// instead of User and Pass if non-empty.
|
||||
CookiePath string
|
||||
|
||||
cookieLastCheckTime time.Time
|
||||
cookieLastModTime time.Time
|
||||
cookieLastUser string
|
||||
cookieLastPass string
|
||||
cookieLastErr error
|
||||
|
||||
// Params is the string representing the network that the server
|
||||
// is running. If there is no parameter set in the config, then
|
||||
// mainnet will be used by default.
|
||||
Params string
|
||||
|
||||
// DisableTLS specifies whether transport layer security should be
|
||||
// disabled. It is recommended to always use TLS if the RPC server
|
||||
// supports it as otherwise your username and password is sent across
|
||||
@@ -1141,6 +1166,43 @@ type ConnConfig struct {
|
||||
EnableBCInfoHacks bool
|
||||
}
|
||||
|
||||
// getAuth returns the username and passphrase that will actually be used for
|
||||
// this connection. This will be the result of checking the cookie if a cookie
|
||||
// path is configured; if not, it will be the user-configured username and
|
||||
// passphrase.
|
||||
func (config *ConnConfig) getAuth() (username, passphrase string, err error) {
|
||||
// Try username+passphrase auth first.
|
||||
if config.Pass != "" {
|
||||
return config.User, config.Pass, nil
|
||||
}
|
||||
|
||||
// If no username or passphrase is set, try cookie auth.
|
||||
return config.retrieveCookie()
|
||||
}
|
||||
|
||||
// retrieveCookie returns the cookie username and passphrase.
|
||||
func (config *ConnConfig) retrieveCookie() (username, passphrase string, err error) {
|
||||
if !config.cookieLastCheckTime.IsZero() && time.Now().Before(config.cookieLastCheckTime.Add(30*time.Second)) {
|
||||
return config.cookieLastUser, config.cookieLastPass, config.cookieLastErr
|
||||
}
|
||||
|
||||
config.cookieLastCheckTime = time.Now()
|
||||
|
||||
st, err := os.Stat(config.CookiePath)
|
||||
if err != nil {
|
||||
config.cookieLastErr = err
|
||||
return config.cookieLastUser, config.cookieLastPass, config.cookieLastErr
|
||||
}
|
||||
|
||||
modTime := st.ModTime()
|
||||
if !modTime.Equal(config.cookieLastModTime) {
|
||||
config.cookieLastModTime = modTime
|
||||
config.cookieLastUser, config.cookieLastPass, config.cookieLastErr = readCookieFile(config.CookiePath)
|
||||
}
|
||||
|
||||
return config.cookieLastUser, config.cookieLastPass, config.cookieLastErr
|
||||
}
|
||||
|
||||
// newHTTPClient returns a new http client that is configured according to the
|
||||
// proxy and TLS settings in the associated connection configuration.
|
||||
func newHTTPClient(config *ConnConfig) (*http.Client, error) {
|
||||
@@ -1210,7 +1272,11 @@ func dial(config *ConnConfig) (*websocket.Conn, error) {
|
||||
|
||||
// The RPC server requires basic authorization, so create a custom
|
||||
// request header with the Authorization header set.
|
||||
login := config.User + ":" + config.Pass
|
||||
user, pass, err := config.getAuth()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
login := user + ":" + pass
|
||||
auth := "Basic " + base64.StdEncoding.EncodeToString([]byte(login))
|
||||
requestHeader := make(http.Header)
|
||||
requestHeader.Add("Authorization", auth)
|
||||
@@ -1290,6 +1356,23 @@ func New(config *ConnConfig, ntfnHandlers *NotificationHandlers) (*Client, error
|
||||
shutdown: make(chan struct{}),
|
||||
}
|
||||
|
||||
// Default network is mainnet, no parameters are necessary but if mainnet
|
||||
// is specified it will be the param
|
||||
switch config.Params {
|
||||
case "":
|
||||
fallthrough
|
||||
case chaincfg.MainNetParams.Name:
|
||||
client.chainParams = &chaincfg.MainNetParams
|
||||
case chaincfg.TestNet3Params.Name:
|
||||
client.chainParams = &chaincfg.TestNet3Params
|
||||
case chaincfg.RegressionNetParams.Name:
|
||||
client.chainParams = &chaincfg.RegressionNetParams
|
||||
case chaincfg.SimNetParams.Name:
|
||||
client.chainParams = &chaincfg.SimNetParams
|
||||
default:
|
||||
return nil, fmt.Errorf("rpcclient.New: Unknown chain %s", config.Params)
|
||||
}
|
||||
|
||||
if start {
|
||||
log.Infof("Established connection to RPC server %s",
|
||||
config.Host)
|
||||
|
||||
Reference in New Issue
Block a user