serve.go 1.55 KB
Newer Older
verokarhu's avatar
verokarhu committed
1 2 3
package main

import (
verokarhu's avatar
verokarhu committed
4
	"errors"
verokarhu's avatar
verokarhu committed
5
	"fmt"
verokarhu's avatar
verokarhu committed
6 7 8 9

	"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/gonuts/flag"
	"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/commander"
	"github.com/jbenet/go-ipfs/daemon"
10
	h "github.com/jbenet/go-ipfs/server/http"
verokarhu's avatar
verokarhu committed
11 12 13 14
)

var cmdIpfsServe = &commander.Command{
	UsageLine: "serve",
15 16 17 18 19 20 21 22 23
	Short:     "Serve an interface to ipfs",
	Subcommands: []*commander.Command{
		cmdIpfsServeHttp,
	},
	Flag: *flag.NewFlagSet("ipfs-serve", flag.ExitOnError),
}

var cmdIpfsServeHttp = &commander.Command{
	UsageLine: "http",
verokarhu's avatar
verokarhu committed
24
	Short:     "Serve an HTTP API",
25 26 27
	Long:      `ipfs serve http - Serve an http gateway into ipfs.`,
	Run:       serveHttpCmd,
	Flag:      *flag.NewFlagSet("ipfs-serve-http", flag.ExitOnError),
verokarhu's avatar
verokarhu committed
28 29
}

verokarhu's avatar
verokarhu committed
30
func init() {
31 32
	cmdIpfsServeHttp.Flag.Uint("port", 8080, "Port number")
	cmdIpfsServeHttp.Flag.String("hostname", "localhost", "Hostname")
verokarhu's avatar
verokarhu committed
33 34
}

35
func serveHttpCmd(c *commander.Command, _ []string) error {
verokarhu's avatar
verokarhu committed
36 37 38 39 40
	port := c.Flag.Lookup("port").Value.Get().(uint)
	if port < 1 || port > 65535 {
		return errors.New("invalid port number")
	}

verokarhu's avatar
verokarhu committed
41 42 43 44 45 46
	conf, err := getConfigDir(c.Parent.Parent)
	if err != nil {
		return err
	}

	n, err := localNode(conf, true)
verokarhu's avatar
verokarhu committed
47 48 49
	if err != nil {
		return err
	}
verokarhu's avatar
verokarhu committed
50

verokarhu's avatar
verokarhu committed
51 52
	fmt.Println("starting new daemon listener...")
	dl, err := daemon.NewDaemonListener(n, "localhost:12345")
verokarhu's avatar
verokarhu committed
53 54 55
	if err != nil {
		return err
	}
verokarhu's avatar
verokarhu committed
56 57
	go dl.Listen()
	defer dl.Close()
verokarhu's avatar
verokarhu committed
58

verokarhu's avatar
verokarhu committed
59
	hostname := c.Flag.Lookup("hostname").Value.Get().(string)
60
	address := fmt.Sprintf("%s:%d", hostname, port)
verokarhu's avatar
verokarhu committed
61 62 63
	fmt.Printf("Serving on %s\n", address)

	return h.Serve(address, n)
verokarhu's avatar
verokarhu committed
64
}