github.com/zignig/go-ipfs@v0.0.0-20141111235910-c9e5fdf55a52/core/commands/publish.go (about)

     1  package commands
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"io"
     7  
     8  	"github.com/jbenet/go-ipfs/core"
     9  	u "github.com/jbenet/go-ipfs/util"
    10  
    11  	nsys "github.com/jbenet/go-ipfs/namesys"
    12  )
    13  
    14  func Publish(n *core.IpfsNode, args []string, opts map[string]interface{}, out io.Writer) error {
    15  	log.Debug("Begin Publish")
    16  
    17  	if n.Identity == nil {
    18  		return errors.New("Identity not loaded!")
    19  	}
    20  
    21  	// name := ""
    22  	ref := ""
    23  
    24  	switch len(args) {
    25  	case 2:
    26  		// name = args[0]
    27  		ref = args[1]
    28  		return errors.New("keychains not yet implemented")
    29  	case 1:
    30  		// name = n.Identity.ID.String()
    31  		ref = args[0]
    32  
    33  	default:
    34  		return fmt.Errorf("Publish expects 1 or 2 args; got %d.", len(args))
    35  	}
    36  
    37  	// later, n.Keychain.Get(name).PrivKey
    38  	k := n.Identity.PrivKey()
    39  
    40  	pub := nsys.NewRoutingPublisher(n.Routing)
    41  	err := pub.Publish(k, ref)
    42  	if err != nil {
    43  		return err
    44  	}
    45  
    46  	hash, err := k.GetPublic().Hash()
    47  	if err != nil {
    48  		return err
    49  	}
    50  	fmt.Fprintf(out, "published name %s to %s\n", u.Key(hash), ref)
    51  
    52  	return nil
    53  }