| 
									
										
										
										
											2015-02-15 16:48:15 +08:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2015-07-25 08:51:40 +08:00
										 |  |  |  * Minio Cloud Storage, (C) 2015 Minio, Inc. | 
					
						
							| 
									
										
										
										
											2015-02-15 16:48:15 +08:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  |  * you may not use this file except in compliance with the License. | 
					
						
							|  |  |  |  * You may obtain a copy of the License at | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *     http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  |  * distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  |  * See the License for the specific language governing permissions and | 
					
						
							|  |  |  |  * limitations under the License. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-19 15:52:01 +08:00
										 |  |  | package main | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"encoding/xml" | 
					
						
							|  |  |  | 	"net/http" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-19 15:52:01 +08:00
										 |  |  | // APIError structure
 | 
					
						
							|  |  |  | type APIError struct { | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	Code           string | 
					
						
							|  |  |  | 	Description    string | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 	HTTPStatusCode int | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-19 15:52:01 +08:00
										 |  |  | // APIErrorResponse - error response format
 | 
					
						
							|  |  |  | type APIErrorResponse struct { | 
					
						
							| 
									
										
										
										
											2015-12-10 07:38:40 +08:00
										 |  |  | 	XMLName    xml.Name `xml:"Error" json:"-"` | 
					
						
							|  |  |  | 	Code       string | 
					
						
							|  |  |  | 	Message    string | 
					
						
							|  |  |  | 	Key        string | 
					
						
							|  |  |  | 	BucketName string | 
					
						
							|  |  |  | 	Resource   string | 
					
						
							|  |  |  | 	RequestID  string `xml:"RequestId"` | 
					
						
							|  |  |  | 	HostID     string `xml:"HostId"` | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-23 07:28:13 +08:00
										 |  |  | // Error codes, non exhaustive list - http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html
 | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | const ( | 
					
						
							|  |  |  | 	AccessDenied = iota | 
					
						
							|  |  |  | 	BadDigest | 
					
						
							|  |  |  | 	BucketAlreadyExists | 
					
						
							|  |  |  | 	EntityTooSmall | 
					
						
							|  |  |  | 	EntityTooLarge | 
					
						
							|  |  |  | 	IncompleteBody | 
					
						
							|  |  |  | 	InternalError | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 	InvalidAccessKeyID | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	InvalidBucketName | 
					
						
							|  |  |  | 	InvalidDigest | 
					
						
							|  |  |  | 	InvalidRange | 
					
						
							| 
									
										
										
										
											2015-04-27 18:54:49 +08:00
										 |  |  | 	InvalidRequest | 
					
						
							| 
									
										
										
										
											2015-07-17 08:22:45 +08:00
										 |  |  | 	InvalidMaxKeys | 
					
						
							|  |  |  | 	InvalidMaxUploads | 
					
						
							|  |  |  | 	InvalidMaxParts | 
					
						
							|  |  |  | 	InvalidPartNumberMarker | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	MalformedXML | 
					
						
							|  |  |  | 	MissingContentLength | 
					
						
							|  |  |  | 	MissingRequestBodyError | 
					
						
							|  |  |  | 	NoSuchBucket | 
					
						
							|  |  |  | 	NoSuchKey | 
					
						
							|  |  |  | 	NoSuchUpload | 
					
						
							|  |  |  | 	NotImplemented | 
					
						
							|  |  |  | 	RequestTimeTooSkewed | 
					
						
							|  |  |  | 	SignatureDoesNotMatch | 
					
						
							| 
									
										
										
										
											2015-04-27 18:54:49 +08:00
										 |  |  | 	MethodNotAllowed | 
					
						
							| 
									
										
										
										
											2015-05-08 13:43:19 +08:00
										 |  |  | 	InvalidPart | 
					
						
							| 
									
										
										
										
											2015-05-08 17:02:51 +08:00
										 |  |  | 	InvalidPartOrder | 
					
						
							| 
									
										
										
										
											2015-09-19 05:48:01 +08:00
										 |  |  | 	AuthorizationHeaderMalformed | 
					
						
							| 
									
										
										
										
											2015-10-02 14:51:17 +08:00
										 |  |  | 	MalformedPOSTRequest | 
					
						
							| 
									
										
										
										
											2015-12-10 07:38:40 +08:00
										 |  |  | 	SignatureVersionNotSupported | 
					
						
							| 
									
										
										
										
											2015-10-17 02:26:01 +08:00
										 |  |  | 	BucketNotEmpty | 
					
						
							| 
									
										
										
										
											2015-10-18 10:17:33 +08:00
										 |  |  | 	RootPathFull | 
					
						
							| 
									
										
										
										
											2015-04-23 07:28:13 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-19 15:52:01 +08:00
										 |  |  | // APIError code to Error structure map
 | 
					
						
							|  |  |  | var errorCodeResponse = map[int]APIError{ | 
					
						
							| 
									
										
										
										
											2015-07-17 08:22:45 +08:00
										 |  |  | 	InvalidMaxUploads: { | 
					
						
							|  |  |  | 		Code:           "InvalidArgument", | 
					
						
							| 
									
										
										
										
											2015-09-19 05:48:01 +08:00
										 |  |  | 		Description:    "Argument maxUploads must be an integer between 0 and 2147483647.", | 
					
						
							| 
									
										
										
										
											2015-07-17 08:22:45 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	InvalidMaxKeys: { | 
					
						
							|  |  |  | 		Code:           "InvalidArgument", | 
					
						
							| 
									
										
										
										
											2015-09-19 05:48:01 +08:00
										 |  |  | 		Description:    "Argument maxKeys must be an integer between 0 and 2147483647.", | 
					
						
							| 
									
										
										
										
											2015-07-17 08:22:45 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	InvalidMaxParts: { | 
					
						
							|  |  |  | 		Code:           "InvalidArgument", | 
					
						
							| 
									
										
										
										
											2015-09-19 05:48:01 +08:00
										 |  |  | 		Description:    "Argument maxParts must be an integer between 1 and 10000.", | 
					
						
							| 
									
										
										
										
											2015-07-17 08:22:45 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	InvalidPartNumberMarker: { | 
					
						
							|  |  |  | 		Code:           "InvalidArgument", | 
					
						
							| 
									
										
										
										
											2015-09-19 05:48:01 +08:00
										 |  |  | 		Description:    "Argument partNumberMarker must be an integer.", | 
					
						
							| 
									
										
										
										
											2015-07-17 08:22:45 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	AccessDenied: { | 
					
						
							|  |  |  | 		Code:           "AccessDenied", | 
					
						
							| 
									
										
										
										
											2015-09-19 05:48:01 +08:00
										 |  |  | 		Description:    "Access Denied.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusForbidden, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	BadDigest: { | 
					
						
							|  |  |  | 		Code:           "BadDigest", | 
					
						
							|  |  |  | 		Description:    "The Content-MD5 you specified did not match what we received.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	BucketAlreadyExists: { | 
					
						
							|  |  |  | 		Code:           "BucketAlreadyExists", | 
					
						
							|  |  |  | 		Description:    "The requested bucket name is not available.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusConflict, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	EntityTooSmall: { | 
					
						
							|  |  |  | 		Code:           "EntityTooSmall", | 
					
						
							|  |  |  | 		Description:    "Your proposed upload is smaller than the minimum allowed object size.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	EntityTooLarge: { | 
					
						
							|  |  |  | 		Code:           "EntityTooLarge", | 
					
						
							|  |  |  | 		Description:    "Your proposed upload exceeds the maximum allowed object size.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	IncompleteBody: { | 
					
						
							|  |  |  | 		Code:           "IncompleteBody", | 
					
						
							| 
									
										
										
										
											2015-09-19 05:48:01 +08:00
										 |  |  | 		Description:    "You did not provide the number of bytes specified by the Content-Length HTTP header.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	InternalError: { | 
					
						
							|  |  |  | 		Code:           "InternalError", | 
					
						
							|  |  |  | 		Description:    "We encountered an internal error, please try again.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusInternalServerError, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 	InvalidAccessKeyID: { | 
					
						
							|  |  |  | 		Code:           "InvalidAccessKeyID", | 
					
						
							|  |  |  | 		Description:    "The access key ID you provided does not exist in our records.", | 
					
						
							|  |  |  | 		HTTPStatusCode: http.StatusForbidden, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	InvalidBucketName: { | 
					
						
							|  |  |  | 		Code:           "InvalidBucketName", | 
					
						
							|  |  |  | 		Description:    "The specified bucket is not valid.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	InvalidDigest: { | 
					
						
							|  |  |  | 		Code:           "InvalidDigest", | 
					
						
							|  |  |  | 		Description:    "The Content-MD5 you specified is not valid.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	InvalidRange: { | 
					
						
							|  |  |  | 		Code:           "InvalidRange", | 
					
						
							|  |  |  | 		Description:    "The requested range cannot be satisfied.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusRequestedRangeNotSatisfiable, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	MalformedXML: { | 
					
						
							|  |  |  | 		Code:           "MalformedXML", | 
					
						
							|  |  |  | 		Description:    "The XML you provided was not well-formed or did not validate against our published schema.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	MissingContentLength: { | 
					
						
							|  |  |  | 		Code:           "MissingContentLength", | 
					
						
							|  |  |  | 		Description:    "You must provide the Content-Length HTTP header.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusLengthRequired, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	MissingRequestBodyError: { | 
					
						
							|  |  |  | 		Code:           "MissingRequestBodyError", | 
					
						
							|  |  |  | 		Description:    "Request body is empty.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusLengthRequired, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	NoSuchBucket: { | 
					
						
							|  |  |  | 		Code:           "NoSuchBucket", | 
					
						
							|  |  |  | 		Description:    "The specified bucket does not exist.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusNotFound, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	NoSuchKey: { | 
					
						
							|  |  |  | 		Code:           "NoSuchKey", | 
					
						
							|  |  |  | 		Description:    "The specified key does not exist.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusNotFound, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	NoSuchUpload: { | 
					
						
							|  |  |  | 		Code:           "NoSuchUpload", | 
					
						
							|  |  |  | 		Description:    "The specified multipart upload does not exist.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusNotFound, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	NotImplemented: { | 
					
						
							|  |  |  | 		Code:           "NotImplemented", | 
					
						
							|  |  |  | 		Description:    "A header you provided implies functionality that is not implemented.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusNotImplemented, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	RequestTimeTooSkewed: { | 
					
						
							|  |  |  | 		Code:           "RequestTimeTooSkewed", | 
					
						
							|  |  |  | 		Description:    "The difference between the request time and the server's time is too large.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusForbidden, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	SignatureDoesNotMatch: { | 
					
						
							|  |  |  | 		Code:           "SignatureDoesNotMatch", | 
					
						
							|  |  |  | 		Description:    "The request signature we calculated does not match the signature you provided.", | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusForbidden, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2015-04-27 18:54:49 +08:00
										 |  |  | 	MethodNotAllowed: { | 
					
						
							|  |  |  | 		Code:           "MethodNotAllowed", | 
					
						
							|  |  |  | 		Description:    "The specified method is not allowed against this resource.", | 
					
						
							|  |  |  | 		HTTPStatusCode: http.StatusMethodNotAllowed, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2015-05-08 13:43:19 +08:00
										 |  |  | 	InvalidPart: { | 
					
						
							|  |  |  | 		Code:           "InvalidPart", | 
					
						
							| 
									
										
										
										
											2015-09-19 05:48:01 +08:00
										 |  |  | 		Description:    "One or more of the specified parts could not be found.", | 
					
						
							| 
									
										
										
										
											2015-05-08 13:43:19 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2015-05-08 17:02:51 +08:00
										 |  |  | 	InvalidPartOrder: { | 
					
						
							|  |  |  | 		Code:           "InvalidPartOrder", | 
					
						
							|  |  |  | 		Description:    "The list of parts was not in ascending order. The parts list must be specified in order by part number.", | 
					
						
							|  |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2015-09-19 05:48:01 +08:00
										 |  |  | 	AuthorizationHeaderMalformed: { | 
					
						
							|  |  |  | 		Code:           "AuthorizationHeaderMalformed", | 
					
						
							| 
									
										
										
										
											2015-11-24 05:39:57 +08:00
										 |  |  | 		Description:    "The authorization header is malformed; the region is wrong; expecting 'us-east-1'.", | 
					
						
							| 
									
										
										
										
											2015-09-19 05:48:01 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2015-10-02 14:51:17 +08:00
										 |  |  | 	MalformedPOSTRequest: { | 
					
						
							|  |  |  | 		Code:           "MalformedPOSTRequest", | 
					
						
							|  |  |  | 		Description:    "The body of your POST request is not well-formed multipart/form-data.", | 
					
						
							|  |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							| 
									
										
										
										
											2015-12-10 07:38:40 +08:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 	SignatureVersionNotSupported: { | 
					
						
							|  |  |  | 		Code:           "InvalidRequest", | 
					
						
							|  |  |  | 		Description:    "The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.", | 
					
						
							|  |  |  | 		HTTPStatusCode: http.StatusBadRequest, | 
					
						
							| 
									
										
										
										
											2015-10-02 14:51:17 +08:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2015-10-17 02:26:01 +08:00
										 |  |  | 	BucketNotEmpty: { | 
					
						
							|  |  |  | 		Code:           "BucketNotEmpty", | 
					
						
							|  |  |  | 		Description:    "The bucket you tried to delete is not empty.", | 
					
						
							|  |  |  | 		HTTPStatusCode: http.StatusConflict, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2015-10-18 10:17:33 +08:00
										 |  |  | 	RootPathFull: { | 
					
						
							|  |  |  | 		Code:           "RootPathFull", | 
					
						
							| 
									
										
										
										
											2015-10-20 01:29:54 +08:00
										 |  |  | 		Description:    "Root path has reached its minimum free disk threshold. Please delete few objects to proceed.", | 
					
						
							| 
									
										
										
										
											2015-10-18 10:17:33 +08:00
										 |  |  | 		HTTPStatusCode: http.StatusInternalServerError, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 08:46:48 +08:00
										 |  |  | // errorCodeError provides errorCode to Error. It returns empty if the code provided is unknown
 | 
					
						
							| 
									
										
										
										
											2015-09-19 15:52:01 +08:00
										 |  |  | func getErrorCode(code int) APIError { | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	return errorCodeResponse[code] | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 08:46:48 +08:00
										 |  |  | // getErrorResponse gets in standard error and resource value and
 | 
					
						
							|  |  |  | // provides a encodable populated response values
 | 
					
						
							| 
									
										
										
										
											2015-09-19 15:52:01 +08:00
										 |  |  | func getErrorResponse(err APIError, resource string) APIErrorResponse { | 
					
						
							|  |  |  | 	var data = APIErrorResponse{} | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	data.Code = err.Code | 
					
						
							|  |  |  | 	data.Message = err.Description | 
					
						
							| 
									
										
										
										
											2015-02-12 14:00:45 +08:00
										 |  |  | 	if resource != "" { | 
					
						
							|  |  |  | 		data.Resource = resource | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 	// TODO implement this in future
 | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 	data.RequestID = "3L137" | 
					
						
							|  |  |  | 	data.HostID = "3L137" | 
					
						
							| 
									
										
										
										
											2015-02-11 19:23:15 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return data | 
					
						
							|  |  |  | } |