From 41a40d360dd23a3bbd91029a3ba9141de4384dba Mon Sep 17 00:00:00 2001 From: Kane York Date: Sun, 3 Jan 2016 13:50:33 -0800 Subject: [PATCH] Fix backend error handling, maybe --- socketserver/server/backend.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/socketserver/server/backend.go b/socketserver/server/backend.go index eea73ead..5cad2f58 100644 --- a/socketserver/server/backend.go +++ b/socketserver/server/backend.go @@ -115,10 +115,13 @@ func HTTPBackendUncachedPublish(w http.ResponseWriter, r *http.Request) { } // ErrForwardedFromBackend is an error returned by the backend server. -type ErrForwardedFromBackend string +type ErrForwardedFromBackend struct { + JSONError interface{} +} func (bfe ErrForwardedFromBackend) Error() string { - return string(bfe) + bytes, _ := json.Marshal(bfe) + return string(bytes) } // ErrAuthorizationNeeded is emitted when the backend replies with HTTP 401. @@ -174,7 +177,12 @@ func SendRemoteCommand(remoteCommand, data string, auth AuthInfo) (responseStr s return "", ErrAuthorizationNeeded } else if resp.StatusCode != 200 { if resp.Header.Get("Content-Type") == "application/json" { - return "", ErrForwardedFromBackend(responseStr) + var err2 ErrForwardedFromBackend + err := json.Unmarshal(respBytes, &err2.JSONError) + if err != nil { + return "", fmt.Errorf("error decoding json error from backend: %v | %s", err, responseStr) + } + return "", err2 } return "", httpError(resp.StatusCode) }