From 310e31424e37c16dd73d911e79f31159d1b367a3 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 10 Jun 2021 21:55:13 -0700 Subject: [PATCH] adjust the error output fix https://github.com/chrislusf/seaweedfs/issues/2123 --- weed/s3api/s3err/error_handler.go | 23 +++++++++++++++++------ weed/s3api/s3err/s3api_errors.go | 12 +++++++----- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/weed/s3api/s3err/error_handler.go b/weed/s3api/s3err/error_handler.go index f176d4b6c..09b83065f 100644 --- a/weed/s3api/s3err/error_handler.go +++ b/weed/s3api/s3err/error_handler.go @@ -5,8 +5,10 @@ import ( "encoding/xml" "fmt" "github.com/chrislusf/seaweedfs/weed/glog" + "github.com/gorilla/mux" "net/http" "strconv" + "strings" "time" ) @@ -26,18 +28,27 @@ func WriteEmptyResponse(w http.ResponseWriter, statusCode int) { } func WriteErrorResponse(w http.ResponseWriter, errorCode ErrorCode, r *http.Request) { + vars := mux.Vars(r) + bucket := vars["bucket"] + object := vars["object"] + if !strings.HasPrefix(object, "/") { + object = "/" + object + } + apiError := GetAPIError(errorCode) - errorResponse := getRESTErrorResponse(apiError, r.URL.Path) + errorResponse := getRESTErrorResponse(apiError, r.URL.Path, bucket, object) encodedErrorResponse := EncodeXMLResponse(errorResponse) WriteResponse(w, apiError.HTTPStatusCode, encodedErrorResponse, MimeXML) } -func getRESTErrorResponse(err APIError, resource string) RESTErrorResponse { +func getRESTErrorResponse(err APIError, resource string, bucket, object string) RESTErrorResponse { return RESTErrorResponse{ - Code: err.Code, - Message: err.Description, - Resource: resource, - RequestID: fmt.Sprintf("%d", time.Now().UnixNano()), + Code: err.Code, + BucketName: bucket, + Key: object[1:], + Message: err.Description, + Resource: resource, + RequestID: fmt.Sprintf("%d", time.Now().UnixNano()), } } diff --git a/weed/s3api/s3err/s3api_errors.go b/weed/s3api/s3err/s3api_errors.go index 7f0ffdf86..a46bd0f04 100644 --- a/weed/s3api/s3err/s3api_errors.go +++ b/weed/s3api/s3err/s3api_errors.go @@ -15,11 +15,13 @@ type APIError struct { // RESTErrorResponse - error response format type RESTErrorResponse struct { - XMLName xml.Name `xml:"Error" json:"-"` - Code string `xml:"Code" json:"Code"` - Message string `xml:"Message" json:"Message"` - Resource string `xml:"Resource" json:"Resource"` - RequestID string `xml:"RequestId" json:"RequestId"` + XMLName xml.Name `xml:"Error" json:"-"` + Code string `xml:"Code" json:"Code"` + Message string `xml:"Message" json:"Message"` + Resource string `xml:"Resource" json:"Resource"` + RequestID string `xml:"RequestId" json:"RequestId"` + Key string `xml:"Key,omitempty" json:"Key,omitempty"` + BucketName string `xml:"BucketName,omitempty" json:"BucketName,omitempty"` // Underlying HTTP status code for the returned error StatusCode int `xml:"-" json:"-"`