diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-19 15:44:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-19 15:44:42 +0000 |
commit | 4555e1b21c365ed8303ffb7a3325d773c9b8bf31 (patch) | |
tree | 5423a1c7516cffe36384133ade12572cf709398d /workhorse/internal | |
parent | e570267f2f6b326480d284e0164a6464ba4081bc (diff) | |
download | gitlab-ce-4555e1b21c365ed8303ffb7a3325d773c9b8bf31.tar.gz |
Add latest changes from gitlab-org/gitlab@13-12-stable-eev13.12.0-rc42
Diffstat (limited to 'workhorse/internal')
-rw-r--r-- | workhorse/internal/api/api.go | 2 | ||||
-rw-r--r-- | workhorse/internal/filestore/save_file_opts.go | 23 | ||||
-rw-r--r-- | workhorse/internal/filestore/save_file_opts_test.go | 14 | ||||
-rw-r--r-- | workhorse/internal/upload/rewrite.go | 6 | ||||
-rw-r--r-- | workhorse/internal/upload/uploads_test.go | 24 | ||||
-rw-r--r-- | workhorse/internal/upstream/routes.go | 6 |
6 files changed, 32 insertions, 43 deletions
diff --git a/workhorse/internal/api/api.go b/workhorse/internal/api/api.go index 8ab83a1d986..d8e2a7b0d9f 100644 --- a/workhorse/internal/api/api.go +++ b/workhorse/internal/api/api.go @@ -149,7 +149,7 @@ type Response struct { ProcessLsifReferences bool // The maximum accepted size in bytes of the upload MaximumSize int64 - // Feature flag used to determine whether to strip the multipart filename of any directories + // DEPRECATED: Feature flag used to determine whether to strip the multipart filename of any directories FeatureFlagExtractBase bool } diff --git a/workhorse/internal/filestore/save_file_opts.go b/workhorse/internal/filestore/save_file_opts.go index f42e21b5f2e..d0b2c6ec809 100644 --- a/workhorse/internal/filestore/save_file_opts.go +++ b/workhorse/internal/filestore/save_file_opts.go @@ -63,8 +63,6 @@ type SaveFileOpts struct { PresignedCompleteMultipart string // PresignedAbortMultipart is a presigned URL for AbortMultipartUpload PresignedAbortMultipart string - // FeatureFlagExtractBase uses the base of the filename and strips directories - FeatureFlagExtractBase bool } // UseWorkhorseClientEnabled checks if the options require direct access to object storage @@ -90,17 +88,16 @@ func GetOpts(apiResponse *api.Response) (*SaveFileOpts, error) { } opts := SaveFileOpts{ - FeatureFlagExtractBase: apiResponse.FeatureFlagExtractBase, - LocalTempPath: apiResponse.TempPath, - RemoteID: apiResponse.RemoteObject.ID, - RemoteURL: apiResponse.RemoteObject.GetURL, - PresignedPut: apiResponse.RemoteObject.StoreURL, - PresignedDelete: apiResponse.RemoteObject.DeleteURL, - PutHeaders: apiResponse.RemoteObject.PutHeaders, - UseWorkhorseClient: apiResponse.RemoteObject.UseWorkhorseClient, - RemoteTempObjectID: apiResponse.RemoteObject.RemoteTempObjectID, - Deadline: time.Now().Add(timeout), - MaximumSize: apiResponse.MaximumSize, + LocalTempPath: apiResponse.TempPath, + RemoteID: apiResponse.RemoteObject.ID, + RemoteURL: apiResponse.RemoteObject.GetURL, + PresignedPut: apiResponse.RemoteObject.StoreURL, + PresignedDelete: apiResponse.RemoteObject.DeleteURL, + PutHeaders: apiResponse.RemoteObject.PutHeaders, + UseWorkhorseClient: apiResponse.RemoteObject.UseWorkhorseClient, + RemoteTempObjectID: apiResponse.RemoteObject.RemoteTempObjectID, + Deadline: time.Now().Add(timeout), + MaximumSize: apiResponse.MaximumSize, } if opts.LocalTempPath != "" && opts.RemoteID != "" { diff --git a/workhorse/internal/filestore/save_file_opts_test.go b/workhorse/internal/filestore/save_file_opts_test.go index aa7018525ab..060618a904b 100644 --- a/workhorse/internal/filestore/save_file_opts_test.go +++ b/workhorse/internal/filestore/save_file_opts_test.go @@ -57,19 +57,15 @@ func TestSaveFileOptsLocalAndRemote(t *testing.T) { func TestGetOpts(t *testing.T) { tests := []struct { - name string - multipart *api.MultipartUploadParams - customPutHeaders bool - putHeaders map[string]string - FeatureFlagExtractBase bool + name string + multipart *api.MultipartUploadParams + customPutHeaders bool + putHeaders map[string]string }{ { name: "Single upload", }, { - name: "Single upload w/ FeatureFlagExtractBase enabled", - FeatureFlagExtractBase: true, - }, { name: "Multipart upload", multipart: &api.MultipartUploadParams{ PartSize: 10, @@ -98,7 +94,6 @@ func TestGetOpts(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { apiResponse := &api.Response{ - FeatureFlagExtractBase: test.FeatureFlagExtractBase, RemoteObject: api.RemoteObject{ Timeout: 10, ID: "id", @@ -114,7 +109,6 @@ func TestGetOpts(t *testing.T) { opts, err := filestore.GetOpts(apiResponse) require.NoError(t, err) - require.Equal(t, apiResponse.FeatureFlagExtractBase, opts.FeatureFlagExtractBase) require.Equal(t, apiResponse.TempPath, opts.LocalTempPath) require.WithinDuration(t, deadline, opts.Deadline, time.Second) require.Equal(t, apiResponse.RemoteObject.ID, opts.RemoteID) diff --git a/workhorse/internal/upload/rewrite.go b/workhorse/internal/upload/rewrite.go index 85063d65c1b..f6a0bbae3f1 100644 --- a/workhorse/internal/upload/rewrite.go +++ b/workhorse/internal/upload/rewrite.go @@ -116,11 +116,7 @@ func rewriteFormFilesFromMultipart(r *http.Request, writer *multipart.Writer, pr func (rew *rewriter) handleFilePart(ctx context.Context, name string, p *multipart.Part, opts *filestore.SaveFileOpts) error { multipartFiles.WithLabelValues(rew.filter.Name()).Inc() - filename := p.FileName() - - if opts.FeatureFlagExtractBase { - filename = filepath.Base(filename) - } + filename := filepath.Base(p.FileName()) if strings.Contains(filename, "/") || filename == "." || filename == ".." { return fmt.Errorf("illegal filename: %q", filename) diff --git a/workhorse/internal/upload/uploads_test.go b/workhorse/internal/upload/uploads_test.go index d77d73b5f48..44ddfaef9eb 100644 --- a/workhorse/internal/upload/uploads_test.go +++ b/workhorse/internal/upload/uploads_test.go @@ -325,20 +325,17 @@ func TestInvalidFileNames(t *testing.T) { defer os.RemoveAll(tempPath) for _, testCase := range []struct { - filename string - code int - FeatureFlagExtractBase bool - expectedPrefix string + filename string + code int + expectedPrefix string }{ - {"foobar", 200, false, "foobar"}, // sanity check for test setup below - {"foo/bar", 500, false, ""}, - {"foo/bar", 200, true, "bar"}, - {"foo/bar/baz", 200, true, "baz"}, - {"/../../foobar", 500, false, ""}, - {"/../../foobar", 200, true, "foobar"}, - {".", 500, false, ""}, - {"..", 500, false, ""}, - {"./", 500, false, ""}, + {"foobar", 200, "foobar"}, // sanity check for test setup below + {"foo/bar", 200, "bar"}, + {"foo/bar/baz", 200, "baz"}, + {"/../../foobar", 200, "foobar"}, + {".", 500, ""}, + {"..", 500, ""}, + {"./", 500, ""}, } { buffer := &bytes.Buffer{} @@ -356,7 +353,6 @@ func TestInvalidFileNames(t *testing.T) { apiResponse := &api.Response{TempPath: tempPath} preparer := &DefaultPreparer{} opts, _, err := preparer.Prepare(apiResponse) - opts.FeatureFlagExtractBase = testCase.FeatureFlagExtractBase require.NoError(t, err) HandleFileUploads(response, httpRequest, nilHandler, apiResponse, &SavedFileTracker{Request: httpRequest}, opts) diff --git a/workhorse/internal/upstream/routes.go b/workhorse/internal/upstream/routes.go index d95646b91f7..230b67ed059 100644 --- a/workhorse/internal/upstream/routes.go +++ b/workhorse/internal/upstream/routes.go @@ -283,6 +283,12 @@ func configureRoutes(u *upstream) { // Gem Artifact Repository u.route("POST", apiProjectPattern+`packages/rubygems/`, upload.BodyUploader(api, signingProxy, preparers.packages)), + // Terraform Module Package Repository + u.route("PUT", apiProjectPattern+`packages/terraform/modules/`, upload.BodyUploader(api, signingProxy, preparers.packages)), + + // Helm Artifact Repository + u.route("POST", apiProjectPattern+`packages/helm/api/[^/]+/charts\z`, upload.Accelerate(api, signingProxy, preparers.packages)), + // We are porting API to disk acceleration // we need to declare each routes until we have fixed all the routes on the rails codebase. // Overall status can be seen at https://gitlab.com/groups/gitlab-org/-/epics/1802#current-status |