mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-21 18:37:45 +08:00
Address comments from PR
This commit is contained in:
parent
97aeda9ae8
commit
bb1b0d50e0
@ -7,8 +7,6 @@ import (
|
||||
mh "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multihash"
|
||||
"github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
|
||||
pb "github.com/ipfs/go-ipfs/namesys/internal/pb"
|
||||
ci "github.com/ipfs/go-ipfs/p2p/crypto"
|
||||
peer "github.com/ipfs/go-ipfs/p2p/peer"
|
||||
routing "github.com/ipfs/go-ipfs/routing"
|
||||
u "github.com/ipfs/go-ipfs/util"
|
||||
)
|
||||
@ -65,31 +63,9 @@ func (r *routingResolver) Resolve(ctx context.Context, name string) (u.Key, erro
|
||||
}
|
||||
|
||||
// name should be a public key retrievable from ipfs
|
||||
// /ipfs/<name>
|
||||
var pubkey ci.PubKey
|
||||
if dht, ok := r.routing.(routing.PubKeyFetcher); ok {
|
||||
// If we have a DHT as our routing system, use optimized fetcher
|
||||
pk, err := dht.GetPublicKey(ctx, peer.ID(hash))
|
||||
if err != nil {
|
||||
log.Warning("RoutingResolve PubKey Get failed.")
|
||||
return "", err
|
||||
}
|
||||
pubkey = pk
|
||||
} else {
|
||||
key := u.Key("/pk/" + string(hash))
|
||||
pkval, err := r.routing.GetValue(ctx, key)
|
||||
if err != nil {
|
||||
log.Warning("RoutingResolve PubKey Get failed.")
|
||||
return "", err
|
||||
}
|
||||
|
||||
// get PublicKey from node.Data
|
||||
pk, err := ci.UnmarshalPublicKey(pkval)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
pubkey = pk
|
||||
pubkey, err := routing.GetPublicKey(r.routing, ctx, hash)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
hsh, _ := pubkey.Hash()
|
||||
|
||||
@ -6,18 +6,12 @@ import (
|
||||
"github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
|
||||
ci "github.com/ipfs/go-ipfs/p2p/crypto"
|
||||
peer "github.com/ipfs/go-ipfs/p2p/peer"
|
||||
routing "github.com/ipfs/go-ipfs/routing"
|
||||
pb "github.com/ipfs/go-ipfs/routing/dht/pb"
|
||||
record "github.com/ipfs/go-ipfs/routing/record"
|
||||
u "github.com/ipfs/go-ipfs/util"
|
||||
ctxutil "github.com/ipfs/go-ipfs/util/ctx"
|
||||
)
|
||||
|
||||
// KeyForPublicKey returns the key used to retrieve public keys
|
||||
// from the dht.
|
||||
func KeyForPublicKey(id peer.ID) u.Key {
|
||||
return u.Key("/pk/" + string(id))
|
||||
}
|
||||
|
||||
func (dht *IpfsDHT) GetPublicKey(ctx context.Context, p peer.ID) (ci.PubKey, error) {
|
||||
log.Debugf("getPublicKey for: %s", p)
|
||||
|
||||
@ -40,7 +34,7 @@ func (dht *IpfsDHT) GetPublicKey(ctx context.Context, p peer.ID) (ci.PubKey, err
|
||||
|
||||
// last ditch effort: let's try the dht.
|
||||
log.Debugf("pk for %s not in peerstore, and peer failed. trying dht.", p)
|
||||
pkkey := KeyForPublicKey(p)
|
||||
pkkey := routing.KeyForPublicKey(p)
|
||||
|
||||
val, err := dht.GetValue(ctxT, pkkey)
|
||||
if err != nil {
|
||||
@ -65,7 +59,7 @@ func (dht *IpfsDHT) getPublicKeyFromNode(ctx context.Context, p peer.ID) (ci.Pub
|
||||
return pk, nil
|
||||
}
|
||||
|
||||
pkkey := KeyForPublicKey(p)
|
||||
pkkey := routing.KeyForPublicKey(p)
|
||||
pmes, err := dht.getValueSingle(ctx, p, pkkey)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@ -51,3 +51,25 @@ type IpfsRouting interface {
|
||||
type PubKeyFetcher interface {
|
||||
GetPublicKey(context.Context, peer.ID) (ci.PubKey, error)
|
||||
}
|
||||
|
||||
// KeyForPublicKey returns the key used to retrieve public keys
|
||||
// from the dht.
|
||||
func KeyForPublicKey(id peer.ID) u.Key {
|
||||
return u.Key("/pk/" + string(id))
|
||||
}
|
||||
|
||||
func GetPublicKey(r IpfsRouting, ctx context.Context, pkhash []byte) (ci.PubKey, error) {
|
||||
if dht, ok := r.(PubKeyFetcher); ok {
|
||||
// If we have a DHT as our routing system, use optimized fetcher
|
||||
return dht.GetPublicKey(ctx, peer.ID(pkhash))
|
||||
} else {
|
||||
key := u.Key("/pk/" + string(pkhash))
|
||||
pkval, err := r.GetValue(ctx, key)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// get PublicKey from node.Data
|
||||
return ci.UnmarshalPublicKey(pkval)
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user