mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-29 17:36:38 +08:00
Merge pull request #3882 from keremgocen/fix-cmd-key-peerid
WIP: add PeerID lookup
This commit is contained in:
@ -10,6 +10,7 @@ import (
|
||||
|
||||
cmds "github.com/ipfs/go-ipfs/commands"
|
||||
core "github.com/ipfs/go-ipfs/core"
|
||||
keystore "github.com/ipfs/go-ipfs/keystore"
|
||||
path "github.com/ipfs/go-ipfs/path"
|
||||
|
||||
crypto "gx/ipfs/QmP1DfoUjiWH2ZBo1PBH6FupdBucbDepx3HpWmEY6JMUpY/go-libp2p-crypto"
|
||||
@ -48,6 +49,11 @@ Publish an <ipfs-path> with another name, added by an 'ipfs key' command:
|
||||
> ipfs name publish --key=mykey /ipfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy
|
||||
Published to QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n: /ipfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy
|
||||
|
||||
Alternatively, publish an <ipfs-path> using a valid PeerID(as listed by 'ipfs key list -l'):
|
||||
|
||||
> ipfs name publish --key=QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n /ipfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy
|
||||
Published to QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n: /ipfs/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy
|
||||
|
||||
`,
|
||||
},
|
||||
|
||||
@ -61,7 +67,7 @@ Publish an <ipfs-path> with another name, added by an 'ipfs key' command:
|
||||
This accepts durations such as "300s", "1.5h" or "2h45m". Valid time units are
|
||||
"ns", "us" (or "µs"), "ms", "s", "m", "h".`).Default("24h"),
|
||||
cmds.StringOption("ttl", "Time duration this record should be cached for (caution: experimental)."),
|
||||
cmds.StringOption("key", "k", "Name of the key to be used, as listed by 'ipfs key list'. Default: <<default>>.").Default("self"),
|
||||
cmds.StringOption("key", "k", "Name of the key to be used or a valid PeerID, as listed by 'ipfs key list -l'. Default: <<default>>.").Default("self"),
|
||||
},
|
||||
Run: func(req cmds.Request, res cmds.Response) {
|
||||
log.Debug("begin publish")
|
||||
@ -116,7 +122,7 @@ Publish an <ipfs-path> with another name, added by an 'ipfs key' command:
|
||||
}
|
||||
|
||||
kname, _, _ := req.Option("key").String()
|
||||
k, err := n.GetKey(kname)
|
||||
k, err := keylookup(n, kname)
|
||||
if err != nil {
|
||||
res.SetError(err, cmds.ErrNormal)
|
||||
return
|
||||
@ -176,3 +182,40 @@ func publish(ctx context.Context, n *core.IpfsNode, k crypto.PrivKey, ref path.P
|
||||
Value: ref.String(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func keylookup(n *core.IpfsNode, k string) (crypto.PrivKey, error) {
|
||||
|
||||
res, err := n.GetKey(k)
|
||||
if res != nil {
|
||||
return res, nil
|
||||
}
|
||||
|
||||
if err != nil && err != keystore.ErrNoSuchKey {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
keys, err := n.Repo.Keystore().List()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, key := range keys {
|
||||
privKey, err := n.Repo.Keystore().Get(key)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pubKey := privKey.GetPublic()
|
||||
|
||||
pid, err := peer.IDFromPublicKey(pubKey)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if pid.Pretty() == k {
|
||||
return privKey, nil
|
||||
}
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("no key by the given name or PeerID was found")
|
||||
}
|
||||
|
@ -74,4 +74,20 @@ test_expect_failure "publish with our explicit node ID looks good" '
|
||||
test_cmp expected_node_id_publish actual_node_id_publish
|
||||
'
|
||||
|
||||
# publish with an explicit node ID as key name
|
||||
|
||||
test_expect_success "generate and verify a new key" '
|
||||
NEWID=`ipfs key gen --type=rsa --size=2048 keyname` &&
|
||||
test_check_peerid "${NEWID}"
|
||||
'
|
||||
|
||||
test_expect_success "'ipfs name publish --key=<peer-id> <hash>' succeeds" '
|
||||
ipfs name publish --key=${NEWID} "/ipfs/$HASH_WELCOME_DOCS" >actual_node_id_publish
|
||||
'
|
||||
|
||||
test_expect_success "publish an explicit node ID as key name looks good" '
|
||||
echo "Published to ${NEWID}: /ipfs/$HASH_WELCOME_DOCS" >expected_node_id_publish &&
|
||||
test_cmp expected_node_id_publish actual_node_id_publish
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Reference in New Issue
Block a user