X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/053aa7d83c25443f4e2a5d773615ccab242d4464..1e3eacb0ca6f2228f50f13514c7577a149a707e6:/lib/controller/router/response.go diff --git a/lib/controller/router/response.go b/lib/controller/router/response.go index 995fb01fff..543e25d0ce 100644 --- a/lib/controller/router/response.go +++ b/lib/controller/router/response.go @@ -12,8 +12,8 @@ import ( "strings" "time" - "git.curoverse.com/arvados.git/sdk/go/arvados" - "git.curoverse.com/arvados.git/sdk/go/httpserver" + "git.arvados.org/arvados.git/sdk/go/arvados" + "git.arvados.org/arvados.git/sdk/go/httpserver" ) const rfc3339NanoFixed = "2006-01-02T15:04:05.000000000Z07:00" @@ -45,16 +45,25 @@ func applySelectParam(selectParam []string, orig map[string]interface{}) map[str selected[attr] = v } } - // Preserve "kind" even if not requested - if v, ok := orig["kind"]; ok { - selected["kind"] = v + // Some keys are always preserved, even if not requested + for _, k := range []string{"etag", "kind", "writable_by"} { + if v, ok := orig[k]; ok { + selected[k] = v + } } return selected } -func (rtr *router) sendResponse(w http.ResponseWriter, resp interface{}, opts responseOptions) { +func (rtr *router) sendResponse(w http.ResponseWriter, req *http.Request, resp interface{}, opts responseOptions) { var tmp map[string]interface{} + if resp, ok := resp.(http.Handler); ok { + // resp knows how to write its own http response + // header and body. + resp.ServeHTTP(w, req) + return + } + err := rtr.transcode(resp, &tmp) if err != nil { rtr.sendError(w, err) @@ -120,7 +129,10 @@ func (rtr *router) sendResponse(w http.ResponseWriter, resp interface{}, opts re tmp[k] = t.Format(rfc3339NanoFixed) } } - json.NewEncoder(w).Encode(tmp) + w.Header().Set("Content-Type", "application/json") + enc := json.NewEncoder(w) + enc.SetEscapeHTML(false) + enc.Encode(tmp) } func (rtr *router) sendError(w http.ResponseWriter, err error) {