From 50b38fcd02d1417827a1fe9fe99545cf46c6ec20 Mon Sep 17 00:00:00 2001 From: Ethan Dickson Date: Fri, 8 Nov 2024 06:53:08 +0000 Subject: [PATCH] fix: support windows specific zip mime type for template uploads --- coderd/files.go | 9 +++++---- coderd/files_test.go | 12 ++++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/coderd/files.go b/coderd/files.go index bf1885da1eee9..f82d1aa926c22 100644 --- a/coderd/files.go +++ b/coderd/files.go @@ -25,8 +25,9 @@ import ( ) const ( - tarMimeType = "application/x-tar" - zipMimeType = "application/zip" + tarMimeType = "application/x-tar" + zipMimeType = "application/zip" + windowsZipMimeType = "application/x-zip-compressed" HTTPFileMaxBytes = 10 * (10 << 20) ) @@ -48,7 +49,7 @@ func (api *API) postFile(rw http.ResponseWriter, r *http.Request) { contentType := r.Header.Get("Content-Type") switch contentType { - case tarMimeType, zipMimeType: + case tarMimeType, zipMimeType, windowsZipMimeType: default: httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{ Message: fmt.Sprintf("Unsupported content type header %q.", contentType), @@ -66,7 +67,7 @@ func (api *API) postFile(rw http.ResponseWriter, r *http.Request) { return } - if contentType == zipMimeType { + if contentType == zipMimeType || contentType == windowsZipMimeType { zipReader, err := zip.NewReader(bytes.NewReader(data), int64(len(data))) if err != nil { httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{ diff --git a/coderd/files_test.go b/coderd/files_test.go index f2dd788e3a6dd..974db6b18fc69 100644 --- a/coderd/files_test.go +++ b/coderd/files_test.go @@ -43,6 +43,18 @@ func TestPostFiles(t *testing.T) { require.NoError(t, err) }) + t.Run("InsertWindowsZip", func(t *testing.T) { + t.Parallel() + client := coderdtest.New(t, nil) + _ = coderdtest.CreateFirstUser(t, client) + + ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong) + defer cancel() + + _, err := client.Upload(ctx, "application/x-zip-compressed", bytes.NewReader(archivetest.TestZipFileBytes())) + require.NoError(t, err) + }) + t.Run("InsertAlreadyExists", func(t *testing.T) { t.Parallel() client := coderdtest.New(t, nil)