From 4faccebcdd7872eca76b183951a2850518d35916 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Sun, 23 Nov 2014 02:09:11 -0500 Subject: [PATCH] 3781: Add allowed headers. Respond to OPTIONS at any path. --- services/keepproxy/keepproxy.go | 18 +++++++++++------- services/keepproxy/keepproxy_test.go | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/services/keepproxy/keepproxy.go b/services/keepproxy/keepproxy.go index 620434f4de..e547efd2b5 100644 --- a/services/keepproxy/keepproxy.go +++ b/services/keepproxy/keepproxy.go @@ -248,7 +248,7 @@ func MakeRESTRouter( rest.Handle(`/{hash:[0-9a-f]{32}}+{hints}`, PutBlockHandler{kc, t}).Methods("PUT") rest.Handle(`/{hash:[0-9a-f]{32}}`, PutBlockHandler{kc, t}).Methods("PUT") rest.Handle(`/`, PutBlockHandler{kc, t}).Methods("POST") - rest.Handle(`/{hash:[0-9a-f]{32}}{ignore}`, OptionsHandler{}).Methods("OPTIONS") + rest.Handle(`/`, OptionsHandler{}).Methods("OPTIONS") } rest.NotFoundHandler = InvalidPathHandler{} @@ -256,6 +256,13 @@ func MakeRESTRouter( return rest } +func SetCorsHeaders(resp http.ResponseWriter) { + resp.Header().Set("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, OPTIONS") + resp.Header().Set("Access-Control-Allow-Origin", "*") + resp.Header().Set("Access-Control-Allow-Headers", "Authorization, Content-Length, Content-Type, X-Keep-Desired-Replicas") + resp.Header().Set("Access-Control-Max-Age", "86486400") +} + func (this InvalidPathHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) { log.Printf("%s: %s %s unroutable", GetRemoteAddress(req), req.Method, req.URL.Path) http.Error(resp, "Bad request", http.StatusBadRequest) @@ -263,15 +270,11 @@ func (this InvalidPathHandler) ServeHTTP(resp http.ResponseWriter, req *http.Req func (this OptionsHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) { log.Printf("%s: %s %s", GetRemoteAddress(req), req.Method, req.URL.Path) - resp.Header().Set("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, OPTIONS") - resp.Header().Set("Access-Control-Allow-Origin", "*") - resp.Header().Set("Access-Control-Allow-Headers", "Authorization, X-Keep-Desired-Replicas") - resp.Header().Set("Access-Control-Max-Age", "86486400") + SetCorsHeaders(resp) } func (this GetBlockHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) { - resp.Header().Set("Access-Control-Allow-Origin", "*") - resp.Header().Set("Access-Control-Allow-Headers", "Authorization") + SetCorsHeaders(resp) kc := *this.KeepClient @@ -335,6 +338,7 @@ func (this GetBlockHandler) ServeHTTP(resp http.ResponseWriter, req *http.Reques } func (this PutBlockHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) { + SetCorsHeaders(resp) kc := *this.KeepClient diff --git a/services/keepproxy/keepproxy_test.go b/services/keepproxy/keepproxy_test.go index 667a0b20a6..0ac843f325 100644 --- a/services/keepproxy/keepproxy_test.go +++ b/services/keepproxy/keepproxy_test.go @@ -349,7 +349,7 @@ func (s *ServerRequiredSuite) TestCorsHeaders(c *C) { fmt.Sprintf("http://localhost:29954/%x+3", md5.Sum([]byte("foo")))) c.Check(err, Equals, nil) - c.Check(resp.Header.Get("Access-Control-Allow-Headers"), Equals, "Authorization") + c.Check(resp.Header.Get("Access-Control-Allow-Headers"), Equals, "Authorization, Content-Length, Content-Type, X-Keep-Desired-Replicas") c.Check(resp.Header.Get("Access-Control-Allow-Origin"), Equals, "*") } } -- 2.39.5