diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-12-17 14:59:07 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-12-17 14:59:07 +0300 |
commit | 8b573c94895dc0ac0e1d9d59cf3e8745e8b539ca (patch) | |
tree | 544930fb309b30317ae9797a9683768705d664c4 /workhorse/internal/upload/saved_file_tracker.go | |
parent | 4b1de649d0168371549608993deac953eb692019 (diff) |
Add latest changes from gitlab-org/gitlab@13-7-stable-eev13.7.0-rc42
Diffstat (limited to 'workhorse/internal/upload/saved_file_tracker.go')
-rw-r--r-- | workhorse/internal/upload/saved_file_tracker.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/workhorse/internal/upload/saved_file_tracker.go b/workhorse/internal/upload/saved_file_tracker.go new file mode 100644 index 00000000000..7b6cade4faa --- /dev/null +++ b/workhorse/internal/upload/saved_file_tracker.go @@ -0,0 +1,55 @@ +package upload + +import ( + "context" + "fmt" + "mime/multipart" + "net/http" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/filestore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/secret" +) + +type SavedFileTracker struct { + Request *http.Request + rewrittenFields map[string]string +} + +func (s *SavedFileTracker) Track(fieldName string, localPath string) { + if s.rewrittenFields == nil { + s.rewrittenFields = make(map[string]string) + } + s.rewrittenFields[fieldName] = localPath +} + +func (s *SavedFileTracker) Count() int { + return len(s.rewrittenFields) +} + +func (s *SavedFileTracker) ProcessFile(_ context.Context, fieldName string, file *filestore.FileHandler, _ *multipart.Writer) error { + s.Track(fieldName, file.LocalPath) + return nil +} + +func (s *SavedFileTracker) ProcessField(_ context.Context, _ string, _ *multipart.Writer) error { + return nil +} + +func (s *SavedFileTracker) Finalize(_ context.Context) error { + if s.rewrittenFields == nil { + return nil + } + + claims := MultipartClaims{RewrittenFields: s.rewrittenFields, StandardClaims: secret.DefaultClaims} + tokenString, err := secret.JWTTokenString(claims) + if err != nil { + return fmt.Errorf("savedFileTracker.Finalize: %v", err) + } + + s.Request.Header.Set(RewrittenFieldsHeader, tokenString) + return nil +} + +func (s *SavedFileTracker) Name() string { + return "accelerate" +} |