Correct parsing Upload-Concat for final uplaods
Addresses https://github.com/tus/tus-resumable-upload-protocol/issues/123
This commit is contained in:
parent
b05382eced
commit
7710fd79fb
|
@ -118,6 +118,9 @@ func TestConcat(t *testing.T) {
|
|||
Method: "POST",
|
||||
ReqHeader: map[string]string{
|
||||
"Tus-Resumable": "1.0.0",
|
||||
// A space between `final;` and the first URL should be allowed due to
|
||||
// compatibility reasons, even if the specification does not define
|
||||
// it. Therefore this character is included in this test case.
|
||||
"Upload-Concat": "final; http://tus.io/files/a /files/b/",
|
||||
},
|
||||
Code: http.StatusCreated,
|
||||
|
@ -153,7 +156,7 @@ func TestConcat(t *testing.T) {
|
|||
},
|
||||
Code: http.StatusOK,
|
||||
ResHeader: map[string]string{
|
||||
"Upload-Concat": "final; http://tus.io/files/a http://tus.io/files/b",
|
||||
"Upload-Concat": "final;http://tus.io/files/a http://tus.io/files/b",
|
||||
"Upload-Length": "10",
|
||||
"Upload-Offset": "10",
|
||||
},
|
||||
|
@ -178,7 +181,7 @@ func TestConcat(t *testing.T) {
|
|||
Method: "POST",
|
||||
ReqHeader: map[string]string{
|
||||
"Tus-Resumable": "1.0.0",
|
||||
"Upload-Concat": "final; http://tus.io/files/c",
|
||||
"Upload-Concat": "final;http://tus.io/files/c",
|
||||
},
|
||||
Code: http.StatusBadRequest,
|
||||
}).Run(handler, t)
|
||||
|
@ -200,7 +203,7 @@ func TestConcat(t *testing.T) {
|
|||
Method: "POST",
|
||||
ReqHeader: map[string]string{
|
||||
"Tus-Resumable": "1.0.0",
|
||||
"Upload-Concat": "final; /files/huge",
|
||||
"Upload-Concat": "final;/files/huge",
|
||||
},
|
||||
Code: http.StatusRequestEntityTooLarge,
|
||||
}).Run(handler, t)
|
||||
|
@ -240,7 +243,7 @@ func TestConcat(t *testing.T) {
|
|||
URL: "",
|
||||
ReqHeader: map[string]string{
|
||||
"Tus-Resumable": "1.0.0",
|
||||
"Upload-Concat": "final; ",
|
||||
"Upload-Concat": "final;",
|
||||
},
|
||||
Code: http.StatusBadRequest,
|
||||
}).Run(handler, t)
|
||||
|
|
|
@ -294,7 +294,7 @@ func TestPost(t *testing.T) {
|
|||
"Tus-Resumable": "1.0.0",
|
||||
"Upload-Length": "300",
|
||||
"Content-Type": "application/offset+octet-stream",
|
||||
"Upload-Concat": "final; http://tus.io/files/a http://tus.io/files/b",
|
||||
"Upload-Concat": "final;http://tus.io/files/a http://tus.io/files/b",
|
||||
},
|
||||
ReqBody: strings.NewReader("hello"),
|
||||
Code: http.StatusForbidden,
|
||||
|
|
|
@ -341,8 +341,11 @@ func (handler *UnroutedHandler) HeadFile(w http.ResponseWriter, r *http.Request)
|
|||
if info.IsFinal {
|
||||
v := "final;"
|
||||
for _, uploadID := range info.PartialUploads {
|
||||
v += " " + handler.absFileURL(r, uploadID)
|
||||
v += handler.absFileURL(r, uploadID) + " "
|
||||
}
|
||||
// Remove trailing space
|
||||
v = v[:len(v)-1]
|
||||
|
||||
w.Header().Set("Upload-Concat", v)
|
||||
}
|
||||
|
||||
|
@ -782,7 +785,7 @@ func serializeMeta(meta map[string]string) string {
|
|||
|
||||
// Parse the Upload-Concat header, e.g.
|
||||
// Upload-Concat: partial
|
||||
// Upload-Concat: final; http://tus.io/files/a /files/b/
|
||||
// Upload-Concat: final;http://tus.io/files/a /files/b/
|
||||
func parseConcat(header string) (isPartial bool, isFinal bool, partialUploads []string, err error) {
|
||||
if len(header) == 0 {
|
||||
return
|
||||
|
@ -793,8 +796,8 @@ func parseConcat(header string) (isPartial bool, isFinal bool, partialUploads []
|
|||
return
|
||||
}
|
||||
|
||||
l := len("final; ")
|
||||
if strings.HasPrefix(header, "final; ") && len(header) > l {
|
||||
l := len("final;")
|
||||
if strings.HasPrefix(header, "final;") && len(header) > l {
|
||||
isFinal = true
|
||||
|
||||
list := strings.Split(header[l:], " ")
|
||||
|
|
Loading…
Reference in New Issue