diff --git a/client/keys/root.go b/client/keys/root.go index 962986c91a..48b50d5e97 100644 --- a/client/keys/root.go +++ b/client/keys/root.go @@ -2,6 +2,7 @@ package keys import ( "github.com/cosmos/cosmos-sdk/client" + "github.com/gorilla/mux" "github.com/spf13/cobra" ) @@ -27,3 +28,12 @@ func Commands() *cobra.Command { ) return cmd } + +func RegisterRoutes(r *mux.Router) { + r.HandleFunc("/keys", QueryKeysRequestHandler).Methods("GET") + r.HandleFunc("/keys", AddNewKeyRequestHandler).Methods("POST") + r.HandleFunc("/keys/seed", SeedRequestHandler).Methods("GET") + r.HandleFunc("/keys/{name}", GetKeyRequestHandler).Methods("GET") + r.HandleFunc("/keys/{name}", UpdateKeyRequestHandler).Methods("PUT") + r.HandleFunc("/keys/{name}", DeleteKeyRequestHandler).Methods("DELETE") +} diff --git a/client/lcd/root.go b/client/lcd/root.go index 4ebc0cba98..a692ebd59b 100644 --- a/client/lcd/root.go +++ b/client/lcd/root.go @@ -48,21 +48,9 @@ func startRESTServer(cdc *wire.Codec) func(cmd *cobra.Command, args []string) er func initRouter(cdc *wire.Codec) http.Handler { r := mux.NewRouter() r.HandleFunc("/version", version.VersionRequestHandler).Methods("GET") - r.HandleFunc("/node_info", rpc.NodeInfoRequestHandler).Methods("GET") - r.HandleFunc("/syncing", rpc.NodeSyncingRequestHandler).Methods("GET") - r.HandleFunc("/keys", keys.QueryKeysRequestHandler).Methods("GET") - r.HandleFunc("/keys", keys.AddNewKeyRequestHandler).Methods("POST") - r.HandleFunc("/keys/seed", keys.SeedRequestHandler).Methods("GET") - r.HandleFunc("/keys/{name}", keys.GetKeyRequestHandler).Methods("GET") - r.HandleFunc("/keys/{name}", keys.UpdateKeyRequestHandler).Methods("PUT") - r.HandleFunc("/keys/{name}", keys.DeleteKeyRequestHandler).Methods("DELETE") - r.HandleFunc("/txs", tx.SearchTxRequestHandler(cdc)).Methods("GET") - r.HandleFunc("/txs/{hash}", tx.QueryTxRequestHandler(cdc)).Methods("GET") - r.HandleFunc("/txs/sign", tx.SignTxRequstHandler).Methods("POST") - r.HandleFunc("/txs/broadcast", tx.BroadcastTxRequestHandler).Methods("POST") - r.HandleFunc("/blocks/latest", rpc.LatestBlockRequestHandler).Methods("GET") - r.HandleFunc("/blocks/{height}", rpc.BlockRequestHandler).Methods("GET") - r.HandleFunc("/validatorsets/latest", rpc.LatestValidatorsetRequestHandler).Methods("GET") - r.HandleFunc("/validatorsets/{height}", rpc.ValidatorsetRequestHandler).Methods("GET") + + keys.RegisterRoutes(r) + rpc.RegisterRoutes(r) + tx.RegisterRoutes(r, cdc) return r } diff --git a/client/rpc/root.go b/client/rpc/root.go index 8acf8ddad1..8b04c044f4 100644 --- a/client/rpc/root.go +++ b/client/rpc/root.go @@ -1,6 +1,7 @@ package rpc import ( + "github.com/gorilla/mux" "github.com/pkg/errors" "github.com/spf13/cobra" @@ -42,3 +43,12 @@ func initClientCommand() *cobra.Command { cmd.Flags().String(flagValHash, "", "Hash of trusted validator set (hex-encoded)") return cmd } + +func RegisterRoutes(r *mux.Router) { + r.HandleFunc("/node_info", NodeInfoRequestHandler).Methods("GET") + r.HandleFunc("/syncing", NodeSyncingRequestHandler).Methods("GET") + r.HandleFunc("/blocks/latest", LatestBlockRequestHandler).Methods("GET") + r.HandleFunc("/blocks/{height}", BlockRequestHandler).Methods("GET") + r.HandleFunc("/validatorsets/latest", LatestValidatorsetRequestHandler).Methods("GET") + r.HandleFunc("/validatorsets/{height}", ValidatorsetRequestHandler).Methods("GET") +} diff --git a/client/tx/broadcast.go b/client/tx/broadcast.go new file mode 100644 index 0000000000..477571ea50 --- /dev/null +++ b/client/tx/broadcast.go @@ -0,0 +1,33 @@ +package tx + +import ( + "encoding/json" + "net/http" + + "github.com/cosmos/cosmos-sdk/client" +) + +type BroadcastTxBody struct { + TxBytes string `json="tx"` +} + +func BroadcastTxRequestHandler(w http.ResponseWriter, r *http.Request) { + var m BroadcastTxBody + + decoder := json.NewDecoder(r.Body) + err := decoder.Decode(&m) + if err != nil { + w.WriteHeader(400) + w.Write([]byte(err.Error())) + return + } + + res, err := client.BroadcastTx([]byte(m.TxBytes)) + if err != nil { + w.WriteHeader(500) + w.Write([]byte(err.Error())) + return + } + + w.Write([]byte(string(res.Height))) +} diff --git a/client/tx/tx.go b/client/tx/query.go similarity index 69% rename from client/tx/tx.go rename to client/tx/query.go index 7a8d061386..7c8c4d124f 100644 --- a/client/tx/tx.go +++ b/client/tx/query.go @@ -12,11 +12,9 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" abci "github.com/tendermint/abci/types" - keys "github.com/tendermint/go-crypto/keys" ctypes "github.com/tendermint/tendermint/rpc/core/types" "github.com/cosmos/cosmos-sdk/client" - keybase "github.com/cosmos/cosmos-sdk/client/keys" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" ) @@ -132,66 +130,3 @@ func QueryTxRequestHandler(cdc *wire.Codec) func(http.ResponseWriter, *http.Requ w.Write(output) } } - -// TODO refactor into different files show, sign, broadcast - -type SignTxBody struct { - Name string `json="name"` - Password string `json="password"` - TxBytes string `json="tx"` -} - -func SignTxRequstHandler(w http.ResponseWriter, r *http.Request) { - var kb keys.Keybase - var m SignTxBody - - decoder := json.NewDecoder(r.Body) - err := decoder.Decode(&m) - if err != nil { - w.WriteHeader(400) - w.Write([]byte(err.Error())) - return - } - - kb, err = keybase.GetKeyBase() - if err != nil { - w.WriteHeader(500) - w.Write([]byte(err.Error())) - return - } - - //TODO check if account exists - sig, _, err := kb.Sign(m.Name, m.Password, []byte(m.TxBytes)) - if err != nil { - w.WriteHeader(403) - w.Write([]byte(err.Error())) - return - } - - w.Write(sig.Bytes()) -} - -type BroadcastTxBody struct { - TxBytes string `json="tx"` -} - -func BroadcastTxRequestHandler(w http.ResponseWriter, r *http.Request) { - var m BroadcastTxBody - - decoder := json.NewDecoder(r.Body) - err := decoder.Decode(&m) - if err != nil { - w.WriteHeader(400) - w.Write([]byte(err.Error())) - return - } - - res, err := client.BroadcastTx([]byte(m.TxBytes)) - if err != nil { - w.WriteHeader(500) - w.Write([]byte(err.Error())) - return - } - - w.Write([]byte(string(res.Height))) -} diff --git a/client/tx/root.go b/client/tx/root.go index 829a35b19c..fd8b3f0975 100644 --- a/client/tx/root.go +++ b/client/tx/root.go @@ -1,6 +1,7 @@ package tx import ( + "github.com/gorilla/mux" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/wire" @@ -19,3 +20,10 @@ func AddCommands(cmd *cobra.Command, cdc *wire.Codec) { QueryTxCmd(cmdr), ) } + +func RegisterRoutes(r *mux.Router, cdc *wire.Codec) { + r.HandleFunc("/txs", SearchTxRequestHandler(cdc)).Methods("GET") + r.HandleFunc("/txs/{hash}", QueryTxRequestHandler(cdc)).Methods("GET") + r.HandleFunc("/txs/sign", SignTxRequstHandler).Methods("POST") + r.HandleFunc("/txs/broadcast", BroadcastTxRequestHandler).Methods("POST") +} diff --git a/client/tx/sign.go b/client/tx/sign.go new file mode 100644 index 0000000000..3a3fff4a0c --- /dev/null +++ b/client/tx/sign.go @@ -0,0 +1,45 @@ +package tx + +import ( + "encoding/json" + "net/http" + + keybase "github.com/cosmos/cosmos-sdk/client/keys" + keys "github.com/tendermint/go-crypto/keys" +) + +type SignTxBody struct { + Name string `json="name"` + Password string `json="password"` + TxBytes string `json="tx"` +} + +func SignTxRequstHandler(w http.ResponseWriter, r *http.Request) { + var kb keys.Keybase + var m SignTxBody + + decoder := json.NewDecoder(r.Body) + err := decoder.Decode(&m) + if err != nil { + w.WriteHeader(400) + w.Write([]byte(err.Error())) + return + } + + kb, err = keybase.GetKeyBase() + if err != nil { + w.WriteHeader(500) + w.Write([]byte(err.Error())) + return + } + + //TODO check if account exists + sig, _, err := kb.Sign(m.Name, m.Password, []byte(m.TxBytes)) + if err != nil { + w.WriteHeader(403) + w.Write([]byte(err.Error())) + return + } + + w.Write(sig.Bytes()) +}