From bce1c5650980b00a421b46816f07a9f63722d469 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Tue, 18 Feb 2020 18:32:49 +0100 Subject: [PATCH] Always permit CORS on the rest server --- client/lcd/root.go | 14 ++++++++++++-- go.mod | 1 + go.sum | 2 ++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/client/lcd/root.go b/client/lcd/root.go index af0e74b48557..4b0e68055617 100644 --- a/client/lcd/root.go +++ b/client/lcd/root.go @@ -7,6 +7,7 @@ import ( "os" "time" + "github.com/gorilla/handlers" "github.com/gorilla/mux" "github.com/rakyll/statik/fs" "github.com/spf13/cobra" @@ -23,6 +24,8 @@ import ( _ "github.com/cosmos/cosmos-sdk/client/lcd/statik" ) +const FlagAllowCORS = "cors" + // RestServer represents the Light Client Rest server type RestServer struct { Mux *mux.Router @@ -46,7 +49,7 @@ func NewRestServer(cdc *codec.Codec) *RestServer { } // Start starts the rest server -func (rs *RestServer) Start(listenAddr string, maxOpen int, readTimeout, writeTimeout uint) (err error) { +func (rs *RestServer) Start(listenAddr string, maxOpen int, readTimeout, writeTimeout uint, cors bool) (err error) { server.TrapSignal(func() { err := rs.listener.Close() rs.log.Error("error closing listener", "err", err) @@ -68,7 +71,12 @@ func (rs *RestServer) Start(listenAddr string, maxOpen int, readTimeout, writeTi ), ) - return rpcserver.StartHTTPServer(rs.listener, rs.Mux, rs.log, cfg) + var h http.Handler = rs.Mux + if cors { + h = handlers.CORS()(h) + } + + return rpcserver.StartHTTPServer(rs.listener, h, rs.log, cfg) } // ServeCommand will start the application REST service as a blocking process. It @@ -90,12 +98,14 @@ func ServeCommand(cdc *codec.Codec, registerRoutesFn func(*RestServer)) *cobra.C viper.GetInt(flags.FlagMaxOpenConnections), uint(viper.GetInt(flags.FlagRPCReadTimeout)), uint(viper.GetInt(flags.FlagRPCWriteTimeout)), + viper.GetBool(FlagAllowCORS), ) return err }, } + cmd.Flags().Bool(FlagAllowCORS, false, "Allows CORS requests from all domains") return flags.RegisterRestServerFlags(cmd) } diff --git a/go.mod b/go.mod index 612c513549fc..6f872ea0089a 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/cosmos/ledger-cosmos-go v0.11.1 github.com/gogo/protobuf v1.3.1 github.com/golang/mock v1.3.1-0.20190508161146-9fa652df1129 + github.com/gorilla/handlers v1.4.2 github.com/gorilla/mux v1.7.3 github.com/hashicorp/golang-lru v0.5.4 github.com/mattn/go-isatty v0.0.12 diff --git a/go.sum b/go.sum index 4fd5999711d2..d28c8f06dbc7 100644 --- a/go.sum +++ b/go.sum @@ -113,6 +113,8 @@ github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=