From c6d5ad08c00d75e7f06b57232abf7ba68335506b Mon Sep 17 00:00:00 2001 From: Adam Jensen Date: Sat, 5 May 2018 15:20:26 -0400 Subject: [PATCH] When it's requested, verify length deferrer support in the datastore --- unrouted_handler.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/unrouted_handler.go b/unrouted_handler.go index cf60681..481f360 100644 --- a/unrouted_handler.go +++ b/unrouted_handler.go @@ -261,7 +261,7 @@ func (handler *UnroutedHandler) PostFile(w http.ResponseWriter, r *http.Request) } else { uploadLengthHeader := r.Header.Get("Upload-Length") uploadDeferLengthHeader := r.Header.Get("Upload-Defer-Length") - size, sizeIsDeferred, err = validateNewUploadLengthHeaders(uploadLengthHeader, uploadDeferLengthHeader) + size, sizeIsDeferred, err = handler.validateNewUploadLengthHeaders(uploadLengthHeader, uploadDeferLengthHeader) if err != nil { handler.sendError(w, r, err) return @@ -873,12 +873,14 @@ func (handler *UnroutedHandler) sizeOfUploads(ids []string) (size int64, err err // Verify that the Upload-Length and Upload-Defer-Length headers are acceptable for creating a // new upload -func validateNewUploadLengthHeaders(uploadLengthHeader string, uploadDeferLengthHeader string) (uploadLength int64, uploadLengthDeferred bool, err error) { +func (handler *UnroutedHandler) validateNewUploadLengthHeaders(uploadLengthHeader string, uploadDeferLengthHeader string) (uploadLength int64, uploadLengthDeferred bool, err error) { haveBothLengthHeaders := uploadLengthHeader != "" && uploadDeferLengthHeader != "" haveInvalidDeferHeader := uploadDeferLengthHeader != "" && uploadDeferLengthHeader != UploadLengthDeferred lengthIsDeferred := uploadDeferLengthHeader == UploadLengthDeferred - if haveBothLengthHeaders { + if lengthIsDeferred && !handler.composer.UsesLengthDeferrer { + err = ErrNotImplemented + } else if haveBothLengthHeaders { err = ErrUploadLengthAndUploadDeferLength } else if haveInvalidDeferHeader { err = ErrInvalidUploadDeferLength