github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/fuse/ipns/common.go (about)

     1  package ipns
     2  
     3  import (
     4  	context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
     5  
     6  	"github.com/ipfs/go-ipfs/core"
     7  	mdag "github.com/ipfs/go-ipfs/merkledag"
     8  	nsys "github.com/ipfs/go-ipfs/namesys"
     9  	ci "github.com/ipfs/go-ipfs/p2p/crypto"
    10  	path "github.com/ipfs/go-ipfs/path"
    11  	ft "github.com/ipfs/go-ipfs/unixfs"
    12  )
    13  
    14  // InitializeKeyspace sets the ipns record for the given key to
    15  // point to an empty directory.
    16  func InitializeKeyspace(n *core.IpfsNode, key ci.PrivKey) error {
    17  	emptyDir := &mdag.Node{Data: ft.FolderPBData()}
    18  	nodek, err := n.DAG.Add(emptyDir)
    19  	if err != nil {
    20  		return err
    21  	}
    22  
    23  	ctx, cancel := context.WithCancel(n.Context())
    24  	defer cancel()
    25  
    26  	err = n.Pinning.Pin(ctx, emptyDir, false)
    27  	if err != nil {
    28  		return err
    29  	}
    30  
    31  	err = n.Pinning.Flush()
    32  	if err != nil {
    33  		return err
    34  	}
    35  
    36  	pub := nsys.NewRoutingPublisher(n.Routing)
    37  	if err := pub.Publish(ctx, key, path.FromKey(nodek)); err != nil {
    38  		return err
    39  	}
    40  
    41  	return nil
    42  }