// error code to Error structure, these fields carry respective
// descriptions for all the error responses.
varerrorCodes=errorCodeMap{
ErrInvalidCopyDest:{
ErrCode:ErrInvalidCopyDest,
Code:"InvalidRequest",
Description:"This copy request is illegal because it is trying to copy an object to itself without changing the object's metadata, storage class, website redirect location or encryption attributes.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidCopySource:{
ErrCode:ErrInvalidCopySource,
Code:"InvalidArgument",
Description:"Copy Source must mention the source bucket and key: sourcebucket/sourcekey.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidMetadataDirective:{
ErrCode:ErrInvalidMetadataDirective,
Code:"InvalidArgument",
Description:"Unknown metadata directive.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidStorageClass:{
ErrCode:ErrInvalidStorageClass,
Code:"InvalidStorageClass",
Description:"Invalid storage class.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidRequestBody:{
ErrCode:ErrInvalidRequestBody,
Code:"InvalidArgument",
Description:"Body shouldn't be set for this request.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidMaxUploads:{
ErrCode:ErrInvalidMaxUploads,
Code:"InvalidArgument",
Description:"Argument max-uploads must be an integer between 0 and 2147483647",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidMaxKeys:{
ErrCode:ErrInvalidMaxKeys,
Code:"InvalidArgument",
Description:"Argument maxKeys must be an integer between 0 and 2147483647",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidEncodingMethod:{
ErrCode:ErrInvalidEncodingMethod,
Code:"InvalidArgument",
Description:"Invalid Encoding Method specified in Request",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidMaxParts:{
ErrCode:ErrInvalidMaxParts,
Code:"InvalidArgument",
Description:"Argument max-parts must be an integer between 0 and 2147483647",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidPartNumberMarker:{
ErrCode:ErrInvalidPartNumberMarker,
Code:"InvalidArgument",
Description:"Argument partNumberMarker must be an integer.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidPolicyDocument:{
ErrCode:ErrInvalidPolicyDocument,
Code:"InvalidPolicyDocument",
Description:"The content of the form does not meet the conditions specified in the policy document.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrAccessDenied:{
ErrCode:ErrAccessDenied,
Code:"AccessDenied",
Description:"Access Denied.",
HTTPStatusCode:http.StatusForbidden,
},
ErrBadDigest:{
ErrCode:ErrBadDigest,
Code:"BadDigest",
Description:"The Content-Md5 you specified did not match what we received.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrEntityTooSmall:{
ErrCode:ErrEntityTooSmall,
Code:"EntityTooSmall",
Description:"Your proposed upload is smaller than the minimum allowed object size.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrEntityTooLarge:{
ErrCode:ErrEntityTooLarge,
Code:"EntityTooLarge",
Description:"Your proposed upload exceeds the maximum allowed object size.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrPolicyTooLarge:{
ErrCode:ErrPolicyTooLarge,
Code:"PolicyTooLarge",
Description:"Policy exceeds the maximum allowed document size.",
Description:"The server side encryption configuration was not found",
HTTPStatusCode:http.StatusNotFound,
},
ErrNoSuchKey:{
ErrCode:ErrNoSuchKey,
Code:"NoSuchKey",
Description:"The specified key does not exist.",
HTTPStatusCode:http.StatusNotFound,
},
ErrNoSuchUpload:{
ErrCode:ErrNoSuchUpload,
Code:"NoSuchUpload",
Description:"The specified multipart upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed.",
HTTPStatusCode:http.StatusNotFound,
},
ErrNoSuchVersion:{
ErrCode:ErrNoSuchVersion,
Code:"NoSuchVersion",
Description:"Indicates that the version ID specified in the request does not match an existing version.",
HTTPStatusCode:http.StatusNotFound,
},
ErrInvalidVersion:{
ErrCode:ErrInvalidVersion,
Code:"InvalidArgument",
Description:"Invalid version id specified",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidArgument:{
ErrCode:ErrInvalidArgument,
Code:"InvalidArgument",
Description:"The specified argument was invalid",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidTagKey:{
ErrCode:ErrInvalidTagKey,
Code:"InvalidTag",
Description:"The TagValue you have provided is invalid",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidTagValue:{
ErrCode:ErrInvalidTagValue,
Code:"InvalidTag",
Description:"The TagKey you have provided is invalid",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidTagsSizeExceed:{
ErrCode:ErrInvalidTagsSizeExceed,
Code:"BadRequest",
Description:"Object tags cannot be greater than 10",
HTTPStatusCode:http.StatusBadRequest,
},
ErrNotImplemented:{
ErrCode:ErrNotImplemented,
Code:"NotImplemented",
Description:"A header you provided implies functionality that is not implemented",
HTTPStatusCode:http.StatusNotImplemented,
},
ErrPreconditionFailed:{
ErrCode:ErrPreconditionFailed,
Code:"PreconditionFailed",
Description:"At least one of the pre-conditions you specified did not hold",
HTTPStatusCode:http.StatusPreconditionFailed,
},
ErrNotModified:{
ErrCode:ErrNotModified,
Code:"NotModified",
Description:"The resource was not changed.",
HTTPStatusCode:http.StatusNotModified,
},
ErrRequestTimeTooSkewed:{
ErrCode:ErrRequestTimeTooSkewed,
Code:"RequestTimeTooSkewed",
Description:"The difference between the request time and the server's time is too large.",
HTTPStatusCode:http.StatusForbidden,
},
ErrSignatureDoesNotMatch:{
ErrCode:ErrSignatureDoesNotMatch,
Code:"SignatureDoesNotMatch",
Description:"The request signature we calculated does not match the signature you provided. Check your key and signing method.",
HTTPStatusCode:http.StatusForbidden,
},
ErrMethodNotAllowed:{
ErrCode:ErrMethodNotAllowed,
Code:"MethodNotAllowed",
Description:"The specified method is not allowed against this resource.",
HTTPStatusCode:http.StatusMethodNotAllowed,
},
ErrInvalidPart:{
ErrCode:ErrInvalidPart,
Code:"InvalidPart",
Description:"One or more of the specified parts could not be found. The part may not have been uploaded, or the specified entity tag may not match the part's entity tag.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidPartOrder:{
ErrCode:ErrInvalidPartOrder,
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,
},
ErrInvalidObjectState:{
ErrCode:ErrInvalidObjectState,
Code:"InvalidObjectState",
Description:"The operation is not valid for the current state of the object.",
HTTPStatusCode:http.StatusForbidden,
},
ErrAuthorizationHeaderMalformed:{
ErrCode:ErrAuthorizationHeaderMalformed,
Code:"AuthorizationHeaderMalformed",
Description:"The authorization header is malformed; the region is wrong; expecting 'us-east-1'.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrMalformedPOSTRequest:{
ErrCode:ErrMalformedPOSTRequest,
Code:"MalformedPOSTRequest",
Description:"The body of your POST request is not well-formed multipart/form-data.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrPOSTFileRequired:{
ErrCode:ErrPOSTFileRequired,
Code:"InvalidArgument",
Description:"POST requires exactly one file upload per request.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrSignatureVersionNotSupported:{
ErrCode:ErrSignatureVersionNotSupported,
Code:"InvalidRequest",
Description:"The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrBucketNotEmpty:{
ErrCode:ErrBucketNotEmpty,
Code:"BucketNotEmpty",
Description:"The bucket you tried to delete is not empty",
HTTPStatusCode:http.StatusConflict,
},
ErrBucketAlreadyExists:{
ErrCode:ErrBucketAlreadyExists,
Code:"BucketAlreadyExists",
Description:"The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.",
HTTPStatusCode:http.StatusConflict,
},
ErrAllAccessDisabled:{
ErrCode:ErrAllAccessDisabled,
Code:"AllAccessDisabled",
Description:"All access to this bucket has been disabled.",
HTTPStatusCode:http.StatusForbidden,
},
ErrMalformedPolicy:{
ErrCode:ErrMalformedPolicy,
Code:"MalformedPolicy",
Description:"Policy has invalid resource.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrMissingFields:{
ErrCode:ErrMissingFields,
Code:"MissingFields",
Description:"Missing fields in request.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrMissingCredTag:{
ErrCode:ErrMissingCredTag,
Code:"InvalidRequest",
Description:"Missing Credential field for this request.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrCredMalformed:{
ErrCode:ErrCredMalformed,
Code:"AuthorizationQueryParametersError",
Description:"Error parsing the X-Amz-Credential parameter; the Credential is mal-formed; expecting \"<YOUR-AKID>/YYYYMMDD/REGION/SERVICE/aws4_request\".",
HTTPStatusCode:http.StatusBadRequest,
},
ErrMalformedDate:{
ErrCode:ErrMalformedDate,
Code:"MalformedDate",
Description:"Invalid date format header, expected to be in ISO8601, RFC1123 or RFC1123Z time format.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrMalformedPresignedDate:{
ErrCode:ErrMalformedPresignedDate,
Code:"AuthorizationQueryParametersError",
Description:"X-Amz-Date must be in the ISO8601 Long Format \"yyyyMMdd'T'HHmmss'Z'\"",
HTTPStatusCode:http.StatusBadRequest,
},
// FIXME: Should contain the invalid param set as seen in https://github.com/minio/minio/issues/2385.
// right Description: "Error parsing the X-Amz-Credential parameter; incorrect date format \"%s\". This date in the credential must be in the format \"yyyyMMdd\".",
// Need changes to make sure variable messages can be constructed.
ErrMalformedCredentialDate:{
ErrCode:ErrMalformedCredentialDate,
Code:"AuthorizationQueryParametersError",
Description:"Error parsing the X-Amz-Credential parameter; incorrect date format \"%s\". This date in the credential must be in the format \"yyyyMMdd\".",
HTTPStatusCode:http.StatusBadRequest,
},
// FIXME: Should contain the invalid param set as seen in https://github.com/minio/minio/issues/2385.
// right Description: "Error parsing the X-Amz-Credential parameter; the region 'us-east-' is wrong; expecting 'us-east-1'".
// Need changes to make sure variable messages can be constructed.
ErrMalformedCredentialRegion:{
ErrCode:ErrMalformedCredentialRegion,
Code:"AuthorizationQueryParametersError",
Description:"Error parsing the X-Amz-Credential parameter; the region is wrong;",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidRegion:{
ErrCode:ErrInvalidRegion,
Code:"InvalidRegion",
Description:"Region does not match.",
HTTPStatusCode:http.StatusBadRequest,
},
// FIXME: Should contain the invalid param set as seen in https://github.com/minio/minio/issues/2385.
// right Description: "Error parsing the X-Amz-Credential parameter; incorrect service \"s4\". This endpoint belongs to \"s3\".".
// Need changes to make sure variable messages can be constructed.
ErrInvalidServiceS3:{
ErrCode:ErrInvalidServiceS3,
Code:"AuthorizationParametersError",
Description:"Error parsing the Credential/X-Amz-Credential parameter; incorrect service. This endpoint belongs to \"s3\".",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidServiceSTS:{
ErrCode:ErrInvalidServiceSTS,
Code:"AuthorizationParametersError",
Description:"Error parsing the Credential parameter; incorrect service. This endpoint belongs to \"sts\".",
HTTPStatusCode:http.StatusBadRequest,
},
// FIXME: Should contain the invalid param set as seen in https://github.com/minio/minio/issues/2385.
// Description: "Error parsing the X-Amz-Credential parameter; incorrect terminal "aws4_reque". This endpoint uses "aws4_request".
// Need changes to make sure variable messages can be constructed.
ErrInvalidRequestVersion:{
ErrCode:ErrInvalidRequestVersion,
Code:"AuthorizationQueryParametersError",
Description:"Error parsing the X-Amz-Credential parameter; incorrect terminal. This endpoint uses \"aws4_request\".",
Description:"Authorization header is invalid -- one and only one ' ' (space) required.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrMissingDateHeader:{
ErrCode:ErrMissingDateHeader,
Code:"AccessDenied",
Description:"AWS authentication requires a valid Date or x-amz-date header",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidQuerySignatureAlgo:{
ErrCode:ErrInvalidQuerySignatureAlgo,
Code:"AuthorizationQueryParametersError",
Description:"X-Amz-Algorithm only supports \"AWS4-HMAC-SHA256\".",
HTTPStatusCode:http.StatusBadRequest,
},
ErrExpiredPresignRequest:{
ErrCode:ErrExpiredPresignRequest,
Code:"AccessDenied",
Description:"Request has expired",
HTTPStatusCode:http.StatusForbidden,
},
ErrRequestNotReadyYet:{
ErrCode:ErrRequestNotReadyYet,
Code:"AccessDenied",
Description:"Request is not valid yet",
HTTPStatusCode:http.StatusForbidden,
},
ErrSlowDown:{
ErrCode:ErrSlowDown,
Code:"SlowDown",
Description:"Please reduce your request",
HTTPStatusCode:http.StatusServiceUnavailable,
},
ErrInvalidPrefixMarker:{
ErrCode:ErrInvalidPrefixMarker,
Code:"InvalidPrefixMarker",
Description:"Invalid marker prefix combination",
HTTPStatusCode:http.StatusBadRequest,
},
ErrBadRequest:{
ErrCode:ErrBadRequest,
Code:"BadRequest",
Description:"400 BadRequest",
HTTPStatusCode:http.StatusBadRequest,
},
ErrKeyTooLongError:{
ErrCode:ErrKeyTooLongError,
Code:"KeyTooLongError",
Description:"Your key is too long",
HTTPStatusCode:http.StatusBadRequest,
},
// FIXME: Actual XML error response also contains the header which missed in list of signed header parameters.
ErrUnsignedHeaders:{
ErrCode:ErrUnsignedHeaders,
Code:"AccessDenied",
Description:"There were headers present in the request which were not signed",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidQueryParams:{
ErrCode:ErrInvalidQueryParams,
Code:"AuthorizationQueryParametersError",
Description:"Query-string authentication version 4 requires the X-Amz-Algorithm, X-Amz-Credential, X-Amz-Signature, X-Amz-Date, X-Amz-SignedHeaders, and X-Amz-Expires parameters.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrBucketAlreadyOwnedByYou:{
ErrCode:ErrBucketAlreadyOwnedByYou,
Code:"BucketAlreadyOwnedByYou",
Description:"Your previous request to create the named bucket succeeded and you already own it.",
HTTPStatusCode:http.StatusConflict,
},
ErrInvalidDuration:{
ErrCode:ErrInvalidDuration,
Code:"InvalidDuration",
Description:"Duration provided in the request is invalid.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidBucketObjectLockConfiguration:{
ErrCode:ErrInvalidBucketObjectLockConfiguration,
Code:"InvalidRequest",
Description:"Bucket is missing ObjectLockConfiguration",
HTTPStatusCode:http.StatusBadRequest,
},
ErrBucketTaggingNotFound:{
ErrCode:ErrBucketTaggingNotFound,
Code:"NoSuchTagSet",
Description:"The TagSet does not exist",
HTTPStatusCode:http.StatusNotFound,
},
ErrObjectLockConfigurationNotFound:{
ErrCode:ErrObjectLockConfigurationNotFound,
Code:"ObjectLockConfigurationNotFoundError",
Description:"Object Lock configuration does not exist for this bucket",
HTTPStatusCode:http.StatusNotFound,
},
ErrObjectLockConfigurationNotAllowed:{
ErrCode:ErrObjectLockConfigurationNotAllowed,
Code:"InvalidBucketState",
Description:"Object Lock configuration cannot be enabled on existing buckets",
HTTPStatusCode:http.StatusConflict,
},
ErrNoSuchCORSConfiguration:{
ErrCode:ErrNoSuchCORSConfiguration,
Code:"NoSuchCORSConfiguration",
Description:"The CORS configuration does not exist",
HTTPStatusCode:http.StatusNotFound,
},
ErrNoSuchWebsiteConfiguration:{
ErrCode:ErrNoSuchWebsiteConfiguration,
Code:"NoSuchWebsiteConfiguration",
Description:"The specified bucket does not have a website configuration",
HTTPStatusCode:http.StatusNotFound,
},
ErrReplicationConfigurationNotFoundError:{
ErrCode:ErrReplicationConfigurationNotFoundError,
Code:"ReplicationConfigurationNotFoundError",
Description:"The replication configuration was not found",
HTTPStatusCode:http.StatusNotFound,
},
ErrNoSuchObjectLockConfiguration:{
ErrCode:ErrNoSuchObjectLockConfiguration,
Code:"NoSuchObjectLockConfiguration",
Description:"The specified object does not have a ObjectLock configuration",
HTTPStatusCode:http.StatusBadRequest,
},
ErrObjectLocked:{
ErrCode:ErrObjectLocked,
Code:"InvalidRequest",
Description:"Object is WORM protected and cannot be overwritten",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidRetentionDate:{
ErrCode:ErrInvalidRetentionDate,
Code:"InvalidRequest",
Description:"Date must be provided in ISO 8601 format",
HTTPStatusCode:http.StatusBadRequest,
},
ErrPastObjectLockRetainDate:{
ErrCode:ErrPastObjectLockRetainDate,
Code:"InvalidRequest",
Description:"the retain until date must be in the future",
HTTPStatusCode:http.StatusBadRequest,
},
ErrUnknownWORMModeDirective:{
ErrCode:ErrUnknownWORMModeDirective,
Code:"InvalidRequest",
Description:"unknown wormMode directive",
HTTPStatusCode:http.StatusBadRequest,
},
ErrObjectLockInvalidHeaders:{
ErrCode:ErrObjectLockInvalidHeaders,
Code:"InvalidRequest",
Description:"x-amz-object-lock-retain-until-date and x-amz-object-lock-mode must both be supplied",
HTTPStatusCode:http.StatusBadRequest,
},
// Bucket notification related errors.
ErrEventNotification:{
ErrCode:ErrEventNotification,
Code:"InvalidArgument",
Description:"A specified event is not supported for notifications.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrARNNotification:{
ErrCode:ErrARNNotification,
Code:"InvalidArgument",
Description:"A specified destination ARN does not exist or is not well-formed. Verify the destination ARN.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrRegionNotification:{
ErrCode:ErrRegionNotification,
Code:"InvalidArgument",
Description:"A specified destination is in a different region than the bucket. You must use a destination that resides in the same region as the bucket.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrOverlappingFilterNotification:{
ErrCode:ErrOverlappingFilterNotification,
Code:"InvalidArgument",
Description:"An object key name filtering rule defined with overlapping prefixes, overlapping suffixes, or overlapping combinations of prefixes and suffixes for the same event types.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrFilterNameInvalid:{
ErrCode:ErrFilterNameInvalid,
Code:"InvalidArgument",
Description:"filter rule name must be either prefix or suffix",
HTTPStatusCode:http.StatusBadRequest,
},
ErrFilterNamePrefix:{
ErrCode:ErrFilterNamePrefix,
Code:"InvalidArgument",
Description:"Cannot specify more than one prefix rule in a filter.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrFilterNameSuffix:{
ErrCode:ErrFilterNameSuffix,
Code:"InvalidArgument",
Description:"Cannot specify more than one suffix rule in a filter.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrFilterValueInvalid:{
ErrCode:ErrFilterValueInvalid,
Code:"InvalidArgument",
Description:"Size of filter rule value cannot exceed 1024 bytes in UTF-8 representation",
HTTPStatusCode:http.StatusBadRequest,
},
ErrOverlappingConfigs:{
ErrCode:ErrOverlappingConfigs,
Code:"InvalidArgument",
Description:"Configurations overlap. Configurations on the same bucket cannot share a common event type.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrUnsupportedNotification:{
ErrCode:ErrUnsupportedNotification,
Code:"UnsupportedNotification",
Description:"MinIO server does not support Topic or Cloud Function based notifications.",
HTTPStatusCode:http.StatusBadRequest,
},
ErrInvalidCopyPartRange:{
ErrCode:ErrInvalidCopyPartRange,
Code:"InvalidArgument",
Description:"The x-amz-copy-source-range value must be of the form bytes=first-last where first and last are the zero-based offsets of the first and last bytes to copy",