rest/libp2p-http: address lanzafame's review
License: MIT Signed-off-by: Hector Sanjuan <code@hector.link>
This commit is contained in:
parent
23d2db15e7
commit
09f4c9fce3
|
@ -87,6 +87,10 @@ func NewClient(cfg *Config) (*Client, error) {
|
|||
config: cfg,
|
||||
}
|
||||
|
||||
if client.config.Timeout == 0 {
|
||||
client.config.Timeout = DefaultTimeout
|
||||
}
|
||||
|
||||
err := client.setupHTTPClient()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -107,10 +111,6 @@ func NewClient(cfg *Config) (*Client, error) {
|
|||
}
|
||||
|
||||
func (c *Client) setupHTTPClient() error {
|
||||
if c.config.Timeout == 0 {
|
||||
c.config.Timeout = DefaultTimeout
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
switch {
|
||||
|
@ -136,7 +136,11 @@ func (c *Client) setupHTTPClient() error {
|
|||
func (c *Client) setupHostname() error {
|
||||
// When no host/port/multiaddress defined, we set the default
|
||||
if c.config.APIAddr == nil && c.config.Host == "" && c.config.Port == "" {
|
||||
c.config.APIAddr, _ = ma.NewMultiaddr(DefaultAPIAddr)
|
||||
var err error
|
||||
c.config.APIAddr, err = ma.NewMultiaddr(DefaultAPIAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// PeerAddr takes precedence over APIAddr. APIAddr takes precedence
|
||||
|
@ -150,6 +154,9 @@ func (c *Client) setupHostname() error {
|
|||
resolveCtx, cancel := context.WithTimeout(c.ctx, c.config.Timeout)
|
||||
defer cancel()
|
||||
resolved, err := madns.Resolve(resolveCtx, c.config.APIAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.config.APIAddr = resolved[0]
|
||||
_, c.hostname, err = manet.DialArgs(c.config.APIAddr)
|
||||
if err != nil {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package client
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"net"
|
||||
|
@ -14,6 +15,7 @@ import (
|
|||
ipnet "github.com/libp2p/go-libp2p-interface-pnet"
|
||||
peerstore "github.com/libp2p/go-libp2p-peerstore"
|
||||
pnet "github.com/libp2p/go-libp2p-pnet"
|
||||
madns "github.com/multiformats/go-multiaddr-dns"
|
||||
)
|
||||
|
||||
// This is essentially a http.DefaultTransport. We should not mess
|
||||
|
@ -63,8 +65,14 @@ func (c *Client) enableLibp2p() error {
|
|||
return err
|
||||
}
|
||||
|
||||
// This should resolve addr too.
|
||||
h.Peerstore().AddAddr(pid, addr, peerstore.PermanentAddrTTL)
|
||||
ctx, cancel := context.WithTimeout(c.ctx, c.config.Timeout)
|
||||
defer cancel()
|
||||
resolvedAddrs, err := madns.Resolve(ctx, addr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
h.Peerstore().AddAddrs(pid, resolvedAddrs, peerstore.PermanentAddrTTL)
|
||||
c.transport.RegisterProtocol("libp2p", p2phttp.NewTransport(h))
|
||||
c.net = "libp2p"
|
||||
c.p2p = h
|
||||
|
|
|
@ -122,27 +122,18 @@ func (cfg *Config) Default() error {
|
|||
// Validate makes sure that all fields in this Config have
|
||||
// working values, at least in appearance.
|
||||
func (cfg *Config) Validate() error {
|
||||
if cfg.ReadTimeout < 0 {
|
||||
switch {
|
||||
case cfg.ReadTimeout < 0:
|
||||
return errors.New("restapi.read_timeout is invalid")
|
||||
}
|
||||
|
||||
if cfg.ReadHeaderTimeout < 0 {
|
||||
case cfg.ReadHeaderTimeout < 0:
|
||||
return errors.New("restapi.read_header_timeout is invalid")
|
||||
}
|
||||
|
||||
if cfg.WriteTimeout < 0 {
|
||||
case cfg.WriteTimeout < 0:
|
||||
return errors.New("restapi.write_timeout is invalid")
|
||||
}
|
||||
|
||||
if cfg.IdleTimeout < 0 {
|
||||
case cfg.IdleTimeout < 0:
|
||||
return errors.New("restapi.idle_timeout invalid")
|
||||
}
|
||||
|
||||
if cfg.BasicAuthCreds != nil && len(cfg.BasicAuthCreds) == 0 {
|
||||
case cfg.BasicAuthCreds != nil && len(cfg.BasicAuthCreds) == 0:
|
||||
return errors.New("restapi.basic_auth_creds should be null or have at least one entry")
|
||||
}
|
||||
|
||||
if (cfg.pathSSLCertFile != "" || cfg.pathSSLKeyFile != "") && cfg.TLS == nil {
|
||||
case (cfg.pathSSLCertFile != "" || cfg.pathSSLKeyFile != "") && cfg.TLS == nil:
|
||||
return errors.New("missing TLS configuration")
|
||||
}
|
||||
|
||||
|
@ -299,14 +290,16 @@ func (cfg *Config) ToJSON() (raw []byte, err error) {
|
|||
}
|
||||
}()
|
||||
|
||||
jcfg := &jsonConfig{}
|
||||
jcfg.HTTPListenMultiaddress = cfg.HTTPListenAddr.String()
|
||||
jcfg.SSLCertFile = cfg.pathSSLCertFile
|
||||
jcfg.SSLKeyFile = cfg.pathSSLKeyFile
|
||||
jcfg.ReadTimeout = cfg.ReadTimeout.String()
|
||||
jcfg.ReadHeaderTimeout = cfg.ReadHeaderTimeout.String()
|
||||
jcfg.WriteTimeout = cfg.WriteTimeout.String()
|
||||
jcfg.IdleTimeout = cfg.IdleTimeout.String()
|
||||
jcfg := &jsonConfig{
|
||||
HTTPListenMultiaddress: cfg.HTTPListenAddr.String(),
|
||||
SSLCertFile: cfg.pathSSLCertFile,
|
||||
SSLKeyFile: cfg.pathSSLKeyFile,
|
||||
ReadTimeout: cfg.ReadTimeout.String(),
|
||||
ReadHeaderTimeout: cfg.ReadHeaderTimeout.String(),
|
||||
WriteTimeout: cfg.WriteTimeout.String(),
|
||||
IdleTimeout: cfg.IdleTimeout.String(),
|
||||
BasicAuthCreds: cfg.BasicAuthCreds,
|
||||
}
|
||||
|
||||
if cfg.ID != "" {
|
||||
jcfg.ID = peer.IDB58Encode(cfg.ID)
|
||||
|
@ -322,8 +315,6 @@ func (cfg *Config) ToJSON() (raw []byte, err error) {
|
|||
jcfg.Libp2pListenMultiaddress = cfg.Libp2pListenAddr.String()
|
||||
}
|
||||
|
||||
jcfg.BasicAuthCreds = cfg.BasicAuthCreds
|
||||
|
||||
raw, err = config.DefaultJSONMarshal(jcfg)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -54,13 +54,14 @@ func Libp2pMultiaddrSplit(addr ma.Multiaddr) (peer.ID, ma.Multiaddr, error) {
|
|||
return peerID, decapAddr, nil
|
||||
}
|
||||
|
||||
// Libp2pMultiaddrJoin takes a LibP2P multiaddress and a peer ID and
|
||||
// encapsulates a new /ipfs/<peerID> address.
|
||||
func Libp2pMultiaddrJoin(addr ma.Multiaddr, p peer.ID) ma.Multiaddr {
|
||||
// MustLibp2pMultiaddrJoin takes a LibP2P multiaddress and a peer ID and
|
||||
// encapsulates a new /ipfs/<peerID> address. It will panic if the given
|
||||
// peer ID is bad.
|
||||
func MustLibp2pMultiaddrJoin(addr ma.Multiaddr, p peer.ID) ma.Multiaddr {
|
||||
pidAddr, err := ma.NewMultiaddr("/ipfs/" + peer.IDB58Encode(p))
|
||||
// let this break badly
|
||||
if err != nil {
|
||||
panic("called Libp2pMultiaddrJoin with bad peer!")
|
||||
panic("called MustLibp2pMultiaddrJoin with bad peer!")
|
||||
}
|
||||
return addr.Encapsulate(pidAddr)
|
||||
}
|
||||
|
|
|
@ -580,7 +580,7 @@ func (c *Cluster) ID() api.ID {
|
|||
}
|
||||
for k := range addrsSet {
|
||||
addr, _ := ma.NewMultiaddr(k)
|
||||
addrs = append(addrs, api.Libp2pMultiaddrJoin(addr, c.id))
|
||||
addrs = append(addrs, api.MustLibp2pMultiaddrJoin(addr, c.id))
|
||||
}
|
||||
|
||||
peers := []peer.ID{}
|
||||
|
@ -771,7 +771,7 @@ func (c *Cluster) Join(addr ma.Multiaddr) error {
|
|||
"Cluster",
|
||||
"PeerAdd",
|
||||
api.MultiaddrToSerial(
|
||||
api.Libp2pMultiaddrJoin(c.config.ListenAddr, c.id)),
|
||||
api.MustLibp2pMultiaddrJoin(c.config.ListenAddr, c.id)),
|
||||
&myID)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
|
|
|
@ -93,7 +93,7 @@ type DurationOpt struct {
|
|||
Name string
|
||||
}
|
||||
|
||||
// ParseDurations takes a time.Duration src and saves it to the given dst. into the given
|
||||
// ParseDurations takes a time.Duration src and saves it to the given dst.
|
||||
func ParseDurations(component string, args ...*DurationOpt) error {
|
||||
for _, arg := range args {
|
||||
t, err := time.ParseDuration(arg.Duration)
|
||||
|
|
|
@ -48,7 +48,8 @@ responses in a user-readable format. The location of the IPFS
|
|||
Cluster server is assumed to be %s, but can be
|
||||
configured with the --host option. To use the secure libp2p-http
|
||||
API endpoint, use "--host" with the full cluster libp2p listener
|
||||
address (including the "/ipfs/<peerID>" part), and --secret.
|
||||
address (including the "/ipfs/<peerID>" part), and --secret (the
|
||||
32-byte cluster secret as it appears in the cluster configuration).
|
||||
|
||||
For feedback, bug reports or any additional information, visit
|
||||
https://github.com/ipfs/ipfs-cluster.
|
||||
|
|
|
@ -389,6 +389,6 @@ func (rpcapi *RPCAPI) RemoteMultiaddrForPeer(ctx context.Context, in peer.ID, ou
|
|||
if len(conns) == 0 {
|
||||
return errors.New("no connections to: " + in.Pretty())
|
||||
}
|
||||
*out = api.MultiaddrToSerial(api.Libp2pMultiaddrJoin(conns[0].RemoteMultiaddr(), in))
|
||||
*out = api.MultiaddrToSerial(api.MustLibp2pMultiaddrJoin(conns[0].RemoteMultiaddr(), in))
|
||||
return nil
|
||||
}
|
||||
|
|
4
util.go
4
util.go
|
@ -105,9 +105,9 @@ func PeersFromMultiaddrs(addrs []ma.Multiaddr) []peer.ID {
|
|||
func getRemoteMultiaddr(h host.Host, pid peer.ID, addr ma.Multiaddr) ma.Multiaddr {
|
||||
conns := h.Network().ConnsToPeer(pid)
|
||||
if len(conns) > 0 {
|
||||
return api.Libp2pMultiaddrJoin(conns[0].RemoteMultiaddr(), pid)
|
||||
return api.MustLibp2pMultiaddrJoin(conns[0].RemoteMultiaddr(), pid)
|
||||
}
|
||||
return api.Libp2pMultiaddrJoin(addr, pid)
|
||||
return api.MustLibp2pMultiaddrJoin(addr, pid)
|
||||
}
|
||||
|
||||
func pinInfoSliceToSerial(pi []api.PinInfo) []api.PinInfoSerial {
|
||||
|
|
Loading…
Reference in New Issue
Block a user