2017-07-28 13:13:12 -07:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2017-08-03 10:41:48 -07:00
|
|
|
"fmt"
|
2017-07-28 13:13:12 -07:00
|
|
|
"log"
|
2017-08-03 10:41:48 -07:00
|
|
|
"net/http"
|
2017-07-28 13:13:12 -07:00
|
|
|
"os"
|
|
|
|
|
2017-08-03 10:41:48 -07:00
|
|
|
"github.com/gorilla/mux"
|
2017-07-28 13:13:12 -07:00
|
|
|
"github.com/spf13/cobra"
|
2017-08-03 10:41:48 -07:00
|
|
|
"github.com/spf13/viper"
|
2017-07-28 13:13:12 -07:00
|
|
|
|
|
|
|
"github.com/tendermint/basecoin/client/commands"
|
|
|
|
rest "github.com/tendermint/basecoin/client/rest"
|
2017-08-03 10:41:48 -07:00
|
|
|
coinrest "github.com/tendermint/basecoin/modules/coin/rest"
|
2017-07-28 13:13:12 -07:00
|
|
|
"github.com/tendermint/tmlibs/cli"
|
|
|
|
)
|
|
|
|
|
|
|
|
var srvCli = &cobra.Command{
|
|
|
|
Use: "baseserver",
|
|
|
|
Short: "Light REST client for tendermint",
|
|
|
|
Long: `Baseserver presents a nice (not raw hex) interface to the basecoin blockchain structure.`,
|
|
|
|
}
|
|
|
|
|
2017-08-03 10:41:48 -07:00
|
|
|
var serveCmd = &cobra.Command{
|
|
|
|
Use: "serve",
|
|
|
|
Short: "Serve the light REST client for tendermint",
|
|
|
|
Long: "Access basecoin via REST",
|
|
|
|
RunE: serve,
|
|
|
|
}
|
|
|
|
|
|
|
|
const (
|
|
|
|
envPortFlag = "port"
|
|
|
|
defaultAlgo = "ed25519"
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
_ = serveCmd.PersistentFlags().Int(envPortFlag, 8998, "the port to run the server on")
|
|
|
|
}
|
|
|
|
|
|
|
|
func serve(cmd *cobra.Command, args []string) error {
|
|
|
|
router := mux.NewRouter()
|
|
|
|
|
|
|
|
routeRegistrars := []func(*mux.Router) error{
|
|
|
|
// rest.Keys handlers
|
|
|
|
rest.NewDefaultKeysManager(defaultAlgo).RegisterAllCRUD,
|
|
|
|
|
|
|
|
// Coin send handler
|
|
|
|
coinrest.RegisterCoinSend,
|
|
|
|
// Coin query account handler
|
|
|
|
coinrest.RegisterQueryAccount,
|
|
|
|
|
|
|
|
// Basecoin sign transactions handler
|
|
|
|
rest.RegisterSignTx,
|
|
|
|
// Basecoin post transaction handler
|
|
|
|
rest.RegisterPostTx,
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, routeRegistrar := range routeRegistrars {
|
|
|
|
if err := routeRegistrar(router); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
port := viper.GetInt(envPortFlag)
|
|
|
|
addr := fmt.Sprintf(":%d", port)
|
|
|
|
|
|
|
|
log.Printf("Serving on %q", addr)
|
|
|
|
return http.ListenAndServe(addr, router)
|
|
|
|
}
|
|
|
|
|
2017-07-28 13:13:12 -07:00
|
|
|
func main() {
|
|
|
|
commands.AddBasicFlags(srvCli)
|
|
|
|
|
|
|
|
srvCli.AddCommand(
|
|
|
|
commands.InitCmd,
|
2017-08-03 10:41:48 -07:00
|
|
|
serveCmd,
|
2017-07-28 13:13:12 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
// TODO: Decide whether to use $HOME/.basecli for compatibility
|
|
|
|
// or just use $HOME/.baseserver?
|
|
|
|
cmd := cli.PrepareMainCmd(srvCli, "BC", os.ExpandEnv("$HOME/.basecli"))
|
|
|
|
if err := cmd.Execute(); err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
}
|