X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/231a86fd3f7e30e9f66d71d92ad7c26578637e37..ee908b109a95ea962425b435a8a317231829b115:/lib/controller/router/response.go diff --git a/lib/controller/router/response.go b/lib/controller/router/response.go index aa3af1f64c..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) @@ -121,7 +130,9 @@ func (rtr *router) sendResponse(w http.ResponseWriter, resp interface{}, opts re } } w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(tmp) + enc := json.NewEncoder(w) + enc.SetEscapeHTML(false) + enc.Encode(tmp) } func (rtr *router) sendError(w http.ResponseWriter, err error) {