func AddMetadataTo(n *core.IpfsNode, skey string, m *ft.Metadata) (string, error) { ukey := key.B58KeyDecode(skey) nd, err := n.DAG.Get(n.Context(), ukey) if err != nil { return "", err } mdnode := new(dag.Node) mdata, err := ft.BytesForMetadata(m) if err != nil { return "", err } mdnode.Data = mdata if err := mdnode.AddNodeLinkClean("file", nd); err != nil { return "", err } nk, err := n.DAG.Add(mdnode) if err != nil { return "", err } return nk.B58String(), nil }
// InitializeKeyspace sets the ipns record for the given key to // point to an empty directory. func InitializeKeyspace(n *core.IpfsNode, key ci.PrivKey) error { emptyDir := &mdag.Node{Data: ft.FolderPBData()} nodek, err := n.DAG.Add(emptyDir) if err != nil { return err } ctx, cancel := context.WithCancel(n.Context()) defer cancel() err = n.Pinning.Pin(ctx, emptyDir, false) if err != nil { return err } err = n.Pinning.Flush() if err != nil { return err } pub := nsys.NewRoutingPublisher(n.Routing) if err := pub.Publish(ctx, key, path.FromKey(nodek)); err != nil { return err } return nil }
func Cat(n *core.IpfsNode, pstr string) (*uio.DagReader, error) { p := path.FromString(pstr) dagNode, err := n.Resolver.ResolvePath(n.Context(), p) if err != nil { return nil, err } return uio.NewDagReader(n.Context(), dagNode, n.DAG) }
func Dial(nd *core.IpfsNode, p peer.ID, protocol string) (net.Stream, error) { ctx, cancel := context.WithTimeout(nd.Context(), time.Second*30) defer cancel() err := nd.PeerHost.Connect(ctx, peer.PeerInfo{ID: p}) if err != nil { return nil, err } return nd.PeerHost.NewStream(pro.ID(protocol), p) }
func addNode(n *core.IpfsNode, node *merkledag.Node) error { if err := n.DAG.AddRecursive(node); err != nil { // add the file to the graph + local storage return err } ctx, cancel := context.WithCancel(n.Context()) defer cancel() err := n.Pinning.Pin(ctx, node, true) // ensure we keep it return err }
func Metadata(n *core.IpfsNode, skey string) (*ft.Metadata, error) { ukey := key.B58KeyDecode(skey) nd, err := n.DAG.Get(n.Context(), ukey) if err != nil { return nil, err } return ft.MetadataFromBytes(nd.Data) }
func getPaths(t *testing.T, ipfs *core.IpfsNode, name string, n *dag.Node) []string { if len(n.Links) == 0 { return []string{name} } var out []string for _, lnk := range n.Links { child, err := lnk.GetNode(ipfs.Context(), ipfs.DAG) if err != nil { t.Fatal(err) } sub := getPaths(t, ipfs, path.Join(name, lnk.Name), child) out = append(out, sub...) } return out }
func Listen(nd *core.IpfsNode, protocol string) (*ipfsListener, error) { ctx, cancel := context.WithCancel(nd.Context()) list := &ipfsListener{ proto: pro.ID(protocol), conCh: make(chan net.Stream), ctx: ctx, cancel: cancel, } nd.PeerHost.SetStreamHandler(list.proto, func(s net.Stream) { select { case list.conCh <- s: case <-ctx.Done(): s.Close() } }) return list, nil }
// Mount mounts ipns at a given location, and returns a mount.Mount instance. func Mount(ipfs *core.IpfsNode, ipnsmp, ipfsmp string) (mount.Mount, error) { cfg, err := ipfs.Repo.Config() if err != nil { return nil, err } allow_other := cfg.Mounts.FuseAllowOther if ipfs.IpnsFs == nil { fs, err := ipnsfs.NewFilesystem(ipfs.Context(), ipfs.DAG, ipfs.Namesys, ipfs.Pinning, ipfs.PrivateKey) if err != nil { return nil, err } ipfs.IpnsFs = fs } fsys, err := NewFileSystem(ipfs, ipfs.PrivateKey, ipfsmp, ipnsmp) if err != nil { return nil, err } return mount.NewMount(ipfs.Process(), fsys, ipnsmp, allow_other) }
func addAssetList(nd *core.IpfsNode, l []string) (*key.Key, error) { dirb := uio.NewDirectory(nd.DAG) for _, p := range l { d, err := Asset(p) if err != nil { return nil, fmt.Errorf("assets: could load Asset '%s': %s", p, err) } s, err := coreunix.Add(nd, bytes.NewBuffer(d)) if err != nil { return nil, fmt.Errorf("assets: could not Add '%s': %s", p, err) } fname := filepath.Base(p) k := key.B58KeyDecode(s) if err := dirb.AddChild(nd.Context(), fname, k); err != nil { return nil, fmt.Errorf("assets: could not add '%s' as a child: %s", fname, err) } } dir := dirb.GetNode() dkey, err := nd.DAG.Add(dir) if err != nil { return nil, fmt.Errorf("assets: DAG.Add(dir) failed: %s", err) } if err := nd.Pinning.Pin(nd.Context(), dir, true); err != nil { return nil, fmt.Errorf("assets: Pinning on init-docu failed: %s", err) } if err := nd.Pinning.Flush(); err != nil { return nil, fmt.Errorf("assets: Pinning flush failed: %s", err) } return &dkey, nil }