func escapeDhtKey(s string) (string, error) { parts := path.SplitList(s) switch len(parts) { case 1: return string(b58.Decode(s)), nil case 3: k := b58.Decode(parts[2]) return path.Join(append(parts[:2], string(k))), nil default: return "", errors.New("invalid key") } }
// InvertKey returns a b58 decoded Datastore key // TODO: this is hacky because it encodes every path component. some // path components may be proper strings already... func (b58KeyConverter) InvertKey(dsk ds.Key) ds.Key { k := ds.NewKey("/") for _, n := range dsk.Namespaces() { k = k.ChildString(string(b58.Decode(n))) } return k }
// IsValidHash checks whether a given hash is valid (b58 decodable, len > 0) func IsValidHash(s string) bool { out := b58.Decode(s) if out == nil || len(out) == 0 { return false } _, err := mh.Cast(out) if err != nil { return false } return true }
func FromB58String(s string) (m Multihash, err error) { // panic handler, in case we try accessing bytes incorrectly. defer func() { if e := recover(); e != nil { m = Multihash{} err = e.(error) } }() //b58 smells like it can panic... b := b58.Decode(s) return Cast(b) }
// UnmarshalJSON returns a JSON-encoded Key (string) func (k *Key) UnmarshalJSON(mk []byte) error { var s string err := json.Unmarshal(mk, &s) if err != nil { return err } *k = Key(string(b58.Decode(s))) if len(*k) == 0 && len(s) > 2 { // if b58.Decode fails, k == "" return fmt.Errorf("Key.UnmarshalJSON: invalid b58 string: %v", mk) } return nil }
func ParseKeyToPath(txt string) (Path, error) { if txt == "" { return "", ErrNoComponents } chk := b58.Decode(txt) if len(chk) == 0 { return "", errors.New("not a key") } if _, err := mh.Cast(chk); err != nil { return "", err } return FromKey(key.Key(chk)), nil }
func (n *IpfsNode) loadID() error { if n.Identity != "" { return errors.New("identity already loaded") } cfg, err := n.Repo.Config() if err != nil { return err } cid := cfg.Identity.PeerID if cid == "" { return errors.New("Identity was not set in config (was ipfs init run?)") } if len(cid) == 0 { return errors.New("No peer ID in config! (was ipfs init run?)") } n.Identity = peer.ID(b58.Decode(cid)) return nil }
// B58KeyDecode returns Key from a b58 encoded string func B58KeyDecode(s string) Key { return Key(string(b58.Decode(s))) }
n, err := req.InvocContext().GetNode() if err != nil { res.SetError(err, cmds.ErrNormal) return } dht, ok := n.Routing.(*ipdht.IpfsDHT) if !ok { res.SetError(ErrNotDHT, cmds.ErrNormal) return } events := make(chan *notif.QueryEvent) ctx := notif.RegisterForQueryEvents(req.Context(), events) k := string(b58.Decode(req.Arguments()[0])) closestPeers, err := dht.GetClosestPeers(ctx, k) if err != nil { res.SetError(err, cmds.ErrNormal) return } go func() { defer close(events) for p := range closestPeers { notif.PublishQueryEvent(ctx, ¬if.QueryEvent{ ID: p, Type: notif.FinalPeer, }) }
Arguments: []cmds.Argument{ cmds.StringArg("peerid", false, false, "Peer.ID of node to look up.").EnableStdin(), }, Options: []cmds.Option{ cmds.StringOption("format", "f", "Optional output format."), }, Run: func(req cmds.Request, res cmds.Response) { node, err := req.InvocContext().GetNode() if err != nil { res.SetError(err, cmds.ErrNormal) return } var id peer.ID if len(req.Arguments()) > 0 { id = peer.ID(b58.Decode(req.Arguments()[0])) if len(id) == 0 { res.SetError(cmds.ClientError("Invalid peer id"), cmds.ErrClient) return } } else { id = node.Identity } if id == node.Identity { output, err := printSelf(node) if err != nil { res.SetError(err, cmds.ErrNormal) return } res.SetOutput(output)