/* package server provides http handlers to construct a server server for key management, transaction signing, and query validation. Please read the README and godoc to see how to configure the server for your application. */ package server import ( "encoding/json" "io/ioutil" "net/http" data "github.com/tendermint/go-data" "github.com/tendermint/go-crypto/keys/server/types" "github.com/pkg/errors" ) func readRequest(r *http.Request, o interface{}) error { defer r.Body.Close() data, err := ioutil.ReadAll(r.Body) if err != nil { return errors.Wrap(err, "Read Request") } err = json.Unmarshal(data, o) if err != nil { return errors.Wrap(err, "Parse") } return validate(o) } // most errors are bad input, so 406... do better.... func writeError(w http.ResponseWriter, err error) { // fmt.Printf("Error: %+v\n", err) res := types.ErrorResponse{ Code: 406, Error: err.Error(), } writeCode(w, &res, 406) } func writeCode(w http.ResponseWriter, o interface{}, code int) { // two space indent to make it easier to read data, err := data.ToJSON(o) if err != nil { writeError(w, err) } else { w.Header().Set("Content-Type", "application/json") w.WriteHeader(code) w.Write(data) } } func writeSuccess(w http.ResponseWriter, o interface{}) { writeCode(w, o, 200) }