Merge pull request #501 from fkautz/pr_out_exporting_writeerrorresponse

This commit is contained in:
Frederick F. Kautz IV 2015-04-26 16:30:45 -07:00
commit c29677b245
4 changed files with 34 additions and 33 deletions

View File

@ -33,12 +33,12 @@ func (server *minioAPI) isValidOp(w http.ResponseWriter, req *http.Request, acce
switch iodine.ToError(err).(type) { switch iodine.ToError(err).(type) {
case drivers.BucketNotFound: case drivers.BucketNotFound:
{ {
writeErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NoSuchBucket, acceptsContentType, req.URL.Path)
return false return false
} }
case drivers.BucketNameInvalid: case drivers.BucketNameInvalid:
{ {
writeErrorResponse(w, req, InvalidBucketName, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, InvalidBucketName, acceptsContentType, req.URL.Path)
return false return false
} }
case nil: case nil:
@ -68,7 +68,7 @@ func (server *minioAPI) isValidOp(w http.ResponseWriter, req *http.Request, acce
func (server *minioAPI) listObjectsHandler(w http.ResponseWriter, req *http.Request) { func (server *minioAPI) listObjectsHandler(w http.ResponseWriter, req *http.Request) {
acceptsContentType := getContentType(req) acceptsContentType := getContentType(req)
if acceptsContentType == unknownContentType { if acceptsContentType == unknownContentType {
writeErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path)
return return
} }
// verify if bucket allows this operation // verify if bucket allows this operation
@ -98,16 +98,16 @@ func (server *minioAPI) listObjectsHandler(w http.ResponseWriter, req *http.Requ
} }
case drivers.ObjectNotFound: case drivers.ObjectNotFound:
{ {
writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path)
} }
case drivers.ObjectNameInvalid: case drivers.ObjectNameInvalid:
{ {
writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path)
} }
default: default:
{ {
log.Error.Println(iodine.New(err, nil)) log.Error.Println(iodine.New(err, nil))
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
} }
} }
} }
@ -119,7 +119,7 @@ func (server *minioAPI) listObjectsHandler(w http.ResponseWriter, req *http.Requ
func (server *minioAPI) listBucketsHandler(w http.ResponseWriter, req *http.Request) { func (server *minioAPI) listBucketsHandler(w http.ResponseWriter, req *http.Request) {
acceptsContentType := getContentType(req) acceptsContentType := getContentType(req)
if acceptsContentType == unknownContentType { if acceptsContentType == unknownContentType {
writeErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path)
return return
} }
@ -139,7 +139,7 @@ func (server *minioAPI) listBucketsHandler(w http.ResponseWriter, req *http.Requ
default: default:
{ {
log.Error.Println(iodine.New(err, nil)) log.Error.Println(iodine.New(err, nil))
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
} }
} }
} }
@ -150,14 +150,14 @@ func (server *minioAPI) listBucketsHandler(w http.ResponseWriter, req *http.Requ
func (server *minioAPI) putBucketHandler(w http.ResponseWriter, req *http.Request) { func (server *minioAPI) putBucketHandler(w http.ResponseWriter, req *http.Request) {
acceptsContentType := getContentType(req) acceptsContentType := getContentType(req)
if acceptsContentType == unknownContentType { if acceptsContentType == unknownContentType {
writeErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path)
return return
} }
// read from 'x-amz-acl' // read from 'x-amz-acl'
aclType := getACLType(req) aclType := getACLType(req)
if aclType == unsupportedACLType { if aclType == unsupportedACLType {
writeErrorResponse(w, req, NotImplemented, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NotImplemented, acceptsContentType, req.URL.Path)
return return
} }
@ -173,16 +173,16 @@ func (server *minioAPI) putBucketHandler(w http.ResponseWriter, req *http.Reques
} }
case drivers.BucketNameInvalid: case drivers.BucketNameInvalid:
{ {
writeErrorResponse(w, req, InvalidBucketName, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, InvalidBucketName, acceptsContentType, req.URL.Path)
} }
case drivers.BucketExists: case drivers.BucketExists:
{ {
writeErrorResponse(w, req, BucketAlreadyExists, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, BucketAlreadyExists, acceptsContentType, req.URL.Path)
} }
default: default:
{ {
log.Error.Println(iodine.New(err, nil)) log.Error.Println(iodine.New(err, nil))
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
} }
} }
} }
@ -196,7 +196,7 @@ func (server *minioAPI) putBucketHandler(w http.ResponseWriter, req *http.Reques
func (server *minioAPI) headBucketHandler(w http.ResponseWriter, req *http.Request) { func (server *minioAPI) headBucketHandler(w http.ResponseWriter, req *http.Request) {
acceptsContentType := getContentType(req) acceptsContentType := getContentType(req)
if acceptsContentType == unknownContentType { if acceptsContentType == unknownContentType {
writeErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path)
return return
} }

View File

@ -58,7 +58,7 @@ func validateHandler(conf config.Config, h http.Handler) http.Handler {
func (h vHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (h vHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
acceptsContentType := getContentType(r) acceptsContentType := getContentType(r)
if acceptsContentType == unknownContentType { if acceptsContentType == unknownContentType {
writeErrorResponse(w, r, NotAcceptable, acceptsContentType, r.URL.Path) WriteErrorResponse(w, r, NotAcceptable, acceptsContentType, r.URL.Path)
return return
} }
// success // success

View File

@ -32,7 +32,7 @@ import (
func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Request) { func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Request) {
acceptsContentType := getContentType(req) acceptsContentType := getContentType(req)
if acceptsContentType == unknownContentType { if acceptsContentType == unknownContentType {
writeErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path)
return return
} }
@ -51,7 +51,7 @@ func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Reques
{ {
httpRange, err := getRequestedRange(req, metadata.Size) httpRange, err := getRequestedRange(req, metadata.Size)
if err != nil { if err != nil {
writeErrorResponse(w, req, InvalidRange, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, InvalidRange, acceptsContentType, req.URL.Path)
return return
} }
switch httpRange.start == 0 && httpRange.length == 0 { switch httpRange.start == 0 && httpRange.length == 0 {
@ -73,16 +73,16 @@ func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Reques
} }
case drivers.ObjectNotFound: case drivers.ObjectNotFound:
{ {
writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path)
} }
case drivers.ObjectNameInvalid: case drivers.ObjectNameInvalid:
{ {
writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path)
} }
default: default:
{ {
log.Error.Println(iodine.New(err, nil)) log.Error.Println(iodine.New(err, nil))
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
} }
} }
} }
@ -93,7 +93,7 @@ func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Reques
func (server *minioAPI) headObjectHandler(w http.ResponseWriter, req *http.Request) { func (server *minioAPI) headObjectHandler(w http.ResponseWriter, req *http.Request) {
acceptsContentType := getContentType(req) acceptsContentType := getContentType(req)
if acceptsContentType == unknownContentType { if acceptsContentType == unknownContentType {
writeErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path)
return return
} }
@ -115,16 +115,16 @@ func (server *minioAPI) headObjectHandler(w http.ResponseWriter, req *http.Reque
} }
case drivers.ObjectNotFound: case drivers.ObjectNotFound:
{ {
writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path)
} }
case drivers.ObjectNameInvalid: case drivers.ObjectNameInvalid:
{ {
writeErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NoSuchKey, acceptsContentType, req.URL.Path)
} }
default: default:
{ {
log.Error.Println(iodine.New(err, nil)) log.Error.Println(iodine.New(err, nil))
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
} }
} }
} }
@ -135,7 +135,7 @@ func (server *minioAPI) headObjectHandler(w http.ResponseWriter, req *http.Reque
func (server *minioAPI) putObjectHandler(w http.ResponseWriter, req *http.Request) { func (server *minioAPI) putObjectHandler(w http.ResponseWriter, req *http.Request) {
acceptsContentType := getContentType(req) acceptsContentType := getContentType(req)
if acceptsContentType == unknownContentType { if acceptsContentType == unknownContentType {
writeErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NotAcceptable, acceptsContentType, req.URL.Path)
return return
} }
@ -152,7 +152,7 @@ func (server *minioAPI) putObjectHandler(w http.ResponseWriter, req *http.Reques
// get Content-MD5 sent by client and verify if valid // get Content-MD5 sent by client and verify if valid
md5 := req.Header.Get("Content-MD5") md5 := req.Header.Get("Content-MD5")
if !isValidMD5(md5) { if !isValidMD5(md5) {
writeErrorResponse(w, req, InvalidDigest, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, InvalidDigest, acceptsContentType, req.URL.Path)
return return
} }
err := server.driver.CreateObject(bucket, object, "", md5, req.Body) err := server.driver.CreateObject(bucket, object, "", md5, req.Body)
@ -163,29 +163,29 @@ func (server *minioAPI) putObjectHandler(w http.ResponseWriter, req *http.Reques
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
case drivers.ObjectExists: case drivers.ObjectExists:
{ {
writeErrorResponse(w, req, NotImplemented, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, NotImplemented, acceptsContentType, req.URL.Path)
} }
case drivers.BadDigest: case drivers.BadDigest:
{ {
writeErrorResponse(w, req, BadDigest, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, BadDigest, acceptsContentType, req.URL.Path)
} }
case drivers.EntityTooLarge: case drivers.EntityTooLarge:
{ {
writeErrorResponse(w, req, EntityTooLarge, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, EntityTooLarge, acceptsContentType, req.URL.Path)
} }
case drivers.InvalidDigest: case drivers.InvalidDigest:
{ {
writeErrorResponse(w, req, InvalidDigest, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, InvalidDigest, acceptsContentType, req.URL.Path)
} }
case drivers.ImplementationError: case drivers.ImplementationError:
{ {
log.Error.Println(err) log.Error.Println(err)
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
} }
default: default:
{ {
log.Error.Println(err) log.Error.Println(err)
writeErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path) WriteErrorResponse(w, req, InternalError, acceptsContentType, req.URL.Path)
} }
} }
} }

View File

@ -109,7 +109,8 @@ func generateObjectsListResult(bucket string, objects []drivers.ObjectMetadata,
return data return data
} }
func writeErrorResponse(w http.ResponseWriter, req *http.Request, errorType int, acceptsContentType contentType, resource string) { // WriteErrorResponse writes a formatted error to the user
func WriteErrorResponse(w http.ResponseWriter, req *http.Request, errorType int, acceptsContentType contentType, resource string) {
error := getErrorCode(errorType) error := getErrorCode(errorType)
errorResponse := getErrorResponse(error, resource) errorResponse := getErrorResponse(error, resource)
// set headers // set headers