From 1bdf79827c623cc92504223a1085f366115bbb3d Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 2 Dec 2020 15:09:37 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab-ci.yml | 1 + .gitlab/ci/workhorse.gitlab-ci.yml | 9 + .rubocop.yml | 1 + GITALY_SERVER_VERSION | 2 +- Gemfile | 4 +- Gemfile.lock | 9 +- app/assets/javascripts/commit/image_file.js | 14 +- app/assets/javascripts/due_date_select.js | 21 +- app/assets/javascripts/filterable_list.js | 6 +- app/assets/javascripts/labels_select.js | 21 +- app/assets/javascripts/main.js | 6 +- app/assets/javascripts/milestone_select.js | 21 +- app/assets/javascripts/users_select/index.js | 9 +- .../page_bundles/oncall_schedules.scss | 30 + .../registrations/welcome_controller.rb | 2 +- app/helpers/ci/pipeline_schedules_helper.rb | 15 - app/helpers/time_zone_helper.rb | 15 + app/models/pages/lookup_path.rb | 2 +- app/models/user.rb | 1 + app/services/system_hooks_service.rb | 35 +- .../diffs/_replaced_image_diff.html.haml | 10 +- .../registrations/welcome/show.html.haml | 12 +- ...e-further-details-of-other-role-type-d.yml | 5 + ...lizing-wiki-in-import-when-not-present.yml | 5 + ...s-serve-from-deployments-configuration.yml | 5 + changelogs/unreleased/sh-update-fog-3-7-0.yml | 5 + config/application.rb | 1 + .../pages_serve_from_deployments.yml | 2 +- .../development/user_other_role_details.yml | 8 + danger/commit_messages/Dangerfile | 10 +- ...27141433_add_other_role_to_user_details.rb | 25 + db/schema_migrations/20201127141433 | 1 + db/structure.sql | 4 +- doc/administration/auth/ldap/index.md | 2 +- doc/development/README.md | 1 + .../product_analytics/usage_ping.md | 9 +- doc/redirects.sh | 202 ---- lib/gitlab/hook_data/base_builder.rb | 7 + lib/gitlab/hook_data/group_member_builder.rb | 63 + lib/gitlab/import_export/importer.rb | 5 +- lib/gitlab/import_export/wiki_restorer.rb | 28 - locale/gitlab.pot | 24 + scripts/update-workhorse | 53 + .../admin/clusters_controller_spec.rb | 2 +- .../boards/lists_controller_spec.rb | 2 +- .../groups/boards_controller_spec.rb | 16 +- .../groups/clusters_controller_spec.rb | 2 +- .../groups/milestones_controller_spec.rb | 2 +- .../groups/releases_controller_spec.rb | 2 +- .../health_check_controller_spec.rb | 20 +- .../profiles/keys_controller_spec.rb | 6 +- .../projects/boards_controller_spec.rb | 16 +- .../projects/ci/lints_controller_spec.rb | 2 +- .../projects/clusters_controller_spec.rb | 2 +- .../projects/commits_controller_spec.rb | 4 +- .../projects/milestones_controller_spec.rb | 12 +- .../projects/releases_controller_spec.rb | 4 +- spec/frontend/fixtures/freeze_period.rb | 6 +- spec/graphql/mutations/issues/update_spec.rb | 2 +- .../ci/pipeline_schedules_helper_spec.rb | 24 - spec/helpers/time_zone_helper_spec.rb | 35 + spec/lib/backup/repositories_spec.rb | 4 +- .../hook_data/group_member_builder_spec.rb | 59 + .../lib/gitlab/import_export/importer_spec.rb | 15 +- .../import_export/repo_restorer_spec.rb | 74 +- .../import_export/wiki_restorer_spec.rb | 47 - spec/requests/api/group_import_spec.rb | 6 +- spec/requests/api/project_import_spec.rb | 6 +- .../approve_access_request_service_spec.rb | 10 +- spec/services/system_hooks_service_spec.rb | 3 - .../uploads_auhorize_shared_examples.rb | 6 +- workhorse/.gitignore | 10 + workhorse/.gitlab-ci.yml | 83 ++ workhorse/.gitlab/CODEOWNERS | 1 + workhorse/CHANGELOG | 1053 +++++++++++++++++ workhorse/CONTRIBUTING.md | 46 + workhorse/LICENSE | 21 + workhorse/Makefile | 177 +++ workhorse/PROCESS.md | 152 +++ workhorse/README.md | 27 + workhorse/VERSION | 1 + workhorse/_support/changelog | 243 ++++ workhorse/_support/check_changelog.sh | 22 + workhorse/_support/detect-assert.sh | 9 + workhorse/_support/detect-context.sh | 10 + workhorse/_support/fake-auth-backend.go | 22 + workhorse/_support/generate_changelog | 75 ++ workhorse/_support/lint.sh | 11 + workhorse/_support/tag.sh | 45 + workhorse/_support/validate-formatting.sh | 9 + workhorse/authorization_test.go | 131 ++ workhorse/backend.go | 30 + workhorse/backend_test.go | 41 + workhorse/cable_test.go | 93 ++ workhorse/changelogs/unreleased/.gitkeep | 0 workhorse/channel_test.go | 245 ++++ workhorse/cmd/gitlab-resize-image/main.go | 37 + workhorse/cmd/gitlab-zip-cat/main.go | 96 ++ .../cmd/gitlab-zip-metadata/limit/reader.go | 52 + .../gitlab-zip-metadata/limit/reader_test.go | 90 ++ workhorse/cmd/gitlab-zip-metadata/main.go | 67 ++ workhorse/config.toml.example | 17 + workhorse/config_test.go | 157 +++ workhorse/doc/architecture/channel.md | 194 +++ workhorse/doc/architecture/gitlab_features.md | 69 ++ workhorse/doc/channel.md | 1 + workhorse/doc/development/new_features.md | 41 + workhorse/doc/development/tests.md | 17 + workhorse/doc/operations/configuration.md | 217 ++++ workhorse/doc/operations/install.md | 44 + workhorse/gitaly_integration_test.go | 357 ++++++ workhorse/gitaly_test.go | 696 +++++++++++ workhorse/go.mod | 44 + workhorse/go.sum | 880 ++++++++++++++ workhorse/internal/api/api.go | 349 ++++++ workhorse/internal/api/block.go | 61 + workhorse/internal/api/block_test.go | 56 + workhorse/internal/api/channel_settings.go | 122 ++ .../internal/api/channel_settings_test.go | 154 +++ .../artifacts/artifacts_store_test.go | 338 ++++++ .../internal/artifacts/artifacts_test.go | 19 + .../internal/artifacts/artifacts_upload.go | 170 +++ .../artifacts/artifacts_upload_test.go | 322 +++++ workhorse/internal/artifacts/entry.go | 123 ++ workhorse/internal/artifacts/entry_test.go | 134 +++ workhorse/internal/artifacts/escape_quotes.go | 10 + workhorse/internal/badgateway/roundtripper.go | 115 ++ .../internal/badgateway/roundtripper_test.go | 56 + workhorse/internal/builds/register.go | 169 +++ workhorse/internal/builds/register_test.go | 108 ++ workhorse/internal/channel/auth_checker.go | 69 ++ .../internal/channel/auth_checker_test.go | 53 + workhorse/internal/channel/channel.go | 132 +++ workhorse/internal/channel/proxy.go | 56 + workhorse/internal/channel/wrappers.go | 134 +++ workhorse/internal/channel/wrappers_test.go | 155 +++ workhorse/internal/config/config.go | 153 +++ workhorse/internal/config/config_test.go | 99 ++ workhorse/internal/config/url_openers.go | 51 + workhorse/internal/config/url_openers_test.go | 117 ++ workhorse/internal/filestore/file_handler.go | 251 ++++ .../internal/filestore/file_handler_test.go | 449 +++++++ workhorse/internal/filestore/multi_hash.go | 48 + workhorse/internal/filestore/reader.go | 17 + workhorse/internal/filestore/reader_test.go | 46 + .../internal/filestore/save_file_opts.go | 171 +++ .../internal/filestore/save_file_opts_test.go | 331 ++++++ workhorse/internal/git/archive.go | 219 ++++ workhorse/internal/git/archive_test.go | 87 ++ workhorse/internal/git/blob.go | 47 + workhorse/internal/git/blob_test.go | 17 + workhorse/internal/git/diff.go | 48 + workhorse/internal/git/error.go | 4 + workhorse/internal/git/format-patch.go | 48 + workhorse/internal/git/git-http.go | 100 ++ workhorse/internal/git/info-refs.go | 76 ++ workhorse/internal/git/pktline.go | 59 + workhorse/internal/git/pktline_test.go | 39 + workhorse/internal/git/receive-pack.go | 33 + workhorse/internal/git/responsewriter.go | 80 ++ workhorse/internal/git/snapshot.go | 64 + workhorse/internal/git/upload-pack.go | 57 + workhorse/internal/git/upload-pack_test.go | 85 ++ workhorse/internal/gitaly/blob.go | 41 + workhorse/internal/gitaly/diff.go | 55 + workhorse/internal/gitaly/gitaly.go | 191 +++ workhorse/internal/gitaly/gitaly_test.go | 80 ++ workhorse/internal/gitaly/namespace.go | 8 + workhorse/internal/gitaly/repository.go | 45 + workhorse/internal/gitaly/smarthttp.go | 139 +++ workhorse/internal/gitaly/unmarshal_test.go | 35 + workhorse/internal/headers/content_headers.go | 109 ++ workhorse/internal/headers/headers.go | 62 + workhorse/internal/headers/headers_test.go | 24 + workhorse/internal/helper/context_reader.go | 40 + .../internal/helper/context_reader_test.go | 83 ++ .../internal/helper/countingresponsewriter.go | 56 + .../helper/countingresponsewriter_test.go | 50 + workhorse/internal/helper/helpers.go | 217 ++++ workhorse/internal/helper/helpers_test.go | 258 ++++ workhorse/internal/helper/raven.go | 58 + workhorse/internal/helper/tempfile.go | 35 + workhorse/internal/helper/writeafterreader.go | 144 +++ .../internal/helper/writeafterreader_test.go | 115 ++ workhorse/internal/httprs/LICENSE | 19 + workhorse/internal/httprs/README.md | 2 + workhorse/internal/httprs/httprs.go | 217 ++++ workhorse/internal/httprs/httprs_test.go | 257 ++++ .../internal/imageresizer/image_resizer.go | 448 +++++++ .../imageresizer/image_resizer_caching.go | 44 + .../imageresizer/image_resizer_test.go | 236 ++++ workhorse/internal/lfs/lfs.go | 55 + workhorse/internal/lfs/lfs_test.go | 61 + .../internal/lsif_transformer/parser/cache.go | 56 + .../lsif_transformer/parser/cache_test.go | 33 + .../lsif_transformer/parser/code_hover.go | 124 ++ .../parser/code_hover_test.go | 106 ++ .../internal/lsif_transformer/parser/docs.go | 144 +++ .../lsif_transformer/parser/docs_test.go | 54 + .../lsif_transformer/parser/errors.go | 30 + .../lsif_transformer/parser/errors_test.go | 26 + .../lsif_transformer/parser/hovers.go | 162 +++ .../lsif_transformer/parser/hovers_test.go | 30 + .../internal/lsif_transformer/parser/id.go | 52 + .../lsif_transformer/parser/id_test.go | 28 + .../lsif_transformer/parser/parser.go | 109 ++ .../lsif_transformer/parser/parser_test.go | 80 ++ .../parser/performance_test.go | 47 + .../lsif_transformer/parser/ranges.go | 214 ++++ .../lsif_transformer/parser/ranges_test.go | 61 + .../lsif_transformer/parser/references.go | 107 ++ .../parser/references_test.go | 44 + .../parser/testdata/dump.lsif.zip | Bin 0 -> 2023 bytes .../testdata/expected/lsif/main.go.json | 208 ++++ .../expected/lsif/morestrings/reverse.go.json | 249 ++++ .../parser/testdata/workhorse.lsif.zip | Bin 0 -> 2120741 bytes .../internal/objectstore/gocloud_object.go | 100 ++ .../objectstore/gocloud_object_test.go | 56 + workhorse/internal/objectstore/multipart.go | 188 +++ .../internal/objectstore/multipart_test.go | 64 + workhorse/internal/objectstore/object.go | 114 ++ workhorse/internal/objectstore/object_test.go | 155 +++ workhorse/internal/objectstore/prometheus.go | 43 + .../objectstore/s3_complete_multipart_api.go | 51 + workhorse/internal/objectstore/s3_object.go | 119 ++ .../internal/objectstore/s3_object_test.go | 174 +++ workhorse/internal/objectstore/s3_session.go | 94 ++ .../internal/objectstore/s3_session_test.go | 57 + workhorse/internal/objectstore/test/consts.go | 19 + .../internal/objectstore/test/gocloud_stub.go | 47 + .../objectstore/test/objectstore_stub.go | 278 +++++ .../objectstore/test/objectstore_stub_test.go | 167 +++ .../internal/objectstore/test/s3_stub.go | 142 +++ .../internal/objectstore/upload_strategy.go | 46 + workhorse/internal/objectstore/uploader.go | 113 ++ workhorse/internal/proxy/proxy.go | 62 + workhorse/internal/queueing/queue.go | 208 ++++ workhorse/internal/queueing/queue_test.go | 62 + workhorse/internal/queueing/requests.go | 51 + workhorse/internal/queueing/requests_test.go | 76 ++ workhorse/internal/redis/keywatcher.go | 204 ++++ workhorse/internal/redis/keywatcher_test.go | 162 +++ workhorse/internal/redis/redis.go | 301 +++++ workhorse/internal/redis/redis_test.go | 234 ++++ workhorse/internal/secret/jwt.go | 25 + workhorse/internal/secret/roundtripper.go | 35 + workhorse/internal/secret/secret.go | 77 ++ .../contentprocessor/contentprocessor.go | 126 ++ .../contentprocessor/contentprocessor_test.go | 293 +++++ workhorse/internal/senddata/injecter.go | 35 + workhorse/internal/senddata/senddata.go | 109 ++ workhorse/internal/senddata/writer_test.go | 71 ++ workhorse/internal/sendfile/sendfile.go | 166 +++ workhorse/internal/sendfile/sendfile_test.go | 171 +++ .../internal/sendfile/testdata/sent-file.txt | 1 + workhorse/internal/sendurl/sendurl.go | 173 +++ workhorse/internal/sendurl/sendurl_test.go | 197 +++ workhorse/internal/staticpages/deploy_page.go | 26 + .../internal/staticpages/deploy_page_test.go | 59 + workhorse/internal/staticpages/error_pages.go | 141 +++ .../internal/staticpages/error_pages_test.go | 191 +++ workhorse/internal/staticpages/servefile.go | 84 ++ .../internal/staticpages/servefile_test.go | 134 +++ workhorse/internal/staticpages/static.go | 5 + workhorse/internal/testhelper/gitaly.go | 384 ++++++ workhorse/internal/testhelper/testhelper.go | 152 +++ workhorse/internal/upload/accelerate.go | 32 + workhorse/internal/upload/body_uploader.go | 90 ++ .../internal/upload/body_uploader_test.go | 195 +++ workhorse/internal/upload/exif/exif.go | 107 ++ workhorse/internal/upload/exif/exif_test.go | 95 ++ .../upload/exif/testdata/sample_exif.jpg | Bin 0 -> 33881 bytes .../upload/object_storage_preparer.go | 28 + .../upload/object_storage_preparer_test.go | 62 + workhorse/internal/upload/rewrite.go | 208 ++++ .../internal/upload/saved_file_tracker.go | 55 + .../upload/saved_file_tracker_test.go | 39 + .../internal/upload/skip_rails_authorizer.go | 22 + workhorse/internal/upload/uploads.go | 66 ++ workhorse/internal/upload/uploads_test.go | 475 ++++++++ .../internal/upstream/development_test.go | 39 + workhorse/internal/upstream/handlers.go | 39 + workhorse/internal/upstream/handlers_test.go | 67 ++ workhorse/internal/upstream/metrics.go | 124 ++ workhorse/internal/upstream/notfoundunless.go | 11 + .../upstream/roundtripper/roundtripper.go | 61 + .../roundtripper/roundtripper_test.go | 39 + .../upstream/roundtripper/transport.go | 27 + workhorse/internal/upstream/routes.go | 335 ++++++ workhorse/internal/upstream/upstream.go | 123 ++ workhorse/internal/urlprefix/urlprefix.go | 35 + workhorse/internal/utils/svg/LICENSE | 24 + workhorse/internal/utils/svg/README.md | 45 + workhorse/internal/utils/svg/svg.go | 42 + workhorse/internal/zipartifacts/.gitignore | 1 + workhorse/internal/zipartifacts/entry.go | 13 + workhorse/internal/zipartifacts/errors.go | 57 + .../internal/zipartifacts/errors_test.go | 32 + workhorse/internal/zipartifacts/metadata.go | 117 ++ .../internal/zipartifacts/metadata_test.go | 102 ++ .../internal/zipartifacts/open_archive.go | 138 +++ .../zipartifacts/open_archive_test.go | 68 ++ workhorse/jobs_test.go | 60 + workhorse/logging.go | 72 ++ workhorse/main.go | 230 ++++ workhorse/main_test.go | 785 ++++++++++++ workhorse/proxy_test.go | 117 ++ workhorse/raven.go | 40 + workhorse/sendfile_test.go | 103 ++ workhorse/testdata/.gitkeep | 0 workhorse/testdata/artifacts-archive.zip | Bin 0 -> 119 bytes workhorse/testdata/audio.mp3 | Bin 0 -> 279 bytes workhorse/testdata/file-ä.pdf | 3 + workhorse/testdata/file.bmpr | Bin 0 -> 53248 bytes workhorse/testdata/file.ipynb | 38 + workhorse/testdata/file.pdf | 3 + workhorse/testdata/file.rdoc | 7 + workhorse/testdata/file.sketch | Bin 0 -> 952 bytes workhorse/testdata/file.stl | Bin 0 -> 697 bytes workhorse/testdata/file.swf | Bin 0 -> 320 bytes workhorse/testdata/forgedfile.png | Bin 0 -> 320 bytes workhorse/testdata/image.jpg | Bin 0 -> 84616 bytes workhorse/testdata/image.png | Bin 0 -> 10262 bytes workhorse/testdata/image.svg | 64 + workhorse/testdata/image_single_pixel.jpg | Bin 0 -> 631 bytes workhorse/testdata/lsif/invalid.lsif.zip | Bin 0 -> 2386 bytes workhorse/testdata/lsif/valid.lsif.zip | Bin 0 -> 2190 bytes workhorse/testdata/receive-pack-fixture.txt | 1025 ++++++++++++++++ workhorse/testdata/tarfile.tar | Bin 0 -> 1536 bytes workhorse/testdata/test-secret | 1 + workhorse/testdata/upload-pack-fixture.txt | 1025 ++++++++++++++++ workhorse/testdata/video.mp4 | Bin 0 -> 1753 bytes workhorse/tools.go | 9 + workhorse/upload_test.go | 369 ++++++ 334 files changed, 30081 insertions(+), 507 deletions(-) create mode 100644 .gitlab/ci/workhorse.gitlab-ci.yml create mode 100644 app/assets/stylesheets/page_bundles/oncall_schedules.scss delete mode 100644 app/helpers/ci/pipeline_schedules_helper.rb create mode 100644 app/helpers/time_zone_helper.rb create mode 100644 changelogs/unreleased/255170-eng-use-text-field-to-capture-further-details-of-other-role-type-d.yml create mode 100644 changelogs/unreleased/268040-fj-avoid-initializing-wiki-in-import-when-not-present.yml create mode 100644 changelogs/unreleased/281178-pages-serve-from-deployments-configuration.yml create mode 100644 changelogs/unreleased/sh-update-fog-3-7-0.yml create mode 100644 config/feature_flags/development/user_other_role_details.yml create mode 100644 db/migrate/20201127141433_add_other_role_to_user_details.rb create mode 100644 db/schema_migrations/20201127141433 delete mode 100644 doc/redirects.sh create mode 100644 lib/gitlab/hook_data/group_member_builder.rb delete mode 100644 lib/gitlab/import_export/wiki_restorer.rb create mode 100755 scripts/update-workhorse delete mode 100644 spec/helpers/ci/pipeline_schedules_helper_spec.rb create mode 100644 spec/helpers/time_zone_helper_spec.rb create mode 100644 spec/lib/gitlab/hook_data/group_member_builder_spec.rb delete mode 100644 spec/lib/gitlab/import_export/wiki_restorer_spec.rb create mode 100644 workhorse/.gitignore create mode 100644 workhorse/.gitlab-ci.yml create mode 100644 workhorse/.gitlab/CODEOWNERS create mode 100644 workhorse/CHANGELOG create mode 100644 workhorse/CONTRIBUTING.md create mode 100644 workhorse/LICENSE create mode 100644 workhorse/Makefile create mode 100644 workhorse/PROCESS.md create mode 100644 workhorse/README.md create mode 100644 workhorse/VERSION create mode 100755 workhorse/_support/changelog create mode 100755 workhorse/_support/check_changelog.sh create mode 100755 workhorse/_support/detect-assert.sh create mode 100755 workhorse/_support/detect-context.sh create mode 100644 workhorse/_support/fake-auth-backend.go create mode 100755 workhorse/_support/generate_changelog create mode 100755 workhorse/_support/lint.sh create mode 100644 workhorse/_support/tag.sh create mode 100755 workhorse/_support/validate-formatting.sh create mode 100644 workhorse/authorization_test.go create mode 100644 workhorse/backend.go create mode 100644 workhorse/backend_test.go create mode 100644 workhorse/cable_test.go create mode 100644 workhorse/changelogs/unreleased/.gitkeep create mode 100644 workhorse/channel_test.go create mode 100644 workhorse/cmd/gitlab-resize-image/main.go create mode 100644 workhorse/cmd/gitlab-zip-cat/main.go create mode 100644 workhorse/cmd/gitlab-zip-metadata/limit/reader.go create mode 100644 workhorse/cmd/gitlab-zip-metadata/limit/reader_test.go create mode 100644 workhorse/cmd/gitlab-zip-metadata/main.go create mode 100644 workhorse/config.toml.example create mode 100644 workhorse/config_test.go create mode 100644 workhorse/doc/architecture/channel.md create mode 100644 workhorse/doc/architecture/gitlab_features.md create mode 100644 workhorse/doc/channel.md create mode 100644 workhorse/doc/development/new_features.md create mode 100644 workhorse/doc/development/tests.md create mode 100644 workhorse/doc/operations/configuration.md create mode 100644 workhorse/doc/operations/install.md create mode 100644 workhorse/gitaly_integration_test.go create mode 100644 workhorse/gitaly_test.go create mode 100644 workhorse/go.mod create mode 100644 workhorse/go.sum create mode 100644 workhorse/internal/api/api.go create mode 100644 workhorse/internal/api/block.go create mode 100644 workhorse/internal/api/block_test.go create mode 100644 workhorse/internal/api/channel_settings.go create mode 100644 workhorse/internal/api/channel_settings_test.go create mode 100644 workhorse/internal/artifacts/artifacts_store_test.go create mode 100644 workhorse/internal/artifacts/artifacts_test.go create mode 100644 workhorse/internal/artifacts/artifacts_upload.go create mode 100644 workhorse/internal/artifacts/artifacts_upload_test.go create mode 100644 workhorse/internal/artifacts/entry.go create mode 100644 workhorse/internal/artifacts/entry_test.go create mode 100644 workhorse/internal/artifacts/escape_quotes.go create mode 100644 workhorse/internal/badgateway/roundtripper.go create mode 100644 workhorse/internal/badgateway/roundtripper_test.go create mode 100644 workhorse/internal/builds/register.go create mode 100644 workhorse/internal/builds/register_test.go create mode 100644 workhorse/internal/channel/auth_checker.go create mode 100644 workhorse/internal/channel/auth_checker_test.go create mode 100644 workhorse/internal/channel/channel.go create mode 100644 workhorse/internal/channel/proxy.go create mode 100644 workhorse/internal/channel/wrappers.go create mode 100644 workhorse/internal/channel/wrappers_test.go create mode 100644 workhorse/internal/config/config.go create mode 100644 workhorse/internal/config/config_test.go create mode 100644 workhorse/internal/config/url_openers.go create mode 100644 workhorse/internal/config/url_openers_test.go create mode 100644 workhorse/internal/filestore/file_handler.go create mode 100644 workhorse/internal/filestore/file_handler_test.go create mode 100644 workhorse/internal/filestore/multi_hash.go create mode 100644 workhorse/internal/filestore/reader.go create mode 100644 workhorse/internal/filestore/reader_test.go create mode 100644 workhorse/internal/filestore/save_file_opts.go create mode 100644 workhorse/internal/filestore/save_file_opts_test.go create mode 100644 workhorse/internal/git/archive.go create mode 100644 workhorse/internal/git/archive_test.go create mode 100644 workhorse/internal/git/blob.go create mode 100644 workhorse/internal/git/blob_test.go create mode 100644 workhorse/internal/git/diff.go create mode 100644 workhorse/internal/git/error.go create mode 100644 workhorse/internal/git/format-patch.go create mode 100644 workhorse/internal/git/git-http.go create mode 100644 workhorse/internal/git/info-refs.go create mode 100644 workhorse/internal/git/pktline.go create mode 100644 workhorse/internal/git/pktline_test.go create mode 100644 workhorse/internal/git/receive-pack.go create mode 100644 workhorse/internal/git/responsewriter.go create mode 100644 workhorse/internal/git/snapshot.go create mode 100644 workhorse/internal/git/upload-pack.go create mode 100644 workhorse/internal/git/upload-pack_test.go create mode 100644 workhorse/internal/gitaly/blob.go create mode 100644 workhorse/internal/gitaly/diff.go create mode 100644 workhorse/internal/gitaly/gitaly.go create mode 100644 workhorse/internal/gitaly/gitaly_test.go create mode 100644 workhorse/internal/gitaly/namespace.go create mode 100644 workhorse/internal/gitaly/repository.go create mode 100644 workhorse/internal/gitaly/smarthttp.go create mode 100644 workhorse/internal/gitaly/unmarshal_test.go create mode 100644 workhorse/internal/headers/content_headers.go create mode 100644 workhorse/internal/headers/headers.go create mode 100644 workhorse/internal/headers/headers_test.go create mode 100644 workhorse/internal/helper/context_reader.go create mode 100644 workhorse/internal/helper/context_reader_test.go create mode 100644 workhorse/internal/helper/countingresponsewriter.go create mode 100644 workhorse/internal/helper/countingresponsewriter_test.go create mode 100644 workhorse/internal/helper/helpers.go create mode 100644 workhorse/internal/helper/helpers_test.go create mode 100644 workhorse/internal/helper/raven.go create mode 100644 workhorse/internal/helper/tempfile.go create mode 100644 workhorse/internal/helper/writeafterreader.go create mode 100644 workhorse/internal/helper/writeafterreader_test.go create mode 100644 workhorse/internal/httprs/LICENSE create mode 100644 workhorse/internal/httprs/README.md create mode 100644 workhorse/internal/httprs/httprs.go create mode 100644 workhorse/internal/httprs/httprs_test.go create mode 100644 workhorse/internal/imageresizer/image_resizer.go create mode 100644 workhorse/internal/imageresizer/image_resizer_caching.go create mode 100644 workhorse/internal/imageresizer/image_resizer_test.go create mode 100644 workhorse/internal/lfs/lfs.go create mode 100644 workhorse/internal/lfs/lfs_test.go create mode 100644 workhorse/internal/lsif_transformer/parser/cache.go create mode 100644 workhorse/internal/lsif_transformer/parser/cache_test.go create mode 100644 workhorse/internal/lsif_transformer/parser/code_hover.go create mode 100644 workhorse/internal/lsif_transformer/parser/code_hover_test.go create mode 100644 workhorse/internal/lsif_transformer/parser/docs.go create mode 100644 workhorse/internal/lsif_transformer/parser/docs_test.go create mode 100644 workhorse/internal/lsif_transformer/parser/errors.go create mode 100644 workhorse/internal/lsif_transformer/parser/errors_test.go create mode 100644 workhorse/internal/lsif_transformer/parser/hovers.go create mode 100644 workhorse/internal/lsif_transformer/parser/hovers_test.go create mode 100644 workhorse/internal/lsif_transformer/parser/id.go create mode 100644 workhorse/internal/lsif_transformer/parser/id_test.go create mode 100644 workhorse/internal/lsif_transformer/parser/parser.go create mode 100644 workhorse/internal/lsif_transformer/parser/parser_test.go create mode 100644 workhorse/internal/lsif_transformer/parser/performance_test.go create mode 100644 workhorse/internal/lsif_transformer/parser/ranges.go create mode 100644 workhorse/internal/lsif_transformer/parser/ranges_test.go create mode 100644 workhorse/internal/lsif_transformer/parser/references.go create mode 100644 workhorse/internal/lsif_transformer/parser/references_test.go create mode 100644 workhorse/internal/lsif_transformer/parser/testdata/dump.lsif.zip create mode 100644 workhorse/internal/lsif_transformer/parser/testdata/expected/lsif/main.go.json create mode 100644 workhorse/internal/lsif_transformer/parser/testdata/expected/lsif/morestrings/reverse.go.json create mode 100644 workhorse/internal/lsif_transformer/parser/testdata/workhorse.lsif.zip create mode 100644 workhorse/internal/objectstore/gocloud_object.go create mode 100644 workhorse/internal/objectstore/gocloud_object_test.go create mode 100644 workhorse/internal/objectstore/multipart.go create mode 100644 workhorse/internal/objectstore/multipart_test.go create mode 100644 workhorse/internal/objectstore/object.go create mode 100644 workhorse/internal/objectstore/object_test.go create mode 100644 workhorse/internal/objectstore/prometheus.go create mode 100644 workhorse/internal/objectstore/s3_complete_multipart_api.go create mode 100644 workhorse/internal/objectstore/s3_object.go create mode 100644 workhorse/internal/objectstore/s3_object_test.go create mode 100644 workhorse/internal/objectstore/s3_session.go create mode 100644 workhorse/internal/objectstore/s3_session_test.go create mode 100644 workhorse/internal/objectstore/test/consts.go create mode 100644 workhorse/internal/objectstore/test/gocloud_stub.go create mode 100644 workhorse/internal/objectstore/test/objectstore_stub.go create mode 100644 workhorse/internal/objectstore/test/objectstore_stub_test.go create mode 100644 workhorse/internal/objectstore/test/s3_stub.go create mode 100644 workhorse/internal/objectstore/upload_strategy.go create mode 100644 workhorse/internal/objectstore/uploader.go create mode 100644 workhorse/internal/proxy/proxy.go create mode 100644 workhorse/internal/queueing/queue.go create mode 100644 workhorse/internal/queueing/queue_test.go create mode 100644 workhorse/internal/queueing/requests.go create mode 100644 workhorse/internal/queueing/requests_test.go create mode 100644 workhorse/internal/redis/keywatcher.go create mode 100644 workhorse/internal/redis/keywatcher_test.go create mode 100644 workhorse/internal/redis/redis.go create mode 100644 workhorse/internal/redis/redis_test.go create mode 100644 workhorse/internal/secret/jwt.go create mode 100644 workhorse/internal/secret/roundtripper.go create mode 100644 workhorse/internal/secret/secret.go create mode 100644 workhorse/internal/senddata/contentprocessor/contentprocessor.go create mode 100644 workhorse/internal/senddata/contentprocessor/contentprocessor_test.go create mode 100644 workhorse/internal/senddata/injecter.go create mode 100644 workhorse/internal/senddata/senddata.go create mode 100644 workhorse/internal/senddata/writer_test.go create mode 100644 workhorse/internal/sendfile/sendfile.go create mode 100644 workhorse/internal/sendfile/sendfile_test.go create mode 100644 workhorse/internal/sendfile/testdata/sent-file.txt create mode 100644 workhorse/internal/sendurl/sendurl.go create mode 100644 workhorse/internal/sendurl/sendurl_test.go create mode 100644 workhorse/internal/staticpages/deploy_page.go create mode 100644 workhorse/internal/staticpages/deploy_page_test.go create mode 100644 workhorse/internal/staticpages/error_pages.go create mode 100644 workhorse/internal/staticpages/error_pages_test.go create mode 100644 workhorse/internal/staticpages/servefile.go create mode 100644 workhorse/internal/staticpages/servefile_test.go create mode 100644 workhorse/internal/staticpages/static.go create mode 100644 workhorse/internal/testhelper/gitaly.go create mode 100644 workhorse/internal/testhelper/testhelper.go create mode 100644 workhorse/internal/upload/accelerate.go create mode 100644 workhorse/internal/upload/body_uploader.go create mode 100644 workhorse/internal/upload/body_uploader_test.go create mode 100644 workhorse/internal/upload/exif/exif.go create mode 100644 workhorse/internal/upload/exif/exif_test.go create mode 100644 workhorse/internal/upload/exif/testdata/sample_exif.jpg create mode 100644 workhorse/internal/upload/object_storage_preparer.go create mode 100644 workhorse/internal/upload/object_storage_preparer_test.go create mode 100644 workhorse/internal/upload/rewrite.go create mode 100644 workhorse/internal/upload/saved_file_tracker.go create mode 100644 workhorse/internal/upload/saved_file_tracker_test.go create mode 100644 workhorse/internal/upload/skip_rails_authorizer.go create mode 100644 workhorse/internal/upload/uploads.go create mode 100644 workhorse/internal/upload/uploads_test.go create mode 100644 workhorse/internal/upstream/development_test.go create mode 100644 workhorse/internal/upstream/handlers.go create mode 100644 workhorse/internal/upstream/handlers_test.go create mode 100644 workhorse/internal/upstream/metrics.go create mode 100644 workhorse/internal/upstream/notfoundunless.go create mode 100644 workhorse/internal/upstream/roundtripper/roundtripper.go create mode 100644 workhorse/internal/upstream/roundtripper/roundtripper_test.go create mode 100644 workhorse/internal/upstream/roundtripper/transport.go create mode 100644 workhorse/internal/upstream/routes.go create mode 100644 workhorse/internal/upstream/upstream.go create mode 100644 workhorse/internal/urlprefix/urlprefix.go create mode 100644 workhorse/internal/utils/svg/LICENSE create mode 100644 workhorse/internal/utils/svg/README.md create mode 100644 workhorse/internal/utils/svg/svg.go create mode 100644 workhorse/internal/zipartifacts/.gitignore create mode 100644 workhorse/internal/zipartifacts/entry.go create mode 100644 workhorse/internal/zipartifacts/errors.go create mode 100644 workhorse/internal/zipartifacts/errors_test.go create mode 100644 workhorse/internal/zipartifacts/metadata.go create mode 100644 workhorse/internal/zipartifacts/metadata_test.go create mode 100644 workhorse/internal/zipartifacts/open_archive.go create mode 100644 workhorse/internal/zipartifacts/open_archive_test.go create mode 100644 workhorse/jobs_test.go create mode 100644 workhorse/logging.go create mode 100644 workhorse/main.go create mode 100644 workhorse/main_test.go create mode 100644 workhorse/proxy_test.go create mode 100644 workhorse/raven.go create mode 100644 workhorse/sendfile_test.go create mode 100644 workhorse/testdata/.gitkeep create mode 100644 workhorse/testdata/artifacts-archive.zip create mode 100644 workhorse/testdata/audio.mp3 create mode 100644 workhorse/testdata/file-ä.pdf create mode 100644 workhorse/testdata/file.bmpr create mode 100644 workhorse/testdata/file.ipynb create mode 100644 workhorse/testdata/file.pdf create mode 100644 workhorse/testdata/file.rdoc create mode 100644 workhorse/testdata/file.sketch create mode 100644 workhorse/testdata/file.stl create mode 100644 workhorse/testdata/file.swf create mode 100644 workhorse/testdata/forgedfile.png create mode 100644 workhorse/testdata/image.jpg create mode 100644 workhorse/testdata/image.png create mode 100644 workhorse/testdata/image.svg create mode 100644 workhorse/testdata/image_single_pixel.jpg create mode 100644 workhorse/testdata/lsif/invalid.lsif.zip create mode 100644 workhorse/testdata/lsif/valid.lsif.zip create mode 100644 workhorse/testdata/receive-pack-fixture.txt create mode 100644 workhorse/testdata/tarfile.tar create mode 100644 workhorse/testdata/test-secret create mode 100644 workhorse/testdata/upload-pack-fixture.txt create mode 100644 workhorse/testdata/video.mp4 create mode 100644 workhorse/tools.go create mode 100644 workhorse/upload_test.go diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4ea5ad1b401..5e54f9cde35 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -109,3 +109,4 @@ include: - local: .gitlab/ci/releases.gitlab-ci.yml - local: .gitlab/ci/notify.gitlab-ci.yml - local: .gitlab/ci/dast.gitlab-ci.yml + - local: .gitlab/ci/workhorse.gitlab-ci.yml diff --git a/.gitlab/ci/workhorse.gitlab-ci.yml b/.gitlab/ci/workhorse.gitlab-ci.yml new file mode 100644 index 00000000000..9b52b1f0020 --- /dev/null +++ b/.gitlab/ci/workhorse.gitlab-ci.yml @@ -0,0 +1,9 @@ +workhorse: + image: golang:1.14 + stage: test + needs: [] + script: + - rm .git/hooks/post-checkout + - git checkout . + - scripts/update-workhorse check + - make -C workhorse diff --git a/.rubocop.yml b/.rubocop.yml index 125b2db5cf8..2609b9a1ded 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -32,6 +32,7 @@ AllCops: - 'builds/**/*' - 'plugins/**/*' - 'file_hooks/**/*' + - 'workhorse/**/*' CacheRootDirectory: tmp MaxFilesInCache: 18000 diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index e950bb0bb7b..656b97ce9ae 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -a5a5d83630f13c3eb3e1650a24423fc5e9bc47d2 +3cbd24e3e2fd09eb526d04f8a419f6d103c440dc diff --git a/Gemfile b/Gemfile index b0f451854a5..44390361350 100644 --- a/Gemfile +++ b/Gemfile @@ -115,7 +115,7 @@ gem 'carrierwave', '~> 1.3' gem 'mini_magick', '~> 4.10.1' # for backups -gem 'fog-aws', '~> 3.6' +gem 'fog-aws', '~> 3.7' # Locked until fog-google resolves https://github.com/fog/fog-google/issues/421. # Also see config/initializers/fog_core_patch.rb. gem 'fog-core', '= 2.1.0' @@ -312,7 +312,7 @@ gem 'gitlab-pg_query', '~> 1.3', require: 'pg_query' gem 'premailer-rails', '~> 1.10.3' # LabKit: Tracing and Correlation -gem 'gitlab-labkit', '0.13.1' +gem 'gitlab-labkit', '0.13.3' # I18n gem 'ruby_parser', '~> 3.15', require: false diff --git a/Gemfile.lock b/Gemfile.lock index b8a7c935f78..8967edd1cf5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -363,7 +363,7 @@ GEM fog-json ipaddress (~> 0.8) xml-simple (~> 1.1) - fog-aws (3.6.7) + fog-aws (3.7.0) fog-core (~> 2.1) fog-json (~> 1.1) fog-xml (~> 0.1) @@ -434,9 +434,10 @@ GEM fog-json (~> 1.2.0) mime-types ms_rest_azure (~> 0.12.0) - gitlab-labkit (0.13.1) + gitlab-labkit (0.13.3) actionpack (>= 5.0.0, < 6.1.0) activesupport (>= 5.0.0, < 6.1.0) + gitlab-pg_query (~> 1.3) grpc (~> 1.19) jaeger-client (~> 1.1) opentracing (~> 0.4) @@ -1335,7 +1336,7 @@ DEPENDENCIES flipper-active_support_cache_store (~> 0.17.1) flowdock (~> 0.7) fog-aliyun (~> 0.3) - fog-aws (~> 3.6) + fog-aws (~> 3.7) fog-core (= 2.1.0) fog-google (~> 1.11) fog-local (~> 0.6) @@ -1352,7 +1353,7 @@ DEPENDENCIES github-markup (~> 1.7.0) gitlab-chronic (~> 0.10.5) gitlab-fog-azure-rm (~> 1.0) - gitlab-labkit (= 0.13.1) + gitlab-labkit (= 0.13.3) gitlab-license (~> 1.0) gitlab-mail_room (~> 0.0.7) gitlab-markup (~> 1.7.1) diff --git a/app/assets/javascripts/commit/image_file.js b/app/assets/javascripts/commit/image_file.js index 542890d9b04..28abe558f53 100644 --- a/app/assets/javascripts/commit/image_file.js +++ b/app/assets/javascripts/commit/image_file.js @@ -27,7 +27,7 @@ export default class ImageFile { initViewModes() { const viewMode = viewModes[0]; - $('.view-modes', this.file).removeClass('hide'); + $('.view-modes', this.file).removeClass('gl-display-none'); $('.view-modes-menu', this.file).on('click', 'li', event => { if (!$(event.currentTarget).hasClass('active')) { return this.activateViewMode(event.currentTarget.className); @@ -42,12 +42,10 @@ export default class ImageFile { .filter(`.${viewMode}`) .addClass('active'); - // eslint-disable-next-line no-jquery/no-fade - return $(`.view:visible:not(.${viewMode})`, this.file).fadeOut(200, () => { - // eslint-disable-next-line no-jquery/no-fade - $(`.view.${viewMode}`, this.file).fadeIn(200); - return this.initView(viewMode); - }); + $(`.view:visible:not(.${viewMode})`, this.file).addClass('gl-display-none'); + $(`.view.${viewMode}`, this.file).removeClass('gl-display-none'); + + return this.initView(viewMode); } initView(viewMode) { @@ -120,7 +118,7 @@ export default class ImageFile { return this.requestImageInfo($('img', wrap), (width, height) => { $('.image-info .meta-width', wrap).text(`${width}px`); $('.image-info .meta-height', wrap).text(`${height}px`); - return $('.image-info', wrap).removeClass('hide'); + return $('.image-info', wrap).removeClass('gl-display-none'); }); }); }, diff --git a/app/assets/javascripts/due_date_select.js b/app/assets/javascripts/due_date_select.js index 5674cc8495d..ffb5232ca75 100644 --- a/app/assets/javascripts/due_date_select.js +++ b/app/assets/javascripts/due_date_select.js @@ -119,20 +119,18 @@ class DueDateSelect { } updateIssueBoardIssue() { - // eslint-disable-next-line no-jquery/no-fade - this.$loading.fadeIn(); + this.$loading.removeClass('gl-display-none'); this.$dropdown.trigger('loading.gl.dropdown'); this.$selectbox.hide(); this.$value.css('display', ''); - const fadeOutLoader = () => { - // eslint-disable-next-line no-jquery/no-fade - this.$loading.fadeOut(); + const hideLoader = () => { + this.$loading.addClass('gl-display-none'); }; boardsStore.detail.issue .update(this.$dropdown.attr('data-issue-update')) - .then(fadeOutLoader) - .catch(fadeOutLoader); + .then(hideLoader) + .catch(hideLoader); } submitSelectedDate(isDropdown) { @@ -140,8 +138,7 @@ class DueDateSelect { const hasDueDate = this.displayedDate !== __('None'); const displayedDateStyle = hasDueDate ? 'bold' : 'no-value'; - // eslint-disable-next-line no-jquery/no-fade - this.$loading.removeClass('hidden').fadeIn(); + this.$loading.removeClass('gl-display-none'); if (isDropdown) { this.$dropdown.trigger('loading.gl.dropdown'); @@ -164,8 +161,7 @@ class DueDateSelect { } this.$sidebarCollapsedValue.attr('data-original-title', tooltipText); - // eslint-disable-next-line no-jquery/no-fade - return this.$loading.fadeOut(); + return this.$loading.addClass('gl-display-none'); }); } } @@ -211,7 +207,8 @@ export default class DueDateSelectors { initIssuableSelect() { const $loading = $('.js-issuable-update .due_date') .find('.block-loading') - .hide(); + .removeClass('hidden') + .addClass('gl-display-none'); $('.js-due-date-select').each((i, dropdown) => { const $dropdown = $(dropdown); diff --git a/app/assets/javascripts/filterable_list.js b/app/assets/javascripts/filterable_list.js index 4aad54bed55..eabf3b0846e 100644 --- a/app/assets/javascripts/filterable_list.js +++ b/app/assets/javascripts/filterable_list.js @@ -64,8 +64,7 @@ export default class FilterableList { return false; } - // eslint-disable-next-line no-jquery/no-fade - $(this.listHolderElement).fadeTo(250, 0.5); + $(this.listHolderElement).addClass('gl-opacity-5'); this.isBusy = true; @@ -99,7 +98,6 @@ export default class FilterableList { onFilterComplete() { this.isBusy = false; - // eslint-disable-next-line no-jquery/no-fade - $(this.listHolderElement).fadeTo(250, 1); + $(this.listHolderElement).removeClass('gl-opacity-5'); } } diff --git a/app/assets/javascripts/labels_select.js b/app/assets/javascripts/labels_select.js index 8bbd4300c96..ac5aa24d5d8 100644 --- a/app/assets/javascripts/labels_select.js +++ b/app/assets/javascripts/labels_select.js @@ -45,8 +45,7 @@ export default class LabelsSelect { const $sidebarCollapsedValue = $block.find('.sidebar-collapsed-icon span'); const $value = $block.find('.value'); const $dropdownMenu = $dropdown.parent().find('.dropdown-menu'); - // eslint-disable-next-line no-jquery/no-fade - const $loading = $block.find('.block-loading').fadeOut(); + const $loading = $block.find('.block-loading').addClass('gl-display-none'); const fieldName = $dropdown.data('fieldName'); let initialSelected = $selectbox .find(`input[name="${$dropdown.data('fieldName')}"]`) @@ -83,15 +82,13 @@ export default class LabelsSelect { if (!selected.length) { data[abilityName].label_ids = ['']; } - // eslint-disable-next-line no-jquery/no-fade - $loading.removeClass('hidden').fadeIn(); + $loading.removeClass('gl-display-none'); $dropdown.trigger('loading.gl.dropdown'); axios .put(issueUpdateURL, data) .then(({ data }) => { let template; - // eslint-disable-next-line no-jquery/no-fade - $loading.fadeOut(); + $loading.addClass('gl-display-none'); $dropdown.trigger('loaded.gl.dropdown'); $selectbox.hide(); data.issueUpdateURL = issueUpdateURL; @@ -340,9 +337,8 @@ export default class LabelsSelect { const { $el, e, isMarking } = clickEvent; const label = clickEvent.selectedObj; - const fadeOutLoader = () => { - // eslint-disable-next-line no-jquery/no-fade - $loading.fadeOut(); + const hideLoader = () => { + $loading.addClass('gl-display-none'); }; const page = $('body').attr('data-page'); @@ -403,8 +399,7 @@ export default class LabelsSelect { boardsStore.detail.issue.labels = labels; } - // eslint-disable-next-line no-jquery/no-fade - $loading.fadeIn(); + $loading.removeClass('gl-display-none'); const oldLabels = boardsStore.detail.issue.labels; boardsStore.detail.issue @@ -420,8 +415,8 @@ export default class LabelsSelect { .removeClass('is-active'); } }) - .then(fadeOutLoader) - .catch(fadeOutLoader); + .then(hideLoader) + .catch(hideLoader); } else if (handleClick) { e.preventDefault(); handleClick(label); diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js index abf25ab5f24..f5ba933d012 100644 --- a/app/assets/javascripts/main.js +++ b/app/assets/javascripts/main.js @@ -136,10 +136,9 @@ function deferredInitialisation() { $('.remove-row').on('ajax:success', function removeRowAjaxSuccessCallback() { tooltips.dispose(this); - // eslint-disable-next-line no-jquery/no-fade $(this) .closest('li') - .fadeOut(); + .addClass('gl-display-none!'); }); $('.js-remove-tr').on('ajax:before', function removeTRAjaxBeforeCallback() { @@ -147,10 +146,9 @@ function deferredInitialisation() { }); $('.js-remove-tr').on('ajax:success', function removeTRAjaxSuccessCallback() { - // eslint-disable-next-line no-jquery/no-fade $(this) .closest('tr') - .fadeOut(); + .addClass('gl-display-none!'); }); const glTooltipDelay = localStorage.getItem('gl-tooltip-delay'); diff --git a/app/assets/javascripts/milestone_select.js b/app/assets/javascripts/milestone_select.js index 52f6786ca28..baa5e41989b 100644 --- a/app/assets/javascripts/milestone_select.js +++ b/app/assets/javascripts/milestone_select.js @@ -53,8 +53,7 @@ export default class MilestoneSelect { const $block = $selectBox.closest('.block'); const $sidebarCollapsedValue = $block.find('.sidebar-collapsed-icon'); const $value = $block.find('.value'); - // eslint-disable-next-line no-jquery/no-fade - const $loading = $block.find('.block-loading').fadeOut(); + const $loading = $block.find('.block-loading').addClass('gl-display-none'); selectedMilestoneDefault = showAny ? '' : null; selectedMilestoneDefault = showNo && defaultNo ? __('No milestone') : selectedMilestoneDefault; @@ -255,34 +254,29 @@ export default class MilestoneSelect { } $dropdown.trigger('loading.gl.dropdown'); - // eslint-disable-next-line no-jquery/no-fade - $loading.removeClass('hidden').fadeIn(); + $loading.removeClass('gl-display-none'); boardsStore.detail.issue .update($dropdown.attr('data-issue-update')) .then(() => { $dropdown.trigger('loaded.gl.dropdown'); - // eslint-disable-next-line no-jquery/no-fade - $loading.fadeOut(); + $loading.addClass('gl-display-none'); }) .catch(() => { - // eslint-disable-next-line no-jquery/no-fade - $loading.fadeOut(); + $loading.addClass('gl-display-none'); }); } else { selected = $selectBox.find('input[type="hidden"]').val(); data = {}; data[abilityName] = {}; data[abilityName].milestone_id = selected != null ? selected : null; - // eslint-disable-next-line no-jquery/no-fade - $loading.removeClass('hidden').fadeIn(); + $loading.removeClass('gl-display-none'); $dropdown.trigger('loading.gl.dropdown'); return axios .put(issueUpdateURL, data) .then(({ data }) => { $dropdown.trigger('loaded.gl.dropdown'); - // eslint-disable-next-line no-jquery/no-fade - $loading.fadeOut(); + $loading.addClass('gl-display-none'); $selectBox.hide(); $value.css('display', ''); if (data.milestone != null) { @@ -313,8 +307,7 @@ export default class MilestoneSelect { .text(__('None')); }) .catch(() => { - // eslint-disable-next-line no-jquery/no-fade - $loading.fadeOut(); + $loading.addClass('gl-display-none'); }); } }, diff --git a/app/assets/javascripts/users_select/index.js b/app/assets/javascripts/users_select/index.js index fbede49e9e8..971c9978865 100644 --- a/app/assets/javascripts/users_select/index.js +++ b/app/assets/javascripts/users_select/index.js @@ -63,8 +63,7 @@ function UsersSelect(currentUser, els, options = {}) { const abilityName = $dropdown.data('abilityName'); let $value = $block.find('.value'); const $collapsedSidebar = $block.find('.sidebar-collapsed-user'); - // eslint-disable-next-line no-jquery/no-fade - const $loading = $block.find('.block-loading').fadeOut(); + const $loading = $block.find('.block-loading').addClass('gl-display-none'); const selectedIdDefault = defaultNullUser && showNullUser ? 0 : null; let selectedId = $dropdown.data('selected'); let assignTo; @@ -205,16 +204,14 @@ function UsersSelect(currentUser, els, options = {}) { const data = {}; data[abilityName] = {}; data[abilityName].assignee_id = selected != null ? selected : null; - // eslint-disable-next-line no-jquery/no-fade - $loading.removeClass('hidden').fadeIn(); + $loading.removeClass('gl-display-none'); $dropdown.trigger('loading.gl.dropdown'); return axios.put(issueURL, data).then(({ data }) => { let user = {}; let tooltipTitle = user.name; $dropdown.trigger('loaded.gl.dropdown'); - // eslint-disable-next-line no-jquery/no-fade - $loading.fadeOut(); + $loading.addClass('gl-display-none'); if (data.assignee) { user = { name: data.assignee.name, diff --git a/app/assets/stylesheets/page_bundles/oncall_schedules.scss b/app/assets/stylesheets/page_bundles/oncall_schedules.scss new file mode 100644 index 00000000000..4a96d4fa612 --- /dev/null +++ b/app/assets/stylesheets/page_bundles/oncall_schedules.scss @@ -0,0 +1,30 @@ +@import 'mixins_and_variables_and_functions'; + +@mixin inset-border-1-red-500($important: false) { + box-shadow: inset 0 0 0 $gl-border-size-1 $red-500 if-important($important); +} + +.timezone-dropdown { + .dropdown-menu { + @include gl-w-full; + } + + .gl-new-dropdown-item-text-primary { + @include gl-overflow-hidden; + @include gl-text-overflow-ellipsis; + } +} + +.modal-footer { + @include gl-bg-gray-10; +} + +.invalid-dropdown { + .gl-dropdown-toggle { + @include inset-border-1-red-500; + + &:hover { + @include inset-border-1-red-500(true); + } + } +} diff --git a/app/controllers/registrations/welcome_controller.rb b/app/controllers/registrations/welcome_controller.rb index 5b3f78a92ad..4a6fef56ef5 100644 --- a/app/controllers/registrations/welcome_controller.rb +++ b/app/controllers/registrations/welcome_controller.rb @@ -45,7 +45,7 @@ module Registrations end def update_params - params.require(:user).permit(:role, :setup_for_company) + params.require(:user).permit(:role, :other_role, :setup_for_company) end def requires_confirmation?(user) diff --git a/app/helpers/ci/pipeline_schedules_helper.rb b/app/helpers/ci/pipeline_schedules_helper.rb deleted file mode 100644 index 20e5c90a60e..00000000000 --- a/app/helpers/ci/pipeline_schedules_helper.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -module Ci - module PipelineSchedulesHelper - def timezone_data - ActiveSupport::TimeZone.all.map do |timezone| - { - name: timezone.name, - offset: timezone.now.utc_offset, - identifier: timezone.tzinfo.identifier - } - end - end - end -end diff --git a/app/helpers/time_zone_helper.rb b/app/helpers/time_zone_helper.rb new file mode 100644 index 00000000000..daf99ad9b5e --- /dev/null +++ b/app/helpers/time_zone_helper.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module TimeZoneHelper + def timezone_data + ActiveSupport::TimeZone.all.map do |timezone| + { + identifier: timezone.tzinfo.identifier, + name: timezone.name, + abbr: timezone.tzinfo.strftime('%Z'), + offset: timezone.now.utc_offset, + formatted_offset: timezone.now.formatted_offset + } + end + end +end diff --git a/app/models/pages/lookup_path.rb b/app/models/pages/lookup_path.rb index e33d09559ae..84928468ad1 100644 --- a/app/models/pages/lookup_path.rb +++ b/app/models/pages/lookup_path.rb @@ -41,7 +41,7 @@ module Pages def deployment strong_memoize(:deployment) do - next unless Feature.enabled?(:pages_serve_from_deployments, project) + next unless Feature.enabled?(:pages_serve_from_deployments, project, default_enabled: true) project.pages_metadatum.pages_deployment end diff --git a/app/models/user.rb b/app/models/user.rb index db296d28e43..2868b568e4a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -289,6 +289,7 @@ class User < ApplicationRecord delegate :path, to: :namespace, allow_nil: true, prefix: true delegate :job_title, :job_title=, to: :user_detail, allow_nil: true + delegate :other_role, :other_role=, to: :user_detail, allow_nil: true delegate :bio, :bio=, :bio_html, to: :user_detail, allow_nil: true delegate :webauthn_xid, :webauthn_xid=, to: :user_detail, allow_nil: true diff --git a/app/services/system_hooks_service.rb b/app/services/system_hooks_service.rb index 0d369c23b57..881a139437a 100644 --- a/app/services/system_hooks_service.rb +++ b/app/services/system_hooks_service.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class SystemHooksService + BUILDER_DRIVEN_EVENT_DATA_AVAILABLE_FOR_CLASSES = [GroupMember].freeze + def execute_hooks_for(model, event) data = build_event_data(model, event) @@ -20,6 +22,9 @@ class SystemHooksService private def build_event_data(model, event) + # return entire event data from its builder class, if available. + return builder_driven_event_data(model, event) if builder_driven_event_data_available?(model) + data = { event_name: build_event_name(model, event), created_at: model.created_at&.xmlschema, @@ -62,8 +67,6 @@ class SystemHooksService old_full_path: model.full_path_before_last_save ) end - when GroupMember - data.merge!(group_member_data(model)) end data @@ -75,10 +78,6 @@ class SystemHooksService return "user_add_to_team" if event == :create return "user_remove_from_team" if event == :destroy return "user_update_for_team" if event == :update - when GroupMember - return 'user_add_to_group' if event == :create - return 'user_remove_from_group' if event == :destroy - return 'user_update_for_group' if event == :update else "#{model.class.name.downcase}_#{event}" end @@ -128,19 +127,6 @@ class SystemHooksService } end - def group_member_data(model) - { - group_name: model.group.name, - group_path: model.group.path, - group_id: model.group.id, - user_username: model.user.username, - user_name: model.user.name, - user_email: model.user.email, - user_id: model.user.id, - group_access: model.human_access - } - end - def user_data(model) { name: model.name, @@ -149,6 +135,17 @@ class SystemHooksService username: model.username } end + + def builder_driven_event_data_available?(model) + model.class.in?(BUILDER_DRIVEN_EVENT_DATA_AVAILABLE_FOR_CLASSES) + end + + def builder_driven_event_data(model, event) + case model + when GroupMember + Gitlab::HookData::GroupMemberBuilder.new(model).build(event) + end + end end SystemHooksService.prepend_if_ee('EE::SystemHooksService') diff --git a/app/views/projects/diffs/_replaced_image_diff.html.haml b/app/views/projects/diffs/_replaced_image_diff.html.haml index 566dfe798c6..1f9533ade83 100644 --- a/app/views/projects/diffs/_replaced_image_diff.html.haml +++ b/app/views/projects/diffs/_replaced_image_diff.html.haml @@ -14,7 +14,7 @@ .wrap .frame.deleted = image_tag(old_blob_raw_url, alt: diff_file.old_path, lazy: false) - %p.image-info.hide + %p.image-info.gl-display-none %span.meta-filesize= number_to_human_size(old_blob.size) | %strong W: @@ -24,7 +24,7 @@ %span.meta-height .wrap = render partial: "projects/diffs/image_diff_frame", locals: { class_name: "added js-image-frame #{class_name}", position: position, note_type: DiffNote.name, image_path: blob_raw_url, alt: diff_file.new_path } - %p.image-info.hide + %p.image-info.gl-display-none %span.meta-filesize= number_to_human_size(blob.size) | %strong W: @@ -33,7 +33,7 @@ %strong H: %span.meta-height - .swipe.view.hide + .swipe.view.gl-display-none .swipe-frame .frame.deleted.old-diff = image_tag(old_blob_raw_url, alt: diff_file.old_path, lazy: false) @@ -43,7 +43,7 @@ %span.top-handle %span.bottom-handle - .onion-skin.view.hide + .onion-skin.view.gl-display-none .onion-skin-frame .frame.deleted = image_tag(old_blob_raw_url, alt: diff_file.old_path, lazy: false) @@ -54,7 +54,7 @@ .dragger{ :style => "left: 0px;" } .opaque -.view-modes.hide +.view-modes.gl-display-none %ul.view-modes-menu %li.two-up{ data: { mode: 'two-up' } } 2-up %li.swipe{ data: { mode: 'swipe' } } Swipe diff --git a/app/views/registrations/welcome/show.html.haml b/app/views/registrations/welcome/show.html.haml index 278c0ff7739..0701f4e65e3 100644 --- a/app/views/registrations/welcome/show.html.haml +++ b/app/views/registrations/welcome/show.html.haml @@ -14,8 +14,16 @@ .row .form-group.col-sm-12 = f.label :role, _('Role'), class: 'label-bold' - = f.select :role, ::User.roles.keys.map { |role| [role.titleize, role] }, {}, class: 'form-control', autofocus: true - .form-text.gl-text-gray-500.gl-mt-3= _('This will help us personalize your onboarding experience.') + = f.select :role, ::User.roles.keys.map { |role| [role.titleize, role] }, {}, class: 'form-control js-user-role-dropdown', autofocus: true + - if Feature.enabled?(:user_other_role_details) + .row + .form-group.col-sm-12.js-other-role-group{ class: ("hidden") } + = f.label :other_role, _('What is your job title? (optional)'), class: 'form-check-label gl-mb-3' + = f.text_field :other_role, class: 'form-control' + - else + .row + .form-group.col-sm-12 + .form-text.gl-text-gray-500.gl-mt-0.gl-line-height-normal.gl-px-1= _('This will help us personalize your onboarding experience.') = render_if_exists "registrations/welcome/setup_for_company", f: f .row .form-group.col-sm-12.gl-mb-0 diff --git a/changelogs/unreleased/255170-eng-use-text-field-to-capture-further-details-of-other-role-type-d.yml b/changelogs/unreleased/255170-eng-use-text-field-to-capture-further-details-of-other-role-type-d.yml new file mode 100644 index 00000000000..72cc52f2755 --- /dev/null +++ b/changelogs/unreleased/255170-eng-use-text-field-to-capture-further-details-of-other-role-type-d.yml @@ -0,0 +1,5 @@ +--- +title: Add other role column in user details table +merge_request: 45635 +author: +type: added diff --git a/changelogs/unreleased/268040-fj-avoid-initializing-wiki-in-import-when-not-present.yml b/changelogs/unreleased/268040-fj-avoid-initializing-wiki-in-import-when-not-present.yml new file mode 100644 index 00000000000..dddd2abee76 --- /dev/null +++ b/changelogs/unreleased/268040-fj-avoid-initializing-wiki-in-import-when-not-present.yml @@ -0,0 +1,5 @@ +--- +title: Avoid creating wiki empty repo when not present in export files +merge_request: 48890 +author: +type: changed diff --git a/changelogs/unreleased/281178-pages-serve-from-deployments-configuration.yml b/changelogs/unreleased/281178-pages-serve-from-deployments-configuration.yml new file mode 100644 index 00000000000..c9497f38bec --- /dev/null +++ b/changelogs/unreleased/281178-pages-serve-from-deployments-configuration.yml @@ -0,0 +1,5 @@ +--- +title: Enable pages_serve_from_deployments FF by default +merge_request: 48974 +author: +type: changed diff --git a/changelogs/unreleased/sh-update-fog-3-7-0.yml b/changelogs/unreleased/sh-update-fog-3-7-0.yml new file mode 100644 index 00000000000..10bdd3bf986 --- /dev/null +++ b/changelogs/unreleased/sh-update-fog-3-7-0.yml @@ -0,0 +1,5 @@ +--- +title: Upgrade fog-aws to v3.7.0 +merge_request: 48921 +author: +type: changed diff --git a/config/application.rb b/config/application.rb index e8aebec086b..023b1a059ac 100644 --- a/config/application.rb +++ b/config/application.rb @@ -203,6 +203,7 @@ module Gitlab config.assets.precompile << "page_bundles/wiki.css" config.assets.precompile << "page_bundles/xterm.css" config.assets.precompile << "page_bundles/alert_management_settings.css" + config.assets.precompile << "page_bundles/oncall_schedules.css" config.assets.precompile << "lazy_bundles/cropper.css" config.assets.precompile << "lazy_bundles/select2.css" config.assets.precompile << "performance_bar.css" diff --git a/config/feature_flags/development/pages_serve_from_deployments.yml b/config/feature_flags/development/pages_serve_from_deployments.yml index ab75ec16952..f73e9f5b49d 100644 --- a/config/feature_flags/development/pages_serve_from_deployments.yml +++ b/config/feature_flags/development/pages_serve_from_deployments.yml @@ -5,4 +5,4 @@ rollout_issue_url: https://gitlab.com/gitlab-com/gl-infra/production/-/issues/29 milestone: '13.6' type: development group: group::Release Management -default_enabled: false +default_enabled: true diff --git a/config/feature_flags/development/user_other_role_details.yml b/config/feature_flags/development/user_other_role_details.yml new file mode 100644 index 00000000000..47666a1d5c5 --- /dev/null +++ b/config/feature_flags/development/user_other_role_details.yml @@ -0,0 +1,8 @@ +--- +name: user_other_role_details +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/45635 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/255170 +milestone: '13.7' +type: development +group: group::conversion +default_enabled: false diff --git a/danger/commit_messages/Dangerfile b/danger/commit_messages/Dangerfile index 4e17db60471..1ac77af4736 100644 --- a/danger/commit_messages/Dangerfile +++ b/danger/commit_messages/Dangerfile @@ -139,4 +139,12 @@ def warn_or_fail_commits(failed_linters, default_to_fail: true) end end -lint_commits(git.commits) +# As part of https://gitlab.com/groups/gitlab-org/-/epics/4826 we are +# vendoring workhorse commits from the stand-alone gitlab-workhorse +# repo. There is no point in linting commits that we want to vendor as +# is. +def workhorse_changes? + git.diff.any? { |file| file.path.start_with?('workhorse/') } +end + +lint_commits(git.commits) unless workhorse_changes? diff --git a/db/migrate/20201127141433_add_other_role_to_user_details.rb b/db/migrate/20201127141433_add_other_role_to_user_details.rb new file mode 100644 index 00000000000..586dbb033fd --- /dev/null +++ b/db/migrate/20201127141433_add_other_role_to_user_details.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +class AddOtherRoleToUserDetails < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + unless column_exists?(:user_details, :other_role) + with_lock_retries do + add_column :user_details, :other_role, :text + end + end + + add_text_limit :user_details, :other_role, 100 + end + + def down + with_lock_retries do + remove_column :user_details, :other_role + end + end +end diff --git a/db/schema_migrations/20201127141433 b/db/schema_migrations/20201127141433 new file mode 100644 index 00000000000..b3db67b566e --- /dev/null +++ b/db/schema_migrations/20201127141433 @@ -0,0 +1 @@ +70fae11d6a73ea8b2ad75c574716f48e9cc78a58ae23db48e74840646fd46672 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 8969a3783df..eea70338aeb 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -16961,7 +16961,9 @@ CREATE TABLE user_details ( bio_html text, cached_markdown_version integer, webauthn_xid text, - CONSTRAINT check_245664af82 CHECK ((char_length(webauthn_xid) <= 100)) + other_role text, + CONSTRAINT check_245664af82 CHECK ((char_length(webauthn_xid) <= 100)), + CONSTRAINT check_b132136b01 CHECK ((char_length(other_role) <= 100)) ); CREATE SEQUENCE user_details_user_id_seq diff --git a/doc/administration/auth/ldap/index.md b/doc/administration/auth/ldap/index.md index 894ceb72926..ca959e6aecf 100644 --- a/doc/administration/auth/ldap/index.md +++ b/doc/administration/auth/ldap/index.md @@ -175,7 +175,7 @@ production: | `password` | The password of the bind user. | no | `'your_great_password'` | | `encryption` | Encryption method. The `method` key is deprecated in favor of `encryption`. | yes | `'start_tls'` or `'simple_tls'` or `'plain'` | | `verify_certificates` | Enables SSL certificate verification if encryption method is `start_tls` or `simple_tls`. Defaults to true. | no | boolean | -| `timeout` | Set a timeout, in seconds, for LDAP queries. This helps avoid blocking a request if the LDAP server becomes unresponsive. A value of 0 means there is no timeout. | no | `10` or `30` | +| `timeout` | Set a timeout, in seconds, for LDAP queries. This helps avoid blocking a request if the LDAP server becomes unresponsive. A value of `0` means there is no timeout. (default: `10`) | no | `10` or `30` | | `active_directory` | This setting specifies if LDAP server is Active Directory LDAP server. For non-AD servers it skips the AD specific queries. If your LDAP server is not AD, set this to false. | no | boolean | | `allow_username_or_email_login` | If enabled, GitLab ignores everything after the first `@` in the LDAP username submitted by the user on sign-in. If you are using `uid: 'userPrincipalName'` on ActiveDirectory you need to disable this setting, because the userPrincipalName contains an `@`. | no | boolean | | `block_auto_created_users` | To maintain tight control over the number of billable users on your GitLab installation, enable this setting to keep new users blocked until they have been cleared by an administrator (default: false). | no | boolean | diff --git a/doc/development/README.md b/doc/development/README.md index 75ea6ae5f3b..e2dd12c3e2c 100644 --- a/doc/development/README.md +++ b/doc/development/README.md @@ -135,6 +135,7 @@ from: - [Wikis development guide](wikis.md) - [Newlines style guide](newlines_styleguide.md) - [Image scaling guide](image_scaling.md) +- [Export to CSV](export_csv.md) ## Performance guides diff --git a/doc/development/product_analytics/usage_ping.md b/doc/development/product_analytics/usage_ping.md index 61171b414cd..7293397c9be 100644 --- a/doc/development/product_analytics/usage_ping.md +++ b/doc/development/product_analytics/usage_ping.md @@ -395,7 +395,9 @@ Implemented using Redis methods [PFADD](https://redis.io/commands/pfadd) and [PF API requests are protected by checking for a valid CSRF token. - In order to be able to increment the values the related feature `usage_data` should be enabled. + In order to increment the values, the related feature `usage_data_` should be + set to `default_enabled: true`. For more information, see + [Feature flags in development of GitLab](../feature_flags/index.md). ```plaintext POST /usage_data/increment_unique_users @@ -418,7 +420,10 @@ Implemented using Redis methods [PFADD](https://redis.io/commands/pfadd) and [PF Example usage for an existing event already defined in [known events](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data_counters/known_events/): - Note that `usage_data_api` and `usage_data_#{event_name}` should be enabled in order to be able to track events + Usage Data API is behind `usage_data_api` feature flag which, as of GitLab 13.7, is + now set to `default_enabled: true`. + + Each event tracked using Usage Data API is behind a feature flag `usage_data_#{event_name}` which should be `default_enabled: true` ```javascript import api from '~/api'; diff --git a/doc/redirects.sh b/doc/redirects.sh deleted file mode 100644 index 92c0297fe57..00000000000 --- a/doc/redirects.sh +++ /dev/null @@ -1,202 +0,0 @@ -echo '\n\n' >> install/redis.md -echo '\n\n' >> install/google-protobuf.md -echo '\n\n' >> install/ldap.md -echo '\n\n' >> license/README.md -echo '\n\n' >> customization/welcome_message.md -echo '\n\n' >> customization/issue_closing.md -echo '\n\n' >> customization/help_message.md -echo '\n\n' >> customization/system_header_and_footer_messages.md -echo '\n\n' >> customization/branded_page_and_email_header.md -echo '\n\n' >> customization/issue_and_merge_request_template.md -echo '\n\n' >> customization/new_project_page.md -echo '\n\n' >> customization/index.md -echo '\n\n' >> customization/branded_login_page.md -echo '\n\n' >> customization/libravatar.md -echo '\n\n' >> customization/favicon.md -echo '\n\n' >> development/ux_guide/users.md -echo '\n\n' >> development/prometheus.md -echo '\n\n' >> development/documentation/feature-change-workflow.md -echo '\n\n' >> development/documentation/improvement-workflow.md -echo '\n\n' >> development/documentation/index.md -echo '\n\n' >> development/rolling_out_changes_using_feature_flags.md -echo '\n\n' >> development/event_tracking/backend.md -echo '\n\n' >> development/event_tracking/index.md -echo '\n\n' >> development/event_tracking/frontend.md -echo '\n\n' >> development/product_analytics/event_dictionary.md -echo '\n\n' >> development/product_analytics/index.md -echo '\n\n' >> development/testing.md -echo '\n\n' >> development/sidekiq_debugging.md -echo '\n\n' >> development/doc_styleguide.md -echo '\n\n' >> development/feature_flags.md -echo '\n\n' >> development/frontend.md -echo '\n\n' >> development/telemetry/event_dictionary.md -echo '\n\n' >> development/telemetry/snowplow.md -echo '\n\n' >> development/telemetry/index.md -echo '\n\n' >> development/telemetry/usage_ping.md -echo '\n\n' >> development/cycle_analytics.md -echo '\n\n' >> development/fe_guide/event_tracking.md -echo '\n\n' >> development/fe_guide/style_guide_js.md -echo '\n\n' >> development/fe_guide/testing.md -echo '\n\n' >> development/fe_guide/style_guide_scss.md -echo '\n\n' >> development/i18n_guide.md -echo '\n\n' >> development/new_fe_guide/development/testing.md -echo '\n\n' >> development/new_fe_guide/style/javascript.md -echo '\n\n' >> development/new_fe_guide/style/index.md -echo '\n\n' >> development/new_fe_guide/style/prettier.md -echo '\n\n' >> development/new_fe_guide/style/html.md -echo '\n\n' >> ci/environments.md -echo '\n\n' >> ci/autodeploy/quick_start_guide.md -echo '\n\n' >> ci/autodeploy/index.md -echo '\n\n' >> ci/pipelines.md -echo '\n\n' >> ci/multi_project_pipeline_graphs.md -echo '\n\n' >> ci/junit_test_reports.md -echo '\n\n' >> ci/permissions/README.md -echo '\n\n' >> ci/build_artifacts/README.md -echo '\n\n' >> ci/examples/code_climate.md -echo '\n\n' >> ci/examples/dependency_scanning.md -echo '\n\n' >> ci/examples/code_quality.md -echo '\n\n' >> ci/examples/license_management.md -echo '\n\n' >> ci/examples/sast.md -echo '\n\n' >> ci/examples/browser_performance.md -echo '\n\n' >> ci/examples/dast.md -echo '\n\n' >> ci/examples/container_scanning.md -echo '\n\n' >> ci/examples/sast_docker.md -echo '\n\n' >> ci/jenkins/index.md -echo '\n\n' >> ci/services/docker-services.md -echo '\n\n' >> markdown/markdown.md -echo '\n\n' >> integration/jira.md -echo '\n\n' >> integration/slack.md -echo '\n\n' >> integration/ldap.md -echo '\n\n' >> integration/chat_commands.md -echo '\n\n' >> integration/crowd.md -echo '\n\n' >> user/admin_area/user_cohorts.md -echo '\n\n' >> user/admin_area/monitoring/dev_ops_report.md -echo '\n\n' >> user/admin_area/analytics/convdev.md -echo '\n\n' >> user/group/security_dashboard/index.md -echo '\n\n' >> user/group/dependency_proxy/index.md -echo '\n\n' >> user/incident_management/index.md -echo '\n\n' >> user/application_security/compliance_dashboard/index.md -echo '\n\n' >> user/application_security/license_compliance/index.md -echo '\n\n' >> user/application_security/license_management/index.md -echo '\n\n' >> user/project/status_page/index.md -echo '\n\n' >> user/project/releases.md -echo '\n\n' >> user/project/container_registry.md -echo '\n\n' >> user/project/ci_cd_for_external_repo.md -echo '\n\n' >> user/project/clusters/eks_and_gitlab/index.md -echo '\n\n' >> user/project/pipelines/settings.md -echo '\n\n' >> user/project/pipelines/job_artifacts.md -echo '\n\n' >> user/project/pipelines/schedules.md -echo '\n\n' >> user/project/merge_requests/merge_request_discussion_resolution.md -echo '\n\n' >> user/project/merge_requests/dependency_scanning.md -echo '\n\n' >> user/project/merge_requests/license_management.md -echo '\n\n' >> user/project/merge_requests/sast.md -echo '\n\n' >> user/project/merge_requests/merge_when_build_succeeds.md -echo '\n\n' >> user/project/merge_requests/code_quality_diff.md -echo '\n\n' >> user/project/merge_requests/maintainer_access.md -echo '\n\n' >> user/project/merge_requests/dast.md -echo '\n\n' >> user/project/merge_requests/container_scanning.md -echo '\n\n' >> user/project/merge_requests/sast_docker.md -echo '\n\n' >> user/project/builds/artifacts.md -echo '\n\n' >> user/project/merge_requests.md -echo '\n\n' >> user/project/operations/index.md -echo '\n\n' >> user/project/operations/tracing.md -echo '\n\n' >> user/project/operations/feature_flags.md -echo '\n\n' >> user/project/operations/linking_to_an_external_dashboard.md -echo '\n\n' >> user/project/operations/error_tracking.md -echo '\n\n' >> user/project/operations/alert_management.md -echo '\n\n' >> user/project/operations/dashboard_settings.md -echo '\n\n' >> user/project/integrations/kubernetes.md -echo '\n\n' >> user/project/integrations/prometheus_units.md -echo '\n\n' >> user/project/integrations/project_services.md -echo '\n\n' >> user/project/integrations/generic_alerts.md -echo '\n\n' >> user/project/integrations/prometheus_library/metrics.md -echo '\n\n' >> user/project/maven_packages.md -echo '\n\n' >> user/project/packages/npm_registry.md -echo '\n\n' >> user/project/packages/maven.md -echo '\n\n' >> user/project/packages/maven_packages.md -echo '\n\n' >> user/project/packages/maven_repository.md -echo '\n\n' >> user/project/milestones/burndown_charts.md -echo '\n\n' >> user/project/gpg_signed_commits/index.md -echo '\n\n' >> user/project/cycle_analytics.md -echo '\n\n' >> user/project/import/tfs.md -echo '\n\n' >> user/project/issues/moving_issues.md -echo '\n\n' >> user/project/issues/closing_issues.md -echo '\n\n' >> user/project/issues/create_new_issue.md -echo '\n\n' >> user/project/issues/automatic_issue_closing.md -echo '\n\n' >> user/project/issues/similar_issues.md -echo '\n\n' >> user/project/issues/deleting_issues.md -echo '\n\n' >> user/project/pages/getting_started_part_four.md -echo '\n\n' >> user/project/pages/getting_started_part_three.md -echo '\n\n' >> user/project/pages/getting_started_part_two.md -echo '\n\n' >> user/project/pages/getting_started/new_or_existing_website.md -echo '\n\n' >> user/project/pages/getting_started/fork_sample_project.md -echo '\n\n' >> user/project/pages/getting_started/pages_bundled_template.md -echo '\n\n' >> user/project/slash_commands.md -echo '\n\n' >> user/project/security_dashboard.md -echo '\n\n' >> user/profile/account/index.md -echo '\n\n' >> user/account/two_factor_authentication.md -echo '\n\n' >> user/account/security.md -echo '\n\n' >> user/analytics/cycle_analytics.md -echo '\n\n' >> university/training/topics/explore_gitlab.md -echo '\n\n' >> university/high-availability/aws/README.md -echo '\n\n' >> permissions/permissions.md -echo '\n\n' >> operations/cleaning_up_redis_sessions.md -echo '\n\n' >> operations/sidekiq_memory_killer.md -echo '\n\n' >> operations/incident_management/alert_details.md -echo '\n\n' >> operations/incident_management/generic_alerts.md -echo '\n\n' >> operations/moving_repositories.md -echo '\n\n' >> operations/unicorn.md -echo '\n\n' >> raketasks/check.md -echo '\n\n' >> raketasks/maintenance.md -echo '\n\n' >> api/deploy_key_multiple_projects.md -echo '\n\n' >> api/license_templates.md -echo '\n\n' >> api/build_triggers.md -echo '\n\n' >> api/builds.md -echo '\n\n' >> gitlab-basics/add-merge-request.md -echo '\n\n' >> gitlab-basics/basic-git-commands.md -echo '\n\n' >> gitlab-basics/create-issue.md -echo '\n\n' >> gitlab-basics/add-image.md -echo '\n\n' >> gitlab-basics/create-group.md -echo '\n\n' >> administration/npm_registry.md -echo '\n\n' >> administration/operations.md -echo '\n\n' >> administration/container_registry.md -echo '\n\n' >> administration/auth/ldap-ee.md -echo '\n\n' >> administration/auth/how_to_configure_ldap_gitlab_ee/index.md -echo '\n\n' >> administration/auth/google_secure_ldap.md -echo '\n\n' >> administration/auth/ldap-troubleshooting.md -echo '\n\n' >> administration/auth/ldap.md -echo '\n\n' >> administration/auth/how_to_configure_ldap_gitlab_ce/index.md -echo '\n\n' >> administration/geo/replication/high_availability.md -echo '\n\n' >> administration/geo/replication/external_database.md -echo '\n\n' >> administration/geo/replication/index.md -echo '\n\n' >> administration/geo/replication/database.md -echo '\n\n' >> administration/geo/disaster_recovery/promotion_runbook.md -echo '\n\n' >> administration/build_artifacts.md -echo '\n\n' >> administration/operations/speed_up_ssh.md -echo '\n\n' >> administration/custom_hooks.md -echo '\n\n' >> administration/scaling/index.md -echo '\n\n' >> administration/maven_packages.md -echo '\n\n' >> administration/plugins.md -echo '\n\n' >> administration/availability/index.md -echo '\n\n' >> administration/lfs/migrate_from_git_annex_to_git_lfs.md -echo '\n\n' >> administration/lfs/lfs_administration.md -echo '\n\n' >> administration/lfs/manage_large_binaries_with_git_lfs.md -echo '\n\n' >> administration/job_traces.md -echo '\n\n' >> administration/maven_repository.md -echo '\n\n' >> administration/packages.md -echo '\n\n' >> administration/repository_storages.md -echo '\n\n' >> administration/monitoring/gitlab_instance_administration_project/index.md -echo '\n\n' >> administration/monitoring/prometheus/gitlab_monitor_exporter.md -echo '\n\n' >> administration/monitoring/performance/prometheus.md -echo '\n\n' >> administration/monitoring/performance/introduction.md -echo '\n\n' >> administration/dependency_proxy.md -echo '\n\n' >> telemetry/snowplow.md -echo '\n\n' >> telemetry/index.md -echo '\n\n' >> monitoring/health_check.md -echo '\n\n' >> monitoring/performance/grafana_configuration.md -echo '\n\n' >> monitoring/performance/introduction.md -echo '\n\n' >> monitoring/performance/gitlab_configuration.md -echo '\n\n' >> topics/autodevops/upgrading_chart.md -echo '\n\n' >> topics/git/migrate_to_git_lfs/index.md -echo '\n\n' >> analytics/README.md -echo '\n\n' >> analytics/contribution_analytics.md diff --git a/lib/gitlab/hook_data/base_builder.rb b/lib/gitlab/hook_data/base_builder.rb index d54175bce81..434d30d9717 100644 --- a/lib/gitlab/hook_data/base_builder.rb +++ b/lib/gitlab/hook_data/base_builder.rb @@ -21,6 +21,13 @@ module Gitlab private + def timestamps_data + { + created_at: object.created_at&.xmlschema, + updated_at: object.updated_at&.xmlschema + } + end + def absolute_image_urls(markdown_text) return markdown_text unless markdown_text.present? diff --git a/lib/gitlab/hook_data/group_member_builder.rb b/lib/gitlab/hook_data/group_member_builder.rb new file mode 100644 index 00000000000..ecc83b66327 --- /dev/null +++ b/lib/gitlab/hook_data/group_member_builder.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +module Gitlab + module HookData + class GroupMemberBuilder < BaseBuilder + alias_method :group_member, :object + + # Sample data + + # { + # :event_name=>"user_add_to_group", + # :group_name=>"GitLab group", + # :group_path=>"gitlab", + # :group_id=>1, + # :user_username=>"robert", + # :user_name=>"Robert Mills", + # :user_email=>"robert@example.com", + # :user_id=>14, + # :group_access=>"Guest", + # :created_at=>"2020-11-04T10:12:10Z", + # :updated_at=>"2020-11-04T10:12:10Z", + # } + + def build(event) + [ + timestamps_data, + group_member_data, + event_data(event) + ].reduce(:merge) + end + + private + + def group_member_data + { + group_name: group_member.group.name, + group_path: group_member.group.path, + group_id: group_member.group.id, + user_username: group_member.user.username, + user_name: group_member.user.name, + user_email: group_member.user.email, + user_id: group_member.user.id, + group_access: group_member.human_access + } + end + + def event_data(event) + event_name = case event + when :create + 'user_add_to_group' + when :destroy + 'user_remove_from_group' + when :update + 'user_update_for_group' + end + + { event_name: event_name } + end + end + end +end + +Gitlab::HookData::GroupMemberBuilder.prepend_if_ee('EE::Gitlab::HookData::GroupMemberBuilder') diff --git a/lib/gitlab/import_export/importer.rb b/lib/gitlab/import_export/importer.rb index 8e78f6e274a..789249c7d91 100644 --- a/lib/gitlab/import_export/importer.rb +++ b/lib/gitlab/import_export/importer.rb @@ -79,10 +79,9 @@ module Gitlab end def wiki_restorer - Gitlab::ImportExport::WikiRestorer.new(path_to_bundle: wiki_repo_path, + Gitlab::ImportExport::RepoRestorer.new(path_to_bundle: wiki_repo_path, shared: shared, - project: ProjectWiki.new(project), - wiki_enabled: project.wiki_enabled?) + project: ProjectWiki.new(project)) end def design_repo_restorer diff --git a/lib/gitlab/import_export/wiki_restorer.rb b/lib/gitlab/import_export/wiki_restorer.rb deleted file mode 100644 index 359ba8ba769..00000000000 --- a/lib/gitlab/import_export/wiki_restorer.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module ImportExport - class WikiRestorer < RepoRestorer - def initialize(project:, shared:, path_to_bundle:, wiki_enabled:) - super(project: project, shared: shared, path_to_bundle: path_to_bundle) - - @project = project - @wiki_enabled = wiki_enabled - end - - def restore - project.wiki if create_empty_wiki? - - super - end - - private - - attr_accessor :project, :wiki_enabled - - def create_empty_wiki? - !File.exist?(path_to_bundle) && wiki_enabled - end - end - end -end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 30572a917bd..056ca2a411c 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -4881,6 +4881,9 @@ msgstr "" msgid "Can't apply this suggestion." msgstr "" +msgid "Can't be empty" +msgstr "" + msgid "Can't create snippet: %{err}" msgstr "" @@ -9348,6 +9351,9 @@ msgstr "" msgid "Description" msgstr "" +msgid "Description (optional)" +msgstr "" + msgid "Description parsed with %{link_start}GitLab Flavored Markdown%{link_end}" msgstr "" @@ -19033,12 +19039,24 @@ msgstr "" msgid "OnCallSchedules|Add a schedule" msgstr "" +msgid "OnCallSchedules|Add schedule" +msgstr "" + msgid "OnCallSchedules|Create on-call schedules in GitLab" msgstr "" +msgid "OnCallSchedules|Failed to add schedule" +msgstr "" + msgid "OnCallSchedules|Route alerts directly to specific members of your team" msgstr "" +msgid "OnCallSchedules|Select timezone" +msgstr "" + +msgid "OnCallSchedules|Sets the default timezone for the schedule, for all participants" +msgstr "" + msgid "OnDemandScans|Could not fetch scanner profiles. Please refresh the page, or try again later." msgstr "" @@ -28436,6 +28454,9 @@ msgstr "" msgid "Timeout connecting to the Google API. Please try again." msgstr "" +msgid "Timezone" +msgstr "" + msgid "Time|hr" msgid_plural "Time|hrs" msgstr[0] "" @@ -30649,6 +30670,9 @@ msgstr "" msgid "What is squashing?" msgstr "" +msgid "What is your job title? (optional)" +msgstr "" + msgid "What's new at GitLab" msgstr "" diff --git a/scripts/update-workhorse b/scripts/update-workhorse new file mode 100755 index 00000000000..0955f6a671a --- /dev/null +++ b/scripts/update-workhorse @@ -0,0 +1,53 @@ +#!/bin/sh +set -e +WORKHORSE_DIR=workhorse/ +WORKHORSE_REF="v$(cat GITLAB_WORKHORSE_VERSION)" + +if [ $# -gt 1 ] || ([ $# = 1 ] && [ x$1 != xcheck ]); then + echo "Usage: update-workhorse [check]" + exit 1 +fi + +clean="$(git status --porcelain)" +if [ -n "$clean" ] ; then + echo 'error: working directory is not clean:' + echo "$clean" + exit 1 +fi + +git fetch https://gitlab.com/gitlab-org/gitlab-workhorse.git "$WORKHORSE_REF" +git rm -rf --quiet -- "$WORKHORSE_DIR" +git read-tree --prefix="$WORKHORSE_DIR" -u FETCH_HEAD + +status="$(git status --porcelain)" + +if [ x$1 = xcheck ]; then + if [ -n "$status" ]; then + cat <Member' do - member = described_class.new(current_user).execute(access_requester, opts) + member = described_class.new(current_user).execute(access_requester, **opts) expect(member).to be_a "#{source.class}Member".constantize expect(member.requested_at).to be_nil @@ -36,7 +36,7 @@ RSpec.describe Members::ApproveAccessRequestService do context 'with a custom access level' do it 'returns a ProjectMember with the custom access level' do - member = described_class.new(current_user, access_level: Gitlab::Access::MAINTAINER).execute(access_requester, opts) + member = described_class.new(current_user, access_level: Gitlab::Access::MAINTAINER).execute(access_requester, **opts) expect(member.access_level).to eq(Gitlab::Access::MAINTAINER) end diff --git a/spec/services/system_hooks_service_spec.rb b/spec/services/system_hooks_service_spec.rb index b25837ca260..2020c67f465 100644 --- a/spec/services/system_hooks_service_spec.rb +++ b/spec/services/system_hooks_service_spec.rb @@ -159,9 +159,6 @@ RSpec.describe SystemHooksService do it { expect(event_name(group, :create)).to eq 'group_create' } it { expect(event_name(group, :destroy)).to eq 'group_destroy' } it { expect(event_name(group, :rename)).to eq 'group_rename' } - it { expect(event_name(group_member, :create)).to eq 'user_add_to_group' } - it { expect(event_name(group_member, :destroy)).to eq 'user_remove_from_group' } - it { expect(event_name(group_member, :update)).to eq 'user_update_for_group' } end def event_data(*args) diff --git a/spec/support/shared_examples/requests/uploads_auhorize_shared_examples.rb b/spec/support/shared_examples/requests/uploads_auhorize_shared_examples.rb index cbd5ccf5b00..3d018fd4028 100644 --- a/spec/support/shared_examples/requests/uploads_auhorize_shared_examples.rb +++ b/spec/support/shared_examples/requests/uploads_auhorize_shared_examples.rb @@ -10,7 +10,7 @@ RSpec.shared_examples 'handle uploads authorize request' do subject expect(response).to have_gitlab_http_status(:ok) - expect(response.content_type.to_s).to eq(Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE) + expect(response.media_type.to_s).to eq(Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE) expect(json_response['TempPath']).to eq(uploader_class.workhorse_local_upload_path) end @@ -30,7 +30,7 @@ RSpec.shared_examples 'handle uploads authorize request' do subject expect(response).to have_gitlab_http_status(:ok) - expect(response.content_type.to_s).to eq(Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE) + expect(response.media_type.to_s).to eq(Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE) expect(json_response).not_to have_key('TempPath') expect(json_response['RemoteObject']).to have_key('ID') expect(json_response['RemoteObject']).to have_key('GetURL') @@ -49,7 +49,7 @@ RSpec.shared_examples 'handle uploads authorize request' do subject expect(response).to have_gitlab_http_status(:ok) - expect(response.content_type.to_s).to eq(Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE) + expect(response.media_type.to_s).to eq(Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE) expect(json_response['TempPath']).to eq(uploader_class.workhorse_local_upload_path) expect(json_response['RemoteObject']).to be_nil end diff --git a/workhorse/.gitignore b/workhorse/.gitignore new file mode 100644 index 00000000000..d190115b867 --- /dev/null +++ b/workhorse/.gitignore @@ -0,0 +1,10 @@ +testdata/data +testdata/scratch +testdata/public +/gitlab-workhorse +/gitlab-resize-image +/gitlab-zip-cat +/gitlab-zip-metadata +/_build +coverage.html +/*.toml diff --git a/workhorse/.gitlab-ci.yml b/workhorse/.gitlab-ci.yml new file mode 100644 index 00000000000..b3377c894e0 --- /dev/null +++ b/workhorse/.gitlab-ci.yml @@ -0,0 +1,83 @@ +workflow: + rules: &workflow_rules + # For merge requests, create a pipeline. + - if: '$CI_MERGE_REQUEST_IID' + # For `master` branch, create a pipeline (this includes on schedules, pushes, merges, etc.). + - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' + # For tags, create a pipeline. + - if: '$CI_COMMIT_TAG' + # For stable branches, create a pipeline. + - if: '$CI_COMMIT_BRANCH =~ /^[\d-]+-stable$/' + +default: + image: golang:1.13 + tags: + - gitlab-org + +# Disable DIND for SAST because we need to execute a before_script in the gosec-sast job +variables: + SAST_DISABLE_DIND: "true" + +verify: + script: + - make verify + +changelog: + script: + - _support/check_changelog.sh + rules: + - if: '$CI_MERGE_REQUEST_IID' + +.test: + services: + - name: registry.gitlab.com/gitlab-org/build/cng/gitaly:latest + # Disable the hooks so we don't have to stub the GitLab API + command: ["/usr/bin/env", "GITALY_TESTING_NO_GIT_HOOKS=1", "/scripts/process-wrapper"] + alias: gitaly + variables: + GITALY_ADDRESS: "tcp://gitaly:8075" + script: + - go version + - apt-get update && apt-get -y install libimage-exiftool-perl + - make test + +test using go 1.13: + extends: .test + image: golang:1.13 + +test using go 1.14: + extends: .test + image: golang:1.14 + +test:release: + rules: + - if: '$CI_COMMIT_TAG' + script: + - git describe --exact-match + +include: + - template: Security/SAST.gitlab-ci.yml + - template: Security/Dependency-Scanning.gitlab-ci.yml + - template: Security/Secret-Detection.gitlab-ci.yml + +gosec-sast: + before_script: + - apk add make + - make install + rules: *workflow_rules + +gemnasium-dependency_scanning: + rules: *workflow_rules + +secret_detection: + rules: *workflow_rules + +code_navigation: + image: golang:latest + allow_failure: true + script: + - go get github.com/sourcegraph/lsif-go/cmd/lsif-go + - lsif-go + artifacts: + reports: + lsif: dump.lsif diff --git a/workhorse/.gitlab/CODEOWNERS b/workhorse/.gitlab/CODEOWNERS new file mode 100644 index 00000000000..93ee023ee4a --- /dev/null +++ b/workhorse/.gitlab/CODEOWNERS @@ -0,0 +1 @@ +* @jacobvosmaer-gitlab @nick.thomas @nolith @patrickbajao diff --git a/workhorse/CHANGELOG b/workhorse/CHANGELOG new file mode 100644 index 00000000000..5d775d62499 --- /dev/null +++ b/workhorse/CHANGELOG @@ -0,0 +1,1053 @@ +# Changelog for gitlab-workhorse + +## v8.57.0 + +### Added +- Add direct upload acceleration for requirements import + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/ + +## v8.56.0 + +### Fixed +- Return 413 HTTP status for S3 uploads if max upload limit is reached + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/655 +- Fix EXIF cleaning for S3 compatible Object Storage + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/ + +### Other +- Improve logging for image scaler + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/652 +- Update LabKit to v1.0.0 + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/659 + +## v8.55.0 + +### Added +- Add direct upload acceleration for metric images + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/653 + +### Fixed +- Image scaler: add success-client-cache status label + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/656 + +## v8.54.0 + +### Changed +- Don't reject image scaling requests based on file extension/format mismatch + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/651 + +### Other +- Rework image scaler test suite + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/ +- Adjust image scaling latency buckets + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/643 +- Update raven-go and gocertifi packages + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/644 +- jaeger: limit operation cardinality by using route regex + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/648 + +### Performance +- Add support for conditional GETs for rescaled images + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/647 + +## v8.53.0 + +### Added +- Add route for Debian package uploads + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/610 + Contributed by Mathieu Parent + +### Fixed +- Don't log image scaler fail-overs as successes + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/636 + +### Other +- Exclude dot-files from "make fmt" target + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/641 +- Add max_processes Prometheus metric for image scaling + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/640 +- Simplify config handling in main() + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/634 +- Default MaxScalerProcs to num_cores / 2 + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/635 +- Add a total requests metric for image scaling + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/638 + +## v8.52.0 + +### Fixed +- Only generate CI artifact metadata for ZIP files + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/627 +- Fix typo in redis URL scheme + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/631 +- Restructure error handling in main() + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/633 + +### Other +- Include route regex identifier in structured logs + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/624 + +## v8.51.0 + +### Changed +- Allow configure image resizing params + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/615 + +### Fixed +- Fix processing lsif dump with repeating lines with inVs + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/621 + Contributed by Pavel Kuznetsov + +### Other +- Add CODEOWNERS with listed maintainers + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/623 + +## v8.50.0 + +### Added +- Update Gitaly module dependency + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/619 + +## v8.49.0 + +### Fixed +- Fix gitlab-resize-image bin installation + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/618 + +### Other +- Add image scaler duration histogram + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/614 +- Pass CORRELATION_ID env variable to resize image subprocesses + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/612 +- Simplify s3 session management code + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/616 +- Bump labkit dependency to get mutex profiling + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/ + +## v8.48.0 + +### Changed +- Switch image scaler to a Go-only solution + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/603 + +### Other +- Push uploader control flow into objectstore package + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/608 + +## v8.47.0 + +### Added +- Add logging for local LSIF ZIP caching + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/579 +- Add project level route for Generic Packages uploads + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/596 + +### Changed +- Further simplify remote/local upload code + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/602 +- Experimental: Use strict content checks when resizing images + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/564 + +### Fixed +- Increase LSIF scanner buffer + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/609 +- Fix correlation IDs not being propagated in preauth check + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/607 + +### Other +- Reflect the actual duration of bootstrapping GitLab + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/605 + Contributed by Takuya Noguchi + +## v8.46.0 + +### Added +- Support Azure custom storage domains + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/593 + +## v8.45.0 + +### Added +- Reject upload when filesize exceeds MaximumSize returned by authorize endpoint + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/ + +### Other +- Eliminate unnecessary code in GoCloud test stubs + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/590 +- Drop tests that check for log messages + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/591 + +## v8.44.0 + +### Fixed +- Fix objectstore.uploader.uploadError race + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/583 +- Silence errors when Azure objects have aleady been deleted + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/585 +- Fix race condition in httprs test + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/584 + +### Performance +- Remove an in-memory buffer for LSIF transformation + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/586 + +## v8.43.0 + +### Changed +- Remove ProcessReferences flag + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/543 + +### Fixed +- Fix nil pointer exception when no object storage config is defined + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/565 + +## v8.42.0 + +### Added +- Resize images on-demand with `gm convert` + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/546 + +## v8.41.0 + +### Added +- Add Azure blob store support + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/555 + +## v8.40.0 + +### Added +- Add project level route for conan package uploads + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/558 + +### Other +- Refactor uploaders to use different upload strategies + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/553 + +## v8.39.0 + +### Fixed +- Fix HTTP Range Requests not working on some S3 providers + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/549 + +### Other +- Vendor httprs module + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/550 + +### Performance +- Cache references in file + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/544 + +## v8.38.0 + +### Added +- Added configuration option PropagateCorrelationID + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/529 + Contributed by Mahmoud Rahbar Azad +- Add support for AWS S3 Server Side Encryption (SSE-KMS) + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/537 + +### Changed +- Drop Go v1.12 support + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/532 + +## v8.37.0 + +- No changes. +## v8.36.0 + +- No changes. +## v8.35.0 + +### Fixed +- Fix Content-Length set prior to SendUrl injection + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/496 + Contributed by Georges-Etienne Legendre + +## v8.34.0 + +### Added +- Support Workhorse directly uploading files to S3 + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/466 + +### Fixed +- Disable compression for open archive + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/508 + Contributed by Georges-Etienne Legendre + +### Other +- Add configuration to support an S3 client inside Workhorse + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/516 +- Refactor Preparer and SaveFileOpts handling + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/515 + +## v8.33.0 + +### Added +- Add routes for Group import via the UI + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/493 + +### Fixed +- Gather gitlab-zip-cat/metadata stderr and log output in the current context + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/498 + Contributed by Georges-Etienne Legendre + +## v8.32.1 + +### Security +- Limit memory footprint of a command that generates ZIP artifacts metadata + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/ + +## v8.32.0 + +### Added +- Process LSIF document before sending it to GitLab + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/492 +- Delay PostUploadPack response until request is fully read + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/494 + +## v8.31.1 + +### Security +- Limit memory footprint of a command that generates ZIP artifacts metadata + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/ + +## v8.31.0 + +### Added +- Add a signed field on upload requests containing all the workhorse parameters + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/490 + +### Other +- Add automatic changelog generation + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/484 + +## v8.30.2 + +### Security +- Limit memory footprint of a command that generates ZIP artifacts metadata + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/ + +v 8.30.1 + +- Sign artifact multipart fields in Workhorse + +v 8.30.0 + +- Proxy ActionCable websocket connection !454 + +v 8.29.0 + +- Bump Labkit version to support Profiler sample versioning !479 + +v 8.28.0 + +- Reject parameters that override upload fields +- PyPi - Object storage upload route for package files !474 + +v 8.27.0 + +- Remove Set-Cookie header from archive and raw blob responses !475 + +v 8.26.0 + +- Add route for project imports direct upload via UI !470 + +## v8.25.3 + +### Security +- Limit memory footprint of a command that generates ZIP artifacts metadata + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/ + +### Other +- Add automatic changelog generation + https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/484 + +v 8.25.2 + +- Sign artifact multipart fields in Workhorse + +v 8.25.1 + +- Reject parameters that override upload fields + +v 8.25.0 + +- Add route for project imports direct upload !459 + +v 8.24.0 + +- Support Stackdriver Profiler through Labkit !461 + +v 8.23.0 + +- Don't set Cache-Control header for git archives !462 + +v 8.22.0 + +- Bump the version of golang.org/x/sys !456 +- Add friendly development error page for 502 !453 + +v 8.21.2 + +- Sign artifact multipart fields in Workhorse + +v 8.21.1 + +- Reject parameters that override upload fields + +v 8.21.0 + +- Add route for group imports direct upload !455 + +v 8.20.2 + +- Sign artifact multipart fields in Workhorse + +v 8.20.1 + +- Reject parameters that override upload fields + +v 8.20.0 + +- Sign file upload requests modified by workhorse + +v 8.19.0 + +- Use multipart uploads for nuget packages !451 + +v 8.18.0 + +- Allow inline content disposition for pdf files !446 +- Update environment websocket route !449 + +v 8.17.0 + +- Add labkit monitoring for build metrics !440 +- Log duration_ms when Workhorse hits a bad gateway !445 + +v 8.16.0 + +- Ignore CompleteMultipartUpload ETag !438 +- Add NuGet route for package uploads !441 +- Upgrade Gitaly client to v1.74.0 !443 +- Set a time limit on git upload-pack requests + +v 8.15.0 + +- Object store case insensitive ETag comparison !434 +- Upgrade gitaly to 1.68.0 !435 + +v 8.14.1 + +- Set a time limit on git upload-pack requests + +v 8.14.0 + +- Keep HTTP 1.0 cache headers from sendurl proxies !431 + +v 8.13.0 + +- Preserve original HTTP cache headers when proxying with sendurl !428 + +v8.12.0 + +- Fix health checks routes incorrectly intercepting errors !424 +- Simplify badgateway RoundTripper !425 + +v8.11.0 + +- Accelerate GraphQL uploads !403 +- Add route for handling Conan package uploads !412 +- Accelerate wiki attachments !422 + +v8.10.1 + +- Set a time limit on git upload-pack requests + +v8.10.0 + +- Use accelerated uploads for users/personal snippets +- Fix typo in keywatcher prometheus metrics !420 + +v8.9.0 + +- Update Gitaly library code to v1.57.0 !407 +- Replace govendor with go mod !411 +- Support gzip compression for Git info/refs !404 +- Add prometheus counter for Gitaly connection stubs !414 +- Support passing on Gitaly feature flags !410 + +v8.8.1 + +- Use accelerated uploads for users/personal snippets + +v8.8.0 + +- Filter title, description, text, and body from logs !402 +- Remove redirections from Terminal to Channel !397 +- Add option to set Sentry environment !396 + +v8.7.1 + +- Use accelerated uploads for users/personal snippets + +v8.7.0 + +- Don't log http.ErrAbortHandler panics in sentry !392 + +v8.6.0 + +- Add new endpoint to add support to proxy websocket requests to build's services !370 + +v8.5.2 + +- Don't log http.ErrAbortHandler panics in sentry !392 + +v8.5.1 + +- Remove duplicate X-Request-Id response header !384 + +v8.5.0 + +- Replace terminal terminology to channel !382 + +v8.4.0 + +- Adds X-Request-Id response header for Workhorse !363 +- Change content type detection header size to 4k !366 +- Allow unknown fields in jsonpb gitaly-proto messages !367 +- Filter `sharedSecret` param from Jira !369 +- Get git-archive with GetArchiveRequest !375 + +v8.3.3 + +- Preserve orientation when removing EXIF + +v8.3.2 + +- Remove EXIF from JPEG/TIFF images + +v 8.3.1 + +- Update gitaly-proto to 1.10.0 !363 + +v 8.3.0 + +- Count ^/-/ requests separately in prometheus !355 +- Statically link jaeger into Workhorse by default !359 +- Support encoded Content-Disposition fields !360 + +v 8.2.0 + +- Sign LFS upload requests that have been handled by workhorse +- Fixed svg recognition to get the proper content type !353 + +v 8.1.1 + +- Sign LFS upload requests that have been handled by workhorse + +v 8.1.0 + +- Upgrade the gitaly client to v1.13.0 (includes TLS support) !351 +- Update gitaly-proto to 0.124.0 !331 +- Add distributed tracing with LabKit !325 + +v 8.0.4 + +- Preserve orientation when removing EXIF + +v 8.0.3 + +- Remove EXIF from JPEG/TIFF images + +v 8.0.2 + +- Fixed svg recognition to get the proper content type !353 + +v 8.0.1 + +- Sign LFS upload requests that have been handled by workhorse + +v 8.0.0 + +- Remove local git archive support !304 +- Remove local git diff handling !345 +- Remove local git format-patch handling !346 +- Remove RepoPath from the API response + +v 7.6.1 + +- Sign LFS upload requests that have been handled by workhorse + +v 7.6.0 + +- Rename correlation-id structured logging field to correlation_id !343 +- Remove local git receive-pack implementation !326 +- Remove curl from sendfile_test.go !344 +- Update README.md usage example !342 + +v 7.5.1 + +- Rename correlation-id structured logging field to correlation_id !343 + +v 7.5.0 + +- Add proxy layer to calculate content type and disposition headers !335 + +v 7.4.0 + +- Strip port and include remote IP in access logs !337 + +v 7.3.0 + +- Redact sensitive url params as in Rails + +v 7.2.1 + +- Extract correlation code out to the LabKit project !323 +- Log X-Forwarded-For IPs when UNIX domain sockets are in use !324 + +v 7.2.0 + +- Update CI matrix to go1.10 + go1.11 and fix ResponseWriter bugs !309 +- Add support for Redis URLs (redis:// and rediss://) in Workhorse !321 + +v 7.1.4 + +- Sign LFS upload requests that have been handled by workhorse + +v 7.1.3 + +- Redact sensitive url params as in Rails + +v 7.1.1 + +Bad release, use 7.2.0 instead. + +v 7.1.0 + +- Add structured logFormat for text based logging !275 +- Run make fmt on master !306 +- Allow to configure `BUILD_DIR` and `TARGET_DIR` !308 +- Resolve "Rework test suite to allow dead code to be removed" !307 +- Update Prometheus vendoring !305 +- General vendoring cleanup !310 +- Remove Go 1.8 support !314 +- Remove unused 'body' argument !315 +- Refactor badgateway to use standardlib interfaces !316 +- Pass Correlation-Ids down to backend systems !311 +- Don't fail if /home/git/repositories already exists in Gitaly container !317 + +v 7.0.1 + +- Redact sensitive url params as in Rails + +v 7.0.0 + +- Use the new Gitaly auth scheme (v2) !298 + +v 6.1.2 + +- Redact sensitive url params as in Rails + +v 6.1.1 + +- Allow custom error messages to pass through to Rails !300 + +v 6.1.0 + +- Support adding PUT headers for object storage from Rails !297 + +v 6.0.0 + +- Accelerate Maven artifact repository uploads !283 + +v 5.2.0 + +- Populate Git Protocol !276 +- Add support for GitConfigOptions required for git-receive-pack command !281 + + +v 5.1.0 + +- Log using correlation-id bound to the incoming request !258 +- Prevent uploading two files as artifacts in single request !273 +- Prometheus instrumentation !279 + +v 5.0.0 + +- Update httprs for broken range implementations !266 +- Direct Upload for User Uploads !265 + +v 4.3.1 + +- Objectstorage ETag checking !263 + +v 4.3.0 + +- Multipart upload support !257 +- Make external commands extend the environment !261 + +v 4.2.1 + +- Fix objectstore error shadowing !259 + +v 4.2.0 + +- Guess RemoteAddr from X-Forwarded-For !254 + +v 4.1.0 + +- Add websocket route for web terminal access to CI jobs !234 +- Remove RepoPath check on Git HTTP !244 +- Artifacts and Uploads must allow Objects Storage only requests !247 +- Bridge between Gitaly and GitLab for a new repository snapshot endpoint !248 +- Update gitaly proto !249 + +v 4.0.0 + +- Handle Object Store upload in upload.HandleFileUploads !238 +- More consistent API naming. ObjectStore -> RemoteObject !240 + +v3.8.0 + +- Add structured logging !236 + +v3.7.0 + +- Add option to send file uploads straight to object storage !227 +- Allow sending Git archives with file names other than 'archive' !232 +- Unify uploads handling under filestore package !230 + +v3.6.0 + +- Introduce a `send-url:` method that allows to serve remote HTTP/GET file, like S3-based file !228 + +v3.5.1 + +- Use grpc-go 1.9.1 (!225) +- Update gitaly stream and dial library functions (!224) + +v3.5.0 + +- Add option to disable Git archive caching !222 + +v3.4.0 + +- Track Gitaly Connections in Prometheus !211 +- Run test suite on Go 1.9 !213 +- Remove repo disk check !218 + +v3.3.1 + +- Fix "net/http: request canceled" errors in gitlab-zip-cat !208 + +v3.3.0 + +- Ban context.Background !201 +- Respect the ShowAllRefs flag in git upload-pack and info-refs !203 +- Upgrade grpc to v1.7.1, protobuf to latest !207 + +v3.2.0 + +- Implement Gitaly call for archive requests !199 +- Re-use client.Dial from gitaly !194 +- Respect GL_USERNAME !192 +- Update BurntSushi/toml !195 +- Add Redis error counters !197 +- Migrate Send{Diff,Patch} to Gitaly !200 + +v3.1.0 + +- Add histograms to routes !184 +- Gitaly deprecations and replacements !186, !187, !189 +- Enable CI long polling by default !188 +- Refactor Git archive creation !190 + +v3.0.0 + +- Use GetBlob RPC instead of TreeEntry RPC for serving blobs !182 + +v2.3.0 +- Improve gitaly info refs error message !172 +- Migrate GetBlob to Gitaly !174 +- Drop support for Go <1.8 !176 +- Add some tests for gzipped assets !177 +- Use reader/writer from gitaly streamio !178 +- Use http.Request contexts for Gitaly calls !179 +- Allow to access remote archive !180 + +v2.2.0 +- Add support for token authentication on Gitaly requests +- Update gitaly-proto library to 0.9.0 + +v2.1.1 +- Bug fix and counters for static error pages + +v2.1.0 +- Remove chatty ErrorPage log message +- Filter query-string secrets out of logged URLs +- Suggest better default for prometheus port +- Add internal upload to external storage +- Prometheus metrics for senddata and git archive cache + +v2.0.1 +- Support GL_REPOSITORY from API and pass it to Gitaly on ReceivePack + +v2.0.0 + +- Fix gRPC stream resource leak !158, !160 +- Don't append error messages to Git HTTP responses !157 +- Drop support for old Gitaly fields in Git API response !152 + +v1.4.3 + +- Support forwarding Git HTTP POST data to Gitaly !143 +- Pass more Gitaly 'Repository' fields on from gitlab-rails !147 +- Support insecure TCP connections to Gitaly !150 + +v1.4.2 + +- Return 500 from GET /info/refs if possible !145 + +v1.4.1 + +- Fix several Redis integration bugs !137, !140 +- Fix race conditions in Redis tests !136 +- Don't follow HTTP redirects on internal API !134 +- Support /api/v4 for CI !133 +- Don't spam logs with CI queueing messages (Marcin Biegała) !127 + +v1.4.0 + +- Integrate with Gitaly via gRPC !119 +- Buffer git receive-pack responses in tempfiles !123 +- Use stdlib to copy stdin/stdout of git subprocesses !118 +- Terminal session timeouts !107 +- Redis integration EXPERIMENTAL !112 +- CI notifications via Redis EXPERIMENTAL !128 +- More CI queue metrics !122 + +v1.3.0 + +- Fix stalled HTTP fetches with large payloads. !110 +- Correctly parse content types in HTTP requests and responses !114 +- Catch _all_ multipart NextPart() errors. !108 +- Replace 'gitlab_workhorse_artifacts_upload_*' with labeled version of + 'gitlab_workhorse_multipart_upload_*'. !106 +- Allow GET /info/refs to be proxied to Gitaly. !105 +- Set correct value of X-Forwarded-For header in PreAuthorize request. !104 +- Allow nested namespaces in git URLs. !80 + +v1.2.1 + +- More Prometheus metrics +- Hide 502 internal errors from text-mode clients +- Buffer internal API responses up to a 32kB hard limit + +v1.2.0 + +- Add terminal websocket proxy endpoint +- Rewrite all incoming multipart requests: write 'file' parts to tempfiles + +v1.1.1 + +- Restrict effect of API rate limiting to /ci/api/v1/builds/register.json + +v1.1.0 + +- Prometheus metrics listener via `-prometheusListenAddr` option +- Tell NGINX to not buffer Git HTTP responses etc. with X-Accel-Buffering +- Fix double content type bug on archive downloads + +v1.0.0 + +- Workhorse is now v1.0.0, according to Semantic Versioning. No breaking + changes were made. +- Add support for logging to file, and logfile rotation with SIGHUP. +- Improve error messages. + +v0.8.5 + +Simplify revspec for 'git format-patch'. + +v0.8.4 + +Fix Go 1.5 compatibility broken in 0.8.3. Update CI configuration so +that tests run on Go 1.5, 1.6 and 1.7 (was only 1.6 before). + +v0.8.3 + +Add rate-limiting feature for /api requests (disabled by default). +Suppress non-zero exit code error from git-upload-pack during shallow +Git clone (only affects logging and Sentry). Don't treat EEXIST as an +error during git archive finalization. + +v0.8.2 + +Recognize more archive formats in git.SendArchive. Make 502 errors +(failed proxy requests to Unicorn) easier to recognize in Sentry. + +v0.8.1 + +Add Sentry (raven-go) for remote error tracking. + +v0.8.0 + +Add JWT signed communication between gitlab-workhorse and gitlab-rails. + +v0.7.11 + +Fix 'nil dereference' crash on Go 1.7 when parsing authBackend +parameter. Fix 'hard-wire backend host' crashes. + +v0.7.10 + +Fix typo in metrics header name. + +v0.7.9 + +Hard-wire backend host when using TCP. + +v0.7.8 + +Send artifact zip file entries via the 'senddata' mechanism. + +v0.7.7 + +Add the protocol used (HTTP) to each gitCommand call in order to check +for restricted protocol access on GitLab's side. + +v0.7.6 + +Add the capability to inject `git format-patch` output. + +v0.7.5 + +Add the capability to inject `git diff` output as HTTP response bodies +(@zj). + +v0.7.4 + +Pass a timestamp when forwarding requests to Rails. Hopefully this +will give us insight into Unicorn queueing behavior. + +v0.7.3 + +Revert 'buffer Git HTTP responses'. Set default listen socket +permissions to world read/writeable. + +v0.7.2 DO NOT USE + +Integrate with GOPATH during development (remove relative imports +etc.). Buffer Git HTTP responses so that we may return an error if the +local command fails early. + +Update: the 'buffer Git HTTP responses' change in 0.7.2 is BAD, it +breaks shallow Git clone. Don't use 0.7.2! + +v0.7.1 + +Set Content-Length (retrieved from Git) on raw blob data responses. + +v0.7.0 + +Start using a 'v' prefix on the version string. + +0.6.5 + +Inject 'git archive' data the same way as Git blob data. + +0.6.4 + +Increase default ProxyHeadersTimeout to 5 minutes. Fix injecting raw +blobs for /api/v3 requetsts. + +0.6.3 + +Add support for sending Git raw git blobs via gitlab-workhorse. + +0.6.2 + +We now fill in missing directory entries in archize zip metadata +files; also some other minor changes. + +0.6.1 + +Add support for generating zip artifacts metadata and serving single +files from zip archives. + +Gitlab-workhorse now consists of multiple executables. We also fixed a +routing bug introduced by the 0.6.0 refactor that broke relative URL +support. + +0.6.0 + +Overhauled the source code organization; no user-facing changes +(intended). The application code is now split into Go 'packages' +(modules). As of 0.6.0 gitlab-workhorse requires Go 1.5 or newer. + +0.5.4 + +Fix /api/v3/projects routing bug introduced in 0.5.2-0.5.3. + +0.5.3 + +Fixes merge error in 0.5.2. + +0.5.2 (broken!) + +- Always check with upstream if files in /uploads/ may be served +- Fix project%2Fnamespace API project ID's +- Prevent archive zombies when using gzip or bzip2 +- Don't show pretty error pages in development mode + +0.5.1 + +Deprecate -relativeURLRoot option, use -authBackend instead. + +0.5.0 + +Send ALL GitLab requests through gitlab-workhorse. + +0.4.2 + +Return response to client when uploading Git LFS object. + +0.4.1 + +Add support for Build Artifacts and Git LFS. The GitLab-Workhorse +offloads file uploading and downloading by providing support for +rewriting multipart form data and X-Sendfile. + +Other changes: +- add header Gitlab-Workhorse to all requests to indicate from where + they originated + +0.4.0 + +Rename the project to gitlab-workhorse. The old name had become too +specific. + +Other changes: + +- pass LD_LIBRARY_PATH to Git commands +- accomodate broken HTTP clients by spelling 'Www-Authenticate' as + 'WWW-Authenticate' + +0.3.1 + +Add support for Unix domain socket connections to the authBackend. + +0.3.0 + +In 0.3.0 we also handle 'git archive' downloads for GitLab 8.1+. +This has lead to some breaking API changes, making 0.3.0 incompatible +with GitLab 8.0. We now expect the 'auth backend' (GitLab) to +provide us with much more information about each request, such as +the path on disk to the Git repository the client is requesting. +This makes the REPO_ROOT command line argument obsolete. + +0.2.14 + +This is the last version that works with GitLab 8.0. diff --git a/workhorse/CONTRIBUTING.md b/workhorse/CONTRIBUTING.md new file mode 100644 index 00000000000..ef9785b9b6c --- /dev/null +++ b/workhorse/CONTRIBUTING.md @@ -0,0 +1,46 @@ +## Contributing + +Thank you for your interest in contributing to this GitLab project! We welcome +all contributions. By participating in this project, you agree to abide by the +[code of conduct](#code-of-conduct). + +## Contributor license agreement + +By submitting code as an individual you agree to the [individual contributor +license agreement][individual-agreement]. + +By submitting code as an entity you agree to the [corporate contributor license +agreement][corporate-agreement]. + +## Code of conduct + +As contributors and maintainers of this project, we pledge to respect all people +who contribute through reporting issues, posting feature requests, updating +documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free +experience for everyone, regardless of level of experience, gender, gender +identity and expression, sexual orientation, disability, personal appearance, +body size, race, ethnicity, age, or religion. + +Examples of unacceptable behavior by participants include the use of sexual +language or imagery, derogatory comments or personal attacks, trolling, public +or private harassment, insults, or other unprofessional conduct. + +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct. Project maintainers who do not follow the +Code of Conduct may be removed from the project team. + +This code of conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior can be +reported by emailing contact@gitlab.com. + +This Code of Conduct is adapted from the [Contributor Covenant][contributor-covenant], version 1.1.0, +available at [http://contributor-covenant.org/version/1/1/0/](http://contributor-covenant.org/version/1/1/0/). + +[contributor-covenant]: http://contributor-covenant.org +[individual-agreement]: https://docs.gitlab.com/ee/legal/individual_contributor_license_agreement.html +[corporate-agreement]: https://docs.gitlab.com/ee/legal/corporate_contributor_license_agreement.html diff --git a/workhorse/LICENSE b/workhorse/LICENSE new file mode 100644 index 00000000000..76a44f8bb70 --- /dev/null +++ b/workhorse/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2017 GitLab B.V. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/workhorse/Makefile b/workhorse/Makefile new file mode 100644 index 00000000000..7a8503512df --- /dev/null +++ b/workhorse/Makefile @@ -0,0 +1,177 @@ +PREFIX=/usr/local +PKG := gitlab.com/gitlab-org/gitlab-workhorse +BUILD_DIR ?= $(CURDIR) +TARGET_DIR ?= $(BUILD_DIR)/_build +TARGET_SETUP := $(TARGET_DIR)/.ok +BIN_BUILD_DIR := $(TARGET_DIR)/bin +COVERAGE_DIR := $(TARGET_DIR)/cover +VERSION_STRING := $(shell git describe) +ifeq ($(strip $(VERSION_STRING)),) +VERSION_STRING := v$(shell cat VERSION) +endif +BUILD_TIME := $(shell date -u +%Y%m%d.%H%M%S) +GOBUILD := go build -ldflags "-X main.Version=$(VERSION_STRING) -X main.BuildTime=$(BUILD_TIME)" +EXE_ALL := gitlab-resize-image gitlab-zip-cat gitlab-zip-metadata gitlab-workhorse +INSTALL := install +BUILD_TAGS := tracer_static tracer_static_jaeger continuous_profiler_stackdriver + +MINIMUM_SUPPORTED_GO_VERSION := 1.11 + +export GOBIN := $(TARGET_DIR)/bin +export PATH := $(GOBIN):$(PATH) +export GOPROXY ?= https://proxy.golang.org +export GO111MODULE=on + +LOCAL_GO_FILES = $(shell find . -type f -name '*.go' | grep -v -e /_ -e /testdata/ -e '^\./\.') + +define message + @echo "### $(1)" +endef + + +.NOTPARALLEL: + +.PHONY: all +all: clean-build $(EXE_ALL) + +$(TARGET_SETUP): + $(call message,"Setting up target directory") + rm -rf "$(TARGET_DIR)" + mkdir -p "$(TARGET_DIR)" + touch "$(TARGET_SETUP)" + +gitlab-resize-image: $(TARGET_SETUP) $(shell find cmd/gitlab-resize-image/ -name '*.go') + $(call message,Building $@) + $(GOBUILD) -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG)/cmd/$@ + +gitlab-zip-cat: $(TARGET_SETUP) $(shell find cmd/gitlab-zip-cat/ -name '*.go') + $(call message,Building $@) + $(GOBUILD) -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG)/cmd/$@ + +gitlab-zip-metadata: $(TARGET_SETUP) $(shell find cmd/gitlab-zip-metadata/ -name '*.go') + $(call message,Building $@) + $(GOBUILD) -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG)/cmd/$@ + +gitlab-workhorse: $(TARGET_SETUP) $(shell find . -name '*.go' | grep -v '^\./_') + $(call message,Building $@) + $(GOBUILD) -tags "$(BUILD_TAGS)" -o $(BUILD_DIR)/$@ $(PKG) + +.PHONY: install +install: $(EXE_ALL) + $(call message,$@) + mkdir -p $(DESTDIR)$(PREFIX)/bin/ + cd $(BUILD_DIR) && $(INSTALL) $(EXE_ALL) $(DESTDIR)$(PREFIX)/bin/ + +.PHONY: test +test: $(TARGET_SETUP) prepare-tests + $(call message,$@) + @go test -tags "$(BUILD_TAGS)" ./... + @echo SUCCESS + +.PHONY: coverage +coverage: $(TARGET_SETUP) prepare-tests + $(call message,$@) + @go test -tags "$(BUILD_TAGS)" -cover -coverprofile=test.coverage ./... + go tool cover -html=test.coverage -o coverage.html + rm -f test.coverage + +.PHONY: clean +clean: clean-workhorse clean-build + $(call message,$@) + rm -rf testdata/data testdata/scratch + +.PHONY: clean-workhorse +clean-workhorse: + $(call message,$@) + rm -f $(EXE_ALL) + +.PHONY: check-version +check-version: + @test -n "$(VERSION)" || (echo "VERSION not set." ; exit 1) + +.PHONY: tag +tag: check-version + $(call message,$@) + sh _support/tag.sh "$(VERSION)" + +.PHONY: signed_tag +signed_tag: check-version + $(call message,$@) + TAG_OPTS=-s sh _support/tag.sh "$(VERSION)" + +.PHONY: clean-build +clean-build: + $(call message,$@) + rm -rf $(TARGET_DIR) + +.PHONY: prepare-tests +prepare-tests: testdata/data/group/test.git $(EXE_ALL) +prepare-tests: testdata/scratch + +testdata/data/group/test.git: + $(call message,$@) + git clone --quiet --bare https://gitlab.com/gitlab-org/gitlab-test.git $@ + +testdata/scratch: + mkdir -p testdata/scratch + +.PHONY: verify +verify: lint vet detect-context detect-assert check-formatting staticcheck deps-check + +.PHONY: lint +lint: $(TARGET_SETUP) + $(call message,Verify: $@) + go install golang.org/x/lint/golint + @_support/lint.sh ./... + +.PHONY: vet +vet: $(TARGET_SETUP) + $(call message,Verify: $@) + @go vet ./... + +.PHONY: detect-context +detect-context: $(TARGET_SETUP) + $(call message,Verify: $@) + _support/detect-context.sh + +.PHONY: detect-assert +detect-assert: + $(call message,Verify: $@) + _support/detect-assert.sh + +.PHONY: check-formatting +check-formatting: $(TARGET_SETUP) install-goimports + $(call message,Verify: $@) + @_support/validate-formatting.sh $(LOCAL_GO_FILES) + +# Megacheck will tailor some responses given a minimum Go version, so pass that through the CLI +# Additionally, megacheck will not return failure exit codes unless explicitly told to via the +# `-simple.exit-non-zero` `-unused.exit-non-zero` and `-staticcheck.exit-non-zero` flags +.PHONY: staticcheck +staticcheck: $(TARGET_SETUP) + $(call message,Verify: $@) + go install honnef.co/go/tools/cmd/staticcheck + @ $(GOBIN)/staticcheck -go $(MINIMUM_SUPPORTED_GO_VERSION) ./... + +# In addition to fixing imports, goimports also formats your code in the same style as gofmt +# so it can be used as a replacement. +.PHONY: fmt +fmt: $(TARGET_SETUP) install-goimports + $(call message,$@) + @goimports -w -local $(PKG) -l $(LOCAL_GO_FILES) + +.PHONY: goimports +install-goimports: $(TARGET_SETUP) + $(call message,$@) + go install golang.org/x/tools/cmd/goimports + +.PHONY: deps-check +deps-check: + go mod tidy + @if git diff --quiet --exit-code -- go.mod go.sum; then \ + echo "go.mod and go.sum are ok"; \ + else \ + echo ""; \ + echo "go.mod and go.sum are modified, please commit them";\ + exit 1; \ + fi; diff --git a/workhorse/PROCESS.md b/workhorse/PROCESS.md new file mode 100644 index 00000000000..07f553dd387 --- /dev/null +++ b/workhorse/PROCESS.md @@ -0,0 +1,152 @@ +# GitLab-Workhorse development process + +## Maintainers + +GitLab-Workhorse has the following maintainers: + +- Nick Thomas `@nick.thomas` +- Jacob Vosmaer `@jacobvosmaer-gitlab` +- Alessio Caiazza `@nolith` + +This list is defined at https://about.gitlab.com/team/. + +## Changelog + +GitLab-Workhorse keeps a changelog which is generated when a new release +is created. The changelog is generated from entries that are included on each +merge request. To generate an entry on your branch run: +`_support/changelog "Change descriptions"`. + +After the merge request is created, the ID of the merge request needs to be set +in the generated file. If you already know the merge request ID, run: +`_support/changelog -m "Change descriptions"`. + +Any new merge request must contain either a new entry or a justification in the +merge request description why no changelog entry is needed. + +## Merging and reviewing contributions + +Contributions must be reviewed by at least one Workhorse maintainer. +The final merge must be performed by a maintainer. + +## Releases + +New versions of Workhorse can be released by one of the Workhorse +maintainers. The release process is: + +- pick a release branch. For x.y.0, use `master`. For all other + versions (x.y.1, x.y.2 etc.) , use `x-y-stable`. Also see [below](#versioning) +- run `make tag VERSION=x.y.z"` or `make signed_tag VERSION=x.y.z` on the release branch. This will + compile the changelog, bump the VERSION file, and make a tag matching it. +- push the branch and the tag to gitlab.com +- the new version will only be deployed to `gitlab.com` if [`GITLAB_WORKHORSE_VERSION`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/GITLAB_WORKHORSE_VERSION) is updated accordingly; + if applicable, please remind the person who originally asked for a new release to make this change + (the MR should include a link back to the [version tag](https://gitlab.com/gitlab-org/gitlab-workhorse/-/tags) and a copy of the changelog) + +## Security releases + +Workhorse is included in the packages we create for GitLab, and each version of +GitLab specifies the version of Workhorse it uses in the `GITLAB_WORKHORSE_VERSION` +file, so security fixes in Workhorse are tightly coupled to the [general security release](https://about.gitlab.com/handbook/engineering/workflow/#security-issues) +workflow, with some elaborations to account for the changes happening across two +repositories. In particular, the Workhorse maintainer takes responsibility for +creating new patch versions of Workhorse that can be used in the security +release. + +As security fixes are backported three releases in addition to master, and +changes need to happen across two repositories, up to eight merge requests, and +four Workhorse releases, can be required to fix a security issue in Workhorse. +This is a lot of overhead, so in general, it is better to fix security issues +without changing Workhorse. Where changes **are** necessary, this section +documents the necessary steps. + +If you're working on a security fix in Workhorse, you need two sets of merge +requests: + +* The fix itself, in the `gitlab-org/security/gitlab-workhorse` repository +* A merge request to change the version of workhorse included in the GitLab + security release, in the `gitlab-org/security/gitlab` repository. + +If the Workhorse maintainer isn't also a GitLab maintainer, reviews will need to +be split across several people. If changes to GitLab **code** are required in +addition to the change of Workhorse version, they both happen in the same merge +request. + +Start by creating a single merge request targeting `master` in Workhorse. Ensure +you include a changelog! If code changes are needed in GitLab as well, create a +GitLab merge request targeting `master` at this point, but don't worry about the +`GITLAB_WORKHORSE_VERSION` file yet. + +Once the changes have passed review, the Workhorse maintainer will determine the +new versions of Workhorse that will be needed, and communicate that to the +author. To do this, examine the `GITLAB_WORKHORSE_VERSION` file on each GitLab +stable branch; for instance, if the security release consisted of GitLab +versions `12.10.1`, `12.9.2`, `12.8.3`, and `12.7.4`, we would see the following: + +``` +gitlab$ git fetch security master 12-10-stable-ee 12-9-stable-ee 12-8-stable-ee 12-7-stable-ee` +gitlab$ git show refs/remotes/security/master:GITLAB_WORKHORSE_VERSION +8.30.1 +gitlab$ git show refs/remotes/security/12-10-stable-ee:GITLAB_WORKHORSE_VERSION +8.30.1 +gitlab$ git show refs/remotes/security/12-9-stable-ee:GITLAB_WORKHORSE_VERSION +8.25.2 +gitlab$ git show refs/remotes/security/12-8-stable-ee:GITLAB_WORKHORSE_VERSION +8.21.2 +gitlab$ git show refs/remotes/security/12-7-stable-ee:GITLAB_WORKHORSE_VERSION +8.21.2 +``` + +In this example, there are three distinct Workhorse stable branches to be +concerned with, plus Workhorse master: `8-30-stable`, `8-25-stable`, and +`8-21-stable`, and we can predict that we are going to need to create Workhorse +releases `8.30.2`, `8.25.3`, and `8.21.3`. + +The author needs to create a merge request targeting each Workhorse stable +branch, and verify that the fix works once backported. They also need to create +(or update, if they already exist) GitLab merge requests, setting the +`GITLAB_WORKHORSE_VERSION` file to the predicted workhorse version, and assign +all the MRs back to the appropriate maintainer(s). The pipeline for the GitLab +MRs will fail until the Workhorse releases have been tagged; you can use the +`=workhorse_branch_name` syntax in the `GITLAB_WORKHORSE_VERSION` file to verify +that the MRs interact as expected, if necessary. + +Once all involved maintainers are happy with the overall change, the Workhorse +maintainer will merge each of the Workhorse MRs and generate new Workhorse +releases from the stable branches. The tags will be present on the `security` +mirror and `dev.gitlab.org` **only** at this point. + +Once the Workhorse tags exist, the GitLab maintainer ensures that all the GitLab +MRs are green and assigns those MRs on to the release bot. + +The release managers merge the GitLab MRs, tag GitLab releases that reference +the new Workhorse tags, and release them in the usual way. + +Once the security release is done, the Workhorse maintainer is responsible for +syncing the changes to the `gitlab-org/gitlab-workhorse` repository. Push the +changes to `master`, the new tags, and all the changes to the stable branches. + +This process is quite involved, very manual, and extremely error-prone; work is +ongoing on automating it. + +## Versioning + +Workhorse uses a variation of SemVer. We don't use "normal" SemVer +because we have to be able to integrate into GitLab stable branches. + +A version has the format MAJOR.MINOR.PATCH. + +- Major and minor releases are tagged on the `master` branch +- If the change is backwards compatible, increment the MINOR counter +- If the change breaks compatibility, increment MAJOR and set MINOR to `0` +- Patch release tags must be made on stable branches +- Only make a patch release when targeting a GitLab stable branch + +This means that tags that end in `.0` (e.g. `8.5.0`) must always be on +the master branch, and tags that end in anthing other than `.0` (e.g. +`8.5.2`) must always be on a stable branch. + +> The reason we do this is that SemVer suggests something like a +> refactoring constitutes a "patch release", while the GitLab stable +> branch quality standards do not allow for back-porting refactorings +> into a stable branch. diff --git a/workhorse/README.md b/workhorse/README.md new file mode 100644 index 00000000000..a8564bf76ef --- /dev/null +++ b/workhorse/README.md @@ -0,0 +1,27 @@ +# GitLab Workhorse + +GitLab Workhorse is a smart reverse proxy for GitLab. It handles +"large" HTTP requests such as file downloads, file uploads, Git +push/pull and Git archive downloads. + +Workhorse itself is not a feature, but there are [several features in +GitLab](doc/architecture/gitlab_features.md) that would not work efficiently without Workhorse. + +## Documentation + +Workhorse documentation is available in the [`doc` folder of this repository](doc/). + +* Architectural overview + * [GitLab features that rely on Workhorse](doc/architecture/gitlab_features.md) + * [Websocket channel support](doc/architecture/channel.md) +* Operating Workhorse + * [Source installation](doc/operations/install.md) + * [Workhorse configuration](doc/operations/configuration.md) +* [Contributing](CONTRIBUTING.md) + * [Adding new features](doc/development/new_features.md) + * [Testing your code](doc/development/tests.md) + +## License + +This code is distributed under the MIT license, see the [LICENSE](LICENSE) file. + diff --git a/workhorse/VERSION b/workhorse/VERSION new file mode 100644 index 00000000000..177b27722f4 --- /dev/null +++ b/workhorse/VERSION @@ -0,0 +1 @@ +8.57.0 diff --git a/workhorse/_support/changelog b/workhorse/_support/changelog new file mode 100755 index 00000000000..0e733cc0062 --- /dev/null +++ b/workhorse/_support/changelog @@ -0,0 +1,243 @@ +#!/usr/bin/env ruby +# +# Generate a changelog entry file in the correct location. +# +# Automatically stages the file and amends the previous commit if the `--amend` +# argument is used. +# +# Stolen from gitlab-org/gitaly, lifted from gitlab-org/gitlab-ce + +require 'optparse' +require 'yaml' + +Options = Struct.new( + :amend, + :author, + :dry_run, + :force, + :merge_request, + :title, + :type +) +INVALID_TYPE = -1 + +class ChangelogOptionParser + Type = Struct.new(:name, :description) + TYPES = [ + Type.new('added', 'New feature'), + Type.new('fixed', 'Bug fix'), + Type.new('changed', 'Feature change'), + Type.new('deprecated', 'New deprecation'), + Type.new('removed', 'Feature removal'), + Type.new('security', 'Security fix'), + Type.new('performance', 'Performance improvement'), + Type.new('other', 'Other') + ].freeze + TYPES_OFFSET = 1 + + class << self + def parse(argv) + options = Options.new + + parser = OptionParser.new do |opts| + opts.banner = "Usage: #{__FILE__} [options] [title]\n\n" + + # Note: We do not provide a shorthand for this in order to match the `git + # commit` interface + opts.on('--amend', 'Amend the previous commit') do |value| + options.amend = value + end + + opts.on('-f', '--force', 'Overwrite an existing entry') do |value| + options.force = value + end + + opts.on('-m', '--merge-request [integer]', Integer, 'Merge Request ID') do |value| + options.merge_request = value + end + + opts.on('-n', '--dry-run', "Don't actually write anything, just print") do |value| + options.dry_run = value + end + + opts.on('-u', '--git-username', 'Use Git user.name configuration as the author') do |value| + options.author = git_user_name if value + end + + opts.on('-t', '--type [string]', String, "The category of the change, valid options are: #{TYPES.map(&:name).join(', ')}") do |value| + options.type = parse_type(value) + end + + opts.on('-h', '--help', 'Print help message') do + $stdout.puts opts + exit + end + end + + parser.parse!(argv) + + # Title is everything that remains, but let's clean it up a bit + options.title = argv.join(' ').strip.squeeze(' ').tr("\r\n", '') + + options + end + + def read_type + read_type_message + + type = TYPES[$stdin.getc.to_i - TYPES_OFFSET] + assert_valid_type!(type) + + type.name + end + + private + + def parse_type(name) + type_found = TYPES.find do |type| + type.name == name + end + type_found ? type_found.name : INVALID_TYPE + end + + def read_type_message + $stdout.puts "\n>> Please specify the index for the category of your change:" + TYPES.each_with_index do |type, index| + $stdout.puts "#{index + TYPES_OFFSET}. #{type.description}" + end + $stdout.print "\n?> " + end + + def assert_valid_type!(type) + unless type + $stderr.puts "Invalid category index, please select an index between 1 and #{TYPES.length}" + exit 1 + end + end + + def git_user_name + %x{git config user.name}.strip + end + end +end + +class ChangelogEntry + attr_reader :options + + def initialize(options) + @options = options + + assert_feature_branch! + assert_title! + assert_new_file! + + # Read type from $stdin unless is already set + options.type ||= ChangelogOptionParser.read_type + assert_valid_type! + + $stdout.puts "\e[32mcreate\e[0m #{file_path}" + $stdout.puts contents + + unless options.dry_run + write + amend_commit if options.amend + end + end + + private + + def contents + yaml_content = YAML.dump( + 'title' => title, + 'merge_request' => options.merge_request, + 'author' => options.author, + 'type' => options.type + ) + remove_trailing_whitespace(yaml_content) + end + + def write + File.write(file_path, contents) + end + + def amend_commit + %x{git add #{file_path}} + exec("git commit --amend") + end + + def fail_with(message) + $stderr.puts "\e[31merror\e[0m #{message}" + exit 1 + end + + def assert_feature_branch! + return unless branch_name == 'master' + + fail_with "Create a branch first!" + end + + def assert_new_file! + return unless File.exist?(file_path) + return if options.force + + fail_with "#{file_path} already exists! Use `--force` to overwrite." + end + + def assert_title! + return if options.title.length > 0 || options.amend + + fail_with "Provide a title for the changelog entry or use `--amend`" \ + " to use the title from the previous commit." + end + + def assert_valid_type! + return unless options.type && options.type == INVALID_TYPE + + fail_with 'Invalid category given!' + end + + def title + if options.title.empty? + last_commit_subject + else + options.title + end + end + + def last_commit_subject + %x{git log --format="%s" -1}.strip + end + + def file_path + File.join( + unreleased_path, + branch_name.gsub(/[^\w-]/, '-') << '.yml' + ) + end + + def unreleased_path + path = File.join('changelogs', 'unreleased') + path = File.join('ee', path) if ee? + + path + end + + def ee? + @ee ||= File.exist?(File.expand_path('../CHANGELOG-EE.md', __dir__)) + end + + def branch_name + @branch_name ||= %x{git symbolic-ref --short HEAD}.strip + end + + def remove_trailing_whitespace(yaml_content) + yaml_content.gsub(/ +$/, '') + end +end + +if $0 == __FILE__ + options = ChangelogOptionParser.parse(ARGV) + ChangelogEntry.new(options) +end + +# vim: ft=ruby diff --git a/workhorse/_support/check_changelog.sh b/workhorse/_support/check_changelog.sh new file mode 100755 index 00000000000..2f9850f09fd --- /dev/null +++ b/workhorse/_support/check_changelog.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +set -e + +# we skip the changelog check if the merge requet title ends with "NO CHANGELOG" +if echo "$CI_MERGE_REQUEST_TITLE" | grep -q ' NO CHANGELOG$'; then + echo "Changelog not needed" + + exit 0 +fi + +target=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME:-master} + +if git diff --name-only "origin/$target" | grep -q '^changelogs/' ; then + echo "Changelog included" +else + echo "Please add a changelog running '_support/changelog'" + echo "or disable this check adding 'NO CHANGELOG' at the end of the merge request title" + echo "/title $CI_MERGE_REQUEST_TITLE NO CHANGELOG" + + exit 1 +fi diff --git a/workhorse/_support/detect-assert.sh b/workhorse/_support/detect-assert.sh new file mode 100755 index 00000000000..351cef763b5 --- /dev/null +++ b/workhorse/_support/detect-assert.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +git grep 'testify/assert"' | \ + grep -e '^[^:]*\.go' | \ + awk '{ + print "error: please use testify/require instead of testify/assert" + print + exit 1 +}' diff --git a/workhorse/_support/detect-context.sh b/workhorse/_support/detect-context.sh new file mode 100755 index 00000000000..60ad212decf --- /dev/null +++ b/workhorse/_support/detect-context.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +git grep 'context.\(Background\|TODO\)' | \ + grep -v -e '^[^:]*_test\.go:' -v -e "lint:allow context.Background" -e '^vendor/' -e '^_support/' -e '^cmd/[^:]*/main.go' | \ + grep -e '^[^:]*\.go' | \ + awk '{ + print "Found disallowed use of context.Background or TODO" + print + exit 1 +}' diff --git a/workhorse/_support/fake-auth-backend.go b/workhorse/_support/fake-auth-backend.go new file mode 100644 index 00000000000..17dbcb3b35f --- /dev/null +++ b/workhorse/_support/fake-auth-backend.go @@ -0,0 +1,22 @@ +package main + +import ( + "fmt" + "net/http" + "os" + + "gitlab.com/gitlab-org/labkit/log" +) + +func main() { + if len(os.Args) == 1 { + fmt.Fprintf(os.Stderr, "Usage: %s /path/to/test-repo.git\n", os.Args[0]) + os.Exit(1) + } + + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, `{"RepoPath":"%s","ArchivePath":"%s"}`, os.Args[1], r.URL.Path) + }) + + log.Fatal(http.ListenAndServe("localhost:8080", nil)) +} diff --git a/workhorse/_support/generate_changelog b/workhorse/_support/generate_changelog new file mode 100755 index 00000000000..a9a8bae5a25 --- /dev/null +++ b/workhorse/_support/generate_changelog @@ -0,0 +1,75 @@ +#!/usr/bin/env ruby +# Generates the changelog from the yaml entries in changelogs/unreleased +# +# Lifted form gitlab-org/gitaly + +require 'yaml' +require 'fileutils' + +class ChangelogEntry + attr_reader :title, :merge_request, :type, :author + + def initialize(file_path) + yaml = YAML.safe_load(File.read(file_path)) + + @title = yaml['title'] + @merge_request = yaml['merge_request'] + @type = yaml['type'] + @author = yaml['author'] + end + + def to_s + str = "" + str << "- #{title}\n" + str << " https://gitlab.com/gitlab-org/gitlab-workhorse/-/merge_requests/#{merge_request}\n" + str << " Contributed by #{author}\n" if author + + str + end +end + +ROOT_DIR = File.expand_path('../..', __FILE__) +UNRELEASED_ENTRIES = File.join(ROOT_DIR, 'changelogs', 'unreleased') +CHANGELOG_FILE = File.join(ROOT_DIR, 'CHANGELOG') + +def main(version) + entries = [] + Dir["#{UNRELEASED_ENTRIES}/*.yml"].each do |yml| + entries << ChangelogEntry.new(yml) + FileUtils.rm(yml) + end + + sections = [] + types = entries.map(&:type).uniq.sort + types.each do |type| + text = '' + text << "### #{type.capitalize}\n" + + entries.each do |e| + next unless e.type == type + + text << e.to_s + end + + sections << text + end + + sections << '- No changes.' if sections.empty? + + new_version_entry = ["## v#{version}\n\n", sections.join("\n"), "\n"].join + + current_changelog = File.read(CHANGELOG_FILE).lines + header = current_changelog.shift(2) + + new_changelog = [header, new_version_entry, current_changelog.join] + + File.write(CHANGELOG_FILE, new_changelog.join) +end + +unless ARGV.count == 1 + warn "Usage: #{$0} VERSION" + warn "Specify version as x.y.z" + abort +end + +main(ARGV.first) diff --git a/workhorse/_support/lint.sh b/workhorse/_support/lint.sh new file mode 100755 index 00000000000..b016f088d80 --- /dev/null +++ b/workhorse/_support/lint.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +# Unfortunately, workhorse fails many lint checks which we currently ignore +LINT_RESULT=$(golint "$@"|grep -Ev 'should have|should be|use ALL_CAPS in Go names') + +if [ -n "${LINT_RESULT}" ]; then + echo >&2 "Formatting or imports need fixing: 'make fmt'" + echo ">>${LINT_RESULT}<<" + exit 1 +fi + diff --git a/workhorse/_support/tag.sh b/workhorse/_support/tag.sh new file mode 100644 index 00000000000..639fd141dad --- /dev/null +++ b/workhorse/_support/tag.sh @@ -0,0 +1,45 @@ +set -e + +main() { + version=$1 + set_version + + changelog + + git commit VERSION -m "Update VERSION to $version" + + tag_name="v${version}" + git tag $TAG_OPTS -m "Version ${version}" -a ${tag_name} + git show ${tag_name} + cat <<'EOF' + + Remember to now push your tag, either to gitlab.com (for a + normal release) or dev.gitlab.org (for a security release). +EOF +} + +set_version() { + if ! echo "${version}" | grep -q '^[0-9]\+\.[0-9]\+\.[0-9]\+$' ; then + echo "Invalid VERSION: ${version}" + exit 1 + fi + + if git tag --list | grep -q "^v${version}$" ; then + echo "Tag already exists for ${version}" + exit 1 + fi + + echo "$version" > VERSION +} + +changelog() { + _support/generate_changelog "$version" + + git commit CHANGELOG changelogs/unreleased --file - <&2 "Formatting or imports need fixing: 'make fmt'" + echo "${IMPORT_RESULT}" + exit 1 +fi diff --git a/workhorse/authorization_test.go b/workhorse/authorization_test.go new file mode 100644 index 00000000000..8be1fdcf73a --- /dev/null +++ b/workhorse/authorization_test.go @@ -0,0 +1,131 @@ +package main + +import ( + "context" + "fmt" + "net/http" + "net/http/httptest" + "regexp" + "testing" + + "gitlab.com/gitlab-org/labkit/correlation" + + "github.com/dgrijalva/jwt-go" + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/secret" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upstream/roundtripper" +) + +func okHandler(w http.ResponseWriter, _ *http.Request, _ *api.Response) { + w.WriteHeader(201) + fmt.Fprint(w, "{\"status\":\"ok\"}") +} + +func runPreAuthorizeHandler(t *testing.T, ts *httptest.Server, suffix string, url *regexp.Regexp, apiResponse interface{}, returnCode, expectedCode int) *httptest.ResponseRecorder { + if ts == nil { + ts = testAuthServer(t, url, nil, returnCode, apiResponse) + defer ts.Close() + } + + // Create http request + ctx := correlation.ContextWithCorrelation(context.Background(), "12345678") + httpRequest, err := http.NewRequestWithContext(ctx, "GET", "/address", nil) + require.NoError(t, err) + parsedURL := helper.URLMustParse(ts.URL) + testhelper.ConfigureSecret() + a := api.NewAPI(parsedURL, "123", roundtripper.NewTestBackendRoundTripper(parsedURL)) + + response := httptest.NewRecorder() + a.PreAuthorizeHandler(okHandler, suffix).ServeHTTP(response, httpRequest) + require.Equal(t, expectedCode, response.Code) + return response +} + +func TestPreAuthorizeHappyPath(t *testing.T) { + runPreAuthorizeHandler( + t, nil, "/authorize", + regexp.MustCompile(`/authorize\z`), + &api.Response{}, + 200, 201) +} + +func TestPreAuthorizeSuffix(t *testing.T) { + runPreAuthorizeHandler( + t, nil, "/different-authorize", + regexp.MustCompile(`/authorize\z`), + &api.Response{}, + 200, 404) +} + +func TestPreAuthorizeJsonFailure(t *testing.T) { + runPreAuthorizeHandler( + t, nil, "/authorize", + regexp.MustCompile(`/authorize\z`), + "not-json", + 200, 500) +} + +func TestPreAuthorizeContentTypeFailure(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, err := w.Write([]byte(`{"hello":"world"}`)) + require.NoError(t, err, "write auth response") + })) + defer ts.Close() + + runPreAuthorizeHandler( + t, ts, "/authorize", + regexp.MustCompile(`/authorize\z`), + "", + 200, 200) +} + +func TestPreAuthorizeRedirect(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + http.Redirect(w, r, "/", http.StatusMovedPermanently) + })) + defer ts.Close() + + runPreAuthorizeHandler(t, ts, "/willredirect", + regexp.MustCompile(`/willredirect\z`), + "", + 301, 301) +} + +func TestPreAuthorizeJWT(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + token, err := jwt.Parse(r.Header.Get(secret.RequestHeader), func(token *jwt.Token) (interface{}, error) { + // Don't forget to validate the alg is what you expect: + if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { + return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) + } + testhelper.ConfigureSecret() + secretBytes, err := secret.Bytes() + if err != nil { + return nil, fmt.Errorf("read secret from file: %v", err) + } + + return secretBytes, nil + }) + require.NoError(t, err, "decode token") + + claims, ok := token.Claims.(jwt.MapClaims) + require.True(t, ok, "claims cast") + require.True(t, token.Valid, "JWT token valid") + require.Equal(t, "gitlab-workhorse", claims["iss"], "JWT token issuer") + + w.Header().Set("Content-Type", api.ResponseContentType) + _, err = w.Write([]byte(`{"hello":"world"}`)) + require.NoError(t, err, "write auth response") + })) + defer ts.Close() + + runPreAuthorizeHandler( + t, ts, "/authorize", + regexp.MustCompile(`/authorize\z`), + "", + 200, 201) +} diff --git a/workhorse/backend.go b/workhorse/backend.go new file mode 100644 index 00000000000..aef1214abc9 --- /dev/null +++ b/workhorse/backend.go @@ -0,0 +1,30 @@ +package main + +import ( + "fmt" + "net/url" +) + +func parseAuthBackend(authBackend string) (*url.URL, error) { + backendURL, err := url.Parse(authBackend) + if err != nil { + return nil, err + } + + if backendURL.Host == "" { + backendURL, err = url.Parse("http://" + authBackend) + if err != nil { + return nil, err + } + } + + if backendURL.Scheme != "http" { + return nil, fmt.Errorf("invalid scheme, only 'http' is allowed: %q", authBackend) + } + + if backendURL.Host == "" { + return nil, fmt.Errorf("missing host in %q", authBackend) + } + + return backendURL, nil +} diff --git a/workhorse/backend_test.go b/workhorse/backend_test.go new file mode 100644 index 00000000000..c15947a75ad --- /dev/null +++ b/workhorse/backend_test.go @@ -0,0 +1,41 @@ +package main + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestParseAuthBackendFailure(t *testing.T) { + failures := []string{ + "", + "ftp://localhost", + "https://example.com", + } + + for _, example := range failures { + t.Run(example, func(t *testing.T) { + _, err := parseAuthBackend(example) + require.Error(t, err) + }) + } +} + +func TestParseAuthBackend(t *testing.T) { + successes := []struct{ input, host, scheme string }{ + {"http://localhost:8080", "localhost:8080", "http"}, + {"localhost:3000", "localhost:3000", "http"}, + {"http://localhost", "localhost", "http"}, + {"localhost", "localhost", "http"}, + } + + for _, example := range successes { + t.Run(example.input, func(t *testing.T) { + result, err := parseAuthBackend(example.input) + require.NoError(t, err) + + require.Equal(t, example.host, result.Host, "host") + require.Equal(t, example.scheme, result.Scheme, "scheme") + }) + } +} diff --git a/workhorse/cable_test.go b/workhorse/cable_test.go new file mode 100644 index 00000000000..7320837541a --- /dev/null +++ b/workhorse/cable_test.go @@ -0,0 +1,93 @@ +package main + +import ( + "net/http" + "net/http/httptest" + "net/url" + "regexp" + "testing" + + "github.com/gorilla/websocket" + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" +) + +const cablePath = "/-/cable" + +func TestSingleBackend(t *testing.T) { + cableServerConns, cableBackendServer := startCableServer() + defer cableBackendServer.Close() + + config := newUpstreamWithCableConfig(cableBackendServer.URL, "") + workhorse := startWorkhorseServerWithConfig(config) + defer workhorse.Close() + + cableURL := websocketURL(workhorse.URL, cablePath) + + client, _, err := dialWebsocket(cableURL, nil) + require.NoError(t, err) + defer client.Close() + + server := (<-cableServerConns).conn + defer server.Close() + + require.NoError(t, say(client, "hello")) + requireReadMessage(t, server, websocket.TextMessage, "hello") + + require.NoError(t, say(server, "world")) + requireReadMessage(t, client, websocket.TextMessage, "world") +} + +func TestSeparateCableBackend(t *testing.T) { + authBackendServer := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), http.HandlerFunc(http.NotFound)) + defer authBackendServer.Close() + + cableServerConns, cableBackendServer := startCableServer() + defer cableBackendServer.Close() + + config := newUpstreamWithCableConfig(authBackendServer.URL, cableBackendServer.URL) + workhorse := startWorkhorseServerWithConfig(config) + defer workhorse.Close() + + cableURL := websocketURL(workhorse.URL, cablePath) + + client, _, err := dialWebsocket(cableURL, nil) + require.NoError(t, err) + defer client.Close() + + server := (<-cableServerConns).conn + defer server.Close() + + require.NoError(t, say(client, "hello")) + requireReadMessage(t, server, websocket.TextMessage, "hello") + + require.NoError(t, say(server, "world")) + requireReadMessage(t, client, websocket.TextMessage, "world") +} + +func startCableServer() (chan connWithReq, *httptest.Server) { + upgrader := &websocket.Upgrader{} + + connCh := make(chan connWithReq, 1) + server := testhelper.TestServerWithHandler(regexp.MustCompile(cablePath), webSocketHandler(upgrader, connCh)) + + return connCh, server +} + +func newUpstreamWithCableConfig(authBackend string, cableBackend string) *config.Config { + var cableBackendURL *url.URL + + if cableBackend != "" { + cableBackendURL = helper.URLMustParse(cableBackend) + } + + return &config.Config{ + Version: "123", + DocumentRoot: testDocumentRoot, + Backend: helper.URLMustParse(authBackend), + CableBackend: cableBackendURL, + } +} diff --git a/workhorse/changelogs/unreleased/.gitkeep b/workhorse/changelogs/unreleased/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/workhorse/channel_test.go b/workhorse/channel_test.go new file mode 100644 index 00000000000..cd8957ed829 --- /dev/null +++ b/workhorse/channel_test.go @@ -0,0 +1,245 @@ +package main + +import ( + "bytes" + "encoding/pem" + "fmt" + "net" + "net/http" + "net/http/httptest" + "net/url" + "path" + "strings" + "testing" + "time" + + "github.com/gorilla/websocket" + "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" +) + +var ( + envTerminalPath = fmt.Sprintf("%s/-/environments/1/terminal.ws", testProject) + jobTerminalPath = fmt.Sprintf("%s/-/jobs/1/terminal.ws", testProject) + servicesProxyWSPath = fmt.Sprintf("%s/-/jobs/1/proxy.ws", testProject) +) + +type connWithReq struct { + conn *websocket.Conn + req *http.Request +} + +func TestChannelHappyPath(t *testing.T) { + tests := []struct { + name string + channelPath string + }{ + {"environments", envTerminalPath}, + {"jobs", jobTerminalPath}, + {"services", servicesProxyWSPath}, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + serverConns, clientURL, close := wireupChannel(t, test.channelPath, nil, "channel.k8s.io") + defer close() + + client, _, err := dialWebsocket(clientURL, nil, "terminal.gitlab.com") + require.NoError(t, err) + + server := (<-serverConns).conn + defer server.Close() + + message := "test message" + + // channel.k8s.io: server writes to channel 1, STDOUT + require.NoError(t, say(server, "\x01"+message)) + requireReadMessage(t, client, websocket.BinaryMessage, message) + + require.NoError(t, say(client, message)) + + // channel.k8s.io: client writes get put on channel 0, STDIN + requireReadMessage(t, server, websocket.BinaryMessage, "\x00"+message) + + // Closing the client should send an EOT signal to the server's STDIN + client.Close() + requireReadMessage(t, server, websocket.BinaryMessage, "\x00\x04") + }) + } +} + +func TestChannelBadTLS(t *testing.T) { + _, clientURL, close := wireupChannel(t, envTerminalPath, badCA, "channel.k8s.io") + defer close() + + _, _, err := dialWebsocket(clientURL, nil, "terminal.gitlab.com") + require.Equal(t, websocket.ErrBadHandshake, err, "unexpected error %v", err) +} + +func TestChannelSessionTimeout(t *testing.T) { + serverConns, clientURL, close := wireupChannel(t, envTerminalPath, timeout, "channel.k8s.io") + defer close() + + client, _, err := dialWebsocket(clientURL, nil, "terminal.gitlab.com") + require.NoError(t, err) + + sc := <-serverConns + defer sc.conn.Close() + + client.SetReadDeadline(time.Now().Add(time.Duration(2) * time.Second)) + _, _, err = client.ReadMessage() + + require.True(t, websocket.IsCloseError(err, websocket.CloseAbnormalClosure), "Client connection was not closed, got %v", err) +} + +func TestChannelProxyForwardsHeadersFromUpstream(t *testing.T) { + hdr := make(http.Header) + hdr.Set("Random-Header", "Value") + serverConns, clientURL, close := wireupChannel(t, envTerminalPath, setHeader(hdr), "channel.k8s.io") + defer close() + + client, _, err := dialWebsocket(clientURL, nil, "terminal.gitlab.com") + require.NoError(t, err) + defer client.Close() + + sc := <-serverConns + defer sc.conn.Close() + require.Equal(t, "Value", sc.req.Header.Get("Random-Header"), "Header specified by upstream not sent to remote") +} + +func TestChannelProxyForwardsXForwardedForFromClient(t *testing.T) { + serverConns, clientURL, close := wireupChannel(t, envTerminalPath, nil, "channel.k8s.io") + defer close() + + hdr := make(http.Header) + hdr.Set("X-Forwarded-For", "127.0.0.2") + client, _, err := dialWebsocket(clientURL, hdr, "terminal.gitlab.com") + require.NoError(t, err) + defer client.Close() + + clientIP, _, err := net.SplitHostPort(client.LocalAddr().String()) + require.NoError(t, err) + + sc := <-serverConns + defer sc.conn.Close() + + require.Equal(t, "127.0.0.2, "+clientIP, sc.req.Header.Get("X-Forwarded-For"), "X-Forwarded-For from client not sent to remote") +} + +func wireupChannel(t *testing.T, channelPath string, modifier func(*api.Response), subprotocols ...string) (chan connWithReq, string, func()) { + serverConns, remote := startWebsocketServer(subprotocols...) + authResponse := channelOkBody(remote, nil, subprotocols...) + if modifier != nil { + modifier(authResponse) + } + upstream := testAuthServer(t, nil, nil, 200, authResponse) + workhorse := startWorkhorseServer(upstream.URL) + + return serverConns, websocketURL(workhorse.URL, channelPath), func() { + workhorse.Close() + upstream.Close() + remote.Close() + } +} + +func startWebsocketServer(subprotocols ...string) (chan connWithReq, *httptest.Server) { + upgrader := &websocket.Upgrader{Subprotocols: subprotocols} + + connCh := make(chan connWithReq, 1) + server := httptest.NewTLSServer(webSocketHandler(upgrader, connCh)) + + return connCh, server +} + +func webSocketHandler(upgrader *websocket.Upgrader, connCh chan connWithReq) http.HandlerFunc { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + logEntry := log.WithFields(log.Fields{ + "method": r.Method, + "url": r.URL, + "headers": r.Header, + }) + + logEntry.Info("WEBSOCKET") + conn, err := upgrader.Upgrade(w, r, nil) + if err != nil { + logEntry.WithError(err).Error("WEBSOCKET Upgrade failed") + return + } + connCh <- connWithReq{conn, r} + // The connection has been hijacked so it's OK to end here + }) +} + +func channelOkBody(remote *httptest.Server, header http.Header, subprotocols ...string) *api.Response { + out := &api.Response{ + Channel: &api.ChannelSettings{ + Url: websocketURL(remote.URL), + Header: header, + Subprotocols: subprotocols, + MaxSessionTime: 0, + }, + } + + if len(remote.TLS.Certificates) > 0 { + data := bytes.NewBuffer(nil) + pem.Encode(data, &pem.Block{Type: "CERTIFICATE", Bytes: remote.TLS.Certificates[0].Certificate[0]}) + out.Channel.CAPem = data.String() + } + + return out +} + +func badCA(authResponse *api.Response) { + authResponse.Channel.CAPem = "Bad CA" +} + +func timeout(authResponse *api.Response) { + authResponse.Channel.MaxSessionTime = 1 +} + +func setHeader(hdr http.Header) func(*api.Response) { + return func(authResponse *api.Response) { + authResponse.Channel.Header = hdr + } +} + +func dialWebsocket(url string, header http.Header, subprotocols ...string) (*websocket.Conn, *http.Response, error) { + dialer := &websocket.Dialer{ + Subprotocols: subprotocols, + } + + return dialer.Dial(url, header) +} + +func websocketURL(httpURL string, suffix ...string) string { + url, err := url.Parse(httpURL) + if err != nil { + panic(err) + } + + switch url.Scheme { + case "http": + url.Scheme = "ws" + case "https": + url.Scheme = "wss" + default: + panic("Unknown scheme: " + url.Scheme) + } + + url.Path = path.Join(url.Path, strings.Join(suffix, "/")) + + return url.String() +} + +func say(conn *websocket.Conn, message string) error { + return conn.WriteMessage(websocket.TextMessage, []byte(message)) +} + +func requireReadMessage(t *testing.T, conn *websocket.Conn, expectedMessageType int, expectedData string) { + messageType, data, err := conn.ReadMessage() + require.NoError(t, err) + + require.Equal(t, expectedMessageType, messageType, "message type") + require.Equal(t, expectedData, string(data), "message data") +} diff --git a/workhorse/cmd/gitlab-resize-image/main.go b/workhorse/cmd/gitlab-resize-image/main.go new file mode 100644 index 00000000000..662efd7306d --- /dev/null +++ b/workhorse/cmd/gitlab-resize-image/main.go @@ -0,0 +1,37 @@ +package main + +import ( + "fmt" + "image" + "os" + "strconv" + + "github.com/disintegration/imaging" +) + +func main() { + if err := _main(); err != nil { + fmt.Fprintf(os.Stderr, "%s: fatal: %v\n", os.Args[0], err) + os.Exit(1) + } +} + +func _main() error { + widthParam := os.Getenv("GL_RESIZE_IMAGE_WIDTH") + requestedWidth, err := strconv.Atoi(widthParam) + if err != nil { + return fmt.Errorf("GL_RESIZE_IMAGE_WIDTH: %w", err) + } + + src, formatName, err := image.Decode(os.Stdin) + if err != nil { + return fmt.Errorf("decode: %w", err) + } + imagingFormat, err := imaging.FormatFromExtension(formatName) + if err != nil { + return fmt.Errorf("find imaging format: %w", err) + } + + image := imaging.Resize(src, requestedWidth, 0, imaging.Lanczos) + return imaging.Encode(os.Stdout, image, imagingFormat) +} diff --git a/workhorse/cmd/gitlab-zip-cat/main.go b/workhorse/cmd/gitlab-zip-cat/main.go new file mode 100644 index 00000000000..a0778a55ad2 --- /dev/null +++ b/workhorse/cmd/gitlab-zip-cat/main.go @@ -0,0 +1,96 @@ +package main + +import ( + "archive/zip" + "context" + "errors" + "flag" + "fmt" + "io" + "os" + + "gitlab.com/gitlab-org/labkit/mask" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/zipartifacts" +) + +const progName = "gitlab-zip-cat" + +var Version = "unknown" + +var printVersion = flag.Bool("version", false, "Print version and exit") + +func main() { + flag.Parse() + + version := fmt.Sprintf("%s %s", progName, Version) + if *printVersion { + fmt.Println(version) + os.Exit(0) + } + + archivePath := os.Getenv("ARCHIVE_PATH") + encodedFileName := os.Getenv("ENCODED_FILE_NAME") + + if len(os.Args) != 1 || archivePath == "" || encodedFileName == "" { + fmt.Fprintf(os.Stderr, "Usage: %s\n", progName) + fmt.Fprintf(os.Stderr, "Env: ARCHIVE_PATH=https://path.to/archive.zip or /path/to/archive.zip\n") + fmt.Fprintf(os.Stderr, "Env: ENCODED_FILE_NAME=base64-encoded-file-name\n") + os.Exit(1) + } + + scrubbedArchivePath := mask.URL(archivePath) + + fileName, err := zipartifacts.DecodeFileEntry(encodedFileName) + if err != nil { + fatalError(fmt.Errorf("decode entry %q", encodedFileName), err) + } + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + archive, err := zipartifacts.OpenArchive(ctx, archivePath) + if err != nil { + fatalError(errors.New("open archive"), err) + } + + file := findFileInZip(fileName, archive) + if file == nil { + fatalError(fmt.Errorf("find %q in %q: not found", fileName, scrubbedArchivePath), zipartifacts.ErrorCode[zipartifacts.CodeEntryNotFound]) + } + // Start decompressing the file + reader, err := file.Open() + if err != nil { + fatalError(fmt.Errorf("open %q in %q", fileName, scrubbedArchivePath), err) + } + defer reader.Close() + + if _, err := fmt.Printf("%d\n", file.UncompressedSize64); err != nil { + fatalError(fmt.Errorf("write file size invalid"), err) + } + + if _, err := io.Copy(os.Stdout, reader); err != nil { + fatalError(fmt.Errorf("write %q from %q to stdout", fileName, scrubbedArchivePath), err) + } +} + +func findFileInZip(fileName string, archive *zip.Reader) *zip.File { + for _, file := range archive.File { + if file.Name == fileName { + return file + } + } + return nil +} + +func fatalError(contextErr error, statusErr error) { + code := zipartifacts.ExitCodeByError(statusErr) + + fmt.Fprintf(os.Stderr, "%s error: %v - %v, code: %d\n", progName, statusErr, contextErr, code) + + if code > 0 { + os.Exit(code) + } else { + os.Exit(1) + } +} diff --git a/workhorse/cmd/gitlab-zip-metadata/limit/reader.go b/workhorse/cmd/gitlab-zip-metadata/limit/reader.go new file mode 100644 index 00000000000..c1e9bd20993 --- /dev/null +++ b/workhorse/cmd/gitlab-zip-metadata/limit/reader.go @@ -0,0 +1,52 @@ +package limit + +import ( + "errors" + "io" + "sync/atomic" +) + +var ErrLimitExceeded = errors.New("reader limit exceeded") + +const megabyte = 1 << 20 + +// LimitedReaderAt supports running a callback in case of reaching a read limit +// (bytes), and allows using a smaller limit than a defined offset for a read. +type LimitedReaderAt struct { + read int64 + limit int64 + parent io.ReaderAt + limitFunc func(int64) +} + +func (r *LimitedReaderAt) ReadAt(p []byte, off int64) (int, error) { + if max := r.limit - r.read; int64(len(p)) > max { + p = p[0:max] + } + + n, err := r.parent.ReadAt(p, off) + atomic.AddInt64(&r.read, int64(n)) + + if r.read >= r.limit { + r.limitFunc(r.read) + + return n, ErrLimitExceeded + } + + return n, err +} + +func NewLimitedReaderAt(reader io.ReaderAt, limit int64, limitFunc func(int64)) io.ReaderAt { + return &LimitedReaderAt{parent: reader, limit: limit, limitFunc: limitFunc} +} + +// SizeToLimit tries to dermine an appropriate limit in bytes for an archive of +// a given size. If the size is less than 1 gigabyte we always limit a reader +// to 100 megabytes, otherwise the limit is 10% of a given size. +func SizeToLimit(size int64) int64 { + if size <= 1024*megabyte { + return 100 * megabyte + } + + return size / 10 +} diff --git a/workhorse/cmd/gitlab-zip-metadata/limit/reader_test.go b/workhorse/cmd/gitlab-zip-metadata/limit/reader_test.go new file mode 100644 index 00000000000..57ba8eeb214 --- /dev/null +++ b/workhorse/cmd/gitlab-zip-metadata/limit/reader_test.go @@ -0,0 +1,90 @@ +package limit + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestReadAt(t *testing.T) { + t.Run("when limit has not been reached", func(t *testing.T) { + r := strings.NewReader("some string to read") + buf := make([]byte, 11) + + reader := NewLimitedReaderAt(r, 32, func(n int64) { + require.Zero(t, n) + }) + p, err := reader.ReadAt(buf, 0) + + require.NoError(t, err) + require.Equal(t, 11, p) + require.Equal(t, "some string", string(buf)) + }) + + t.Run("when read limit is exceeded", func(t *testing.T) { + r := strings.NewReader("some string to read") + buf := make([]byte, 11) + + reader := NewLimitedReaderAt(r, 9, func(n int64) { + require.Equal(t, 9, int(n)) + }) + p, err := reader.ReadAt(buf, 0) + + require.Error(t, err) + require.Equal(t, 9, p) + require.Equal(t, "some stri\x00\x00", string(buf)) + }) + + t.Run("when offset is higher than a limit", func(t *testing.T) { + r := strings.NewReader("some string to read") + buf := make([]byte, 4) + + reader := NewLimitedReaderAt(r, 5, func(n int64) { + require.Zero(t, n) + }) + + p, err := reader.ReadAt(buf, 15) + + require.NoError(t, err) + require.Equal(t, 4, p) + require.Equal(t, "read", string(buf)) + }) + + t.Run("when a read starts at the limit", func(t *testing.T) { + r := strings.NewReader("some string to read") + buf := make([]byte, 11) + + reader := NewLimitedReaderAt(r, 10, func(n int64) { + require.Equal(t, 10, int(n)) + }) + + reader.ReadAt(buf, 0) + p, err := reader.ReadAt(buf, 0) + + require.EqualError(t, err, ErrLimitExceeded.Error()) + require.Equal(t, 0, p) + require.Equal(t, "some strin\x00", string(buf)) + }) +} + +func TestSizeToLimit(t *testing.T) { + tests := []struct { + size int64 + limit int64 + name string + }{ + {size: 1, limit: 104857600, name: "1b to 100mb"}, + {size: 100, limit: 104857600, name: "100b to 100mb"}, + {size: 104857600, limit: 104857600, name: "100mb to 100mb"}, + {size: 1073741824, limit: 104857600, name: "1gb to 100mb"}, + {size: 10737418240, limit: 1073741824, name: "10gb to 1gb"}, + {size: 53687091200, limit: 5368709120, name: "50gb to 5gb"}, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + require.Equal(t, test.limit, SizeToLimit(test.size)) + }) + } +} diff --git a/workhorse/cmd/gitlab-zip-metadata/main.go b/workhorse/cmd/gitlab-zip-metadata/main.go new file mode 100644 index 00000000000..faa85ab5366 --- /dev/null +++ b/workhorse/cmd/gitlab-zip-metadata/main.go @@ -0,0 +1,67 @@ +package main + +import ( + "context" + "flag" + "fmt" + "io" + "os" + + "gitlab.com/gitlab-org/gitlab-workhorse/cmd/gitlab-zip-metadata/limit" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/zipartifacts" +) + +const progName = "gitlab-zip-metadata" + +var Version = "unknown" + +var printVersion = flag.Bool("version", false, "Print version and exit") + +func main() { + flag.Parse() + + version := fmt.Sprintf("%s %s", progName, Version) + if *printVersion { + fmt.Println(version) + os.Exit(0) + } + + if len(os.Args) != 2 { + fmt.Fprintf(os.Stderr, "Usage: %s FILE.ZIP\n", progName) + os.Exit(1) + } + + readerFunc := func(reader io.ReaderAt, size int64) io.ReaderAt { + readLimit := limit.SizeToLimit(size) + + return limit.NewLimitedReaderAt(reader, readLimit, func(read int64) { + fmt.Fprintf(os.Stderr, "%s: zip archive limit exceeded after reading %d bytes\n", progName, read) + + fatalError(zipartifacts.ErrorCode[zipartifacts.CodeLimitsReached]) + }) + } + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + archive, err := zipartifacts.OpenArchiveWithReaderFunc(ctx, os.Args[1], readerFunc) + if err != nil { + fatalError(err) + } + + if err := zipartifacts.GenerateZipMetadata(os.Stdout, archive); err != nil { + fatalError(err) + } +} + +func fatalError(err error) { + code := zipartifacts.ExitCodeByError(err) + + fmt.Fprintf(os.Stderr, "%s error: %v, code: %d\n", progName, err, code) + + if code > 0 { + os.Exit(code) + } else { + os.Exit(1) + } +} diff --git a/workhorse/config.toml.example b/workhorse/config.toml.example new file mode 100644 index 00000000000..0f5b032ca3a --- /dev/null +++ b/workhorse/config.toml.example @@ -0,0 +1,17 @@ +[redis] +URL = "unix:/home/git/gitlab/redis/redis.socket" + +[object_storage] + provider = "AWS" # Allowed options: AWS, AzureRM + +[object_storage.s3] + aws_access_key_id = "YOUR AWS ACCESS KEY" + aws_secret_access_key = "YOUR AWS SECRET ACCESS KEY" + +[object_store.azurerm] + azure_storage_account_name = "YOUR ACCOUNT NAME" + azure_storage_access_key = "YOUR ACCOUNT KEY" + +[image_resizer] + max_scaler_procs = 4 # Recommendation: CPUs / 2 + max_filesize = 250000 diff --git a/workhorse/config_test.go b/workhorse/config_test.go new file mode 100644 index 00000000000..f9d12bd5e2b --- /dev/null +++ b/workhorse/config_test.go @@ -0,0 +1,157 @@ +package main + +import ( + "flag" + "io" + "io/ioutil" + "net/url" + "os" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/queueing" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upstream" +) + +func TestConfigFile(t *testing.T) { + f, err := ioutil.TempFile("", "workhorse-config-test") + require.NoError(t, err) + defer os.Remove(f.Name()) + + data := ` +[redis] +password = "redis password" +[object_storage] +provider = "test provider" +[image_resizer] +max_scaler_procs = 123 +` + _, err = io.WriteString(f, data) + require.NoError(t, err) + require.NoError(t, f.Close()) + + _, cfg, err := buildConfig("test", []string{"-config", f.Name()}) + require.NoError(t, err, "build config") + + // These are integration tests: we want to see that each section in the + // config file ends up in the config struct. We do not test all the + // fields in each section; that should happen in the tests of the + // internal/config package. + require.Equal(t, "redis password", cfg.Redis.Password) + require.Equal(t, "test provider", cfg.ObjectStorageCredentials.Provider) + require.Equal(t, uint32(123), cfg.ImageResizerConfig.MaxScalerProcs, "image resizer max_scaler_procs") +} + +func TestConfigErrorHelp(t *testing.T) { + for _, f := range []string{"-h", "-help"} { + t.Run(f, func(t *testing.T) { + _, _, err := buildConfig("test", []string{f}) + require.Equal(t, alreadyPrintedError{flag.ErrHelp}, err) + }) + } +} + +func TestConfigError(t *testing.T) { + for _, arg := range []string{"-foobar", "foobar"} { + t.Run(arg, func(t *testing.T) { + _, _, err := buildConfig("test", []string{arg}) + + require.Error(t, err) + require.IsType(t, alreadyPrintedError{}, err) + }) + } +} + +func TestConfigDefaults(t *testing.T) { + boot, cfg, err := buildConfig("test", nil) + require.NoError(t, err, "build config") + + expectedBoot := &bootConfig{ + secretPath: "./.gitlab_workhorse_secret", + listenAddr: "localhost:8181", + listenNetwork: "tcp", + logFormat: "text", + } + + require.Equal(t, expectedBoot, boot) + + expectedCfg := &config.Config{ + Backend: upstream.DefaultBackend, + CableBackend: upstream.DefaultBackend, + Version: "(unknown version)", + DocumentRoot: "public", + ProxyHeadersTimeout: 5 * time.Minute, + APIQueueTimeout: queueing.DefaultTimeout, + APICILongPollingDuration: 50 * time.Nanosecond, // TODO this is meant to be 50*time.Second but it has been wrong for ages + ImageResizerConfig: config.DefaultImageResizerConfig, + } + + require.Equal(t, expectedCfg, cfg) +} + +func TestConfigFlagParsing(t *testing.T) { + backendURL, err := url.Parse("http://localhost:1234") + require.NoError(t, err) + cableURL, err := url.Parse("http://localhost:5678") + require.NoError(t, err) + + args := []string{ + "-version", + "-secretPath", "secret path", + "-listenAddr", "listen addr", + "-listenNetwork", "listen network", + "-listenUmask", "123", + "-pprofListenAddr", "pprof listen addr", + "-prometheusListenAddr", "prometheus listen addr", + "-logFile", "log file", + "-logFormat", "log format", + "-documentRoot", "document root", + "-developmentMode", + "-authBackend", backendURL.String(), + "-authSocket", "auth socket", + "-cableBackend", cableURL.String(), + "-cableSocket", "cable socket", + "-proxyHeadersTimeout", "10m", + "-apiLimit", "234", + "-apiQueueLimit", "345", + "-apiQueueDuration", "123s", + "-apiCiLongPollingDuration", "234s", + "-propagateCorrelationID", + } + boot, cfg, err := buildConfig("test", args) + require.NoError(t, err, "build config") + + expectedBoot := &bootConfig{ + secretPath: "secret path", + listenAddr: "listen addr", + listenNetwork: "listen network", + listenUmask: 123, + pprofListenAddr: "pprof listen addr", + prometheusListenAddr: "prometheus listen addr", + logFile: "log file", + logFormat: "log format", + printVersion: true, + } + require.Equal(t, expectedBoot, boot) + + expectedCfg := &config.Config{ + DocumentRoot: "document root", + DevelopmentMode: true, + Backend: backendURL, + Socket: "auth socket", + CableBackend: cableURL, + CableSocket: "cable socket", + Version: "(unknown version)", + ProxyHeadersTimeout: 10 * time.Minute, + APILimit: 234, + APIQueueLimit: 345, + APIQueueTimeout: 123 * time.Second, + APICILongPollingDuration: 234 * time.Second, + PropagateCorrelationID: true, + ImageResizerConfig: config.DefaultImageResizerConfig, + } + require.Equal(t, expectedCfg, cfg) +} diff --git a/workhorse/doc/architecture/channel.md b/workhorse/doc/architecture/channel.md new file mode 100644 index 00000000000..8423405a9cf --- /dev/null +++ b/workhorse/doc/architecture/channel.md @@ -0,0 +1,194 @@ +# Websocket channel support + +In some cases, GitLab can provide in-browser terminal access to an +environment (which is a running server or container, onto which a +project has been deployed), or even access to services running in CI +through a WebSocket. Workhorse manages the WebSocket upgrade and +long-lived connection to the websocket connection, which frees +up GitLab to process other requests. + +This document outlines the architecture of these connections. + +## Introduction to WebSockets + +A websocket is an "upgraded" HTTP/1.1 request. Their purpose is to +permit bidirectional communication between a client and a server. +**Websockets are not HTTP**. Clients can send messages (known as +frames) to the server at any time, and vice-versa. Client messages +are not necessarily requests, and server messages are not necessarily +responses. WebSocket URLs have schemes like `ws://` (unencrypted) or +`wss://` (TLS-secured). + +When requesting an upgrade to WebSocket, the browser sends a HTTP/1.1 +request that looks like this: + +``` +GET /path.ws HTTP/1.1 +Connection: upgrade +Upgrade: websocket +Sec-WebSocket-Protocol: terminal.gitlab.com +# More headers, including security measures +``` + +At this point, the connection is still HTTP, so this is a request and +the server can send a normal HTTP response, including `404 Not Found`, +`500 Internal Server Error`, etc. + +If the server decides to permit the upgrade, it will send a HTTP +`101 Switching Protocols` response. From this point, the connection +is no longer HTTP. It is a WebSocket and frames, not HTTP requests, +will flow over it. The connection will persist until the client or +server closes the connection. + +In addition to the subprotocol, individual websocket frames may +also specify a message type - examples include `BinaryMessage`, +`TextMessage`, `Ping`, `Pong` or `Close`. Only binary frames can +contain arbitrary data - other frames are expected to be valid +UTF-8 strings, in addition to any subprotocol expectations. + +## Browser to Workhorse + +Using the terminal as an example, GitLab serves a JavaScript terminal +emulator to the browser on a URL like +`https://gitlab.com/group/project/-/environments/1/terminal`. +This opens a websocket connection to, e.g., +`wss://gitlab.com/group/project/-/environments/1/terminal.ws`, +This endpoint doesn't exist in GitLab - only in Workhorse. + +When receiving the connection, Workhorse first checks that the +client is authorized to access the requested terminal. It does +this by performing a "preauthentication" request to GitLab. + +If the client has the appropriate permissions and the terminal +exists, GitLab responds with a successful response that includes +details of the terminal that the client should be connected to. +Otherwise, it returns an appropriate HTTP error response. + +Errors are passed back to the client as HTTP responses, but if +GitLab returns valid terminal details to Workhorse, it will +connect to the specified terminal, upgrade the browser to a +WebSocket, and proxy between the two connections for as long +as the browser's credentials are valid. Workhorse will also +send regular `PingMessage` control frames to the browser, to +keep intervening proxies from terminating the connection +while the browser is present. + +The browser must request an upgrade with a specific subprotocol: + +### `terminal.gitlab.com` + +This subprotocol considers `TextMessage` frames to be invalid. +Control frames, such as `PingMessage` or `CloseMessage`, have +their usual meanings. + +`BinaryMessage` frames sent from the browser to the server are +arbitrary text input. + +`BinaryMessage` frames sent from the server to the browser are +arbitrary text output. + +These frames are expected to contain ANSI text control codes +and may be in any encoding. + +### `base64.terminal.gitlab.com` + +This subprotocol considers `BinaryMessage` frames to be invalid. +Control frames, such as `PingMessage` or `CloseMessage`, have +their usual meanings. + +`TextMessage` frames sent from the browser to the server are +base64-encoded arbitrary text input (so the server must +base64-decode them before inputting them). + +`TextMessage` frames sent from the server to the browser are +base64-encoded arbitrary text output (so the browser must +base64-decode them before outputting them). + +In their base64-encoded form, these frames are expected to +contain ANSI terminal control codes, and may be in any encoding. + +## Workhorse to GitLab + +Using again the terminal as an example, before upgrading the browser, +Workhorse sends a normal HTTP request to GitLab on a URL like +`https://gitlab.com/group/project/environments/1/terminal.ws/authorize`. +This returns a JSON response containing details of where the +terminal can be found, and how to connect it. In particular, +the following details are returned in case of success: + +* WebSocket URL to **connect** to, e.g.: `wss://example.com/terminals/1.ws?tty=1` +* WebSocket subprotocols to support, e.g.: `["channel.k8s.io"]` +* Headers to send, e.g.: `Authorization: Token xxyyz..` +* Certificate authority to verify `wss` connections with (optional) + +Workhorse periodically re-checks this endpoint, and if it gets an +error response, or the details of the terminal change, it will +terminate the websocket session. + +## Workhorse to the WebSocket server + +In GitLab, environments or CI jobs may have a deployment service (e.g., +`KubernetesService`) associated with them. This service knows +where the terminals or the service for an environment may be found, and these +details are returned to Workhorse by GitLab. + +These URLs are *also* WebSocket URLs, and GitLab tells Workhorse +which subprotocols to speak over the connection, along with any +authentication details required by the remote end. + +Before upgrading the browser's connection to a websocket, +Workhorse opens a HTTP client connection, according to the +details given to it by Workhorse, and attempts to upgrade +that connection to a websocket. If it fails, an error +response is sent to the browser; otherwise, the browser is +also upgraded. + +Workhorse now has two websocket connections, albeit with +differing subprotocols. It decodes incoming frames from the +browser, re-encodes them to the the channel's subprotocol, and +sends them to the channel. Similarly, it decodes incoming +frames from the channel, re-encodes them to the browser's +subprotocol, and sends them to the browser. + +When either connection closes or enters an error state, +Workhorse detects the error and closes the other connection, +terminating the channel session. If the browser is the +connection that has disconnected, Workhorse will send an ANSI +`End of Transmission` control code (the `0x04` byte) to the +channel, encoded according to the appropriate subprotocol. +Workhorse will automatically reply to any websocket ping frame +sent by the channel, to avoid being disconnected. + +Currently, Workhorse only supports the following subprotocols. +Supporting new deployment services will require new subprotocols +to be supported: + +### `channel.k8s.io` + +Used by Kubernetes, this subprotocol defines a simple multiplexed +channel. + +Control frames have their usual meanings. `TextMessage` frames are +invalid. `BinaryMessage` frames represent I/O to a specific file +descriptor. + +The first byte of each `BinaryMessage` frame represents the file +descriptor (fd) number, as a `uint8` (so the value `0x00` corresponds +to fd 0, `STDIN`, while `0x01` corresponds to fd 1, `STDOUT`). + +The remaining bytes represent arbitrary data. For frames received +from the server, they are bytes that have been received from that +fd. For frames sent to the server, they are bytes that should be +written to that fd. + +### `base64.channel.k8s.io` + +Also used by Kubernetes, this subprotocol defines a similar multiplexed +channel to `channel.k8s.io`. The main differences are: + +* `TextMessage` frames are valid, rather than `BinaryMessage` frames. +* The first byte of each `TextMessage` frame represents the file + descriptor as a numeric UTF-8 character, so the character `U+0030`, + or "0", is fd 0, STDIN). +* The remaining bytes represent base64-encoded arbitrary data. + diff --git a/workhorse/doc/architecture/gitlab_features.md b/workhorse/doc/architecture/gitlab_features.md new file mode 100644 index 00000000000..2d3ca78f5e8 --- /dev/null +++ b/workhorse/doc/architecture/gitlab_features.md @@ -0,0 +1,69 @@ +# Features that rely on Workhorse + +Workhorse itself is not a feature, but there are several features in +GitLab that would not work efficiently without Workhorse. + +To put the efficiency benefit in context, consider that in 2020Q3 on +GitLab.com [we see][thanos] Rails application threads using on average +about 200MB of RSS vs about 200KB for Workhorse goroutines. + +Examples of features that rely on Workhorse: + +## 1. `git clone` and `git push` over HTTP + +Git clone, pull and push are slow because they transfer large amounts +of data and because each is CPU intensive on the GitLab side. Without +Workhorse, HTTP access to Git repositories would compete with regular +web access to the application, requiring us to run way more Rails +application servers. + +## 2. CI runner long polling + +GitLab CI runners fetch new CI jobs by polling the GitLab server. +Workhorse acts as a kind of "waiting room" where CI runners can sit +and wait for new CI jobs. Because of Go's efficiency we can fit a lot +of runners in the waiting room at little cost. Without this waiting +room mechanism we would have to add a lot more Rails server capacity. + +## 3. File uploads and downloads + +File uploads and downloads may be slow either because the file is +large or because the user's connection is slow. Workhorse can handle +the slow part for Rails. This improves the efficiency of features such +as CI artifacts, package repositories, LFS objects, etc. + +## 4. Websocket proxying + +Features such as the web terminal require a long lived connection +between the user's web browser and a container inside GitLab that is +not directly accessible from the internet. Dedicating a Rails +application thread to proxying such a connection would cost much more +memory than it costs to have Workhorse look after it. + +## Quick facts (how does Workhorse work) + +- Workhorse can handle some requests without involving Rails at all: + for example, JavaScript files and CSS files are served straight + from disk. +- Workhorse can modify responses sent by Rails: for example if you use + `send_file` in Rails then GitLab Workhorse will open the file on + disk and send its contents as the response body to the client. +- Workhorse can take over requests after asking permission from Rails. + Example: handling `git clone`. +- Workhorse can modify requests before passing them to Rails. Example: + when handling a Git LFS upload Workhorse first asks permission from + Rails, then it stores the request body in a tempfile, then it sends + a modified request containing the tempfile path to Rails. +- Workhorse can manage long-lived WebSocket connections for Rails. + Example: handling the terminal websocket for environments. +- Workhorse does not connect to PostgreSQL, only to Rails and (optionally) Redis. +- We assume that all requests that reach Workhorse pass through an + upstream proxy such as NGINX or Apache first. +- Workhorse does not accept HTTPS connections. +- Workhorse does not clean up idle client connections. +- We assume that all requests to Rails pass through Workhorse. + +For more information see ['A brief history of GitLab Workhorse'][brief-history-blog]. + +[thanos]: https://thanos-query.ops.gitlab.net/graph?g0.range_input=1h&g0.max_source_resolution=0s&g0.expr=sum(ruby_process_resident_memory_bytes%7Bapp%3D%22webservice%22%2Cenv%3D%22gprd%22%2Crelease%3D%22gitlab%22%7D)%20%2F%20sum(puma_max_threads%7Bapp%3D%22webservice%22%2Cenv%3D%22gprd%22%2Crelease%3D%22gitlab%22%7D)&g0.tab=1&g1.range_input=1h&g1.max_source_resolution=0s&g1.expr=sum(go_memstats_sys_bytes%7Bapp%3D%22webservice%22%2Cenv%3D%22gprd%22%2Crelease%3D%22gitlab%22%7D)%2Fsum(go_goroutines%7Bapp%3D%22webservice%22%2Cenv%3D%22gprd%22%2Crelease%3D%22gitlab%22%7D)&g1.tab=1 +[brief-history-blog]: https://about.gitlab.com/2016/04/12/a-brief-history-of-gitlab-workhorse/ diff --git a/workhorse/doc/channel.md b/workhorse/doc/channel.md new file mode 100644 index 00000000000..68553170775 --- /dev/null +++ b/workhorse/doc/channel.md @@ -0,0 +1 @@ +This file was moved to [`architecture/channel.md`](doc/architecture/channel.md). diff --git a/workhorse/doc/development/new_features.md b/workhorse/doc/development/new_features.md new file mode 100644 index 00000000000..410e608be3b --- /dev/null +++ b/workhorse/doc/development/new_features.md @@ -0,0 +1,41 @@ +## Adding new features to Workhorse + +GitLab Workhorse is a smart reverse proxy for GitLab. It handles +"long" HTTP requests such as file downloads, file uploads, Git +push/pull and Git archive downloads. + +Workhorse itself is not a feature, but there are [several features in GitLab](https://gitlab.com/gitlab-org/gitlab-workhorse/-/blob/master/doc/architecture/gitlab_features.md) that would not work efficiently without Workhorse. + +At a first glance, it may look like Workhorse is just a pipeline for processing HTTP streams so that you can reduce the amount of logic in your Ruby on Rails controller, but there are good reasons to avoid treating it like that. + +Engineers embarking on the quest of offloading a feature to Workhorse often find that the endeavor is much higher than what originally anticipated. In part because of the new programming language (only a few engineers at GitLab are Go developers), in part because of the demanding requirements for Workhorse. Workhorse is stateless, memory and disk usage must be kept under tight control, and the request should not be slowed down in the process. + +## Can I add a new feature to Workhorse? + +We suggest to follow this route only if absolutely necessary and no other options are available. + +Splitting a feature between the Rails code-base and Workhorse is deliberately choosing to introduce technical debt. It adds complexity to the system and coupling between the two components. + +* Building features using Workhorse has a considerable complexity cost, so you should prefer designs based on Rails requests and Sidekiq jobs. +* Even when using Rails+Sidekiq is "more work" than using Rails+Workhorse, Rails+Sidekiq is easier to maintain in the long term because Workhorse is unique to GitLab while Rails+Sidekiq is an industry standard. +* For "global" behaviors around web requests consider using a Rack middleware instead of Workhorse. +* Generally speaking, we should only use Rails+Workhorse if the HTTP client expects behavior that is not reasonable to implement in Rails, like "long" requests. + +## What is a "long" request? + +There is one order of magnitude between Workhorse and puma RAM usage. Having connection open for a period longer than milliseconds is a problem because of the amount of RAM it monopolizes once it reaches the Ruby on Rails controller. + +So far we identified two classes of "long" requests: data transfers and HTTP long polling. + +`git push`, `git pull`, uploading or downloading an artifact, the CI runner waiting for a new job are all good examples of long requests. + +With the rise of cloud-native installations, Workhorse's feature-set was extended to add object storage direct-upload, to get rid of the shared Network File System (NFS) drives. + +In 2020 @nolith presented at FOSDEM a talk titled [_Speed up the monolith. Building a smart reverse proxy in Go_](https://archive.fosdem.org/2020/schedule/event/speedupmonolith/). +You can watch the recording for more details on the history of Workhorse and the NFS removal. + +[Uploads development documentation]( https://docs.gitlab.com/ee/development/uploads.html) +contains the most common use-cases for adding a new type of upload and may answer all of your questions. + +If you still think we should add a new feature to Workhorse, please open an issue explaining **what you want to implement** and **why it can't be implemented in our ruby code-base**. Workhorse maintainers will be happy to help you assessing the situation. + diff --git a/workhorse/doc/development/tests.md b/workhorse/doc/development/tests.md new file mode 100644 index 00000000000..82f74e8656b --- /dev/null +++ b/workhorse/doc/development/tests.md @@ -0,0 +1,17 @@ +# Testing your code + +Run the tests with: + +``` +make clean test +``` + +## Coverage / what to test + +Each feature in GitLab Workhorse should have an integration test that +verifies that the feature 'kicks in' on the right requests and leaves +other requests unaffected. It is better to also have package-level tests +for specific behavior but the high-level integration tests should have +the first priority during development. + +It is OK if a feature is only covered by integration tests. diff --git a/workhorse/doc/operations/configuration.md b/workhorse/doc/operations/configuration.md new file mode 100644 index 00000000000..bc53df3acab --- /dev/null +++ b/workhorse/doc/operations/configuration.md @@ -0,0 +1,217 @@ +# Workhorse configuration + +For historical reasons Workhorse uses both command line flags, a configuration file and environment variables. + +All new configuration options that get added to Workhorse should go into the configuration file. + +## CLI options + +``` + gitlab-workhorse [OPTIONS] + +Options: + -apiCiLongPollingDuration duration + Long polling duration for job requesting for runners (default 50s - enabled) (default 50ns) + -apiLimit uint + Number of API requests allowed at single time + -apiQueueDuration duration + Maximum queueing duration of requests (default 30s) + -apiQueueLimit uint + Number of API requests allowed to be queued + -authBackend string + Authentication/authorization backend (default "http://localhost:8080") + -authSocket string + Optional: Unix domain socket to dial authBackend at + -cableBackend string + Optional: ActionCable backend (default authBackend) + -cableSocket string + Optional: Unix domain socket to dial cableBackend at (default authSocket) + -config string + TOML file to load config from + -developmentMode + Allow the assets to be served from Rails app + -documentRoot string + Path to static files content (default "public") + -listenAddr string + Listen address for HTTP server (default "localhost:8181") + -listenNetwork string + Listen 'network' (tcp, tcp4, tcp6, unix) (default "tcp") + -listenUmask int + Umask for Unix socket + -logFile string + Log file location + -logFormat string + Log format to use defaults to text (text, json, structured, none) (default "text") + -pprofListenAddr string + pprof listening address, e.g. 'localhost:6060' + -prometheusListenAddr string + Prometheus listening address, e.g. 'localhost:9229' + -proxyHeadersTimeout duration + How long to wait for response headers when proxying the request (default 5m0s) + -secretPath string + File with secret key to authenticate with authBackend (default "./.gitlab_workhorse_secret") + -version + Print version and exit +``` + +The 'auth backend' refers to the GitLab Rails application. The name is +a holdover from when GitLab Workhorse only handled Git push/pull over +HTTP. + +GitLab Workhorse can listen on either a TCP or a Unix domain socket. It +can also open a second listening TCP listening socket with the Go +[net/http/pprof profiler server](http://golang.org/pkg/net/http/pprof/). + +GitLab Workhorse can listen on redis events (currently only builds/register +for runners). This requires you to pass a valid TOML config file via +`-config` flag. +For regular setups it only requires the following (replacing the string +with the actual socket) + +## Redis + +GitLab Workhorse integrates with Redis to do long polling for CI build +requests. This is configured via two things: + +- Redis settings in the TOML config file +- The `-apiCiLongPollingDuration` command line flag to control polling + behavior for CI build requests + +It is OK to enable Redis in the config file but to leave CI polling +disabled; this just results in an idle Redis pubsub connection. The +opposite is not possible: CI long polling requires a correct Redis +configuration. + +Below we discuss the options for the `[redis]` section in the config +file. + +``` +[redis] +URL = "unix:///var/run/gitlab/redis.sock" +Password = "my_awesome_password" +Sentinel = [ "tcp://sentinel1:23456", "tcp://sentinel2:23456" ] +SentinelMaster = "mymaster" +``` + +- `URL` takes a string in the format `unix://path/to/redis.sock` or +`tcp://host:port`. +- `Password` is only required if your redis instance is password-protected +- `Sentinel` is used if you are using Sentinel. + *NOTE* that if both `Sentinel` and `URL` are given, only `Sentinel` will be used + +Optional fields are as follows: +``` +[redis] +DB = 0 +ReadTimeout = "1s" +KeepAlivePeriod = "5m" +MaxIdle = 1 +MaxActive = 1 +``` + +- `DB` is the Database to connect to. Defaults to `0` +- `ReadTimeout` is how long a redis read-command can take. Defaults to `1s` +- `KeepAlivePeriod` is how long the redis connection is to be kept alive without anything flowing through it. Defaults to `5m` +- `MaxIdle` is how many idle connections can be in the redis-pool at once. Defaults to 1 +- `MaxActive` is how many connections the pool can keep. Defaults to 1 + +## Relative URL support + +If you are mounting GitLab at a relative URL, e.g. +`example.com/gitlab`, then you should also use this relative URL in +the `authBackend` setting: + +``` +gitlab-workhorse -authBackend http://localhost:8080/gitlab +``` + +## Interaction of authBackend and authSocket + +The interaction between `authBackend` and `authSocket` can be a bit +confusing. It comes down to: if `authSocket` is set it overrides the +_host_ part of `authBackend` but not the relative path. + +In table form: + +|authBackend|authSocket|Workhorse connects to?|Rails relative URL| +|---|---|---|---| +|unset|unset|`localhost:8080`|`/`| +|`http://localhost:3000`|unset|`localhost:3000`|`/`| +|`http://localhost:3000/gitlab`|unset|`localhost:3000`|`/gitlab`| +|unset|`/path/to/socket`|`/path/to/socket`|`/`| +|`http://localhost:3000`|`/path/to/socket`|`/path/to/socket`|`/`| +|`http://localhost:3000/gitlab`|`/path/to/socket`|`/path/to/socket`|`/gitlab`| + +The same applies to `cableBackend` and `cableSocket`. + +## Error tracking + +GitLab-Workhorse supports remote error tracking with +[Sentry](https://sentry.io). To enable this feature set the +`GITLAB_WORKHORSE_SENTRY_DSN` environment variable. +You can also set the `GITLAB_WORKHORSE_SENTRY_ENVIRONMENT` environment variable to +use the Sentry environment functionality to separate staging, production and +development. + +Omnibus (`/etc/gitlab/gitlab.rb`): + +``` +gitlab_workhorse['env'] = { + 'GITLAB_WORKHORSE_SENTRY_DSN' => 'https://foobar' + 'GITLAB_WORKHORSE_SENTRY_ENVIRONMENT' => 'production' +} +``` + +Source installations (`/etc/default/gitlab`): + +``` +export GITLAB_WORKHORSE_SENTRY_DSN='https://foobar' +export GITLAB_WORKHORSE_SENTRY_ENVIRONMENT='production' +``` + +## Distributed Tracing + +Workhorse supports distributed tracing through [LabKit][] using [OpenTracing APIs](https://opentracing.io). + +By default, no tracing implementation is linked into the binary, but different OpenTracing providers can be linked in using [build tags][build-tags]/[build constraints][build-tags]. This can be done by setting the `BUILD_TAGS` make variable. + +For more details of the supported providers, see LabKit, but as an example, for Jaeger tracing support, include the tags: `BUILD_TAGS="tracer_static tracer_static_jaeger"`. + +```shell +make BUILD_TAGS="tracer_static tracer_static_jaeger" +``` + +Once Workhorse is compiled with an opentracing provider, the tracing configuration is configured via the `GITLAB_TRACING` environment variable. + +For example: + +```shell +GITLAB_TRACING=opentracing://jaeger ./gitlab-workhorse +``` + +## Continuous Profiling + +Workhorse supports continuous profiling through [LabKit][] using [Stackdriver Profiler](https://cloud.google.com/profiler). + +By default, the Stackdriver Profiler implementation is linked in the binary using [build tags][build-tags], though it's not +required and can be skipped. + +For example: + +```shell +make BUILD_TAGS="" +``` + +Once Workhorse is compiled with Continuous Profiling, the profiler configuration can be set via `GITLAB_CONTINUOUS_PROFILING` +environment variable. + +For example: + +```shell +GITLAB_CONTINUOUS_PROFILING="stackdriver?service=workhorse&service_version=1.0.1&project_id=test-123 ./gitlab-workhorse" +``` + +More information about see the [LabKit monitoring docs](https://gitlab.com/gitlab-org/labkit/-/blob/master/monitoring/doc.go). + +[LabKit]: https://gitlab.com/gitlab-org/labkit/ +[build-tags]: https://golang.org/pkg/go/build/#hdr-Build_Constraints diff --git a/workhorse/doc/operations/install.md b/workhorse/doc/operations/install.md new file mode 100644 index 00000000000..28efc407515 --- /dev/null +++ b/workhorse/doc/operations/install.md @@ -0,0 +1,44 @@ +# Installation + +To install GitLab Workhorse you need [Go 1.13 or +newer](https://golang.org/dl) and [GNU +Make](https://www.gnu.org/software/make/). + +To install into `/usr/local/bin` run `make install`. + +``` +make install +``` + +To install into `/foo/bin` set the PREFIX variable. + +``` +make install PREFIX=/foo +``` + +On some operating systems, such as FreeBSD, you may have to use +`gmake` instead of `make`. + +*NOTE*: Some features depends on build tags, make sure to check +[Workhorse configuration](doc/operations/configuration.md) to enable them. + +## Run time dependencies + +### Exiftool + +Workhorse uses [exiftool](https://www.sno.phy.queensu.ca/~phil/exiftool/) for +removing EXIF data (which may contain sensitive information) from uploaded +images. If you installed GitLab: + +- Using the Omnibus package, you're all set. + *NOTE* that if you are using CentOS Minimal, you may need to install `perl` + package: `yum install perl` +- From source, make sure `exiftool` is installed: + + ```sh + # Debian/Ubuntu + sudo apt-get install libimage-exiftool-perl + + # RHEL/CentOS + sudo yum install perl-Image-ExifTool + ``` diff --git a/workhorse/gitaly_integration_test.go b/workhorse/gitaly_integration_test.go new file mode 100644 index 00000000000..418d9589235 --- /dev/null +++ b/workhorse/gitaly_integration_test.go @@ -0,0 +1,357 @@ +// Tests in this file need access to a real Gitaly server to run. The address +// is supplied via the GITALY_ADDRESS environment variable +package main + +import ( + "archive/tar" + "bufio" + "bytes" + "context" + "fmt" + "os" + "os/exec" + "path" + "regexp" + "strconv" + "strings" + "testing" + + "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" +) + +var ( + gitalyAddress string + jsonGitalyServer string +) + +func init() { + gitalyAddress = os.Getenv("GITALY_ADDRESS") + jsonGitalyServer = fmt.Sprintf(`"GitalyServer":{"Address":"%s", "Token": ""}`, gitalyAddress) +} + +func skipUnlessRealGitaly(t *testing.T) { + t.Log(gitalyAddress) + if gitalyAddress != "" { + return + } + + t.Skip(`Please set GITALY_ADDRESS="..." to run Gitaly integration tests`) +} + +func realGitalyAuthResponse(apiResponse *api.Response) *api.Response { + apiResponse.GitalyServer.Address = gitalyAddress + + return apiResponse +} + +func realGitalyOkBody(t *testing.T) *api.Response { + return realGitalyAuthResponse(gitOkBody(t)) +} + +func ensureGitalyRepository(t *testing.T, apiResponse *api.Response) error { + ctx, namespace, err := gitaly.NewNamespaceClient(context.Background(), apiResponse.GitalyServer) + if err != nil { + return err + } + ctx, repository, err := gitaly.NewRepositoryClient(ctx, apiResponse.GitalyServer) + if err != nil { + return err + } + + // Remove the repository if it already exists, for consistency + rmNsReq := &gitalypb.RemoveNamespaceRequest{ + StorageName: apiResponse.Repository.StorageName, + Name: apiResponse.Repository.RelativePath, + } + _, err = namespace.RemoveNamespace(ctx, rmNsReq) + if err != nil { + return err + } + + createReq := &gitalypb.CreateRepositoryFromURLRequest{ + Repository: &apiResponse.Repository, + Url: "https://gitlab.com/gitlab-org/gitlab-test.git", + } + + _, err = repository.CreateRepositoryFromURL(ctx, createReq) + return err +} + +func TestAllowedClone(t *testing.T) { + skipUnlessRealGitaly(t) + + // Create the repository in the Gitaly server + apiResponse := realGitalyOkBody(t) + require.NoError(t, ensureGitalyRepository(t, apiResponse)) + + // Prepare test server and backend + ts := testAuthServer(t, nil, nil, 200, apiResponse) + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + // Do the git clone + require.NoError(t, os.RemoveAll(scratchDir)) + cloneCmd := exec.Command("git", "clone", fmt.Sprintf("%s/%s", ws.URL, testRepo), checkoutDir) + runOrFail(t, cloneCmd) + + // We may have cloned an 'empty' repository, 'git log' will fail in it + logCmd := exec.Command("git", "log", "-1", "--oneline") + logCmd.Dir = checkoutDir + runOrFail(t, logCmd) +} + +func TestAllowedShallowClone(t *testing.T) { + skipUnlessRealGitaly(t) + + // Create the repository in the Gitaly server + apiResponse := realGitalyOkBody(t) + require.NoError(t, ensureGitalyRepository(t, apiResponse)) + + // Prepare test server and backend + ts := testAuthServer(t, nil, nil, 200, apiResponse) + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + // Shallow git clone (depth 1) + require.NoError(t, os.RemoveAll(scratchDir)) + cloneCmd := exec.Command("git", "clone", "--depth", "1", fmt.Sprintf("%s/%s", ws.URL, testRepo), checkoutDir) + runOrFail(t, cloneCmd) + + // We may have cloned an 'empty' repository, 'git log' will fail in it + logCmd := exec.Command("git", "log", "-1", "--oneline") + logCmd.Dir = checkoutDir + runOrFail(t, logCmd) +} + +func TestAllowedPush(t *testing.T) { + skipUnlessRealGitaly(t) + + // Create the repository in the Gitaly server + apiResponse := realGitalyOkBody(t) + require.NoError(t, ensureGitalyRepository(t, apiResponse)) + + // Prepare the test server and backend + ts := testAuthServer(t, nil, nil, 200, apiResponse) + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + // Perform the git push + pushCmd := exec.Command("git", "push", fmt.Sprintf("%s/%s", ws.URL, testRepo), fmt.Sprintf("master:%s", newBranch())) + pushCmd.Dir = checkoutDir + runOrFail(t, pushCmd) +} + +func TestAllowedGetGitBlob(t *testing.T) { + skipUnlessRealGitaly(t) + + // Create the repository in the Gitaly server + apiResponse := realGitalyOkBody(t) + require.NoError(t, ensureGitalyRepository(t, apiResponse)) + + // the LICENSE file in the test repository + oid := "50b27c6518be44c42c4d87966ae2481ce895624c" + expectedBody := "The MIT License (MIT)" + bodyLen := 1075 + + jsonParams := fmt.Sprintf( + `{ + %s, + "GetBlobRequest":{ + "repository":{"storage_name":"%s", "relative_path":"%s"}, + "oid":"%s", + "limit":-1 + } + }`, + jsonGitalyServer, apiResponse.Repository.StorageName, apiResponse.Repository.RelativePath, oid, + ) + + resp, body, err := doSendDataRequest("/something", "git-blob", jsonParams) + require.NoError(t, err) + shortBody := string(body[:len(expectedBody)]) + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resp.Request.URL) + require.Equal(t, expectedBody, shortBody, "GET %q: response body", resp.Request.URL) + testhelper.RequireResponseHeader(t, resp, "Content-Length", strconv.Itoa(bodyLen)) + requireNginxResponseBuffering(t, "no", resp, "GET %q: nginx response buffering", resp.Request.URL) +} + +func TestAllowedGetGitArchive(t *testing.T) { + skipUnlessRealGitaly(t) + + // Create the repository in the Gitaly server + apiResponse := realGitalyOkBody(t) + require.NoError(t, ensureGitalyRepository(t, apiResponse)) + + archivePath := path.Join(scratchDir, "my/path") + archivePrefix := "repo-1" + + msg := serializedProtoMessage("GetArchiveRequest", &gitalypb.GetArchiveRequest{ + Repository: &apiResponse.Repository, + CommitId: "HEAD", + Prefix: archivePrefix, + Format: gitalypb.GetArchiveRequest_TAR, + Path: []byte("files"), + }) + jsonParams := buildGitalyRPCParams(gitalyAddress, rpcArg{"ArchivePath", archivePath}, msg) + + resp, body, err := doSendDataRequest("/archive.tar", "git-archive", jsonParams) + require.NoError(t, err) + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resp.Request.URL) + requireNginxResponseBuffering(t, "no", resp, "GET %q: nginx response buffering", resp.Request.URL) + + // Ensure the tar file is readable + foundEntry := false + tr := tar.NewReader(bytes.NewReader(body)) + for { + hdr, err := tr.Next() + if err != nil { + break + } + + if hdr.Name == archivePrefix+"/" { + foundEntry = true + break + } + } + + require.True(t, foundEntry, "Couldn't find %v directory entry", archivePrefix) +} + +func TestAllowedGetGitArchiveOldPayload(t *testing.T) { + skipUnlessRealGitaly(t) + + // Create the repository in the Gitaly server + apiResponse := realGitalyOkBody(t) + repo := apiResponse.Repository + require.NoError(t, ensureGitalyRepository(t, apiResponse)) + + archivePath := path.Join(scratchDir, "my/path") + archivePrefix := "repo-1" + + jsonParams := fmt.Sprintf( + `{ + %s, + "GitalyRepository":{"storage_name":"%s","relative_path":"%s"}, + "ArchivePath":"%s", + "ArchivePrefix":"%s", + "CommitId":"%s" + }`, + jsonGitalyServer, repo.StorageName, repo.RelativePath, archivePath, archivePrefix, "HEAD", + ) + + resp, body, err := doSendDataRequest("/archive.tar", "git-archive", jsonParams) + require.NoError(t, err) + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resp.Request.URL) + requireNginxResponseBuffering(t, "no", resp, "GET %q: nginx response buffering", resp.Request.URL) + + // Ensure the tar file is readable + foundEntry := false + tr := tar.NewReader(bytes.NewReader(body)) + for { + hdr, err := tr.Next() + if err != nil { + break + } + + if hdr.Name == archivePrefix+"/" { + foundEntry = true + break + } + } + + require.True(t, foundEntry, "Couldn't find %v directory entry", archivePrefix) +} + +func TestAllowedGetGitDiff(t *testing.T) { + skipUnlessRealGitaly(t) + + // Create the repository in the Gitaly server + apiResponse := realGitalyOkBody(t) + require.NoError(t, ensureGitalyRepository(t, apiResponse)) + + leftCommit := "8a0f2ee90d940bfb0ba1e14e8214b0649056e4ab" + rightCommit := "e395f646b1499e8e0279445fc99a0596a65fab7e" + expectedBody := "diff --git a/README.md b/README.md" + + msg := serializedMessage("RawDiffRequest", &gitalypb.RawDiffRequest{ + Repository: &apiResponse.Repository, + LeftCommitId: leftCommit, + RightCommitId: rightCommit, + }) + jsonParams := buildGitalyRPCParams(gitalyAddress, msg) + + resp, body, err := doSendDataRequest("/something", "git-diff", jsonParams) + require.NoError(t, err) + shortBody := string(body[:len(expectedBody)]) + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resp.Request.URL) + require.Equal(t, expectedBody, shortBody, "GET %q: response body", resp.Request.URL) + requireNginxResponseBuffering(t, "no", resp, "GET %q: nginx response buffering", resp.Request.URL) +} + +func TestAllowedGetGitFormatPatch(t *testing.T) { + skipUnlessRealGitaly(t) + + // Create the repository in the Gitaly server + apiResponse := realGitalyOkBody(t) + require.NoError(t, ensureGitalyRepository(t, apiResponse)) + + leftCommit := "8a0f2ee90d940bfb0ba1e14e8214b0649056e4ab" + rightCommit := "e395f646b1499e8e0279445fc99a0596a65fab7e" + msg := serializedMessage("RawPatchRequest", &gitalypb.RawPatchRequest{ + Repository: &apiResponse.Repository, + LeftCommitId: leftCommit, + RightCommitId: rightCommit, + }) + jsonParams := buildGitalyRPCParams(gitalyAddress, msg) + + resp, body, err := doSendDataRequest("/something", "git-format-patch", jsonParams) + require.NoError(t, err) + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resp.Request.URL) + requireNginxResponseBuffering(t, "no", resp, "GET %q: nginx response buffering", resp.Request.URL) + + requirePatchSeries( + t, + body, + "372ab6950519549b14d220271ee2322caa44d4eb", + "57290e673a4c87f51294f5216672cbc58d485d25", + "41ae11ba5d091d73d5de671f6fa7d1a4539e979e", + "742518b2be68fc750bb4c357c0df821a88113286", + rightCommit, + ) +} + +var extractPatchSeriesMatcher = regexp.MustCompile(`^From (\w+)`) + +// RequirePatchSeries takes a `git format-patch` blob, extracts the From xxxxx +// lines and compares the SHAs to expected list. +func requirePatchSeries(t *testing.T, blob []byte, expected ...string) { + t.Helper() + var actual []string + footer := make([]string, 3) + + scanner := bufio.NewScanner(bytes.NewReader(blob)) + + for scanner.Scan() { + line := scanner.Text() + if matches := extractPatchSeriesMatcher.FindStringSubmatch(line); len(matches) == 2 { + actual = append(actual, matches[1]) + } + footer = []string{footer[1], footer[2], line} + } + + require.Equal(t, strings.Join(expected, "\n"), strings.Join(actual, "\n"), "patch series") + + // Check the last returned patch is complete + // Don't assert on the final line, it is a git version + require.Equal(t, "-- ", footer[0], "end of patch marker") +} diff --git a/workhorse/gitaly_test.go b/workhorse/gitaly_test.go new file mode 100644 index 00000000000..95d6907ac6a --- /dev/null +++ b/workhorse/gitaly_test.go @@ -0,0 +1,696 @@ +package main + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "fmt" + "io/ioutil" + "math/rand" + "net" + "net/http" + "os" + "os/exec" + "path" + "strings" + "sync" + "testing" + "time" + + "github.com/golang/protobuf/jsonpb" //lint:ignore SA1019 https://gitlab.com/gitlab-org/gitlab-workhorse/-/issues/274 + "github.com/golang/protobuf/proto" //lint:ignore SA1019 https://gitlab.com/gitlab-org/gitlab-workhorse/-/issues/274 + "github.com/stretchr/testify/require" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/git" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" +) + +func TestFailedCloneNoGitaly(t *testing.T) { + // Prepare clone directory + require.NoError(t, os.RemoveAll(scratchDir)) + + authBody := &api.Response{ + GL_ID: "user-123", + GL_USERNAME: "username", + // This will create a failure to connect to Gitaly + GitalyServer: gitaly.Server{Address: "unix:/nonexistent"}, + } + + // Prepare test server and backend + ts := testAuthServer(t, nil, nil, 200, authBody) + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + // Do the git clone + cloneCmd := exec.Command("git", "clone", fmt.Sprintf("%s/%s", ws.URL, testRepo), checkoutDir) + out, err := cloneCmd.CombinedOutput() + t.Log(string(out)) + require.Error(t, err, "git clone should have failed") +} + +func TestGetInfoRefsProxiedToGitalySuccessfully(t *testing.T) { + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + gitalyAddress := "unix:" + socketPath + + apiResponse := gitOkBody(t) + apiResponse.GitalyServer.Address = gitalyAddress + + goodMetadata := map[string]string{ + "gitaly-feature-foobar": "true", + "gitaly-feature-bazqux": "false", + } + badMetadata := map[string]string{ + "bad-metadata": "is blocked", + } + + features := make(map[string]string) + for k, v := range goodMetadata { + features[k] = v + } + for k, v := range badMetadata { + features[k] = v + } + apiResponse.GitalyServer.Features = features + + testCases := []struct { + showAllRefs bool + gitRpc string + }{ + {showAllRefs: false, gitRpc: "git-upload-pack"}, + {showAllRefs: true, gitRpc: "git-upload-pack"}, + {showAllRefs: false, gitRpc: "git-receive-pack"}, + {showAllRefs: true, gitRpc: "git-receive-pack"}, + } + + for _, tc := range testCases { + t.Run(fmt.Sprintf("ShowAllRefs=%v,gitRpc=%v", tc.showAllRefs, tc.gitRpc), func(t *testing.T) { + apiResponse.ShowAllRefs = tc.showAllRefs + + ts := testAuthServer(t, nil, nil, 200, apiResponse) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + gitProtocol := "fake git protocol" + resource := "/gitlab-org/gitlab-test.git/info/refs?service=" + tc.gitRpc + resp, body := httpGet(t, ws.URL+resource, map[string]string{"Git-Protocol": gitProtocol}) + + require.Equal(t, 200, resp.StatusCode) + + bodySplit := strings.SplitN(body, "\000", 3) + require.Len(t, bodySplit, 3) + + gitalyRequest := &gitalypb.InfoRefsRequest{} + require.NoError(t, jsonpb.UnmarshalString(bodySplit[0], gitalyRequest)) + + require.Equal(t, gitProtocol, gitalyRequest.GitProtocol) + if tc.showAllRefs { + require.Equal(t, []string{git.GitConfigShowAllRefs}, gitalyRequest.GitConfigOptions) + } else { + require.Empty(t, gitalyRequest.GitConfigOptions) + } + + require.Equal(t, tc.gitRpc, bodySplit[1]) + + require.Equal(t, string(testhelper.GitalyInfoRefsResponseMock), bodySplit[2], "GET %q: response body", resource) + + md := gitalyServer.LastIncomingMetadata + for k, v := range goodMetadata { + actual := md[k] + require.Len(t, actual, 1, "number of metadata values for %v", k) + require.Equal(t, v, actual[0], "value for %v", k) + } + + for k := range badMetadata { + actual := md[k] + require.Empty(t, actual, "metadata for bad key %v", k) + } + }) + } +} + +func TestGetInfoRefsProxiedToGitalyInterruptedStream(t *testing.T) { + apiResponse := gitOkBody(t) + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + gitalyAddress := "unix:" + socketPath + apiResponse.GitalyServer.Address = gitalyAddress + + ts := testAuthServer(t, nil, nil, 200, apiResponse) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + resource := "/gitlab-org/gitlab-test.git/info/refs?service=git-upload-pack" + resp, err := http.Get(ws.URL + resource) + require.NoError(t, err) + + // This causes the server stream to be interrupted instead of consumed entirely. + resp.Body.Close() + + done := make(chan struct{}) + go func() { + gitalyServer.WaitGroup.Wait() + close(done) + }() + + waitDone(t, done) +} + +func waitDone(t *testing.T, done chan struct{}) { + t.Helper() + select { + case <-done: + return + case <-time.After(10 * time.Second): + t.Fatal("time out waiting for gitaly handler to return") + } +} + +func TestPostReceivePackProxiedToGitalySuccessfully(t *testing.T) { + apiResponse := gitOkBody(t) + + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + apiResponse.GitalyServer.Address = "unix:" + socketPath + apiResponse.GitConfigOptions = []string{"git-config-hello=world"} + ts := testAuthServer(t, nil, nil, 200, apiResponse) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + gitProtocol := "fake Git protocol" + resource := "/gitlab-org/gitlab-test.git/git-receive-pack" + resp := httpPost( + t, + ws.URL+resource, + map[string]string{ + "Content-Type": "application/x-git-receive-pack-request", + "Git-Protocol": gitProtocol, + }, + bytes.NewReader(testhelper.GitalyReceivePackResponseMock), + ) + defer resp.Body.Close() + body := string(testhelper.ReadAll(t, resp.Body)) + + split := strings.SplitN(body, "\000", 2) + require.Len(t, split, 2) + + gitalyRequest := &gitalypb.PostReceivePackRequest{} + require.NoError(t, jsonpb.UnmarshalString(split[0], gitalyRequest)) + + require.Equal(t, apiResponse.Repository.StorageName, gitalyRequest.Repository.StorageName) + require.Equal(t, apiResponse.Repository.RelativePath, gitalyRequest.Repository.RelativePath) + require.Equal(t, apiResponse.GL_ID, gitalyRequest.GlId) + require.Equal(t, apiResponse.GL_USERNAME, gitalyRequest.GlUsername) + require.Equal(t, apiResponse.GitConfigOptions, gitalyRequest.GitConfigOptions) + require.Equal(t, gitProtocol, gitalyRequest.GitProtocol) + + require.Equal(t, 200, resp.StatusCode, "POST %q", resource) + require.Equal(t, string(testhelper.GitalyReceivePackResponseMock), split[1]) + testhelper.RequireResponseHeader(t, resp, "Content-Type", "application/x-git-receive-pack-result") +} + +func TestPostReceivePackProxiedToGitalyInterrupted(t *testing.T) { + apiResponse := gitOkBody(t) + + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + apiResponse.GitalyServer.Address = "unix:" + socketPath + ts := testAuthServer(t, nil, nil, 200, apiResponse) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + resource := "/gitlab-org/gitlab-test.git/git-receive-pack" + resp, err := http.Post( + ws.URL+resource, + "application/x-git-receive-pack-request", + bytes.NewReader(testhelper.GitalyReceivePackResponseMock), + ) + require.NoError(t, err) + require.Equal(t, 200, resp.StatusCode, "POST %q", resource) + + // This causes the server stream to be interrupted instead of consumed entirely. + resp.Body.Close() + + done := make(chan struct{}) + go func() { + gitalyServer.WaitGroup.Wait() + close(done) + }() + + waitDone(t, done) +} + +// ReaderFunc is an adapter to turn a conforming function into an io.Reader. +type ReaderFunc func(b []byte) (int, error) + +func (r ReaderFunc) Read(b []byte) (int, error) { return r(b) } + +func TestPostUploadPackProxiedToGitalySuccessfully(t *testing.T) { + for i, tc := range []struct { + showAllRefs bool + code codes.Code + }{ + {true, codes.OK}, + {true, codes.Unavailable}, + {false, codes.OK}, + {false, codes.Unavailable}, + } { + t.Run(fmt.Sprintf("Case %d", i), func(t *testing.T) { + apiResponse := gitOkBody(t) + apiResponse.ShowAllRefs = tc.showAllRefs + + gitalyServer, socketPath := startGitalyServer(t, tc.code) + defer gitalyServer.GracefulStop() + + apiResponse.GitalyServer.Address = "unix:" + socketPath + ts := testAuthServer(t, nil, nil, 200, apiResponse) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + gitProtocol := "fake git protocol" + resource := "/gitlab-org/gitlab-test.git/git-upload-pack" + + requestReader := bytes.NewReader(testhelper.GitalyUploadPackResponseMock) + var m sync.Mutex + requestReadFinished := false + resp := httpPost( + t, + ws.URL+resource, + map[string]string{ + "Content-Type": "application/x-git-upload-pack-request", + "Git-Protocol": gitProtocol, + }, + ReaderFunc(func(b []byte) (int, error) { + n, err := requestReader.Read(b) + if err != nil { + m.Lock() + requestReadFinished = true + m.Unlock() + } + return n, err + }), + ) + defer resp.Body.Close() + require.Equal(t, 200, resp.StatusCode, "POST %q", resource) + testhelper.RequireResponseHeader(t, resp, "Content-Type", "application/x-git-upload-pack-result") + + m.Lock() + requestFinished := requestReadFinished + m.Unlock() + require.True(t, requestFinished, "response written before request was fully read") + + body := string(testhelper.ReadAll(t, resp.Body)) + bodySplit := strings.SplitN(body, "\000", 2) + require.Len(t, bodySplit, 2) + + gitalyRequest := &gitalypb.PostUploadPackRequest{} + require.NoError(t, jsonpb.UnmarshalString(bodySplit[0], gitalyRequest)) + + require.Equal(t, apiResponse.Repository.StorageName, gitalyRequest.Repository.StorageName) + require.Equal(t, apiResponse.Repository.RelativePath, gitalyRequest.Repository.RelativePath) + require.Equal(t, gitProtocol, gitalyRequest.GitProtocol) + + if tc.showAllRefs { + require.Equal(t, []string{git.GitConfigShowAllRefs}, gitalyRequest.GitConfigOptions) + } else { + require.Empty(t, gitalyRequest.GitConfigOptions) + } + + require.Equal(t, string(testhelper.GitalyUploadPackResponseMock), bodySplit[1], "POST %q: response body", resource) + }) + } +} + +func TestPostUploadPackProxiedToGitalyInterrupted(t *testing.T) { + apiResponse := gitOkBody(t) + + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + apiResponse.GitalyServer.Address = "unix:" + socketPath + ts := testAuthServer(t, nil, nil, 200, apiResponse) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + resource := "/gitlab-org/gitlab-test.git/git-upload-pack" + resp, err := http.Post( + ws.URL+resource, + "application/x-git-upload-pack-request", + bytes.NewReader(testhelper.GitalyUploadPackResponseMock), + ) + require.NoError(t, err) + require.Equal(t, 200, resp.StatusCode, "POST %q", resource) + + // This causes the server stream to be interrupted instead of consumed entirely. + resp.Body.Close() + + done := make(chan struct{}) + go func() { + gitalyServer.WaitGroup.Wait() + close(done) + }() + + waitDone(t, done) +} + +func TestGetDiffProxiedToGitalySuccessfully(t *testing.T) { + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + gitalyAddress := "unix:" + socketPath + repoStorage := "default" + rightCommit := "e395f646b1499e8e0279445fc99a0596a65fab7e" + leftCommit := "8a0f2ee90d940bfb0ba1e14e8214b0649056e4ab" + repoRelativePath := "foo/bar.git" + jsonParams := fmt.Sprintf(`{"GitalyServer":{"Address":"%s","Token":""},"RawDiffRequest":"{\"repository\":{\"storageName\":\"%s\",\"relativePath\":\"%s\"},\"rightCommitId\":\"%s\",\"leftCommitId\":\"%s\"}"}`, + gitalyAddress, repoStorage, repoRelativePath, leftCommit, rightCommit) + expectedBody := testhelper.GitalyGetDiffResponseMock + + resp, body, err := doSendDataRequest("/something", "git-diff", jsonParams) + require.NoError(t, err) + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resp.Request.URL) + require.Equal(t, expectedBody, string(body), "GET %q: response body", resp.Request.URL) +} + +func TestGetPatchProxiedToGitalySuccessfully(t *testing.T) { + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + gitalyAddress := "unix:" + socketPath + repoStorage := "default" + rightCommit := "e395f646b1499e8e0279445fc99a0596a65fab7e" + leftCommit := "8a0f2ee90d940bfb0ba1e14e8214b0649056e4ab" + repoRelativePath := "foo/bar.git" + jsonParams := fmt.Sprintf(`{"GitalyServer":{"Address":"%s","Token":""},"RawPatchRequest":"{\"repository\":{\"storageName\":\"%s\",\"relativePath\":\"%s\"},\"rightCommitId\":\"%s\",\"leftCommitId\":\"%s\"}"}`, + gitalyAddress, repoStorage, repoRelativePath, leftCommit, rightCommit) + expectedBody := testhelper.GitalyGetPatchResponseMock + + resp, body, err := doSendDataRequest("/something", "git-format-patch", jsonParams) + require.NoError(t, err) + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resp.Request.URL) + require.Equal(t, expectedBody, string(body), "GET %q: response body", resp.Request.URL) +} + +func TestGetBlobProxiedToGitalyInterruptedStream(t *testing.T) { + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + gitalyAddress := "unix:" + socketPath + repoStorage := "default" + oid := "54fcc214b94e78d7a41a9a8fe6d87a5e59500e51" + repoRelativePath := "foo/bar.git" + jsonParams := fmt.Sprintf(`{"GitalyServer":{"Address":"%s","Token":""},"GetBlobRequest":{"repository":{"storage_name":"%s","relative_path":"%s"},"oid":"%s","limit":-1}}`, + gitalyAddress, repoStorage, repoRelativePath, oid) + + resp, _, err := doSendDataRequest("/something", "git-blob", jsonParams) + require.NoError(t, err) + + // This causes the server stream to be interrupted instead of consumed entirely. + resp.Body.Close() + + done := make(chan struct{}) + go func() { + gitalyServer.WaitGroup.Wait() + close(done) + }() + + waitDone(t, done) +} + +func TestGetArchiveProxiedToGitalySuccessfully(t *testing.T) { + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + gitalyAddress := "unix:" + socketPath + repoStorage := "default" + oid := "54fcc214b94e78d7a41a9a8fe6d87a5e59500e51" + repoRelativePath := "foo/bar.git" + archivePrefix := "repo-1" + expectedBody := testhelper.GitalyGetArchiveResponseMock + archiveLength := len(expectedBody) + + testCases := []struct { + archivePath string + cacheDisabled bool + }{ + {archivePath: path.Join(scratchDir, "my/path"), cacheDisabled: false}, + {archivePath: "/var/empty/my/path", cacheDisabled: true}, + } + + for _, tc := range testCases { + jsonParams := fmt.Sprintf(`{"GitalyServer":{"Address":"%s","Token":""},"GitalyRepository":{"storage_name":"%s","relative_path":"%s"},"ArchivePath":"%s","ArchivePrefix":"%s","CommitId":"%s","DisableCache":%v}`, + gitalyAddress, repoStorage, repoRelativePath, tc.archivePath, archivePrefix, oid, tc.cacheDisabled) + resp, body, err := doSendDataRequest("/archive.tar.gz", "git-archive", jsonParams) + require.NoError(t, err) + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resp.Request.URL) + require.Equal(t, expectedBody, string(body), "GET %q: response body", resp.Request.URL) + require.Equal(t, archiveLength, len(body), "GET %q: body size", resp.Request.URL) + + if tc.cacheDisabled { + _, err := os.Stat(tc.archivePath) + require.True(t, os.IsNotExist(err), "expected 'does not exist', got: %v", err) + } else { + cachedArchive, err := ioutil.ReadFile(tc.archivePath) + require.NoError(t, err) + require.Equal(t, expectedBody, string(cachedArchive)) + } + } +} + +func TestGetArchiveProxiedToGitalyInterruptedStream(t *testing.T) { + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + gitalyAddress := "unix:" + socketPath + repoStorage := "default" + oid := "54fcc214b94e78d7a41a9a8fe6d87a5e59500e51" + repoRelativePath := "foo/bar.git" + archivePath := "my/path" + archivePrefix := "repo-1" + jsonParams := fmt.Sprintf(`{"GitalyServer":{"Address":"%s","Token":""},"GitalyRepository":{"storage_name":"%s","relative_path":"%s"},"ArchivePath":"%s","ArchivePrefix":"%s","CommitId":"%s"}`, + gitalyAddress, repoStorage, repoRelativePath, path.Join(scratchDir, archivePath), archivePrefix, oid) + + resp, _, err := doSendDataRequest("/archive.tar.gz", "git-archive", jsonParams) + require.NoError(t, err) + + // This causes the server stream to be interrupted instead of consumed entirely. + resp.Body.Close() + + done := make(chan struct{}) + go func() { + gitalyServer.WaitGroup.Wait() + close(done) + }() + + waitDone(t, done) +} + +func TestGetDiffProxiedToGitalyInterruptedStream(t *testing.T) { + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + gitalyAddress := "unix:" + socketPath + repoStorage := "default" + rightCommit := "e395f646b1499e8e0279445fc99a0596a65fab7e" + leftCommit := "8a0f2ee90d940bfb0ba1e14e8214b0649056e4ab" + repoRelativePath := "foo/bar.git" + jsonParams := fmt.Sprintf(`{"GitalyServer":{"Address":"%s","Token":""},"RawDiffRequest":"{\"repository\":{\"storageName\":\"%s\",\"relativePath\":\"%s\"},\"rightCommitId\":\"%s\",\"leftCommitId\":\"%s\"}"}`, + gitalyAddress, repoStorage, repoRelativePath, leftCommit, rightCommit) + + resp, _, err := doSendDataRequest("/something", "git-diff", jsonParams) + require.NoError(t, err) + + // This causes the server stream to be interrupted instead of consumed entirely. + resp.Body.Close() + + done := make(chan struct{}) + go func() { + gitalyServer.WaitGroup.Wait() + close(done) + }() + + waitDone(t, done) +} + +func TestGetPatchProxiedToGitalyInterruptedStream(t *testing.T) { + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + gitalyAddress := "unix:" + socketPath + repoStorage := "default" + rightCommit := "e395f646b1499e8e0279445fc99a0596a65fab7e" + leftCommit := "8a0f2ee90d940bfb0ba1e14e8214b0649056e4ab" + repoRelativePath := "foo/bar.git" + jsonParams := fmt.Sprintf(`{"GitalyServer":{"Address":"%s","Token":""},"RawPatchRequest":"{\"repository\":{\"storageName\":\"%s\",\"relativePath\":\"%s\"},\"rightCommitId\":\"%s\",\"leftCommitId\":\"%s\"}"}`, + gitalyAddress, repoStorage, repoRelativePath, leftCommit, rightCommit) + + resp, _, err := doSendDataRequest("/something", "git-format-patch", jsonParams) + require.NoError(t, err) + + // This causes the server stream to be interrupted instead of consumed entirely. + resp.Body.Close() + + done := make(chan struct{}) + go func() { + gitalyServer.WaitGroup.Wait() + close(done) + }() + + waitDone(t, done) +} + +func TestGetSnapshotProxiedToGitalySuccessfully(t *testing.T) { + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + gitalyAddress := "unix:" + socketPath + expectedBody := testhelper.GitalyGetSnapshotResponseMock + archiveLength := len(expectedBody) + + params := buildGetSnapshotParams(gitalyAddress, buildPbRepo("default", "foo/bar.git")) + resp, body, err := doSendDataRequest("/api/v4/projects/:id/snapshot", "git-snapshot", params) + require.NoError(t, err) + + require.Equal(t, http.StatusOK, resp.StatusCode, "GET %q: status code", resp.Request.URL) + require.Equal(t, expectedBody, string(body), "GET %q: body", resp.Request.URL) + require.Equal(t, archiveLength, len(body), "GET %q: body size", resp.Request.URL) + + testhelper.RequireResponseHeader(t, resp, "Content-Disposition", `attachment; filename="snapshot.tar"`) + testhelper.RequireResponseHeader(t, resp, "Content-Type", "application/x-tar") + testhelper.RequireResponseHeader(t, resp, "Content-Transfer-Encoding", "binary") + testhelper.RequireResponseHeader(t, resp, "Cache-Control", "private") +} + +func TestGetSnapshotProxiedToGitalyInterruptedStream(t *testing.T) { + gitalyServer, socketPath := startGitalyServer(t, codes.OK) + defer gitalyServer.GracefulStop() + + gitalyAddress := "unix:" + socketPath + + params := buildGetSnapshotParams(gitalyAddress, buildPbRepo("default", "foo/bar.git")) + resp, _, err := doSendDataRequest("/api/v4/projects/:id/snapshot", "git-snapshot", params) + require.NoError(t, err) + + // This causes the server stream to be interrupted instead of consumed entirely. + resp.Body.Close() + + done := make(chan struct{}) + go func() { + gitalyServer.WaitGroup.Wait() + close(done) + }() + + waitDone(t, done) +} + +func buildGetSnapshotParams(gitalyAddress string, repo *gitalypb.Repository) string { + msg := serializedMessage("GetSnapshotRequest", &gitalypb.GetSnapshotRequest{Repository: repo}) + return buildGitalyRPCParams(gitalyAddress, msg) +} + +type rpcArg struct { + k string + v interface{} +} + +// Gitlab asks workhorse to perform some long-running RPCs for it by sending +// the RPC arguments (which are protobuf messages) in HTTP response headers. +// The messages are encoded to JSON objects using pbjson, The strings are then +// re-encoded to JSON strings using json. We must replicate this behaviour here +func buildGitalyRPCParams(gitalyAddress string, rpcArgs ...rpcArg) string { + built := map[string]interface{}{ + "GitalyServer": map[string]string{ + "Address": gitalyAddress, + "Token": "", + }, + } + + for _, arg := range rpcArgs { + built[arg.k] = arg.v + } + + b, err := json.Marshal(interface{}(built)) + if err != nil { + panic(err) + } + + return string(b) +} + +func buildPbRepo(storageName, relativePath string) *gitalypb.Repository { + return &gitalypb.Repository{ + StorageName: storageName, + RelativePath: relativePath, + } +} + +func serializedMessage(name string, arg proto.Message) rpcArg { + m := &jsonpb.Marshaler{} + str, err := m.MarshalToString(arg) + if err != nil { + panic(err) + } + + return rpcArg{name, str} +} + +func serializedProtoMessage(name string, arg proto.Message) rpcArg { + msg, err := proto.Marshal(arg) + + if err != nil { + panic(err) + } + + return rpcArg{name, base64.URLEncoding.EncodeToString(msg)} +} + +type combinedServer struct { + *grpc.Server + *testhelper.GitalyTestServer +} + +func startGitalyServer(t *testing.T, finalMessageCode codes.Code) (*combinedServer, string) { + socketPath := path.Join(scratchDir, fmt.Sprintf("gitaly-%d.sock", rand.Int())) + if err := os.Remove(socketPath); err != nil && !os.IsNotExist(err) { + t.Fatal(err) + } + server := grpc.NewServer() + listener, err := net.Listen("unix", socketPath) + require.NoError(t, err) + + gitalyServer := testhelper.NewGitalyServer(finalMessageCode) + gitalypb.RegisterSmartHTTPServiceServer(server, gitalyServer) + gitalypb.RegisterBlobServiceServer(server, gitalyServer) + gitalypb.RegisterRepositoryServiceServer(server, gitalyServer) + gitalypb.RegisterDiffServiceServer(server, gitalyServer) + + go server.Serve(listener) + + return &combinedServer{Server: server, GitalyTestServer: gitalyServer}, socketPath +} diff --git a/workhorse/go.mod b/workhorse/go.mod new file mode 100644 index 00000000000..a2deaee7e31 --- /dev/null +++ b/workhorse/go.mod @@ -0,0 +1,44 @@ +module gitlab.com/gitlab-org/gitlab-workhorse + +go 1.13 + +require ( + github.com/Azure/azure-storage-blob-go v0.10.0 + github.com/BurntSushi/toml v0.3.1 + github.com/FZambia/sentinel v1.0.0 + github.com/alecthomas/chroma v0.7.3 + github.com/aws/aws-sdk-go v1.31.13 + github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054 // indirect + github.com/dgrijalva/jwt-go v3.2.0+incompatible + github.com/disintegration/imaging v1.6.2 + github.com/getsentry/raven-go v0.2.0 + github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721 + github.com/golang/protobuf v1.4.2 + github.com/gomodule/redigo v2.0.0+incompatible + github.com/gorilla/websocket v1.4.0 + github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 + github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 + github.com/johannesboyne/gofakes3 v0.0.0-20200510090907-02d71f533bec + github.com/jpillora/backoff v0.0.0-20170918002102-8eab2debe79d + github.com/mitchellh/copystructure v1.0.0 + github.com/prometheus/client_golang v1.0.0 + github.com/rafaeljusto/redigomock v0.0.0-20190202135759-257e089e14a1 + github.com/sebest/xff v0.0.0-20160910043805-6c115e0ffa35 + github.com/shabbyrobe/gocovmerge v0.0.0-20190829150210-3e036491d500 // indirect + github.com/sirupsen/logrus v1.7.0 + github.com/smartystreets/goconvey v1.6.4 + github.com/stretchr/testify v1.6.1 + gitlab.com/gitlab-org/gitaly v1.74.0 + gitlab.com/gitlab-org/labkit v1.0.0 + gocloud.dev v0.20.0 + golang.org/x/lint v0.0.0-20200302205851-738671d3881b + golang.org/x/net v0.0.0-20200602114024-627f9648deb9 + golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 + google.golang.org/grpc v1.29.1 + honnef.co/go/tools v0.0.1-2020.1.5 +) + +// go get tries to enforce semantic version compatibility via module paths. +// We can't upgrade to Gitaly v13.x.x from v1.x.x without using a manual override. +// See https://gitlab.com/gitlab-org/gitaly/-/issues/3177 for more details. +replace gitlab.com/gitlab-org/gitaly => gitlab.com/gitlab-org/gitaly v1.87.1-0.20201001041716-3f5e218def93 diff --git a/workhorse/go.sum b/workhorse/go.sum new file mode 100644 index 00000000000..0243b6264c9 --- /dev/null +++ b/workhorse/go.sum @@ -0,0 +1,880 @@ +bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +bou.ke/monkey v1.0.1/go.mod h1:FgHuK96Rv2Nlf+0u1OOVDpCMdsWyOFmeeketDHE7LIg= +cloud.google.com/go v0.26.0 h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0 h1:0E3eE8MX426vUOs7aHfI7aN1BrIzzzf4ccKCSfSjGmc= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.58.0 h1:vtAfVc723K3xKq1BQydk/FyCldnaNFhGhpJxaJzgRMQ= +cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg= +cloud.google.com/go/bigquery v1.0.1 h1:hL+ycaJpVE9M7nLoiXb/Pn10ENE2u+oddxbD8uu0ZVU= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= +cloud.google.com/go/pubsub v1.0.1 h1:W9tAK3E57P75u0XLLR82LZyw8VpAnhmyTOxW9qzmyj8= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0 h1:VV2nUM3wwLLGh9lSABFgZMjInyUbJeaRSE64WuAIQ+4= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.9.0 h1:oXnZyBjHB6hC8TnSle0AWW6pGJ29EuSo5ww+SFmdNBg= +cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= +contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= +contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= +contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= +contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= +github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= +github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= +github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= +github.com/Azure/azure-sdk-for-go v37.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-service-bus-go v0.10.1/go.mod h1:E/FOceuKAFUfpbIJDKWz/May6guE+eGibfGT6q+n1to= +github.com/Azure/azure-storage-blob-go v0.9.0/go.mod h1:8UBPbiOhrMQ4pLPi3gA1tXnpjrS76UYE/fo5A40vf4g= +github.com/Azure/azure-storage-blob-go v0.10.0 h1:evCwGreYo3XLeBV4vSxLbLiYb6e0SzsJiXQVRGsRXxs= +github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE= +github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= +github.com/Azure/go-amqp v0.12.7/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.9.3 h1:OZEIaBbMdUE/Js+BQKlpO81XlISgipr6yDJ+PSwsgi4= +github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/adal v0.8.3 h1:O1AGG9Xig71FxdX9HO5pGNyZ7TbSyHaVg+5eJO/jSGw= +github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= +github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= +github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= +github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= +github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= +github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= +github.com/FZambia/sentinel v1.0.0 h1:KJ0ryjKTZk5WMp0dXvSdNqp3lFaW1fNFuEYfrkLOYIc= +github.com/FZambia/sentinel v1.0.0/go.mod h1:ytL1Am/RLlAoAXG6Kj5LNuw/TRRQrv2rt2FT26vP5gI= +github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= +github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= +github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM= +github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38 h1:smF2tmSOzy2Mm+0dGI2AIUHY+w0BUc+4tn40djz7+6U= +github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI= +github.com/alecthomas/chroma v0.7.3 h1:NfdAERMy+esYQs8OXk0I868/qDxxCEo7FMz1WIqMAeI= +github.com/alecthomas/chroma v0.7.3/go.mod h1:sko8vR34/90zvl5QdcUdvzL3J8NKjAUx9va9jPuFNoM= +github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721 h1:JHZL0hZKJ1VENNfmXvHbgYlbUOvpzYzvy2aZU5gXVeo= +github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0= +github.com/alecthomas/kong v0.2.4/go.mod h1:kQOmtJgV+Lb4aj+I2LEn40cbtawdWJ9Y8QLq+lElKxE= +github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897 h1:p9Sln00KOTlrYkxI1zYWl1QLnEqAqEARBEYa8FQnQcY= +github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.17.4/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.31.13 h1:UeWMTRTL0XAKLR7vxDL4/u7KOtz/LtfJr+lXtxN4YEQ= +github.com/aws/aws-sdk-go v1.31.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2 h1:MmeatFT1pTPSVb4nkPmBFN/LRZ97vPjsFKsZrU3KKTs= +github.com/certifi/gocertifi v0.0.0-20180905225744-ee1a9a0726d2/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= +github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054 h1:uH66TXeswKn5PW5zdZ39xEwfS9an067BirqA+P4QaLI= +github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/client9/reopen v1.0.0 h1:8tpLVR74DLpLObrn2KvsyxJY++2iORGR17WLUdSzUws= +github.com/client9/reopen v1.0.0/go.mod h1:caXVCEr+lUtoN1FlsRiOWdfQtdRHIYfcb0ai8qKWtkQ= +github.com/cloudflare/tableflip v1.2.1-0.20200514155827-4baec9811f2b/go.mod h1:vhhSlJqV8uUnxGkRSgyvGthfGlkAwJ4UuSV51fSrCQY= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ= +github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denisenkom/go-mssqldb v0.0.0-20191001013358-cfbb681360f0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= +github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= +github.com/dlclark/regexp2 v1.2.0 h1:8sAhBGEM0dRWogWqWyQeIJnxjWO6oIjl8FKqREDsGfk= +github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= +github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= +github.com/getsentry/raven-go v0.1.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= +github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs= +github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= +github.com/getsentry/sentry-go v0.5.1 h1:MIPe7ScHADsrK2vznqmhksIUFxq7m0JfTh+ZIMkI+VQ= +github.com/getsentry/sentry-go v0.5.1/go.mod h1:B8H7x8TYDPkeWPRzGpIiFO97LZP6rL8A3hEt8lUItMw= +github.com/getsentry/sentry-go v0.7.0 h1:MR2yfR4vFfv/2+iBuSnkdQwVg7N9cJzihZ6KJu7srwQ= +github.com/getsentry/sentry-go v0.7.0/go.mod h1:pLFpD2Y5RHIKF9Bw3KH6/68DeN2K/XBJd8awjdPnUwg= +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= +github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= +github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w= +github.com/gobuffalo/logger v1.0.1/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= +github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= +github.com/gobuffalo/packr/v2 v2.7.1/go.mod h1:qYEvAazPaVxy7Y7KR0W8qYEE+RymX74kETFqjFoFlOc= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721 h1:KRMr9A3qfbVM7iV/WcLY/rL5LICqwMHLhwRXKu99fXw= +github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 h1:5ZkaAPbicIKTF2I64qf5Fh8Aa83Q/dnOafMYV0OMwjA= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= +github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= +github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= +github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep6soj5K2QSDW7BGk= +github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= +github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc h1:DLpL8pWq0v4JYoRpEhDfsJhhJyGKCcQM2WPW2TJs31c= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c h1:lIC98ZUNah83ky7d9EXktLFe4H7Nwus59dTOLXr8xAI= +github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= +github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= +github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= +github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= +github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= +github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= +github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/johannesboyne/gofakes3 v0.0.0-20200510090907-02d71f533bec h1:jEZFmuFe51KdrceqM4NL3dJiuog0zojzcN/VculG26o= +github.com/johannesboyne/gofakes3 v0.0.0-20200510090907-02d71f533bec/go.mod h1:fNiSoOiEI5KlkWXn26OwKnNe58ilTIkpBlgOrt7Olu8= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/jpillora/backoff v0.0.0-20170918002102-8eab2debe79d h1:ix3WmphUvN0GDd0DO9MH0v6/5xTv+Xm1bPN+1UJn58k= +github.com/jpillora/backoff v0.0.0-20170918002102-8eab2debe79d/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= +github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= +github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= +github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk= +github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U= +github.com/kataras/neffos v0.0.10/go.mod h1:ZYmJC07hQPW67eKuzlfY7SO3bC0mw83A3j6im82hfqw= +github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0= +github.com/kelseyhightower/envconfig v1.3.0 h1:IvRS4f2VcIQy6j4ORGIf9145T/AsUB+oY8LyvN8BXNM= +github.com/kelseyhightower/envconfig v1.3.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/libgit2/git2go/v30 v30.0.5/go.mod h1:YReiQ7xhMoyAL4ISYFLZt+OGqn6xtLqvTC1xJ9oAH7Y= +github.com/lightstep/lightstep-tracer-go v0.15.6 h1:D0GGa7afJ7GcQvu5as6ssLEEKYXvRgKI5d5cevtz8r4= +github.com/lightstep/lightstep-tracer-go v0.15.6/go.mod h1:6AMpwZpsyCFwSovxzM78e+AsYxE8sGwiM6C3TytaWeI= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= +github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= +github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= +github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-shellwords v0.0.0-20190425161501-2444a32a19f4/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-sqlite3 v1.12.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= +github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= +github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= +github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/oklog/ulid/v2 v2.0.2 h1:r4fFzBm+bv0wNKNh5eXTwU7i85y5x+uwkxCUTNVQqLc= +github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3 h1:OoxbjfXVZyod1fmWYhI7SEyaD8B00ynP3T+D5GiyHOY= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.7.1 h1:K0jcRCwNQM3vFGh1ppMtDh/+7ApJrjldlX8fA0jDTLQ= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/otiai10/copy v1.0.1/go.mod h1:8bMCJrAqOtN/d9oyh5HR7HhLQMvcGMpGdwRDYsfOCHc= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +github.com/otiai10/mint v1.2.3/go.mod h1:YnfyPNhBvnY8bW4SGQHCs/aAFhkgySlMZbrF5U0bOVw= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/rafaeljusto/redigomock v0.0.0-20190202135759-257e089e14a1 h1:+kGqA4dNN5hn7WwvKdzHl0rdN5AEkbNZd0VjRltAiZg= +github.com/rafaeljusto/redigomock v0.0.0-20190202135759-257e089e14a1/go.mod h1:JaY6n2sDr+z2WTsXkOmNRUfDy6FN0L6Nk7x06ndm4tY= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.4.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rubenv/sql-migrate v0.0.0-20191213152630-06338513c237/go.mod h1:rtQlpHw+eR6UrqaS3kX1VYeaCxzCVdimDS7g5Ln4pPc= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8= +github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8= +github.com/sebest/xff v0.0.0-20160910043805-6c115e0ffa35 h1:eajwn6K3weW5cd1ZXLu2sJ4pvwlBiCWY4uDejOr73gM= +github.com/sebest/xff v0.0.0-20160910043805-6c115e0ffa35/go.mod h1:wozgYq9WEBQBaIJe4YZ0qTSFAMxmcwBhQH0fO0R34Z0= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63 h1:J6qvD6rbmOil46orKqJaRPG+zTpoGlBTUdyv8ki63L0= +github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63/go.mod h1:n+VKSARF5y/tS9XFSP7vWDfS+GUC5vs/YT7M5XDTUEM= +github.com/shabbyrobe/gocovmerge v0.0.0-20190829150210-3e036491d500 h1:WnNuhiq+FOY3jNj6JXFT+eLN3CQ/oPIsDPRanvwsmbI= +github.com/shabbyrobe/gocovmerge v0.0.0-20190829150210-3e036491d500/go.mod h1:+njLrG5wSeoG4Ds61rFgEzKvenR2UHbjMoDHsczxly0= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.3.0 h1:hI/7Q+DtNZ2kINb6qt/lS+IyXnHQe9e90POfeewL/ME= +github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/tinylib/msgp v1.0.2 h1:DfdQrzQa7Yh2es9SuLkixqxuXS2SxsdYn0KbdrOGWD8= +github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/uber-go/atomic v1.3.2 h1:Azu9lPBWRNKzYXSIwRfgRuDuS0YKsK4NFhiQv98gkxo= +github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= +github.com/uber/jaeger-client-go v2.15.0+incompatible h1:NP3qsSqNxh8VYr956ur1N/1C1PjvOJnJykCzcD5QHbk= +github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v1.5.0 h1:OHbgr8l656Ub3Fw5k9SWnBfIEwvoHQ+W2y+Aa9D1Uyo= +github.com/uber/jaeger-lib v1.5.0/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= +gitlab.com/gitlab-org/gitaly v1.87.1-0.20201001041716-3f5e218def93 h1:5qkRBchgs4IvlbRdJTMISuktLF1ZtLMowyhzQteEeKI= +gitlab.com/gitlab-org/gitaly v1.87.1-0.20201001041716-3f5e218def93/go.mod h1:NEpGSBkjMt7yV5SB1MFySVQqTKFEUdfTDxS76Rt7GC8= +gitlab.com/gitlab-org/gitlab-shell v0.0.0-20200921044701-1a2bfecd2f0e/go.mod h1:RABblvnnhHpFU/lexlwGqpKgZsLV3RGA2D/Elp5/KEA= +gitlab.com/gitlab-org/labkit v0.0.0-20200507062444-0149780c759d/go.mod h1:SNfxkfUwVNECgtmluVayv0GWFgEjjBs5AzgsowPQuo0= +gitlab.com/gitlab-org/labkit v0.0.0-20200908084045-45895e129029 h1:L7b9YLsU3zBfTShAPl4fjhgFdfSvuo9tu4VobJdcKDs= +gitlab.com/gitlab-org/labkit v0.0.0-20200908084045-45895e129029/go.mod h1:SNfxkfUwVNECgtmluVayv0GWFgEjjBs5AzgsowPQuo0= +gitlab.com/gitlab-org/labkit v1.0.0 h1:t2Wr8ygtvHfXAMlCkoEdk5pdb5Gy1IYdr41H7t4kAYw= +gitlab.com/gitlab-org/labkit v1.0.0/go.mod h1:nohrYTSLDnZix0ebXZrbZJjymRar8HeV2roWL5/jw2U= +go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +gocloud.dev v0.20.0 h1:mbEKMfnyPV7W1Rj35R1xXfjszs9dXkwSOq2KoFr25g8= +gocloud.dev v0.20.0/go.mod h1:+Y/RpSXrJthIOM8uFNzWp6MRu9pFPNFEEZrQMxpkfIc= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299 h1:zQpM52jfKHG6II1ISZY1ZcpygvuSFZpLwfluuF89XOg= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 h1:hVwzHzIUGRjiF7EcUjqNxk3NCfkPxbDKRdnNE1Rpg0U= +golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3 h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNTEKDvWeuc1yieZ8qUzUE= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190310074541-c10a0554eabf/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200413165638-669c56c373c4 h1:opSr2sbRXk5X5/givKrrKj9HXxFpW2sdCiP8MJSKLQY= +golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y= +golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190308174544-00c44ba9c14f/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac h1:MQEvx39qSf8vyrx3XRaOe+j1UDIzKwkYOVObRgGPVqI= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190829051458-42f498d34c4d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c h1:2EA2K0k9bcvvEDlqD8xdlOhCOqq+O/p9Voqi4x9W1YU= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 h1:MI14dOfl3OG6Zd32w3ugsrvcUO810fDZdWakTq39dH4= +golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0 h1:yzlyyDW/J0w8yNFJIhiAJy4kq74S+1DOLdawELNxFMA= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.26.0 h1:VJZ8h6E8ip82FRpQl848c5vAadxlTXrUh8RzQzSRm08= +google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba h1:pRj9OXZbwNtbtZtOB4dLwfK4u+EVRMvP+e9zKkg2grM= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 h1:i+Aiej6cta/Frzp13/swvwz5O00kYcSe0A/C5Wd7zX8= +google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +gopkg.in/DataDog/dd-trace-go.v1 v1.7.0 h1:7wbMayb6JXcbAS95RN7MI42W3o1BCxCcdIzZfVWBAiE= +gopkg.in/DataDog/dd-trace-go.v1 v1.7.0/go.mod h1:DVp8HmDh8PuTu2Z0fVVlBsyWaC++fzwVCaGWylTe3tg= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= +gopkg.in/gorp.v1 v1.7.2/go.mod h1:Wo3h+DBQZIxATwftsglhdD/62zRFPhGhTiu5jUJmCaw= +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.5 h1:nI5egYTGJakVyOryqLs1cQO5dO0ksin5XXs2pspk75k= +honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/workhorse/internal/api/api.go b/workhorse/internal/api/api.go new file mode 100644 index 00000000000..4ddc66bf26e --- /dev/null +++ b/workhorse/internal/api/api.go @@ -0,0 +1,349 @@ +package api + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" + + "github.com/prometheus/client_golang/prometheus" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/secret" +) + +const ( + // Custom content type for API responses, to catch routing / programming mistakes + ResponseContentType = "application/vnd.gitlab-workhorse+json" + + failureResponseLimit = 32768 +) + +type API struct { + Client *http.Client + URL *url.URL + Version string +} + +var ( + requestsCounter = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_internal_api_requests", + Help: "How many internal API requests have been completed by gitlab-workhorse, partitioned by status code and HTTP method.", + }, + []string{"code", "method"}, + ) + bytesTotal = prometheus.NewCounter( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_internal_api_failure_response_bytes", + Help: "How many bytes have been returned by upstream GitLab in API failure/rejection response bodies.", + }, + ) +) + +func init() { + prometheus.MustRegister(requestsCounter) + prometheus.MustRegister(bytesTotal) +} + +func NewAPI(myURL *url.URL, version string, roundTripper http.RoundTripper) *API { + return &API{ + Client: &http.Client{Transport: roundTripper}, + URL: myURL, + Version: version, + } +} + +type HandleFunc func(http.ResponseWriter, *http.Request, *Response) + +type MultipartUploadParams struct { + // PartSize is the exact size of each uploaded part. Only the last one can be smaller + PartSize int64 + // PartURLs contains the presigned URLs for each part + PartURLs []string + // CompleteURL is a presigned URL for CompleteMulipartUpload + CompleteURL string + // AbortURL is a presigned URL for AbortMultipartUpload + AbortURL string +} + +type ObjectStorageParams struct { + Provider string + S3Config config.S3Config + GoCloudConfig config.GoCloudConfig +} + +type RemoteObject struct { + // GetURL is an S3 GetObject URL + GetURL string + // DeleteURL is a presigned S3 RemoveObject URL + DeleteURL string + // StoreURL is the temporary presigned S3 PutObject URL to which upload the first found file + StoreURL string + // Boolean to indicate whether to use headers included in PutHeaders + CustomPutHeaders bool + // PutHeaders are HTTP headers (e.g. Content-Type) to be sent with StoreURL + PutHeaders map[string]string + // Whether to ignore Rails pre-signed URLs and have Workhorse directly access object storage provider + UseWorkhorseClient bool + // Remote, temporary object name where Rails will move to the final destination + RemoteTempObjectID string + // ID is a unique identifier of object storage upload + ID string + // Timeout is a number that represents timeout in seconds for sending data to StoreURL + Timeout int + // MultipartUpload contains presigned URLs for S3 MultipartUpload + MultipartUpload *MultipartUploadParams + // Object storage config for Workhorse client + ObjectStorage *ObjectStorageParams +} + +type Response struct { + // GL_ID is an environment variable used by gitlab-shell hooks during 'git + // push' and 'git pull' + GL_ID string + + // GL_USERNAME holds gitlab username of the user who is taking the action causing hooks to be invoked + GL_USERNAME string + + // GL_REPOSITORY is an environment variable used by gitlab-shell hooks during + // 'git push' and 'git pull' + GL_REPOSITORY string + // GitConfigOptions holds the custom options that we want to pass to the git command + GitConfigOptions []string + // StoreLFSPath is provided by the GitLab Rails application to mark where the tmp file should be placed. + // This field is deprecated. GitLab will use TempPath instead + StoreLFSPath string + // LFS object id + LfsOid string + // LFS object size + LfsSize int64 + // TmpPath is the path where we should store temporary files + // This is set by authorization middleware + TempPath string + // RemoteObject is provided by the GitLab Rails application + // and defines a way to store object on remote storage + RemoteObject RemoteObject + // Archive is the path where the artifacts archive is stored + Archive string `json:"archive"` + // Entry is a filename inside the archive point to file that needs to be extracted + Entry string `json:"entry"` + // Used to communicate channel session details + Channel *ChannelSettings + // GitalyServer specifies an address and authentication token for a gitaly server we should connect to. + GitalyServer gitaly.Server + // Repository object for making gRPC requests to Gitaly. + Repository gitalypb.Repository + // For git-http, does the requestor have the right to view all refs? + ShowAllRefs bool + // Detects whether an artifact is used for code intelligence + ProcessLsif bool + // Detects whether LSIF artifact will be parsed with references + ProcessLsifReferences bool + // The maximum accepted size in bytes of the upload + MaximumSize int64 +} + +// singleJoiningSlash is taken from reverseproxy.go:NewSingleHostReverseProxy +func singleJoiningSlash(a, b string) string { + aslash := strings.HasSuffix(a, "/") + bslash := strings.HasPrefix(b, "/") + switch { + case aslash && bslash: + return a + b[1:] + case !aslash && !bslash: + return a + "/" + b + } + return a + b +} + +// rebaseUrl is taken from reverseproxy.go:NewSingleHostReverseProxy +func rebaseUrl(url *url.URL, onto *url.URL, suffix string) *url.URL { + newUrl := *url + newUrl.Scheme = onto.Scheme + newUrl.Host = onto.Host + if suffix != "" { + newUrl.Path = singleJoiningSlash(url.Path, suffix) + } + if onto.RawQuery == "" || newUrl.RawQuery == "" { + newUrl.RawQuery = onto.RawQuery + newUrl.RawQuery + } else { + newUrl.RawQuery = onto.RawQuery + "&" + newUrl.RawQuery + } + return &newUrl +} + +func (api *API) newRequest(r *http.Request, suffix string) (*http.Request, error) { + authReq := &http.Request{ + Method: r.Method, + URL: rebaseUrl(r.URL, api.URL, suffix), + Header: helper.HeaderClone(r.Header), + } + + authReq = authReq.WithContext(r.Context()) + + // Clean some headers when issuing a new request without body + authReq.Header.Del("Content-Type") + authReq.Header.Del("Content-Encoding") + authReq.Header.Del("Content-Length") + authReq.Header.Del("Content-Disposition") + authReq.Header.Del("Accept-Encoding") + + // Hop-by-hop headers. These are removed when sent to the backend. + // http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html + authReq.Header.Del("Transfer-Encoding") + authReq.Header.Del("Connection") + authReq.Header.Del("Keep-Alive") + authReq.Header.Del("Proxy-Authenticate") + authReq.Header.Del("Proxy-Authorization") + authReq.Header.Del("Te") + authReq.Header.Del("Trailers") + authReq.Header.Del("Upgrade") + + // Also forward the Host header, which is excluded from the Header map by the http library. + // This allows the Host header received by the backend to be consistent with other + // requests not going through gitlab-workhorse. + authReq.Host = r.Host + + return authReq, nil +} + +// PreAuthorize performs a pre-authorization check against the API for the given HTTP request +// +// If `outErr` is set, the other fields will be nil and it should be treated as +// a 500 error. +// +// If httpResponse is present, the caller is responsible for closing its body +// +// authResponse will only be present if the authorization check was successful +func (api *API) PreAuthorize(suffix string, r *http.Request) (httpResponse *http.Response, authResponse *Response, outErr error) { + authReq, err := api.newRequest(r, suffix) + if err != nil { + return nil, nil, fmt.Errorf("preAuthorizeHandler newUpstreamRequest: %v", err) + } + + httpResponse, err = api.doRequestWithoutRedirects(authReq) + if err != nil { + return nil, nil, fmt.Errorf("preAuthorizeHandler: do request: %v", err) + } + defer func() { + if outErr != nil { + httpResponse.Body.Close() + httpResponse = nil + } + }() + requestsCounter.WithLabelValues(strconv.Itoa(httpResponse.StatusCode), authReq.Method).Inc() + + // This may be a false positive, e.g. for .../info/refs, rather than a + // failure, so pass the response back + if httpResponse.StatusCode != http.StatusOK || !validResponseContentType(httpResponse) { + return httpResponse, nil, nil + } + + authResponse = &Response{} + // The auth backend validated the client request and told us additional + // request metadata. We must extract this information from the auth + // response body. + if err := json.NewDecoder(httpResponse.Body).Decode(authResponse); err != nil { + return httpResponse, nil, fmt.Errorf("preAuthorizeHandler: decode authorization response: %v", err) + } + + return httpResponse, authResponse, nil +} + +func (api *API) PreAuthorizeHandler(next HandleFunc, suffix string) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + httpResponse, authResponse, err := api.PreAuthorize(suffix, r) + if httpResponse != nil { + defer httpResponse.Body.Close() + } + + if err != nil { + helper.Fail500(w, r, err) + return + } + + // The response couldn't be interpreted as a valid auth response, so + // pass it back (mostly) unmodified + if httpResponse != nil && authResponse == nil { + passResponseBack(httpResponse, w, r) + return + } + + httpResponse.Body.Close() // Free up the Unicorn worker + + copyAuthHeader(httpResponse, w) + + next(w, r, authResponse) + }) +} + +func (api *API) doRequestWithoutRedirects(authReq *http.Request) (*http.Response, error) { + signingTripper := secret.NewRoundTripper(api.Client.Transport, api.Version) + + return signingTripper.RoundTrip(authReq) +} + +func copyAuthHeader(httpResponse *http.Response, w http.ResponseWriter) { + // Negotiate authentication (Kerberos) may need to return a WWW-Authenticate + // header to the client even in case of success as per RFC4559. + for k, v := range httpResponse.Header { + // Case-insensitive comparison as per RFC7230 + if strings.EqualFold(k, "WWW-Authenticate") { + w.Header()[k] = v + } + } +} + +func passResponseBack(httpResponse *http.Response, w http.ResponseWriter, r *http.Request) { + // NGINX response buffering is disabled on this path (with + // X-Accel-Buffering: no) but we still want to free up the Unicorn worker + // that generated httpResponse as fast as possible. To do this we buffer + // the entire response body in memory before sending it on. + responseBody, err := bufferResponse(httpResponse.Body) + if err != nil { + helper.Fail500(w, r, err) + return + } + httpResponse.Body.Close() // Free up the Unicorn worker + bytesTotal.Add(float64(responseBody.Len())) + + for k, v := range httpResponse.Header { + // Accommodate broken clients that do case-sensitive header lookup + if k == "Www-Authenticate" { + w.Header()["WWW-Authenticate"] = v + } else { + w.Header()[k] = v + } + } + w.WriteHeader(httpResponse.StatusCode) + if _, err := io.Copy(w, responseBody); err != nil { + helper.LogError(r, err) + } +} + +func bufferResponse(r io.Reader) (*bytes.Buffer, error) { + responseBody := &bytes.Buffer{} + n, err := io.Copy(responseBody, io.LimitReader(r, failureResponseLimit)) + if err != nil { + return nil, err + } + + if n == failureResponseLimit { + return nil, fmt.Errorf("response body exceeded maximum buffer size (%d bytes)", failureResponseLimit) + } + + return responseBody, nil +} + +func validResponseContentType(resp *http.Response) bool { + return helper.IsContentType(ResponseContentType, resp.Header.Get("Content-Type")) +} diff --git a/workhorse/internal/api/block.go b/workhorse/internal/api/block.go new file mode 100644 index 00000000000..92322906c03 --- /dev/null +++ b/workhorse/internal/api/block.go @@ -0,0 +1,61 @@ +package api + +import ( + "fmt" + "net/http" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +// Prevent internal API responses intended for gitlab-workhorse from +// leaking to the end user +func Block(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + rw := &blocker{rw: w, r: r} + defer rw.flush() + h.ServeHTTP(rw, r) + }) +} + +type blocker struct { + rw http.ResponseWriter + r *http.Request + hijacked bool + status int +} + +func (b *blocker) Header() http.Header { + return b.rw.Header() +} + +func (b *blocker) Write(data []byte) (int, error) { + if b.status == 0 { + b.WriteHeader(http.StatusOK) + } + if b.hijacked { + return len(data), nil + } + + return b.rw.Write(data) +} + +func (b *blocker) WriteHeader(status int) { + if b.status != 0 { + return + } + + if helper.IsContentType(ResponseContentType, b.Header().Get("Content-Type")) { + b.status = 500 + b.Header().Del("Content-Length") + b.hijacked = true + helper.Fail500(b.rw, b.r, fmt.Errorf("api.blocker: forbidden content-type: %q", ResponseContentType)) + return + } + + b.status = status + b.rw.WriteHeader(b.status) +} + +func (b *blocker) flush() { + b.WriteHeader(http.StatusOK) +} diff --git a/workhorse/internal/api/block_test.go b/workhorse/internal/api/block_test.go new file mode 100644 index 00000000000..85ad54f3cfd --- /dev/null +++ b/workhorse/internal/api/block_test.go @@ -0,0 +1,56 @@ +package api + +import ( + "io/ioutil" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestBlocker(t *testing.T) { + upstreamResponse := "hello world" + + testCases := []struct { + desc string + contentType string + out string + }{ + { + desc: "blocked", + contentType: ResponseContentType, + out: "Internal server error\n", + }, + { + desc: "pass", + contentType: "text/plain", + out: upstreamResponse, + }, + } + + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + r, err := http.NewRequest("GET", "/foo", nil) + require.NoError(t, err) + + rw := httptest.NewRecorder() + bl := &blocker{rw: rw, r: r} + bl.Header().Set("Content-Type", tc.contentType) + + upstreamBody := []byte(upstreamResponse) + n, err := bl.Write(upstreamBody) + require.NoError(t, err) + require.Equal(t, len(upstreamBody), n, "bytes written") + + rw.Flush() + + body := rw.Result().Body + data, err := ioutil.ReadAll(body) + require.NoError(t, err) + require.NoError(t, body.Close()) + + require.Equal(t, tc.out, string(data)) + }) + } +} diff --git a/workhorse/internal/api/channel_settings.go b/workhorse/internal/api/channel_settings.go new file mode 100644 index 00000000000..bf3094c9c91 --- /dev/null +++ b/workhorse/internal/api/channel_settings.go @@ -0,0 +1,122 @@ +package api + +import ( + "crypto/tls" + "crypto/x509" + "fmt" + "net/http" + "net/url" + + "github.com/gorilla/websocket" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +type ChannelSettings struct { + // The channel provider may require use of a particular subprotocol. If so, + // it must be specified here, and Workhorse must have a matching codec. + Subprotocols []string + + // The websocket URL to connect to. + Url string + + // Any headers (e.g., Authorization) to send with the websocket request + Header http.Header + + // The CA roots to validate the remote endpoint with, for wss:// URLs. The + // system-provided CA pool will be used if this is blank. PEM-encoded data. + CAPem string + + // The value is specified in seconds. It is converted to time.Duration + // later. + MaxSessionTime int +} + +func (t *ChannelSettings) URL() (*url.URL, error) { + return url.Parse(t.Url) +} + +func (t *ChannelSettings) Dialer() *websocket.Dialer { + dialer := &websocket.Dialer{ + Subprotocols: t.Subprotocols, + } + + if len(t.CAPem) > 0 { + pool := x509.NewCertPool() + pool.AppendCertsFromPEM([]byte(t.CAPem)) + dialer.TLSClientConfig = &tls.Config{RootCAs: pool} + } + + return dialer +} + +func (t *ChannelSettings) Clone() *ChannelSettings { + // Doesn't clone the strings, but that's OK as strings are immutable in go + cloned := *t + cloned.Header = helper.HeaderClone(t.Header) + return &cloned +} + +func (t *ChannelSettings) Dial() (*websocket.Conn, *http.Response, error) { + return t.Dialer().Dial(t.Url, t.Header) +} + +func (t *ChannelSettings) Validate() error { + if t == nil { + return fmt.Errorf("channel details not specified") + } + + if len(t.Subprotocols) == 0 { + return fmt.Errorf("no subprotocol specified") + } + + parsedURL, err := t.URL() + if err != nil { + return fmt.Errorf("invalid URL") + } + + if parsedURL.Scheme != "ws" && parsedURL.Scheme != "wss" { + return fmt.Errorf("invalid websocket scheme: %q", parsedURL.Scheme) + } + + return nil +} + +func (t *ChannelSettings) IsEqual(other *ChannelSettings) bool { + if t == nil && other == nil { + return true + } + + if t == nil || other == nil { + return false + } + + if len(t.Subprotocols) != len(other.Subprotocols) { + return false + } + + for i, subprotocol := range t.Subprotocols { + if other.Subprotocols[i] != subprotocol { + return false + } + } + + if len(t.Header) != len(other.Header) { + return false + } + + for header, values := range t.Header { + if len(values) != len(other.Header[header]) { + return false + } + for i, value := range values { + if other.Header[header][i] != value { + return false + } + } + } + + return t.Url == other.Url && + t.CAPem == other.CAPem && + t.MaxSessionTime == other.MaxSessionTime +} diff --git a/workhorse/internal/api/channel_settings_test.go b/workhorse/internal/api/channel_settings_test.go new file mode 100644 index 00000000000..4aa2c835579 --- /dev/null +++ b/workhorse/internal/api/channel_settings_test.go @@ -0,0 +1,154 @@ +package api + +import ( + "net/http" + "testing" +) + +func channel(url string, subprotocols ...string) *ChannelSettings { + return &ChannelSettings{ + Url: url, + Subprotocols: subprotocols, + MaxSessionTime: 0, + } +} + +func ca(channel *ChannelSettings) *ChannelSettings { + channel = channel.Clone() + channel.CAPem = "Valid CA data" + + return channel +} + +func timeout(channel *ChannelSettings) *ChannelSettings { + channel = channel.Clone() + channel.MaxSessionTime = 600 + + return channel +} + +func header(channel *ChannelSettings, values ...string) *ChannelSettings { + if len(values) == 0 { + values = []string{"Dummy Value"} + } + + channel = channel.Clone() + channel.Header = http.Header{ + "Header": values, + } + + return channel +} + +func TestClone(t *testing.T) { + a := ca(header(channel("ws:", "", ""))) + b := a.Clone() + + if a == b { + t.Fatalf("Address of cloned channel didn't change") + } + + if &a.Subprotocols == &b.Subprotocols { + t.Fatalf("Address of cloned subprotocols didn't change") + } + + if &a.Header == &b.Header { + t.Fatalf("Address of cloned header didn't change") + } +} + +func TestValidate(t *testing.T) { + for i, tc := range []struct { + channel *ChannelSettings + valid bool + msg string + }{ + {nil, false, "nil channel"}, + {channel("", ""), false, "empty URL"}, + {channel("ws:"), false, "empty subprotocols"}, + {channel("ws:", "foo"), true, "any subprotocol"}, + {channel("ws:", "foo", "bar"), true, "multiple subprotocols"}, + {channel("ws:", ""), true, "websocket URL"}, + {channel("wss:", ""), true, "secure websocket URL"}, + {channel("http:", ""), false, "HTTP URL"}, + {channel("https:", ""), false, " HTTPS URL"}, + {ca(channel("ws:", "")), true, "any CA pem"}, + {header(channel("ws:", "")), true, "any headers"}, + {ca(header(channel("ws:", ""))), true, "PEM and headers"}, + } { + if err := tc.channel.Validate(); (err != nil) == tc.valid { + t.Fatalf("test case %d: "+tc.msg+": valid=%v: %s: %+v", i, tc.valid, err, tc.channel) + } + } +} + +func TestDialer(t *testing.T) { + channel := channel("ws:", "foo") + dialer := channel.Dialer() + + if len(dialer.Subprotocols) != len(channel.Subprotocols) { + t.Fatalf("Subprotocols don't match: %+v vs. %+v", channel.Subprotocols, dialer.Subprotocols) + } + + for i, subprotocol := range channel.Subprotocols { + if dialer.Subprotocols[i] != subprotocol { + t.Fatalf("Subprotocols don't match: %+v vs. %+v", channel.Subprotocols, dialer.Subprotocols) + } + } + + if dialer.TLSClientConfig != nil { + t.Fatalf("Unexpected TLSClientConfig: %+v", dialer) + } + + channel = ca(channel) + dialer = channel.Dialer() + + if dialer.TLSClientConfig == nil || dialer.TLSClientConfig.RootCAs == nil { + t.Fatalf("Custom CA certificates not recognised!") + } +} + +func TestIsEqual(t *testing.T) { + chann := channel("ws:", "foo") + + chann_header2 := header(chann, "extra") + chann_header3 := header(chann) + chann_header3.Header.Add("Extra", "extra") + + chann_ca2 := ca(chann) + chann_ca2.CAPem = "other value" + + for i, tc := range []struct { + channelA *ChannelSettings + channelB *ChannelSettings + expected bool + }{ + {nil, nil, true}, + {chann, nil, false}, + {nil, chann, false}, + {chann, chann, true}, + {chann.Clone(), chann.Clone(), true}, + {chann, channel("foo:"), false}, + {chann, channel(chann.Url), false}, + {header(chann), header(chann), true}, + {chann_header2, chann_header2, true}, + {chann_header3, chann_header3, true}, + {header(chann), chann_header2, false}, + {header(chann), chann_header3, false}, + {header(chann), chann, false}, + {chann, header(chann), false}, + {ca(chann), ca(chann), true}, + {ca(chann), chann, false}, + {chann, ca(chann), false}, + {ca(header(chann)), ca(header(chann)), true}, + {chann_ca2, ca(chann), false}, + {chann, timeout(chann), false}, + } { + if actual := tc.channelA.IsEqual(tc.channelB); tc.expected != actual { + t.Fatalf( + "test case %d: Comparison:\n-%+v\n+%+v\nexpected=%v: actual=%v", + i, tc.channelA, tc.channelB, tc.expected, actual, + ) + } + } +} diff --git a/workhorse/internal/artifacts/artifacts_store_test.go b/workhorse/internal/artifacts/artifacts_store_test.go new file mode 100644 index 00000000000..bd56d9ea725 --- /dev/null +++ b/workhorse/internal/artifacts/artifacts_store_test.go @@ -0,0 +1,338 @@ +package artifacts + +import ( + "archive/zip" + "bytes" + "crypto/md5" + "encoding/hex" + "fmt" + "io/ioutil" + "mime/multipart" + "net/http" + "net/http/httptest" + "os" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore/test" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" +) + +func createTestZipArchive(t *testing.T) (data []byte, md5Hash string) { + var buffer bytes.Buffer + archive := zip.NewWriter(&buffer) + fileInArchive, err := archive.Create("test.file") + require.NoError(t, err) + fmt.Fprint(fileInArchive, "test") + archive.Close() + data = buffer.Bytes() + + hasher := md5.New() + hasher.Write(data) + hexHash := hasher.Sum(nil) + md5Hash = hex.EncodeToString(hexHash) + + return data, md5Hash +} + +func createTestMultipartForm(t *testing.T, data []byte) (bytes.Buffer, string) { + var buffer bytes.Buffer + writer := multipart.NewWriter(&buffer) + file, err := writer.CreateFormFile("file", "my.file") + require.NoError(t, err) + file.Write(data) + writer.Close() + return buffer, writer.FormDataContentType() +} + +func testUploadArtifactsFromTestZip(t *testing.T, ts *httptest.Server) *httptest.ResponseRecorder { + archiveData, _ := createTestZipArchive(t) + contentBuffer, contentType := createTestMultipartForm(t, archiveData) + + return testUploadArtifacts(t, contentType, ts.URL+Path, &contentBuffer) +} + +func TestUploadHandlerSendingToExternalStorage(t *testing.T) { + tempPath, err := ioutil.TempDir("", "uploads") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tempPath) + + archiveData, md5 := createTestZipArchive(t) + archiveFile, err := ioutil.TempFile("", "artifact.zip") + require.NoError(t, err) + defer os.Remove(archiveFile.Name()) + _, err = archiveFile.Write(archiveData) + require.NoError(t, err) + archiveFile.Close() + + storeServerCalled := 0 + storeServerMux := http.NewServeMux() + storeServerMux.HandleFunc("/url/put", func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "PUT", r.Method) + + receivedData, err := ioutil.ReadAll(r.Body) + require.NoError(t, err) + require.Equal(t, archiveData, receivedData) + + storeServerCalled++ + w.Header().Set("ETag", md5) + w.WriteHeader(200) + }) + storeServerMux.HandleFunc("/store-id", func(w http.ResponseWriter, r *http.Request) { + http.ServeFile(w, r, archiveFile.Name()) + }) + + responseProcessorCalled := 0 + responseProcessor := func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "store-id", r.FormValue("file.remote_id")) + require.NotEmpty(t, r.FormValue("file.remote_url")) + w.WriteHeader(200) + responseProcessorCalled++ + } + + storeServer := httptest.NewServer(storeServerMux) + defer storeServer.Close() + + qs := fmt.Sprintf("?%s=%s", ArtifactFormatKey, ArtifactFormatZip) + + tests := []struct { + name string + preauth api.Response + }{ + { + name: "ObjectStore Upload", + preauth: api.Response{ + RemoteObject: api.RemoteObject{ + StoreURL: storeServer.URL + "/url/put" + qs, + ID: "store-id", + GetURL: storeServer.URL + "/store-id", + }, + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + storeServerCalled = 0 + responseProcessorCalled = 0 + + ts := testArtifactsUploadServer(t, test.preauth, responseProcessor) + defer ts.Close() + + contentBuffer, contentType := createTestMultipartForm(t, archiveData) + response := testUploadArtifacts(t, contentType, ts.URL+Path+qs, &contentBuffer) + require.Equal(t, http.StatusOK, response.Code) + testhelper.RequireResponseHeader(t, response, MetadataHeaderKey, MetadataHeaderPresent) + require.Equal(t, 1, storeServerCalled, "store should be called only once") + require.Equal(t, 1, responseProcessorCalled, "response processor should be called only once") + }) + } +} + +func TestUploadHandlerSendingToExternalStorageAndStorageServerUnreachable(t *testing.T) { + tempPath, err := ioutil.TempDir("", "uploads") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tempPath) + + responseProcessor := func(w http.ResponseWriter, r *http.Request) { + t.Fatal("it should not be called") + } + + authResponse := api.Response{ + TempPath: tempPath, + RemoteObject: api.RemoteObject{ + StoreURL: "http://localhost:12323/invalid/url", + ID: "store-id", + }, + } + + ts := testArtifactsUploadServer(t, authResponse, responseProcessor) + defer ts.Close() + + response := testUploadArtifactsFromTestZip(t, ts) + require.Equal(t, http.StatusInternalServerError, response.Code) +} + +func TestUploadHandlerSendingToExternalStorageAndInvalidURLIsUsed(t *testing.T) { + tempPath, err := ioutil.TempDir("", "uploads") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tempPath) + + responseProcessor := func(w http.ResponseWriter, r *http.Request) { + t.Fatal("it should not be called") + } + + authResponse := api.Response{ + TempPath: tempPath, + RemoteObject: api.RemoteObject{ + StoreURL: "htt:////invalid-url", + ID: "store-id", + }, + } + + ts := testArtifactsUploadServer(t, authResponse, responseProcessor) + defer ts.Close() + + response := testUploadArtifactsFromTestZip(t, ts) + require.Equal(t, http.StatusInternalServerError, response.Code) +} + +func TestUploadHandlerSendingToExternalStorageAndItReturnsAnError(t *testing.T) { + putCalledTimes := 0 + + storeServerMux := http.NewServeMux() + storeServerMux.HandleFunc("/url/put", func(w http.ResponseWriter, r *http.Request) { + putCalledTimes++ + require.Equal(t, "PUT", r.Method) + w.WriteHeader(510) + }) + + responseProcessor := func(w http.ResponseWriter, r *http.Request) { + t.Fatal("it should not be called") + } + + storeServer := httptest.NewServer(storeServerMux) + defer storeServer.Close() + + authResponse := api.Response{ + RemoteObject: api.RemoteObject{ + StoreURL: storeServer.URL + "/url/put", + ID: "store-id", + }, + } + + ts := testArtifactsUploadServer(t, authResponse, responseProcessor) + defer ts.Close() + + response := testUploadArtifactsFromTestZip(t, ts) + require.Equal(t, http.StatusInternalServerError, response.Code) + require.Equal(t, 1, putCalledTimes, "upload should be called only once") +} + +func TestUploadHandlerSendingToExternalStorageAndSupportRequestTimeout(t *testing.T) { + putCalledTimes := 0 + + storeServerMux := http.NewServeMux() + storeServerMux.HandleFunc("/url/put", func(w http.ResponseWriter, r *http.Request) { + putCalledTimes++ + require.Equal(t, "PUT", r.Method) + time.Sleep(10 * time.Second) + w.WriteHeader(510) + }) + + responseProcessor := func(w http.ResponseWriter, r *http.Request) { + t.Fatal("it should not be called") + } + + storeServer := httptest.NewServer(storeServerMux) + defer storeServer.Close() + + authResponse := api.Response{ + RemoteObject: api.RemoteObject{ + StoreURL: storeServer.URL + "/url/put", + ID: "store-id", + Timeout: 1, + }, + } + + ts := testArtifactsUploadServer(t, authResponse, responseProcessor) + defer ts.Close() + + response := testUploadArtifactsFromTestZip(t, ts) + require.Equal(t, http.StatusInternalServerError, response.Code) + require.Equal(t, 1, putCalledTimes, "upload should be called only once") +} + +func TestUploadHandlerMultipartUploadSizeLimit(t *testing.T) { + os, server := test.StartObjectStore() + defer server.Close() + + err := os.InitiateMultipartUpload(test.ObjectPath) + require.NoError(t, err) + + objectURL := server.URL + test.ObjectPath + + uploadSize := 10 + preauth := api.Response{ + RemoteObject: api.RemoteObject{ + ID: "store-id", + MultipartUpload: &api.MultipartUploadParams{ + PartSize: 1, + PartURLs: []string{objectURL + "?partNumber=1"}, + AbortURL: objectURL, // DELETE + CompleteURL: objectURL, // POST + }, + }, + } + + responseProcessor := func(w http.ResponseWriter, r *http.Request) { + t.Fatal("it should not be called") + } + + ts := testArtifactsUploadServer(t, preauth, responseProcessor) + defer ts.Close() + + contentBuffer, contentType := createTestMultipartForm(t, make([]byte, uploadSize)) + response := testUploadArtifacts(t, contentType, ts.URL+Path, &contentBuffer) + require.Equal(t, http.StatusRequestEntityTooLarge, response.Code) + + // Poll because AbortMultipartUpload is async + for i := 0; os.IsMultipartUpload(test.ObjectPath) && i < 100; i++ { + time.Sleep(10 * time.Millisecond) + } + require.False(t, os.IsMultipartUpload(test.ObjectPath), "MultipartUpload should not be in progress anymore") + require.Empty(t, os.GetObjectMD5(test.ObjectPath), "upload should have failed, so the object should not exists") +} + +func TestUploadHandlerMultipartUploadMaximumSizeFromApi(t *testing.T) { + os, server := test.StartObjectStore() + defer server.Close() + + err := os.InitiateMultipartUpload(test.ObjectPath) + require.NoError(t, err) + + objectURL := server.URL + test.ObjectPath + + uploadSize := int64(10) + maxSize := uploadSize - 1 + preauth := api.Response{ + MaximumSize: maxSize, + RemoteObject: api.RemoteObject{ + ID: "store-id", + MultipartUpload: &api.MultipartUploadParams{ + PartSize: uploadSize, + PartURLs: []string{objectURL + "?partNumber=1"}, + AbortURL: objectURL, // DELETE + CompleteURL: objectURL, // POST + }, + }, + } + + responseProcessor := func(w http.ResponseWriter, r *http.Request) { + t.Fatal("it should not be called") + } + + ts := testArtifactsUploadServer(t, preauth, responseProcessor) + defer ts.Close() + + contentBuffer, contentType := createTestMultipartForm(t, make([]byte, uploadSize)) + response := testUploadArtifacts(t, contentType, ts.URL+Path, &contentBuffer) + require.Equal(t, http.StatusRequestEntityTooLarge, response.Code) + + testhelper.Retry(t, 5*time.Second, func() error { + if os.GetObjectMD5(test.ObjectPath) == "" { + return nil + } + + return fmt.Errorf("file is still present") + }) +} diff --git a/workhorse/internal/artifacts/artifacts_test.go b/workhorse/internal/artifacts/artifacts_test.go new file mode 100644 index 00000000000..b9a42cc60c1 --- /dev/null +++ b/workhorse/internal/artifacts/artifacts_test.go @@ -0,0 +1,19 @@ +package artifacts + +import ( + "os" + "testing" + + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" +) + +func TestMain(m *testing.M) { + if err := testhelper.BuildExecutables(); err != nil { + log.WithError(err).Fatal() + } + + os.Exit(m.Run()) + +} diff --git a/workhorse/internal/artifacts/artifacts_upload.go b/workhorse/internal/artifacts/artifacts_upload.go new file mode 100644 index 00000000000..d4ceb39d7c6 --- /dev/null +++ b/workhorse/internal/artifacts/artifacts_upload.go @@ -0,0 +1,170 @@ +package artifacts + +import ( + "context" + "fmt" + "io" + "mime/multipart" + "net/http" + "os" + "os/exec" + "strings" + "syscall" + + "github.com/prometheus/client_golang/prometheus" + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/filestore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upload" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/zipartifacts" +) + +// Sent by the runner: https://gitlab.com/gitlab-org/gitlab-runner/blob/c24da19ecce8808d9d2950896f70c94f5ea1cc2e/network/gitlab.go#L580 +const ( + ArtifactFormatKey = "artifact_format" + ArtifactFormatZip = "zip" + ArtifactFormatDefault = "" +) + +var zipSubcommandsErrorsCounter = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_zip_subcommand_errors_total", + Help: "Errors comming from subcommands used for processing ZIP archives", + }, []string{"error"}) + +func init() { + prometheus.MustRegister(zipSubcommandsErrorsCounter) +} + +type artifactsUploadProcessor struct { + opts *filestore.SaveFileOpts + format string + + upload.SavedFileTracker +} + +func (a *artifactsUploadProcessor) generateMetadataFromZip(ctx context.Context, file *filestore.FileHandler) (*filestore.FileHandler, error) { + metaReader, metaWriter := io.Pipe() + defer metaWriter.Close() + + metaOpts := &filestore.SaveFileOpts{ + LocalTempPath: a.opts.LocalTempPath, + TempFilePrefix: "metadata.gz", + } + if metaOpts.LocalTempPath == "" { + metaOpts.LocalTempPath = os.TempDir() + } + + fileName := file.LocalPath + if fileName == "" { + fileName = file.RemoteURL + } + + zipMd := exec.CommandContext(ctx, "gitlab-zip-metadata", fileName) + zipMd.Stderr = log.ContextLogger(ctx).Writer() + zipMd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} + zipMd.Stdout = metaWriter + + if err := zipMd.Start(); err != nil { + return nil, err + } + defer helper.CleanUpProcessGroup(zipMd) + + type saveResult struct { + error + *filestore.FileHandler + } + done := make(chan saveResult) + go func() { + var result saveResult + result.FileHandler, result.error = filestore.SaveFileFromReader(ctx, metaReader, -1, metaOpts) + + done <- result + }() + + if err := zipMd.Wait(); err != nil { + st, ok := helper.ExitStatus(err) + + if !ok { + return nil, err + } + + zipSubcommandsErrorsCounter.WithLabelValues(zipartifacts.ErrorLabelByCode(st)).Inc() + + if st == zipartifacts.CodeNotZip { + return nil, nil + } + + if st == zipartifacts.CodeLimitsReached { + return nil, zipartifacts.ErrBadMetadata + } + } + + metaWriter.Close() + result := <-done + return result.FileHandler, result.error +} + +func (a *artifactsUploadProcessor) ProcessFile(ctx context.Context, formName string, file *filestore.FileHandler, writer *multipart.Writer) error { + // ProcessFile for artifacts requires file form-data field name to eq `file` + + if formName != "file" { + return fmt.Errorf("invalid form field: %q", formName) + } + if a.Count() > 0 { + return fmt.Errorf("artifacts request contains more than one file") + } + a.Track(formName, file.LocalPath) + + select { + case <-ctx.Done(): + return fmt.Errorf("ProcessFile: context done") + default: + } + + if !strings.EqualFold(a.format, ArtifactFormatZip) && a.format != ArtifactFormatDefault { + return nil + } + + // TODO: can we rely on disk for shipping metadata? Not if we split workhorse and rails in 2 different PODs + metadata, err := a.generateMetadataFromZip(ctx, file) + if err != nil { + return err + } + + if metadata != nil { + fields, err := metadata.GitLabFinalizeFields("metadata") + if err != nil { + return fmt.Errorf("finalize metadata field error: %v", err) + } + + for k, v := range fields { + writer.WriteField(k, v) + } + + a.Track("metadata", metadata.LocalPath) + } + + return nil +} + +func (a *artifactsUploadProcessor) Name() string { + return "artifacts" +} + +func UploadArtifacts(myAPI *api.API, h http.Handler, p upload.Preparer) http.Handler { + return myAPI.PreAuthorizeHandler(func(w http.ResponseWriter, r *http.Request, a *api.Response) { + opts, _, err := p.Prepare(a) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("UploadArtifacts: error preparing file storage options")) + return + } + + format := r.URL.Query().Get(ArtifactFormatKey) + + mg := &artifactsUploadProcessor{opts: opts, format: format, SavedFileTracker: upload.SavedFileTracker{Request: r}} + upload.HandleFileUploads(w, r, h, a, mg, opts) + }, "/authorize") +} diff --git a/workhorse/internal/artifacts/artifacts_upload_test.go b/workhorse/internal/artifacts/artifacts_upload_test.go new file mode 100644 index 00000000000..c82ae791239 --- /dev/null +++ b/workhorse/internal/artifacts/artifacts_upload_test.go @@ -0,0 +1,322 @@ +package artifacts + +import ( + "archive/zip" + "bytes" + "compress/gzip" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "mime/multipart" + "net/http" + "net/http/httptest" + "os" + "testing" + + "github.com/dgrijalva/jwt-go" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/filestore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/proxy" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upload" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upstream/roundtripper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/zipartifacts" + + "github.com/stretchr/testify/require" +) + +const ( + MetadataHeaderKey = "Metadata-Status" + MetadataHeaderPresent = "present" + MetadataHeaderMissing = "missing" + Path = "/url/path" +) + +func testArtifactsUploadServer(t *testing.T, authResponse api.Response, bodyProcessor func(w http.ResponseWriter, r *http.Request)) *httptest.Server { + mux := http.NewServeMux() + mux.HandleFunc(Path+"/authorize", func(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + t.Fatal("Expected POST request") + } + + w.Header().Set("Content-Type", api.ResponseContentType) + + data, err := json.Marshal(&authResponse) + if err != nil { + t.Fatal("Expected to marshal") + } + w.Write(data) + }) + mux.HandleFunc(Path, func(w http.ResponseWriter, r *http.Request) { + opts, err := filestore.GetOpts(&authResponse) + require.NoError(t, err) + + if r.Method != "POST" { + t.Fatal("Expected POST request") + } + if opts.IsLocal() { + if r.FormValue("file.path") == "" { + t.Fatal("Expected file to be present") + return + } + + _, err := ioutil.ReadFile(r.FormValue("file.path")) + if err != nil { + t.Fatal("Expected file to be readable") + return + } + } else { + if r.FormValue("file.remote_url") == "" { + t.Fatal("Expected file to be remote accessible") + return + } + } + + if r.FormValue("metadata.path") != "" { + metadata, err := ioutil.ReadFile(r.FormValue("metadata.path")) + if err != nil { + t.Fatal("Expected metadata to be readable") + return + } + gz, err := gzip.NewReader(bytes.NewReader(metadata)) + if err != nil { + t.Fatal("Expected metadata to be valid gzip") + return + } + defer gz.Close() + metadata, err = ioutil.ReadAll(gz) + if err != nil { + t.Fatal("Expected metadata to be valid") + return + } + if !bytes.HasPrefix(metadata, []byte(zipartifacts.MetadataHeaderPrefix+zipartifacts.MetadataHeader)) { + t.Fatal("Expected metadata to be of valid format") + return + } + + w.Header().Set(MetadataHeaderKey, MetadataHeaderPresent) + + } else { + w.Header().Set(MetadataHeaderKey, MetadataHeaderMissing) + } + + w.WriteHeader(http.StatusOK) + + if bodyProcessor != nil { + bodyProcessor(w, r) + } + }) + return testhelper.TestServerWithHandler(nil, mux.ServeHTTP) +} + +type testServer struct { + url string + writer *multipart.Writer + buffer *bytes.Buffer + fileWriter io.Writer + cleanup func() +} + +func setupWithTmpPath(t *testing.T, filename string, includeFormat bool, format string, authResponse *api.Response, bodyProcessor func(w http.ResponseWriter, r *http.Request)) *testServer { + tempPath, err := ioutil.TempDir("", "uploads") + require.NoError(t, err) + + if authResponse == nil { + authResponse = &api.Response{TempPath: tempPath} + } + + ts := testArtifactsUploadServer(t, *authResponse, bodyProcessor) + + var buffer bytes.Buffer + writer := multipart.NewWriter(&buffer) + fileWriter, err := writer.CreateFormFile(filename, "my.file") + require.NotNil(t, fileWriter) + require.NoError(t, err) + + cleanup := func() { + ts.Close() + require.NoError(t, os.RemoveAll(tempPath)) + require.NoError(t, writer.Close()) + } + + qs := "" + + if includeFormat { + qs = fmt.Sprintf("?%s=%s", ArtifactFormatKey, format) + } + + return &testServer{url: ts.URL + Path + qs, writer: writer, buffer: &buffer, fileWriter: fileWriter, cleanup: cleanup} +} + +func testUploadArtifacts(t *testing.T, contentType, url string, body io.Reader) *httptest.ResponseRecorder { + httpRequest, err := http.NewRequest("POST", url, body) + require.NoError(t, err) + + httpRequest.Header.Set("Content-Type", contentType) + response := httptest.NewRecorder() + parsedURL := helper.URLMustParse(url) + roundTripper := roundtripper.NewTestBackendRoundTripper(parsedURL) + testhelper.ConfigureSecret() + apiClient := api.NewAPI(parsedURL, "123", roundTripper) + proxyClient := proxy.NewProxy(parsedURL, "123", roundTripper) + UploadArtifacts(apiClient, proxyClient, &upload.DefaultPreparer{}).ServeHTTP(response, httpRequest) + return response +} + +func TestUploadHandlerAddingMetadata(t *testing.T) { + testCases := []struct { + desc string + format string + includeFormat bool + }{ + { + desc: "ZIP format", + format: ArtifactFormatZip, + includeFormat: true, + }, + { + desc: "default format", + format: ArtifactFormatDefault, + includeFormat: true, + }, + { + desc: "default format without artifact_format", + format: ArtifactFormatDefault, + includeFormat: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + s := setupWithTmpPath(t, "file", tc.includeFormat, tc.format, nil, + func(w http.ResponseWriter, r *http.Request) { + token, err := jwt.ParseWithClaims(r.Header.Get(upload.RewrittenFieldsHeader), &upload.MultipartClaims{}, testhelper.ParseJWT) + require.NoError(t, err) + + rewrittenFields := token.Claims.(*upload.MultipartClaims).RewrittenFields + require.Equal(t, 2, len(rewrittenFields)) + + require.Contains(t, rewrittenFields, "file") + require.Contains(t, rewrittenFields, "metadata") + require.Contains(t, r.PostForm, "file.gitlab-workhorse-upload") + require.Contains(t, r.PostForm, "metadata.gitlab-workhorse-upload") + }, + ) + defer s.cleanup() + + archive := zip.NewWriter(s.fileWriter) + file, err := archive.Create("test.file") + require.NotNil(t, file) + require.NoError(t, err) + + require.NoError(t, archive.Close()) + require.NoError(t, s.writer.Close()) + + response := testUploadArtifacts(t, s.writer.FormDataContentType(), s.url, s.buffer) + require.Equal(t, http.StatusOK, response.Code) + testhelper.RequireResponseHeader(t, response, MetadataHeaderKey, MetadataHeaderPresent) + }) + } +} + +func TestUploadHandlerTarArtifact(t *testing.T) { + s := setupWithTmpPath(t, "file", true, "tar", nil, + func(w http.ResponseWriter, r *http.Request) { + token, err := jwt.ParseWithClaims(r.Header.Get(upload.RewrittenFieldsHeader), &upload.MultipartClaims{}, testhelper.ParseJWT) + require.NoError(t, err) + + rewrittenFields := token.Claims.(*upload.MultipartClaims).RewrittenFields + require.Equal(t, 1, len(rewrittenFields)) + + require.Contains(t, rewrittenFields, "file") + require.Contains(t, r.PostForm, "file.gitlab-workhorse-upload") + }, + ) + defer s.cleanup() + + file, err := os.Open("../../testdata/tarfile.tar") + require.NoError(t, err) + + _, err = io.Copy(s.fileWriter, file) + require.NoError(t, err) + require.NoError(t, file.Close()) + require.NoError(t, s.writer.Close()) + + response := testUploadArtifacts(t, s.writer.FormDataContentType(), s.url, s.buffer) + require.Equal(t, http.StatusOK, response.Code) + testhelper.RequireResponseHeader(t, response, MetadataHeaderKey, MetadataHeaderMissing) +} + +func TestUploadHandlerForUnsupportedArchive(t *testing.T) { + s := setupWithTmpPath(t, "file", true, "other", nil, nil) + defer s.cleanup() + require.NoError(t, s.writer.Close()) + + response := testUploadArtifacts(t, s.writer.FormDataContentType(), s.url, s.buffer) + require.Equal(t, http.StatusOK, response.Code) + testhelper.RequireResponseHeader(t, response, MetadataHeaderKey, MetadataHeaderMissing) +} + +func TestUploadHandlerForMultipleFiles(t *testing.T) { + s := setupWithTmpPath(t, "file", true, "", nil, nil) + defer s.cleanup() + + file, err := s.writer.CreateFormFile("file", "my.file") + require.NotNil(t, file) + require.NoError(t, err) + require.NoError(t, s.writer.Close()) + + response := testUploadArtifacts(t, s.writer.FormDataContentType(), s.url, s.buffer) + require.Equal(t, http.StatusInternalServerError, response.Code) +} + +func TestUploadFormProcessing(t *testing.T) { + s := setupWithTmpPath(t, "metadata", true, "", nil, nil) + defer s.cleanup() + require.NoError(t, s.writer.Close()) + + response := testUploadArtifacts(t, s.writer.FormDataContentType(), s.url, s.buffer) + require.Equal(t, http.StatusInternalServerError, response.Code) +} + +func TestLsifFileProcessing(t *testing.T) { + tempPath, err := ioutil.TempDir("", "uploads") + require.NoError(t, err) + + s := setupWithTmpPath(t, "file", true, "zip", &api.Response{TempPath: tempPath, ProcessLsif: true}, nil) + defer s.cleanup() + + file, err := os.Open("../../testdata/lsif/valid.lsif.zip") + require.NoError(t, err) + + _, err = io.Copy(s.fileWriter, file) + require.NoError(t, err) + require.NoError(t, file.Close()) + require.NoError(t, s.writer.Close()) + + response := testUploadArtifacts(t, s.writer.FormDataContentType(), s.url, s.buffer) + require.Equal(t, http.StatusOK, response.Code) + testhelper.RequireResponseHeader(t, response, MetadataHeaderKey, MetadataHeaderPresent) +} + +func TestInvalidLsifFileProcessing(t *testing.T) { + tempPath, err := ioutil.TempDir("", "uploads") + require.NoError(t, err) + + s := setupWithTmpPath(t, "file", true, "zip", &api.Response{TempPath: tempPath, ProcessLsif: true}, nil) + defer s.cleanup() + + file, err := os.Open("../../testdata/lsif/invalid.lsif.zip") + require.NoError(t, err) + + _, err = io.Copy(s.fileWriter, file) + require.NoError(t, err) + require.NoError(t, file.Close()) + require.NoError(t, s.writer.Close()) + + response := testUploadArtifacts(t, s.writer.FormDataContentType(), s.url, s.buffer) + require.Equal(t, http.StatusInternalServerError, response.Code) +} diff --git a/workhorse/internal/artifacts/entry.go b/workhorse/internal/artifacts/entry.go new file mode 100644 index 00000000000..0c697d40020 --- /dev/null +++ b/workhorse/internal/artifacts/entry.go @@ -0,0 +1,123 @@ +package artifacts + +import ( + "bufio" + "context" + "fmt" + "io" + "mime" + "net/http" + "os" + "os/exec" + "path/filepath" + "strings" + "syscall" + + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/senddata" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/zipartifacts" +) + +type entry struct{ senddata.Prefix } +type entryParams struct{ Archive, Entry string } + +var SendEntry = &entry{"artifacts-entry:"} + +// Artifacts downloader doesn't support ranges when downloading a single file +func (e *entry) Inject(w http.ResponseWriter, r *http.Request, sendData string) { + var params entryParams + if err := e.Unpack(¶ms, sendData); err != nil { + helper.Fail500(w, r, fmt.Errorf("SendEntry: unpack sendData: %v", err)) + return + } + + log.WithContextFields(r.Context(), log.Fields{ + "entry": params.Entry, + "archive": params.Archive, + "path": r.URL.Path, + }).Print("SendEntry: sending") + + if params.Archive == "" || params.Entry == "" { + helper.Fail500(w, r, fmt.Errorf("SendEntry: Archive or Entry is empty")) + return + } + + err := unpackFileFromZip(r.Context(), params.Archive, params.Entry, w.Header(), w) + + if os.IsNotExist(err) { + http.NotFound(w, r) + } else if err != nil { + helper.Fail500(w, r, fmt.Errorf("SendEntry: %v", err)) + } +} + +func detectFileContentType(fileName string) string { + contentType := mime.TypeByExtension(filepath.Ext(fileName)) + if contentType == "" { + contentType = "application/octet-stream" + } + return contentType +} + +func unpackFileFromZip(ctx context.Context, archivePath, encodedFilename string, headers http.Header, output io.Writer) error { + fileName, err := zipartifacts.DecodeFileEntry(encodedFilename) + if err != nil { + return err + } + + catFile := exec.Command("gitlab-zip-cat") + catFile.Env = append(os.Environ(), + "ARCHIVE_PATH="+archivePath, + "ENCODED_FILE_NAME="+encodedFilename, + ) + catFile.Stderr = log.ContextLogger(ctx).Writer() + catFile.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} + stdout, err := catFile.StdoutPipe() + if err != nil { + return fmt.Errorf("create gitlab-zip-cat stdout pipe: %v", err) + } + + if err := catFile.Start(); err != nil { + return fmt.Errorf("start %v: %v", catFile.Args, err) + } + defer helper.CleanUpProcessGroup(catFile) + + basename := filepath.Base(fileName) + reader := bufio.NewReader(stdout) + contentLength, err := reader.ReadString('\n') + if err != nil { + if catFileErr := waitCatFile(catFile); catFileErr != nil { + return catFileErr + } + return fmt.Errorf("read content-length: %v", err) + } + contentLength = strings.TrimSuffix(contentLength, "\n") + + // Write http headers about the file + headers.Set("Content-Length", contentLength) + headers.Set("Content-Type", detectFileContentType(fileName)) + headers.Set("Content-Disposition", "attachment; filename=\""+escapeQuotes(basename)+"\"") + // Copy file body to client + if _, err := io.Copy(output, reader); err != nil { + return fmt.Errorf("copy stdout of %v: %v", catFile.Args, err) + } + + return waitCatFile(catFile) +} + +func waitCatFile(cmd *exec.Cmd) error { + err := cmd.Wait() + if err == nil { + return nil + } + + st, ok := helper.ExitStatus(err) + + if ok && (st == zipartifacts.CodeArchiveNotFound || st == zipartifacts.CodeEntryNotFound) { + return os.ErrNotExist + } + return fmt.Errorf("wait for %v to finish: %v", cmd.Args, err) + +} diff --git a/workhorse/internal/artifacts/entry_test.go b/workhorse/internal/artifacts/entry_test.go new file mode 100644 index 00000000000..6f1e9d360aa --- /dev/null +++ b/workhorse/internal/artifacts/entry_test.go @@ -0,0 +1,134 @@ +package artifacts + +import ( + "archive/zip" + "encoding/base64" + "fmt" + "io/ioutil" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" +) + +func testEntryServer(t *testing.T, archive string, entry string) *httptest.ResponseRecorder { + mux := http.NewServeMux() + mux.HandleFunc("/url/path", func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "GET", r.Method) + + encodedEntry := base64.StdEncoding.EncodeToString([]byte(entry)) + jsonParams := fmt.Sprintf(`{"Archive":"%s","Entry":"%s"}`, archive, encodedEntry) + data := base64.URLEncoding.EncodeToString([]byte(jsonParams)) + + SendEntry.Inject(w, r, data) + }) + + httpRequest, err := http.NewRequest("GET", "/url/path", nil) + require.NoError(t, err) + response := httptest.NewRecorder() + mux.ServeHTTP(response, httpRequest) + return response +} + +func TestDownloadingFromValidArchive(t *testing.T) { + tempFile, err := ioutil.TempFile("", "uploads") + require.NoError(t, err) + defer tempFile.Close() + defer os.Remove(tempFile.Name()) + + archive := zip.NewWriter(tempFile) + defer archive.Close() + fileInArchive, err := archive.Create("test.txt") + require.NoError(t, err) + fmt.Fprint(fileInArchive, "testtest") + archive.Close() + + response := testEntryServer(t, tempFile.Name(), "test.txt") + + require.Equal(t, 200, response.Code) + + testhelper.RequireResponseHeader(t, response, + "Content-Type", + "text/plain; charset=utf-8") + testhelper.RequireResponseHeader(t, response, + "Content-Disposition", + "attachment; filename=\"test.txt\"") + + testhelper.RequireResponseBody(t, response, "testtest") +} + +func TestDownloadingFromValidHTTPArchive(t *testing.T) { + tempDir, err := ioutil.TempDir("", "uploads") + require.NoError(t, err) + defer os.RemoveAll(tempDir) + + f, err := os.Create(filepath.Join(tempDir, "archive.zip")) + require.NoError(t, err) + defer f.Close() + + archive := zip.NewWriter(f) + defer archive.Close() + fileInArchive, err := archive.Create("test.txt") + require.NoError(t, err) + fmt.Fprint(fileInArchive, "testtest") + archive.Close() + f.Close() + + fileServer := httptest.NewServer(http.FileServer(http.Dir(tempDir))) + defer fileServer.Close() + + response := testEntryServer(t, fileServer.URL+"/archive.zip", "test.txt") + + require.Equal(t, 200, response.Code) + + testhelper.RequireResponseHeader(t, response, + "Content-Type", + "text/plain; charset=utf-8") + testhelper.RequireResponseHeader(t, response, + "Content-Disposition", + "attachment; filename=\"test.txt\"") + + testhelper.RequireResponseBody(t, response, "testtest") +} + +func TestDownloadingNonExistingFile(t *testing.T) { + tempFile, err := ioutil.TempFile("", "uploads") + require.NoError(t, err) + defer tempFile.Close() + defer os.Remove(tempFile.Name()) + + archive := zip.NewWriter(tempFile) + defer archive.Close() + archive.Close() + + response := testEntryServer(t, tempFile.Name(), "test") + require.Equal(t, 404, response.Code) +} + +func TestDownloadingFromInvalidArchive(t *testing.T) { + response := testEntryServer(t, "path/to/non/existing/file", "test") + require.Equal(t, 404, response.Code) +} + +func TestIncompleteApiResponse(t *testing.T) { + response := testEntryServer(t, "", "") + require.Equal(t, 500, response.Code) +} + +func TestDownloadingFromNonExistingHTTPArchive(t *testing.T) { + tempDir, err := ioutil.TempDir("", "uploads") + require.NoError(t, err) + defer os.RemoveAll(tempDir) + + fileServer := httptest.NewServer(http.FileServer(http.Dir(tempDir))) + defer fileServer.Close() + + response := testEntryServer(t, fileServer.URL+"/not-existing-archive-file.zip", "test.txt") + + require.Equal(t, 404, response.Code) +} diff --git a/workhorse/internal/artifacts/escape_quotes.go b/workhorse/internal/artifacts/escape_quotes.go new file mode 100644 index 00000000000..94db2be39b7 --- /dev/null +++ b/workhorse/internal/artifacts/escape_quotes.go @@ -0,0 +1,10 @@ +package artifacts + +import "strings" + +// taken from mime/multipart/writer.go +var quoteEscaper = strings.NewReplacer("\\", "\\\\", `"`, "\\\"") + +func escapeQuotes(s string) string { + return quoteEscaper.Replace(s) +} diff --git a/workhorse/internal/badgateway/roundtripper.go b/workhorse/internal/badgateway/roundtripper.go new file mode 100644 index 00000000000..a36cc9f4a9a --- /dev/null +++ b/workhorse/internal/badgateway/roundtripper.go @@ -0,0 +1,115 @@ +package badgateway + +import ( + "bytes" + "fmt" + "html/template" + "io/ioutil" + "net/http" + "strings" + "time" + + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +// Error is a custom error for pretty Sentry 'issues' +type sentryError struct{ error } + +type roundTripper struct { + next http.RoundTripper + developmentMode bool +} + +// NewRoundTripper creates a RoundTripper with a provided underlying next transport +func NewRoundTripper(developmentMode bool, next http.RoundTripper) http.RoundTripper { + return &roundTripper{next: next, developmentMode: developmentMode} +} + +func (t *roundTripper) RoundTrip(r *http.Request) (*http.Response, error) { + start := time.Now() + + res, err := t.next.RoundTrip(r) + if err == nil { + return res, err + } + + // httputil.ReverseProxy translates all errors from this + // RoundTrip function into 500 errors. But the most likely error + // is that the Rails app is not responding, in which case users + // and administrators expect to see a 502 error. To show 502s + // instead of 500s we catch the RoundTrip error here and inject a + // 502 response. + fields := log.Fields{"duration_ms": int64(time.Since(start).Seconds() * 1000)} + helper.LogErrorWithFields( + r, + &sentryError{fmt.Errorf("badgateway: failed to receive response: %v", err)}, + fields, + ) + + injectedResponse := &http.Response{ + StatusCode: http.StatusBadGateway, + Status: http.StatusText(http.StatusBadGateway), + + Request: r, + ProtoMajor: r.ProtoMajor, + ProtoMinor: r.ProtoMinor, + Proto: r.Proto, + Header: make(http.Header), + Trailer: make(http.Header), + } + + message := "GitLab is not responding" + contentType := "text/plain" + if t.developmentMode { + message, contentType = developmentModeResponse(err) + } + + injectedResponse.Body = ioutil.NopCloser(strings.NewReader(message)) + injectedResponse.Header.Set("Content-Type", contentType) + + return injectedResponse, nil +} + +func developmentModeResponse(err error) (body string, contentType string) { + data := TemplateData{ + Time: time.Now().Format("15:04:05"), + Error: err.Error(), + ReloadSeconds: 5, + } + + buf := &bytes.Buffer{} + if err := developmentErrorTemplate.Execute(buf, data); err != nil { + return data.Error, "text/plain" + } + + return buf.String(), "text/html" +} + +type TemplateData struct { + Time string + Error string + ReloadSeconds int +} + +var developmentErrorTemplate = template.Must(template.New("error502").Parse(` + + +502: GitLab is not responding + + + + +

502

+

GitLab is not responding. The error was:

+ +
{{.Error}}
+ +

If you just started GDK it can take 60-300 seconds before GitLab has finished booting. This page will automatically reload every {{.ReloadSeconds}} seconds.

+
Generated by gitlab-workhorse running in development mode at {{.Time}}.
+ + +`)) diff --git a/workhorse/internal/badgateway/roundtripper_test.go b/workhorse/internal/badgateway/roundtripper_test.go new file mode 100644 index 00000000000..fc7132f9bd7 --- /dev/null +++ b/workhorse/internal/badgateway/roundtripper_test.go @@ -0,0 +1,56 @@ +package badgateway + +import ( + "errors" + "io/ioutil" + "net/http" + "testing" + + "github.com/stretchr/testify/require" +) + +type roundtrip502 struct{} + +func (roundtrip502) RoundTrip(*http.Request) (*http.Response, error) { + return nil, errors.New("something went wrong") +} + +func TestErrorPage502(t *testing.T) { + tests := []struct { + name string + devMode bool + contentType string + responseSnippet string + }{ + { + name: "production mode", + contentType: "text/plain", + responseSnippet: "GitLab is not responding", + }, + { + name: "development mode", + devMode: true, + contentType: "text/html", + responseSnippet: "This page will automatically reload", + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + req, err := http.NewRequest("GET", "/", nil) + require.NoError(t, err, "build request") + + rt := NewRoundTripper(tc.devMode, roundtrip502{}) + response, err := rt.RoundTrip(req) + require.NoError(t, err, "perform roundtrip") + defer response.Body.Close() + + body, err := ioutil.ReadAll(response.Body) + require.NoError(t, err) + + require.Equal(t, tc.contentType, response.Header.Get("content-type"), "content type") + require.Equal(t, 502, response.StatusCode, "response status") + require.Contains(t, string(body), tc.responseSnippet) + }) + } +} diff --git a/workhorse/internal/builds/register.go b/workhorse/internal/builds/register.go new file mode 100644 index 00000000000..4a9d9096c5c --- /dev/null +++ b/workhorse/internal/builds/register.go @@ -0,0 +1,169 @@ +package builds + +import ( + "encoding/json" + "errors" + "net/http" + "time" + + "github.com/prometheus/client_golang/prometheus" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/redis" +) + +const ( + maxRegisterBodySize = 32 * 1024 + runnerBuildQueue = "runner:build_queue:" + runnerBuildQueueHeaderKey = "Gitlab-Ci-Builds-Polling" + runnerBuildQueueHeaderValue = "yes" +) + +var ( + registerHandlerRequests = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_builds_register_handler_requests", + Help: "Describes how many requests in different states hit a register handler", + }, + []string{"status"}, + ) + registerHandlerOpen = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "gitlab_workhorse_builds_register_handler_open", + Help: "Describes how many requests is currently open in given state", + }, + []string{"state"}, + ) + + registerHandlerOpenAtReading = registerHandlerOpen.WithLabelValues("reading") + registerHandlerOpenAtProxying = registerHandlerOpen.WithLabelValues("proxying") + registerHandlerOpenAtWatching = registerHandlerOpen.WithLabelValues("watching") + + registerHandlerBodyReadErrors = registerHandlerRequests.WithLabelValues("body-read-error") + registerHandlerBodyParseErrors = registerHandlerRequests.WithLabelValues("body-parse-error") + registerHandlerMissingValues = registerHandlerRequests.WithLabelValues("missing-values") + registerHandlerWatchErrors = registerHandlerRequests.WithLabelValues("watch-error") + registerHandlerAlreadyChangedRequests = registerHandlerRequests.WithLabelValues("already-changed") + registerHandlerSeenChangeRequests = registerHandlerRequests.WithLabelValues("seen-change") + registerHandlerTimeoutRequests = registerHandlerRequests.WithLabelValues("timeout") + registerHandlerNoChangeRequests = registerHandlerRequests.WithLabelValues("no-change") +) + +type largeBodyError struct{ error } + +type WatchKeyHandler func(key, value string, timeout time.Duration) (redis.WatchKeyStatus, error) + +func init() { + prometheus.MustRegister( + registerHandlerRequests, + registerHandlerOpen, + ) +} + +type runnerRequest struct { + Token string `json:"token,omitempty"` + LastUpdate string `json:"last_update,omitempty"` +} + +func readRunnerBody(w http.ResponseWriter, r *http.Request) ([]byte, error) { + registerHandlerOpenAtReading.Inc() + defer registerHandlerOpenAtReading.Dec() + + return helper.ReadRequestBody(w, r, maxRegisterBodySize) +} + +func readRunnerRequest(r *http.Request, body []byte) (*runnerRequest, error) { + if !helper.IsApplicationJson(r) { + return nil, errors.New("invalid content-type received") + } + + var runnerRequest runnerRequest + err := json.Unmarshal(body, &runnerRequest) + if err != nil { + return nil, err + } + + return &runnerRequest, nil +} + +func proxyRegisterRequest(h http.Handler, w http.ResponseWriter, r *http.Request) { + registerHandlerOpenAtProxying.Inc() + defer registerHandlerOpenAtProxying.Dec() + + h.ServeHTTP(w, r) +} + +func watchForRunnerChange(watchHandler WatchKeyHandler, token, lastUpdate string, duration time.Duration) (redis.WatchKeyStatus, error) { + registerHandlerOpenAtWatching.Inc() + defer registerHandlerOpenAtWatching.Dec() + + return watchHandler(runnerBuildQueue+token, lastUpdate, duration) +} + +func RegisterHandler(h http.Handler, watchHandler WatchKeyHandler, pollingDuration time.Duration) http.Handler { + if pollingDuration == 0 { + return h + } + + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set(runnerBuildQueueHeaderKey, runnerBuildQueueHeaderValue) + + requestBody, err := readRunnerBody(w, r) + if err != nil { + registerHandlerBodyReadErrors.Inc() + helper.RequestEntityTooLarge(w, r, &largeBodyError{err}) + return + } + + newRequest := helper.CloneRequestWithNewBody(r, requestBody) + + runnerRequest, err := readRunnerRequest(r, requestBody) + if err != nil { + registerHandlerBodyParseErrors.Inc() + proxyRegisterRequest(h, w, newRequest) + return + } + + if runnerRequest.Token == "" || runnerRequest.LastUpdate == "" { + registerHandlerMissingValues.Inc() + proxyRegisterRequest(h, w, newRequest) + return + } + + result, err := watchForRunnerChange(watchHandler, runnerRequest.Token, + runnerRequest.LastUpdate, pollingDuration) + if err != nil { + registerHandlerWatchErrors.Inc() + proxyRegisterRequest(h, w, newRequest) + return + } + + switch result { + // It means that we detected a change before starting watching on change, + // We proxy request to Rails, to see whether we have a build to receive + case redis.WatchKeyStatusAlreadyChanged: + registerHandlerAlreadyChangedRequests.Inc() + proxyRegisterRequest(h, w, newRequest) + + // It means that we detected a change after watching. + // We could potentially proxy request to Rails, but... + // We can end-up with unreliable responses, + // as don't really know whether ResponseWriter is still in a sane state, + // for example the connection is dead + case redis.WatchKeyStatusSeenChange: + registerHandlerSeenChangeRequests.Inc() + w.WriteHeader(http.StatusNoContent) + + // When we receive one of these statuses, it means that we detected no change, + // so we return to runner 204, which means nothing got changed, + // and there's no new builds to process + case redis.WatchKeyStatusTimeout: + registerHandlerTimeoutRequests.Inc() + w.WriteHeader(http.StatusNoContent) + + case redis.WatchKeyStatusNoChange: + registerHandlerNoChangeRequests.Inc() + w.WriteHeader(http.StatusNoContent) + } + }) +} diff --git a/workhorse/internal/builds/register_test.go b/workhorse/internal/builds/register_test.go new file mode 100644 index 00000000000..a72d82dc2b7 --- /dev/null +++ b/workhorse/internal/builds/register_test.go @@ -0,0 +1,108 @@ +package builds + +import ( + "bytes" + "errors" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/redis" +) + +const upstreamResponseCode = 999 + +func echoRequest(rw http.ResponseWriter, req *http.Request) { + rw.WriteHeader(upstreamResponseCode) + io.Copy(rw, req.Body) +} + +var echoRequestFunc = http.HandlerFunc(echoRequest) + +func expectHandlerWithWatcher(t *testing.T, watchHandler WatchKeyHandler, data string, contentType string, expectedHttpStatus int, msgAndArgs ...interface{}) { + h := RegisterHandler(echoRequestFunc, watchHandler, time.Second) + + rw := httptest.NewRecorder() + req, _ := http.NewRequest("POST", "/", bytes.NewBufferString(data)) + req.Header.Set("Content-Type", contentType) + + h.ServeHTTP(rw, req) + + require.Equal(t, expectedHttpStatus, rw.Code, msgAndArgs...) +} + +func expectHandler(t *testing.T, data string, contentType string, expectedHttpStatus int, msgAndArgs ...interface{}) { + expectHandlerWithWatcher(t, nil, data, contentType, expectedHttpStatus, msgAndArgs...) +} + +func TestRegisterHandlerLargeBody(t *testing.T) { + data := strings.Repeat(".", maxRegisterBodySize+5) + expectHandler(t, data, "application/json", http.StatusRequestEntityTooLarge, + "rejects body with entity too large") +} + +func TestRegisterHandlerInvalidRunnerRequest(t *testing.T) { + expectHandler(t, "invalid content", "text/plain", upstreamResponseCode, + "proxies request to upstream") +} + +func TestRegisterHandlerInvalidJsonPayload(t *testing.T) { + expectHandler(t, `{[`, "application/json", upstreamResponseCode, + "fails on parsing body and proxies request to upstream") +} + +func TestRegisterHandlerMissingData(t *testing.T) { + testCases := []string{ + `{"token":"token"}`, + `{"last_update":"data"}`, + } + + for _, testCase := range testCases { + expectHandler(t, testCase, "application/json", upstreamResponseCode, + "fails on argument validation and proxies request to upstream") + } +} + +func expectWatcherToBeExecuted(t *testing.T, watchKeyStatus redis.WatchKeyStatus, watchKeyError error, + httpStatus int, msgAndArgs ...interface{}) { + executed := false + watchKeyHandler := func(key, value string, timeout time.Duration) (redis.WatchKeyStatus, error) { + executed = true + return watchKeyStatus, watchKeyError + } + + parsableData := `{"token":"token","last_update":"last_update"}` + + expectHandlerWithWatcher(t, watchKeyHandler, parsableData, "application/json", httpStatus, msgAndArgs...) + require.True(t, executed, msgAndArgs...) +} + +func TestRegisterHandlerWatcherError(t *testing.T) { + expectWatcherToBeExecuted(t, redis.WatchKeyStatusNoChange, errors.New("redis connection"), + upstreamResponseCode, "proxies data to upstream") +} + +func TestRegisterHandlerWatcherAlreadyChanged(t *testing.T) { + expectWatcherToBeExecuted(t, redis.WatchKeyStatusAlreadyChanged, nil, + upstreamResponseCode, "proxies data to upstream") +} + +func TestRegisterHandlerWatcherSeenChange(t *testing.T) { + expectWatcherToBeExecuted(t, redis.WatchKeyStatusSeenChange, nil, + http.StatusNoContent) +} + +func TestRegisterHandlerWatcherTimeout(t *testing.T) { + expectWatcherToBeExecuted(t, redis.WatchKeyStatusTimeout, nil, + http.StatusNoContent) +} + +func TestRegisterHandlerWatcherNoChange(t *testing.T) { + expectWatcherToBeExecuted(t, redis.WatchKeyStatusNoChange, nil, + http.StatusNoContent) +} diff --git a/workhorse/internal/channel/auth_checker.go b/workhorse/internal/channel/auth_checker.go new file mode 100644 index 00000000000..f44850e0861 --- /dev/null +++ b/workhorse/internal/channel/auth_checker.go @@ -0,0 +1,69 @@ +package channel + +import ( + "errors" + "net/http" + "time" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" +) + +type AuthCheckerFunc func() *api.ChannelSettings + +// Regularly checks that authorization is still valid for a channel, outputting +// to the stopper when it isn't +type AuthChecker struct { + Checker AuthCheckerFunc + Template *api.ChannelSettings + StopCh chan error + Done chan struct{} + Count int64 +} + +var ErrAuthChanged = errors.New("connection closed: authentication changed or endpoint unavailable") + +func NewAuthChecker(f AuthCheckerFunc, template *api.ChannelSettings, stopCh chan error) *AuthChecker { + return &AuthChecker{ + Checker: f, + Template: template, + StopCh: stopCh, + Done: make(chan struct{}), + } +} +func (c *AuthChecker) Loop(interval time.Duration) { + for { + select { + case <-time.After(interval): + settings := c.Checker() + if !c.Template.IsEqual(settings) { + c.StopCh <- ErrAuthChanged + return + } + c.Count = c.Count + 1 + case <-c.Done: + return + } + } +} + +func (c *AuthChecker) Close() error { + close(c.Done) + return nil +} + +// Generates a CheckerFunc from an *api.API + request needing authorization +func authCheckFunc(myAPI *api.API, r *http.Request, suffix string) AuthCheckerFunc { + return func() *api.ChannelSettings { + httpResponse, authResponse, err := myAPI.PreAuthorize(suffix, r) + if err != nil { + return nil + } + defer httpResponse.Body.Close() + + if httpResponse.StatusCode != http.StatusOK || authResponse == nil { + return nil + } + + return authResponse.Channel + } +} diff --git a/workhorse/internal/channel/auth_checker_test.go b/workhorse/internal/channel/auth_checker_test.go new file mode 100644 index 00000000000..18beb45cf3a --- /dev/null +++ b/workhorse/internal/channel/auth_checker_test.go @@ -0,0 +1,53 @@ +package channel + +import ( + "testing" + "time" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" +) + +func checkerSeries(values ...*api.ChannelSettings) AuthCheckerFunc { + return func() *api.ChannelSettings { + if len(values) == 0 { + return nil + } + out := values[0] + values = values[1:] + return out + } +} + +func TestAuthCheckerStopsWhenAuthFails(t *testing.T) { + template := &api.ChannelSettings{Url: "ws://example.com"} + stopCh := make(chan error) + series := checkerSeries(template, template, template) + ac := NewAuthChecker(series, template, stopCh) + + go ac.Loop(1 * time.Millisecond) + if err := <-stopCh; err != ErrAuthChanged { + t.Fatalf("Expected ErrAuthChanged, got %v", err) + } + + if ac.Count != 3 { + t.Fatalf("Expected 3 successful checks, got %v", ac.Count) + } +} + +func TestAuthCheckerStopsWhenAuthChanges(t *testing.T) { + template := &api.ChannelSettings{Url: "ws://example.com"} + changed := template.Clone() + changed.Url = "wss://example.com" + stopCh := make(chan error) + series := checkerSeries(template, changed, template) + ac := NewAuthChecker(series, template, stopCh) + + go ac.Loop(1 * time.Millisecond) + if err := <-stopCh; err != ErrAuthChanged { + t.Fatalf("Expected ErrAuthChanged, got %v", err) + } + + if ac.Count != 1 { + t.Fatalf("Expected 1 successful check, got %v", ac.Count) + } +} diff --git a/workhorse/internal/channel/channel.go b/workhorse/internal/channel/channel.go new file mode 100644 index 00000000000..381ce95df82 --- /dev/null +++ b/workhorse/internal/channel/channel.go @@ -0,0 +1,132 @@ +package channel + +import ( + "fmt" + "net/http" + "time" + + "github.com/gorilla/websocket" + + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +var ( + // See doc/channel.md for documentation of this subprotocol + subprotocols = []string{"terminal.gitlab.com", "base64.terminal.gitlab.com"} + upgrader = &websocket.Upgrader{Subprotocols: subprotocols} + ReauthenticationInterval = 5 * time.Minute + BrowserPingInterval = 30 * time.Second +) + +func Handler(myAPI *api.API) http.Handler { + return myAPI.PreAuthorizeHandler(func(w http.ResponseWriter, r *http.Request, a *api.Response) { + if err := a.Channel.Validate(); err != nil { + helper.Fail500(w, r, err) + return + } + + proxy := NewProxy(2) // two stoppers: auth checker, max time + checker := NewAuthChecker( + authCheckFunc(myAPI, r, "authorize"), + a.Channel, + proxy.StopCh, + ) + defer checker.Close() + go checker.Loop(ReauthenticationInterval) + go closeAfterMaxTime(proxy, a.Channel.MaxSessionTime) + + ProxyChannel(w, r, a.Channel, proxy) + }, "authorize") +} + +func ProxyChannel(w http.ResponseWriter, r *http.Request, settings *api.ChannelSettings, proxy *Proxy) { + server, err := connectToServer(settings, r) + if err != nil { + helper.Fail500(w, r, err) + log.ContextLogger(r.Context()).WithError(err).Print("Channel: connecting to server failed") + return + } + defer server.UnderlyingConn().Close() + serverAddr := server.UnderlyingConn().RemoteAddr().String() + + client, err := upgradeClient(w, r) + if err != nil { + log.ContextLogger(r.Context()).WithError(err).Print("Channel: upgrading client to websocket failed") + return + } + + // Regularly send ping messages to the browser to keep the websocket from + // being timed out by intervening proxies. + go pingLoop(client) + + defer client.UnderlyingConn().Close() + clientAddr := getClientAddr(r) // We can't know the port with confidence + + logEntry := log.WithContextFields(r.Context(), log.Fields{ + "clientAddr": clientAddr, + "serverAddr": serverAddr, + }) + + logEntry.Print("Channel: started proxying") + + defer logEntry.Print("Channel: finished proxying") + + if err := proxy.Serve(server, client, serverAddr, clientAddr); err != nil { + logEntry.WithError(err).Print("Channel: error proxying") + } +} + +// In the future, we might want to look at X-Client-Ip or X-Forwarded-For +func getClientAddr(r *http.Request) string { + return r.RemoteAddr +} + +func upgradeClient(w http.ResponseWriter, r *http.Request) (Connection, error) { + conn, err := upgrader.Upgrade(w, r, nil) + if err != nil { + return nil, err + } + + return Wrap(conn, conn.Subprotocol()), nil +} + +func pingLoop(conn Connection) { + for { + time.Sleep(BrowserPingInterval) + deadline := time.Now().Add(5 * time.Second) + if err := conn.WriteControl(websocket.PingMessage, nil, deadline); err != nil { + // Either the connection was already closed so no further pings are + // needed, or this connection is now dead and no further pings can + // be sent. + break + } + } +} + +func connectToServer(settings *api.ChannelSettings, r *http.Request) (Connection, error) { + settings = settings.Clone() + + helper.SetForwardedFor(&settings.Header, r) + + conn, _, err := settings.Dial() + if err != nil { + return nil, err + } + + return Wrap(conn, conn.Subprotocol()), nil +} + +func closeAfterMaxTime(proxy *Proxy, maxSessionTime int) { + if maxSessionTime == 0 { + return + } + + <-time.After(time.Duration(maxSessionTime) * time.Second) + proxy.StopCh <- fmt.Errorf( + "connection closed: session time greater than maximum time allowed - %v seconds", + maxSessionTime, + ) +} diff --git a/workhorse/internal/channel/proxy.go b/workhorse/internal/channel/proxy.go new file mode 100644 index 00000000000..71f58092276 --- /dev/null +++ b/workhorse/internal/channel/proxy.go @@ -0,0 +1,56 @@ +package channel + +import ( + "fmt" + "net" + "time" + + "github.com/gorilla/websocket" +) + +// ANSI "end of channel" code +var eot = []byte{0x04} + +// An abstraction of gorilla's *websocket.Conn +type Connection interface { + UnderlyingConn() net.Conn + ReadMessage() (int, []byte, error) + WriteMessage(int, []byte) error + WriteControl(int, []byte, time.Time) error +} + +type Proxy struct { + StopCh chan error +} + +// stoppers is the number of goroutines that may attempt to call Stop() +func NewProxy(stoppers int) *Proxy { + return &Proxy{ + StopCh: make(chan error, stoppers+2), // each proxy() call is a stopper + } +} + +func (p *Proxy) Serve(upstream, downstream Connection, upstreamAddr, downstreamAddr string) error { + // This signals the upstream channel to kill the exec'd process + defer upstream.WriteMessage(websocket.BinaryMessage, eot) + + go p.proxy(upstream, downstream, upstreamAddr, downstreamAddr) + go p.proxy(downstream, upstream, downstreamAddr, upstreamAddr) + + return <-p.StopCh +} + +func (p *Proxy) proxy(to, from Connection, toAddr, fromAddr string) { + for { + messageType, data, err := from.ReadMessage() + if err != nil { + p.StopCh <- fmt.Errorf("reading from %s: %s", fromAddr, err) + break + } + + if err := to.WriteMessage(messageType, data); err != nil { + p.StopCh <- fmt.Errorf("writing to %s: %s", toAddr, err) + break + } + } +} diff --git a/workhorse/internal/channel/wrappers.go b/workhorse/internal/channel/wrappers.go new file mode 100644 index 00000000000..6fd955bedc7 --- /dev/null +++ b/workhorse/internal/channel/wrappers.go @@ -0,0 +1,134 @@ +package channel + +import ( + "encoding/base64" + "net" + "time" + + "github.com/gorilla/websocket" +) + +func Wrap(conn Connection, subprotocol string) Connection { + switch subprotocol { + case "channel.k8s.io": + return &kubeWrapper{base64: false, conn: conn} + case "base64.channel.k8s.io": + return &kubeWrapper{base64: true, conn: conn} + case "terminal.gitlab.com": + return &gitlabWrapper{base64: false, conn: conn} + case "base64.terminal.gitlab.com": + return &gitlabWrapper{base64: true, conn: conn} + } + + return conn +} + +type kubeWrapper struct { + base64 bool + conn Connection +} + +type gitlabWrapper struct { + base64 bool + conn Connection +} + +func (w *gitlabWrapper) ReadMessage() (int, []byte, error) { + mt, data, err := w.conn.ReadMessage() + if err != nil { + return mt, data, err + } + + if isData(mt) { + mt = websocket.BinaryMessage + if w.base64 { + data, err = decodeBase64(data) + } + } + + return mt, data, err +} + +func (w *gitlabWrapper) WriteMessage(mt int, data []byte) error { + if isData(mt) { + if w.base64 { + mt = websocket.TextMessage + data = encodeBase64(data) + } else { + mt = websocket.BinaryMessage + } + } + + return w.conn.WriteMessage(mt, data) +} + +func (w *gitlabWrapper) WriteControl(mt int, data []byte, deadline time.Time) error { + return w.conn.WriteControl(mt, data, deadline) +} + +func (w *gitlabWrapper) UnderlyingConn() net.Conn { + return w.conn.UnderlyingConn() +} + +// Coalesces all wsstreams into a single stream. In practice, we should only +// receive data on stream 1. +func (w *kubeWrapper) ReadMessage() (int, []byte, error) { + mt, data, err := w.conn.ReadMessage() + if err != nil { + return mt, data, err + } + + if isData(mt) { + mt = websocket.BinaryMessage + + // Remove the WSStream channel number, decode to raw + if len(data) > 0 { + data = data[1:] + if w.base64 { + data, err = decodeBase64(data) + } + } + } + + return mt, data, err +} + +// Always sends to wsstream 0 +func (w *kubeWrapper) WriteMessage(mt int, data []byte) error { + if isData(mt) { + if w.base64 { + mt = websocket.TextMessage + data = append([]byte{'0'}, encodeBase64(data)...) + } else { + mt = websocket.BinaryMessage + data = append([]byte{0}, data...) + } + } + + return w.conn.WriteMessage(mt, data) +} + +func (w *kubeWrapper) WriteControl(mt int, data []byte, deadline time.Time) error { + return w.conn.WriteControl(mt, data, deadline) +} + +func (w *kubeWrapper) UnderlyingConn() net.Conn { + return w.conn.UnderlyingConn() +} + +func isData(mt int) bool { + return mt == websocket.BinaryMessage || mt == websocket.TextMessage +} + +func encodeBase64(data []byte) []byte { + buf := make([]byte, base64.StdEncoding.EncodedLen(len(data))) + base64.StdEncoding.Encode(buf, data) + + return buf +} + +func decodeBase64(data []byte) ([]byte, error) { + buf := make([]byte, base64.StdEncoding.DecodedLen(len(data))) + n, err := base64.StdEncoding.Decode(buf, data) + return buf[:n], err +} diff --git a/workhorse/internal/channel/wrappers_test.go b/workhorse/internal/channel/wrappers_test.go new file mode 100644 index 00000000000..1e0226f85d8 --- /dev/null +++ b/workhorse/internal/channel/wrappers_test.go @@ -0,0 +1,155 @@ +package channel + +import ( + "bytes" + "errors" + "net" + "testing" + "time" + + "github.com/gorilla/websocket" +) + +type testcase struct { + input *fakeConn + expected *fakeConn +} + +type fakeConn struct { + // WebSocket message type + mt int + data []byte + err error +} + +func (f *fakeConn) ReadMessage() (int, []byte, error) { + return f.mt, f.data, f.err +} + +func (f *fakeConn) WriteMessage(mt int, data []byte) error { + f.mt = mt + f.data = data + return f.err +} + +func (f *fakeConn) WriteControl(mt int, data []byte, _ time.Time) error { + f.mt = mt + f.data = data + return f.err +} + +func (f *fakeConn) UnderlyingConn() net.Conn { + return nil +} + +func fake(mt int, data []byte, err error) *fakeConn { + return &fakeConn{mt: mt, data: []byte(data), err: err} +} + +var ( + msg = []byte("foo bar") + msgBase64 = []byte("Zm9vIGJhcg==") + kubeMsg = append([]byte{0}, msg...) + kubeMsgBase64 = append([]byte{'0'}, msgBase64...) + + errFake = errors.New("fake error") + + text = websocket.TextMessage + binary = websocket.BinaryMessage + other = 999 + + fakeOther = fake(other, []byte("foo"), nil) +) + +func requireEqualConn(t *testing.T, expected, actual *fakeConn, msg string, args ...interface{}) { + if expected.mt != actual.mt { + t.Logf("messageType expected to be %v but was %v", expected.mt, actual.mt) + t.Fatalf(msg, args...) + } + + if !bytes.Equal(expected.data, actual.data) { + t.Logf("data expected to be %q but was %q: ", expected.data, actual.data) + t.Fatalf(msg, args...) + } + + if expected.err != actual.err { + t.Logf("error expected to be %v but was %v", expected.err, actual.err) + t.Fatalf(msg, args...) + } +} + +func TestReadMessage(t *testing.T) { + testCases := map[string][]testcase{ + "channel.k8s.io": { + {fake(binary, kubeMsg, errFake), fake(binary, kubeMsg, errFake)}, + {fake(binary, kubeMsg, nil), fake(binary, msg, nil)}, + {fake(text, kubeMsg, nil), fake(binary, msg, nil)}, + {fakeOther, fakeOther}, + }, + "base64.channel.k8s.io": { + {fake(text, kubeMsgBase64, errFake), fake(text, kubeMsgBase64, errFake)}, + {fake(text, kubeMsgBase64, nil), fake(binary, msg, nil)}, + {fake(binary, kubeMsgBase64, nil), fake(binary, msg, nil)}, + {fakeOther, fakeOther}, + }, + "terminal.gitlab.com": { + {fake(binary, msg, errFake), fake(binary, msg, errFake)}, + {fake(binary, msg, nil), fake(binary, msg, nil)}, + {fake(text, msg, nil), fake(binary, msg, nil)}, + {fakeOther, fakeOther}, + }, + "base64.terminal.gitlab.com": { + {fake(text, msgBase64, errFake), fake(text, msgBase64, errFake)}, + {fake(text, msgBase64, nil), fake(binary, msg, nil)}, + {fake(binary, msgBase64, nil), fake(binary, msg, nil)}, + {fakeOther, fakeOther}, + }, + } + + for subprotocol, cases := range testCases { + for i, tc := range cases { + conn := Wrap(tc.input, subprotocol) + mt, data, err := conn.ReadMessage() + actual := fake(mt, data, err) + requireEqualConn(t, tc.expected, actual, "%s test case %v", subprotocol, i) + } + } +} + +func TestWriteMessage(t *testing.T) { + testCases := map[string][]testcase{ + "channel.k8s.io": { + {fake(binary, msg, errFake), fake(binary, kubeMsg, errFake)}, + {fake(binary, msg, nil), fake(binary, kubeMsg, nil)}, + {fake(text, msg, nil), fake(binary, kubeMsg, nil)}, + {fakeOther, fakeOther}, + }, + "base64.channel.k8s.io": { + {fake(binary, msg, errFake), fake(text, kubeMsgBase64, errFake)}, + {fake(binary, msg, nil), fake(text, kubeMsgBase64, nil)}, + {fake(text, msg, nil), fake(text, kubeMsgBase64, nil)}, + {fakeOther, fakeOther}, + }, + "terminal.gitlab.com": { + {fake(binary, msg, errFake), fake(binary, msg, errFake)}, + {fake(binary, msg, nil), fake(binary, msg, nil)}, + {fake(text, msg, nil), fake(binary, msg, nil)}, + {fakeOther, fakeOther}, + }, + "base64.terminal.gitlab.com": { + {fake(binary, msg, errFake), fake(text, msgBase64, errFake)}, + {fake(binary, msg, nil), fake(text, msgBase64, nil)}, + {fake(text, msg, nil), fake(text, msgBase64, nil)}, + {fakeOther, fakeOther}, + }, + } + + for subprotocol, cases := range testCases { + for i, tc := range cases { + actual := fake(0, nil, tc.input.err) + conn := Wrap(actual, subprotocol) + actual.err = conn.WriteMessage(tc.input.mt, tc.input.data) + requireEqualConn(t, tc.expected, actual, "%s test case %v", subprotocol, i) + } + } +} diff --git a/workhorse/internal/config/config.go b/workhorse/internal/config/config.go new file mode 100644 index 00000000000..34e5e0cec18 --- /dev/null +++ b/workhorse/internal/config/config.go @@ -0,0 +1,153 @@ +package config + +import ( + "math" + "net/url" + "runtime" + "strings" + "time" + + "github.com/Azure/azure-storage-blob-go/azblob" + "github.com/BurntSushi/toml" + "gitlab.com/gitlab-org/labkit/log" + "gocloud.dev/blob" + "gocloud.dev/blob/azureblob" +) + +type TomlURL struct { + url.URL +} + +func (u *TomlURL) UnmarshalText(text []byte) error { + temp, err := url.Parse(string(text)) + u.URL = *temp + return err +} + +type TomlDuration struct { + time.Duration +} + +func (d *TomlDuration) UnmarshalTest(text []byte) error { + temp, err := time.ParseDuration(string(text)) + d.Duration = temp + return err +} + +type ObjectStorageCredentials struct { + Provider string + + S3Credentials S3Credentials `toml:"s3"` + AzureCredentials AzureCredentials `toml:"azurerm"` +} + +type ObjectStorageConfig struct { + URLMux *blob.URLMux `toml:"-"` +} + +type S3Credentials struct { + AwsAccessKeyID string `toml:"aws_access_key_id"` + AwsSecretAccessKey string `toml:"aws_secret_access_key"` +} + +type S3Config struct { + Region string `toml:"-"` + Bucket string `toml:"-"` + PathStyle bool `toml:"-"` + Endpoint string `toml:"-"` + UseIamProfile bool `toml:"-"` + ServerSideEncryption string `toml:"-"` // Server-side encryption mode (e.g. AES256, aws:kms) + SSEKMSKeyID string `toml:"-"` // Server-side encryption key-management service key ID (e.g. arn:aws:xxx) +} + +type GoCloudConfig struct { + URL string `toml:"-"` +} + +type AzureCredentials struct { + AccountName string `toml:"azure_storage_account_name"` + AccountKey string `toml:"azure_storage_access_key"` +} + +type RedisConfig struct { + URL TomlURL + Sentinel []TomlURL + SentinelMaster string + Password string + DB *int + ReadTimeout *TomlDuration + WriteTimeout *TomlDuration + KeepAlivePeriod *TomlDuration + MaxIdle *int + MaxActive *int +} + +type ImageResizerConfig struct { + MaxScalerProcs uint32 `toml:"max_scaler_procs"` + MaxFilesize uint64 `toml:"max_filesize"` +} + +type Config struct { + Redis *RedisConfig `toml:"redis"` + Backend *url.URL `toml:"-"` + CableBackend *url.URL `toml:"-"` + Version string `toml:"-"` + DocumentRoot string `toml:"-"` + DevelopmentMode bool `toml:"-"` + Socket string `toml:"-"` + CableSocket string `toml:"-"` + ProxyHeadersTimeout time.Duration `toml:"-"` + APILimit uint `toml:"-"` + APIQueueLimit uint `toml:"-"` + APIQueueTimeout time.Duration `toml:"-"` + APICILongPollingDuration time.Duration `toml:"-"` + ObjectStorageConfig ObjectStorageConfig `toml:"-"` + ObjectStorageCredentials ObjectStorageCredentials `toml:"object_storage"` + PropagateCorrelationID bool `toml:"-"` + ImageResizerConfig ImageResizerConfig `toml:"image_resizer"` +} + +var DefaultImageResizerConfig = ImageResizerConfig{ + MaxScalerProcs: uint32(math.Max(2, float64(runtime.NumCPU())/2)), + MaxFilesize: 250 * 1000, // 250kB, +} + +func LoadConfig(data string) (*Config, error) { + cfg := &Config{ImageResizerConfig: DefaultImageResizerConfig} + + if _, err := toml.Decode(data, cfg); err != nil { + return nil, err + } + + return cfg, nil +} + +func (c *Config) RegisterGoCloudURLOpeners() error { + c.ObjectStorageConfig.URLMux = new(blob.URLMux) + + creds := c.ObjectStorageCredentials + if strings.EqualFold(creds.Provider, "AzureRM") && creds.AzureCredentials.AccountName != "" && creds.AzureCredentials.AccountKey != "" { + accountName := azureblob.AccountName(creds.AzureCredentials.AccountName) + accountKey := azureblob.AccountKey(creds.AzureCredentials.AccountKey) + + credential, err := azureblob.NewCredential(accountName, accountKey) + if err != nil { + log.WithError(err).Error("error creating Azure credentials") + return err + } + + pipeline := azureblob.NewPipeline(credential, azblob.PipelineOptions{}) + + azureURLOpener := &azureURLOpener{ + &azureblob.URLOpener{ + AccountName: accountName, + Pipeline: pipeline, + Options: azureblob.Options{Credential: credential}, + }, + } + + c.ObjectStorageConfig.URLMux.RegisterBucket(azureblob.Scheme, azureURLOpener) + } + + return nil +} diff --git a/workhorse/internal/config/config_test.go b/workhorse/internal/config/config_test.go new file mode 100644 index 00000000000..fcae52c7382 --- /dev/null +++ b/workhorse/internal/config/config_test.go @@ -0,0 +1,99 @@ +package config + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +const azureConfig = ` +[object_storage] +provider = "AzureRM" + +[object_storage.azurerm] +azure_storage_account_name = "azuretester" +azure_storage_access_key = "deadbeef" +` + +func TestLoadEmptyConfig(t *testing.T) { + config := `` + + cfg, err := LoadConfig(config) + require.NoError(t, err) + + require.Equal(t, cfg.ImageResizerConfig.MaxFilesize, uint64(250000)) + require.GreaterOrEqual(t, cfg.ImageResizerConfig.MaxScalerProcs, uint32(2)) + + require.Equal(t, ObjectStorageCredentials{}, cfg.ObjectStorageCredentials) + require.NoError(t, cfg.RegisterGoCloudURLOpeners()) +} + +func TestLoadObjectStorageConfig(t *testing.T) { + config := ` +[object_storage] +provider = "AWS" + +[object_storage.s3] +aws_access_key_id = "minio" +aws_secret_access_key = "gdk-minio" +` + + cfg, err := LoadConfig(config) + require.NoError(t, err) + + require.NotNil(t, cfg.ObjectStorageCredentials, "Expected object storage credentials") + + expected := ObjectStorageCredentials{ + Provider: "AWS", + S3Credentials: S3Credentials{ + AwsAccessKeyID: "minio", + AwsSecretAccessKey: "gdk-minio", + }, + } + + require.Equal(t, expected, cfg.ObjectStorageCredentials) +} + +func TestRegisterGoCloudURLOpeners(t *testing.T) { + cfg, err := LoadConfig(azureConfig) + require.NoError(t, err) + + require.NotNil(t, cfg.ObjectStorageCredentials, "Expected object storage credentials") + + expected := ObjectStorageCredentials{ + Provider: "AzureRM", + AzureCredentials: AzureCredentials{ + AccountName: "azuretester", + AccountKey: "deadbeef", + }, + } + + require.Equal(t, expected, cfg.ObjectStorageCredentials) + require.Nil(t, cfg.ObjectStorageConfig.URLMux) + + require.NoError(t, cfg.RegisterGoCloudURLOpeners()) + require.NotNil(t, cfg.ObjectStorageConfig.URLMux) + + require.True(t, cfg.ObjectStorageConfig.URLMux.ValidBucketScheme("azblob")) + require.Equal(t, []string{"azblob"}, cfg.ObjectStorageConfig.URLMux.BucketSchemes()) +} + +func TestLoadImageResizerConfig(t *testing.T) { + config := ` +[image_resizer] +max_scaler_procs = 200 +max_filesize = 350000 +` + + cfg, err := LoadConfig(config) + require.NoError(t, err) + + require.NotNil(t, cfg.ImageResizerConfig, "Expected image resizer config") + + expected := ImageResizerConfig{ + MaxScalerProcs: 200, + MaxFilesize: 350000, + } + + require.Equal(t, expected, cfg.ImageResizerConfig) +} diff --git a/workhorse/internal/config/url_openers.go b/workhorse/internal/config/url_openers.go new file mode 100644 index 00000000000..d3c96ee9eef --- /dev/null +++ b/workhorse/internal/config/url_openers.go @@ -0,0 +1,51 @@ +package config + +import ( + "context" + "fmt" + "net/url" + + "gocloud.dev/blob" + "gocloud.dev/blob/azureblob" +) + +// This code can be removed once https://github.com/google/go-cloud/pull/2851 is merged. + +// URLOpener opens Azure URLs like "azblob://mybucket". +// +// The URL host is used as the bucket name. +// +// The following query options are supported: +// - domain: The domain name used to access the Azure Blob storage (e.g. blob.core.windows.net) +type azureURLOpener struct { + *azureblob.URLOpener +} + +func (o *azureURLOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*blob.Bucket, error) { + opts := new(azureblob.Options) + *opts = o.Options + + err := setOptionsFromURLParams(u.Query(), opts) + if err != nil { + return nil, err + } + return azureblob.OpenBucket(ctx, o.Pipeline, o.AccountName, u.Host, opts) +} + +func setOptionsFromURLParams(q url.Values, opts *azureblob.Options) error { + for param, values := range q { + if len(values) > 1 { + return fmt.Errorf("multiple values of %v not allowed", param) + } + + value := values[0] + switch param { + case "domain": + opts.StorageDomain = azureblob.StorageDomain(value) + default: + return fmt.Errorf("unknown query parameter %q", param) + } + } + + return nil +} diff --git a/workhorse/internal/config/url_openers_test.go b/workhorse/internal/config/url_openers_test.go new file mode 100644 index 00000000000..6a851cacbb8 --- /dev/null +++ b/workhorse/internal/config/url_openers_test.go @@ -0,0 +1,117 @@ +package config + +import ( + "context" + "net/url" + "testing" + + "github.com/stretchr/testify/require" + "gocloud.dev/blob/azureblob" +) + +func TestURLOpeners(t *testing.T) { + cfg, err := LoadConfig(azureConfig) + require.NoError(t, err) + + require.NotNil(t, cfg.ObjectStorageCredentials, "Expected object storage credentials") + + require.NoError(t, cfg.RegisterGoCloudURLOpeners()) + require.NotNil(t, cfg.ObjectStorageConfig.URLMux) + + tests := []struct { + url string + valid bool + }{ + + { + url: "azblob://container/object", + valid: true, + }, + { + url: "azblob://container/object?domain=core.windows.net", + valid: true, + }, + { + url: "azblob://container/object?domain=core.windows.net&domain=test", + valid: false, + }, + { + url: "azblob://container/object?param=value", + valid: false, + }, + { + url: "s3://bucket/object", + valid: false, + }, + } + + for _, test := range tests { + t.Run(test.url, func(t *testing.T) { + ctx := context.Background() + url, err := url.Parse(test.url) + require.NoError(t, err) + + bucket, err := cfg.ObjectStorageConfig.URLMux.OpenBucketURL(ctx, url) + if bucket != nil { + defer bucket.Close() + } + + if test.valid { + require.NotNil(t, bucket) + require.NoError(t, err) + } else { + require.Error(t, err) + } + }) + } +} + +func TestTestURLOpenersForParams(t *testing.T) { + tests := []struct { + name string + currOpts azureblob.Options + query url.Values + wantOpts azureblob.Options + wantErr bool + }{ + { + name: "InvalidParam", + query: url.Values{ + "foo": {"bar"}, + }, + wantErr: true, + }, + { + name: "StorageDomain", + query: url.Values{ + "domain": {"blob.core.usgovcloudapi.net"}, + }, + wantOpts: azureblob.Options{StorageDomain: "blob.core.usgovcloudapi.net"}, + }, + { + name: "duplicate StorageDomain", + query: url.Values{ + "domain": {"blob.core.usgovcloudapi.net", "blob.core.windows.net"}, + }, + wantErr: true, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + o := &azureURLOpener{ + URLOpener: &azureblob.URLOpener{ + Options: test.currOpts, + }, + } + err := setOptionsFromURLParams(test.query, &o.Options) + + if test.wantErr { + require.NotNil(t, err) + } else { + require.Nil(t, err) + require.Equal(t, test.wantOpts, o.Options) + } + }) + } +} diff --git a/workhorse/internal/filestore/file_handler.go b/workhorse/internal/filestore/file_handler.go new file mode 100644 index 00000000000..935eb3b7f3b --- /dev/null +++ b/workhorse/internal/filestore/file_handler.go @@ -0,0 +1,251 @@ +package filestore + +import ( + "context" + "errors" + "fmt" + "io" + "io/ioutil" + "os" + "strconv" + "time" + + "github.com/dgrijalva/jwt-go" + + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/secret" +) + +type SizeError error + +// ErrEntityTooLarge means that the uploaded content is bigger then maximum allowed size +var ErrEntityTooLarge = errors.New("entity is too large") + +// FileHandler represent a file that has been processed for upload +// it may be either uploaded to an ObjectStore and/or saved on local path. +type FileHandler struct { + // LocalPath is the path on the disk where file has been stored + LocalPath string + + // RemoteID is the objectID provided by GitLab Rails + RemoteID string + // RemoteURL is ObjectStore URL provided by GitLab Rails + RemoteURL string + + // Size is the persisted file size + Size int64 + + // Name is the resource name to send back to GitLab rails. + // It differ from the real file name in order to avoid file collisions + Name string + + // a map containing different hashes + hashes map[string]string +} + +type uploadClaims struct { + Upload map[string]string `json:"upload"` + jwt.StandardClaims +} + +// SHA256 hash of the handled file +func (fh *FileHandler) SHA256() string { + return fh.hashes["sha256"] +} + +// MD5 hash of the handled file +func (fh *FileHandler) MD5() string { + return fh.hashes["md5"] +} + +// GitLabFinalizeFields returns a map with all the fields GitLab Rails needs in order to finalize the upload. +func (fh *FileHandler) GitLabFinalizeFields(prefix string) (map[string]string, error) { + // TODO: remove `data` these once rails fully and exclusively support `signedData` (https://gitlab.com/gitlab-org/gitlab-workhorse/-/issues/263) + data := make(map[string]string) + signedData := make(map[string]string) + key := func(field string) string { + if prefix == "" { + return field + } + + return fmt.Sprintf("%s.%s", prefix, field) + } + + for k, v := range map[string]string{ + "name": fh.Name, + "path": fh.LocalPath, + "remote_url": fh.RemoteURL, + "remote_id": fh.RemoteID, + "size": strconv.FormatInt(fh.Size, 10), + } { + data[key(k)] = v + signedData[k] = v + } + + for hashName, hash := range fh.hashes { + data[key(hashName)] = hash + signedData[hashName] = hash + } + + claims := uploadClaims{Upload: signedData, StandardClaims: secret.DefaultClaims} + jwtData, err := secret.JWTTokenString(claims) + if err != nil { + return nil, err + } + data[key("gitlab-workhorse-upload")] = jwtData + + return data, nil +} + +type consumer interface { + Consume(context.Context, io.Reader, time.Time) (int64, error) +} + +// SaveFileFromReader persists the provided reader content to all the location specified in opts. A cleanup will be performed once ctx is Done +// Make sure the provided context will not expire before finalizing upload with GitLab Rails. +func SaveFileFromReader(ctx context.Context, reader io.Reader, size int64, opts *SaveFileOpts) (fh *FileHandler, err error) { + var uploadDestination consumer + fh = &FileHandler{ + Name: opts.TempFilePrefix, + RemoteID: opts.RemoteID, + RemoteURL: opts.RemoteURL, + } + hashes := newMultiHash() + reader = io.TeeReader(reader, hashes.Writer) + + var clientMode string + + switch { + case opts.IsLocal(): + clientMode = "local" + uploadDestination, err = fh.uploadLocalFile(ctx, opts) + case opts.UseWorkhorseClientEnabled() && opts.ObjectStorageConfig.IsGoCloud(): + clientMode = fmt.Sprintf("go_cloud:%s", opts.ObjectStorageConfig.Provider) + p := &objectstore.GoCloudObjectParams{ + Ctx: ctx, + Mux: opts.ObjectStorageConfig.URLMux, + BucketURL: opts.ObjectStorageConfig.GoCloudConfig.URL, + ObjectName: opts.RemoteTempObjectID, + } + uploadDestination, err = objectstore.NewGoCloudObject(p) + case opts.UseWorkhorseClientEnabled() && opts.ObjectStorageConfig.IsAWS() && opts.ObjectStorageConfig.IsValid(): + clientMode = "s3" + uploadDestination, err = objectstore.NewS3Object( + opts.RemoteTempObjectID, + opts.ObjectStorageConfig.S3Credentials, + opts.ObjectStorageConfig.S3Config, + ) + case opts.IsMultipart(): + clientMode = "multipart" + uploadDestination, err = objectstore.NewMultipart( + opts.PresignedParts, + opts.PresignedCompleteMultipart, + opts.PresignedAbortMultipart, + opts.PresignedDelete, + opts.PutHeaders, + opts.PartSize, + ) + default: + clientMode = "http" + uploadDestination, err = objectstore.NewObject( + opts.PresignedPut, + opts.PresignedDelete, + opts.PutHeaders, + size, + ) + } + + if err != nil { + return nil, err + } + + if opts.MaximumSize > 0 { + if size > opts.MaximumSize { + return nil, SizeError(fmt.Errorf("the upload size %d is over maximum of %d bytes", size, opts.MaximumSize)) + } + + reader = &hardLimitReader{r: reader, n: opts.MaximumSize} + } + + fh.Size, err = uploadDestination.Consume(ctx, reader, opts.Deadline) + if err != nil { + if err == objectstore.ErrNotEnoughParts { + err = ErrEntityTooLarge + } + return nil, err + } + + if size != -1 && size != fh.Size { + return nil, SizeError(fmt.Errorf("expected %d bytes but got only %d", size, fh.Size)) + } + + logger := log.WithContextFields(ctx, log.Fields{ + "copied_bytes": fh.Size, + "is_local": opts.IsLocal(), + "is_multipart": opts.IsMultipart(), + "is_remote": !opts.IsLocal(), + "remote_id": opts.RemoteID, + "temp_file_prefix": opts.TempFilePrefix, + "client_mode": clientMode, + }) + + if opts.IsLocal() { + logger = logger.WithField("local_temp_path", opts.LocalTempPath) + } else { + logger = logger.WithField("remote_temp_object", opts.RemoteTempObjectID) + } + + logger.Info("saved file") + fh.hashes = hashes.finish() + return fh, nil +} + +func (fh *FileHandler) uploadLocalFile(ctx context.Context, opts *SaveFileOpts) (consumer, error) { + // make sure TempFolder exists + err := os.MkdirAll(opts.LocalTempPath, 0700) + if err != nil { + return nil, fmt.Errorf("uploadLocalFile: mkdir %q: %v", opts.LocalTempPath, err) + } + + file, err := ioutil.TempFile(opts.LocalTempPath, opts.TempFilePrefix) + if err != nil { + return nil, fmt.Errorf("uploadLocalFile: create file: %v", err) + } + + go func() { + <-ctx.Done() + os.Remove(file.Name()) + }() + + fh.LocalPath = file.Name() + return &localUpload{file}, nil +} + +type localUpload struct{ io.WriteCloser } + +func (loc *localUpload) Consume(_ context.Context, r io.Reader, _ time.Time) (int64, error) { + n, err := io.Copy(loc.WriteCloser, r) + errClose := loc.Close() + if err == nil { + err = errClose + } + return n, err +} + +// SaveFileFromDisk open the local file fileName and calls SaveFileFromReader +func SaveFileFromDisk(ctx context.Context, fileName string, opts *SaveFileOpts) (fh *FileHandler, err error) { + file, err := os.Open(fileName) + if err != nil { + return nil, err + } + defer file.Close() + + fi, err := file.Stat() + if err != nil { + return nil, err + } + + return SaveFileFromReader(ctx, file, fi.Size(), opts) +} diff --git a/workhorse/internal/filestore/file_handler_test.go b/workhorse/internal/filestore/file_handler_test.go new file mode 100644 index 00000000000..5a02075fb98 --- /dev/null +++ b/workhorse/internal/filestore/file_handler_test.go @@ -0,0 +1,449 @@ +package filestore_test + +import ( + "context" + "fmt" + "io/ioutil" + "os" + "path" + "strconv" + "strings" + "testing" + "time" + + "github.com/dgrijalva/jwt-go" + "github.com/stretchr/testify/require" + "gocloud.dev/blob" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/filestore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore/test" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" +) + +func testDeadline() time.Time { + return time.Now().Add(filestore.DefaultObjectStoreTimeout) +} + +func requireFileGetsRemovedAsync(t *testing.T, filePath string) { + var err error + + // Poll because the file removal is async + for i := 0; i < 100; i++ { + _, err = os.Stat(filePath) + if err != nil { + break + } + time.Sleep(100 * time.Millisecond) + } + + require.True(t, os.IsNotExist(err), "File hasn't been deleted during cleanup") +} + +func requireObjectStoreDeletedAsync(t *testing.T, expectedDeletes int, osStub *test.ObjectstoreStub) { + // Poll because the object removal is async + for i := 0; i < 100; i++ { + if osStub.DeletesCnt() == expectedDeletes { + break + } + time.Sleep(10 * time.Millisecond) + } + + require.Equal(t, expectedDeletes, osStub.DeletesCnt(), "Object not deleted") +} + +func TestSaveFileWrongSize(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + tmpFolder, err := ioutil.TempDir("", "workhorse-test-tmp") + require.NoError(t, err) + defer os.RemoveAll(tmpFolder) + + opts := &filestore.SaveFileOpts{LocalTempPath: tmpFolder, TempFilePrefix: "test-file"} + fh, err := filestore.SaveFileFromReader(ctx, strings.NewReader(test.ObjectContent), test.ObjectSize+1, opts) + require.Error(t, err) + _, isSizeError := err.(filestore.SizeError) + require.True(t, isSizeError, "Should fail with SizeError") + require.Nil(t, fh) +} + +func TestSaveFileWithKnownSizeExceedLimit(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + tmpFolder, err := ioutil.TempDir("", "workhorse-test-tmp") + require.NoError(t, err) + defer os.RemoveAll(tmpFolder) + + opts := &filestore.SaveFileOpts{LocalTempPath: tmpFolder, TempFilePrefix: "test-file", MaximumSize: test.ObjectSize - 1} + fh, err := filestore.SaveFileFromReader(ctx, strings.NewReader(test.ObjectContent), test.ObjectSize, opts) + require.Error(t, err) + _, isSizeError := err.(filestore.SizeError) + require.True(t, isSizeError, "Should fail with SizeError") + require.Nil(t, fh) +} + +func TestSaveFileWithUnknownSizeExceedLimit(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + tmpFolder, err := ioutil.TempDir("", "workhorse-test-tmp") + require.NoError(t, err) + defer os.RemoveAll(tmpFolder) + + opts := &filestore.SaveFileOpts{LocalTempPath: tmpFolder, TempFilePrefix: "test-file", MaximumSize: test.ObjectSize - 1} + fh, err := filestore.SaveFileFromReader(ctx, strings.NewReader(test.ObjectContent), -1, opts) + require.Equal(t, err, filestore.ErrEntityTooLarge) + require.Nil(t, fh) +} + +func TestSaveFromDiskNotExistingFile(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + fh, err := filestore.SaveFileFromDisk(ctx, "/I/do/not/exist", &filestore.SaveFileOpts{}) + require.Error(t, err, "SaveFileFromDisk should fail") + require.True(t, os.IsNotExist(err), "Provided file should not exists") + require.Nil(t, fh, "On error FileHandler should be nil") +} + +func TestSaveFileWrongETag(t *testing.T) { + tests := []struct { + name string + multipart bool + }{ + {name: "single part"}, + {name: "multi part", multipart: true}, + } + + for _, spec := range tests { + t.Run(spec.name, func(t *testing.T) { + osStub, ts := test.StartObjectStoreWithCustomMD5(map[string]string{test.ObjectPath: "brokenMD5"}) + defer ts.Close() + + objectURL := ts.URL + test.ObjectPath + + opts := &filestore.SaveFileOpts{ + RemoteID: "test-file", + RemoteURL: objectURL, + PresignedPut: objectURL + "?Signature=ASignature", + PresignedDelete: objectURL + "?Signature=AnotherSignature", + Deadline: testDeadline(), + } + if spec.multipart { + opts.PresignedParts = []string{objectURL + "?partNumber=1"} + opts.PresignedCompleteMultipart = objectURL + "?Signature=CompleteSig" + opts.PresignedAbortMultipart = objectURL + "?Signature=AbortSig" + opts.PartSize = test.ObjectSize + + osStub.InitiateMultipartUpload(test.ObjectPath) + } + ctx, cancel := context.WithCancel(context.Background()) + fh, err := filestore.SaveFileFromReader(ctx, strings.NewReader(test.ObjectContent), test.ObjectSize, opts) + require.Nil(t, fh) + require.Error(t, err) + require.Equal(t, 1, osStub.PutsCnt(), "File not uploaded") + + cancel() // this will trigger an async cleanup + requireObjectStoreDeletedAsync(t, 1, osStub) + require.False(t, spec.multipart && osStub.IsMultipartUpload(test.ObjectPath), "there must be no multipart upload in progress now") + }) + } +} + +func TestSaveFileFromDiskToLocalPath(t *testing.T) { + f, err := ioutil.TempFile("", "workhorse-test") + require.NoError(t, err) + defer os.Remove(f.Name()) + + _, err = fmt.Fprint(f, test.ObjectContent) + require.NoError(t, err) + + tmpFolder, err := ioutil.TempDir("", "workhorse-test-tmp") + require.NoError(t, err) + defer os.RemoveAll(tmpFolder) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + opts := &filestore.SaveFileOpts{LocalTempPath: tmpFolder} + fh, err := filestore.SaveFileFromDisk(ctx, f.Name(), opts) + require.NoError(t, err) + require.NotNil(t, fh) + + require.NotEmpty(t, fh.LocalPath, "File not persisted on disk") + _, err = os.Stat(fh.LocalPath) + require.NoError(t, err) +} + +func TestSaveFile(t *testing.T) { + testhelper.ConfigureSecret() + + type remote int + const ( + notRemote remote = iota + remoteSingle + remoteMultipart + ) + + tmpFolder, err := ioutil.TempDir("", "workhorse-test-tmp") + require.NoError(t, err) + defer os.RemoveAll(tmpFolder) + + tests := []struct { + name string + local bool + remote remote + }{ + {name: "Local only", local: true}, + {name: "Remote Single only", remote: remoteSingle}, + {name: "Remote Multipart only", remote: remoteMultipart}, + } + + for _, spec := range tests { + t.Run(spec.name, func(t *testing.T) { + var opts filestore.SaveFileOpts + var expectedDeletes, expectedPuts int + + osStub, ts := test.StartObjectStore() + defer ts.Close() + + switch spec.remote { + case remoteSingle: + objectURL := ts.URL + test.ObjectPath + + opts.RemoteID = "test-file" + opts.RemoteURL = objectURL + opts.PresignedPut = objectURL + "?Signature=ASignature" + opts.PresignedDelete = objectURL + "?Signature=AnotherSignature" + opts.Deadline = testDeadline() + + expectedDeletes = 1 + expectedPuts = 1 + case remoteMultipart: + objectURL := ts.URL + test.ObjectPath + + opts.RemoteID = "test-file" + opts.RemoteURL = objectURL + opts.PresignedDelete = objectURL + "?Signature=AnotherSignature" + opts.PartSize = int64(len(test.ObjectContent)/2) + 1 + opts.PresignedParts = []string{objectURL + "?partNumber=1", objectURL + "?partNumber=2"} + opts.PresignedCompleteMultipart = objectURL + "?Signature=CompleteSignature" + opts.Deadline = testDeadline() + + osStub.InitiateMultipartUpload(test.ObjectPath) + expectedDeletes = 1 + expectedPuts = 2 + } + + if spec.local { + opts.LocalTempPath = tmpFolder + opts.TempFilePrefix = "test-file" + } + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + fh, err := filestore.SaveFileFromReader(ctx, strings.NewReader(test.ObjectContent), test.ObjectSize, &opts) + require.NoError(t, err) + require.NotNil(t, fh) + + require.Equal(t, opts.RemoteID, fh.RemoteID) + require.Equal(t, opts.RemoteURL, fh.RemoteURL) + + if spec.local { + require.NotEmpty(t, fh.LocalPath, "File not persisted on disk") + _, err := os.Stat(fh.LocalPath) + require.NoError(t, err) + + dir := path.Dir(fh.LocalPath) + require.Equal(t, opts.LocalTempPath, dir) + filename := path.Base(fh.LocalPath) + beginsWithPrefix := strings.HasPrefix(filename, opts.TempFilePrefix) + require.True(t, beginsWithPrefix, fmt.Sprintf("LocalPath filename %q do not begin with TempFilePrefix %q", filename, opts.TempFilePrefix)) + } else { + require.Empty(t, fh.LocalPath, "LocalPath must be empty for non local uploads") + } + + require.Equal(t, test.ObjectSize, fh.Size) + require.Equal(t, test.ObjectMD5, fh.MD5()) + require.Equal(t, test.ObjectSHA256, fh.SHA256()) + + require.Equal(t, expectedPuts, osStub.PutsCnt(), "ObjectStore PutObject count mismatch") + require.Equal(t, 0, osStub.DeletesCnt(), "File deleted too early") + + cancel() // this will trigger an async cleanup + requireObjectStoreDeletedAsync(t, expectedDeletes, osStub) + requireFileGetsRemovedAsync(t, fh.LocalPath) + + // checking generated fields + fields, err := fh.GitLabFinalizeFields("file") + require.NoError(t, err) + + checkFileHandlerWithFields(t, fh, fields, "file") + + token, jwtErr := jwt.ParseWithClaims(fields["file.gitlab-workhorse-upload"], &testhelper.UploadClaims{}, testhelper.ParseJWT) + require.NoError(t, jwtErr) + + uploadFields := token.Claims.(*testhelper.UploadClaims).Upload + + checkFileHandlerWithFields(t, fh, uploadFields, "") + }) + } +} + +func TestSaveFileWithS3WorkhorseClient(t *testing.T) { + tests := []struct { + name string + objectSize int64 + maxSize int64 + expectedErr error + }{ + { + name: "known size with no limit", + objectSize: test.ObjectSize, + }, + { + name: "unknown size with no limit", + objectSize: -1, + }, + { + name: "unknown object size with limit", + objectSize: -1, + maxSize: test.ObjectSize - 1, + expectedErr: filestore.ErrEntityTooLarge, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + + s3Creds, s3Config, sess, ts := test.SetupS3(t, "") + defer ts.Close() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + remoteObject := "tmp/test-file/1" + opts := filestore.SaveFileOpts{ + RemoteID: "test-file", + Deadline: testDeadline(), + UseWorkhorseClient: true, + RemoteTempObjectID: remoteObject, + ObjectStorageConfig: filestore.ObjectStorageConfig{ + Provider: "AWS", + S3Credentials: s3Creds, + S3Config: s3Config, + }, + MaximumSize: tc.maxSize, + } + + _, err := filestore.SaveFileFromReader(ctx, strings.NewReader(test.ObjectContent), tc.objectSize, &opts) + + if tc.expectedErr == nil { + require.NoError(t, err) + test.S3ObjectExists(t, sess, s3Config, remoteObject, test.ObjectContent) + } else { + require.Equal(t, tc.expectedErr, err) + test.S3ObjectDoesNotExist(t, sess, s3Config, remoteObject) + } + }) + } +} + +func TestSaveFileWithAzureWorkhorseClient(t *testing.T) { + mux, bucketDir, cleanup := test.SetupGoCloudFileBucket(t, "azblob") + defer cleanup() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + remoteObject := "tmp/test-file/1" + opts := filestore.SaveFileOpts{ + RemoteID: "test-file", + Deadline: testDeadline(), + UseWorkhorseClient: true, + RemoteTempObjectID: remoteObject, + ObjectStorageConfig: filestore.ObjectStorageConfig{ + Provider: "AzureRM", + URLMux: mux, + GoCloudConfig: config.GoCloudConfig{URL: "azblob://test-container"}, + }, + } + + _, err := filestore.SaveFileFromReader(ctx, strings.NewReader(test.ObjectContent), test.ObjectSize, &opts) + require.NoError(t, err) + + test.GoCloudObjectExists(t, bucketDir, remoteObject) +} + +func TestSaveFileWithUnknownGoCloudScheme(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + mux := new(blob.URLMux) + + remoteObject := "tmp/test-file/1" + opts := filestore.SaveFileOpts{ + RemoteID: "test-file", + Deadline: testDeadline(), + UseWorkhorseClient: true, + RemoteTempObjectID: remoteObject, + ObjectStorageConfig: filestore.ObjectStorageConfig{ + Provider: "SomeCloud", + URLMux: mux, + GoCloudConfig: config.GoCloudConfig{URL: "foo://test-container"}, + }, + } + + _, err := filestore.SaveFileFromReader(ctx, strings.NewReader(test.ObjectContent), test.ObjectSize, &opts) + require.Error(t, err) +} + +func TestSaveMultipartInBodyFailure(t *testing.T) { + osStub, ts := test.StartObjectStore() + defer ts.Close() + + // this is a broken path because it contains bucket name but no key + // this is the only way to get an in-body failure from our ObjectStoreStub + objectPath := "/bucket-but-no-object-key" + objectURL := ts.URL + objectPath + opts := filestore.SaveFileOpts{ + RemoteID: "test-file", + RemoteURL: objectURL, + PartSize: test.ObjectSize, + PresignedParts: []string{objectURL + "?partNumber=1", objectURL + "?partNumber=2"}, + PresignedCompleteMultipart: objectURL + "?Signature=CompleteSignature", + Deadline: testDeadline(), + } + + osStub.InitiateMultipartUpload(objectPath) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + fh, err := filestore.SaveFileFromReader(ctx, strings.NewReader(test.ObjectContent), test.ObjectSize, &opts) + require.Nil(t, fh) + require.Error(t, err) + require.EqualError(t, err, test.MultipartUploadInternalError().Error()) +} + +func checkFileHandlerWithFields(t *testing.T, fh *filestore.FileHandler, fields map[string]string, prefix string) { + key := func(field string) string { + if prefix == "" { + return field + } + + return fmt.Sprintf("%s.%s", prefix, field) + } + + require.Equal(t, fh.Name, fields[key("name")]) + require.Equal(t, fh.LocalPath, fields[key("path")]) + require.Equal(t, fh.RemoteURL, fields[key("remote_url")]) + require.Equal(t, fh.RemoteID, fields[key("remote_id")]) + require.Equal(t, strconv.FormatInt(test.ObjectSize, 10), fields[key("size")]) + require.Equal(t, test.ObjectMD5, fields[key("md5")]) + require.Equal(t, test.ObjectSHA1, fields[key("sha1")]) + require.Equal(t, test.ObjectSHA256, fields[key("sha256")]) + require.Equal(t, test.ObjectSHA512, fields[key("sha512")]) +} diff --git a/workhorse/internal/filestore/multi_hash.go b/workhorse/internal/filestore/multi_hash.go new file mode 100644 index 00000000000..40efd3a5c1f --- /dev/null +++ b/workhorse/internal/filestore/multi_hash.go @@ -0,0 +1,48 @@ +package filestore + +import ( + "crypto/md5" + "crypto/sha1" + "crypto/sha256" + "crypto/sha512" + "encoding/hex" + "hash" + "io" +) + +var hashFactories = map[string](func() hash.Hash){ + "md5": md5.New, + "sha1": sha1.New, + "sha256": sha256.New, + "sha512": sha512.New, +} + +type multiHash struct { + io.Writer + hashes map[string]hash.Hash +} + +func newMultiHash() (m *multiHash) { + m = &multiHash{} + m.hashes = make(map[string]hash.Hash) + + var writers []io.Writer + for hash, hashFactory := range hashFactories { + writer := hashFactory() + + m.hashes[hash] = writer + writers = append(writers, writer) + } + + m.Writer = io.MultiWriter(writers...) + return m +} + +func (m *multiHash) finish() map[string]string { + h := make(map[string]string) + for hashName, hash := range m.hashes { + checksum := hash.Sum(nil) + h[hashName] = hex.EncodeToString(checksum) + } + return h +} diff --git a/workhorse/internal/filestore/reader.go b/workhorse/internal/filestore/reader.go new file mode 100644 index 00000000000..b1045b991fc --- /dev/null +++ b/workhorse/internal/filestore/reader.go @@ -0,0 +1,17 @@ +package filestore + +import "io" + +type hardLimitReader struct { + r io.Reader + n int64 +} + +func (h *hardLimitReader) Read(p []byte) (int, error) { + nRead, err := h.r.Read(p) + h.n -= int64(nRead) + if h.n < 0 { + err = ErrEntityTooLarge + } + return nRead, err +} diff --git a/workhorse/internal/filestore/reader_test.go b/workhorse/internal/filestore/reader_test.go new file mode 100644 index 00000000000..424d921ecaf --- /dev/null +++ b/workhorse/internal/filestore/reader_test.go @@ -0,0 +1,46 @@ +package filestore + +import ( + "fmt" + "io/ioutil" + "strings" + "testing" + "testing/iotest" + + "github.com/stretchr/testify/require" +) + +func TestHardLimitReader(t *testing.T) { + const text = "hello world" + r := iotest.OneByteReader( + &hardLimitReader{ + r: strings.NewReader(text), + n: int64(len(text)), + }, + ) + + out, err := ioutil.ReadAll(r) + require.NoError(t, err) + require.Equal(t, text, string(out)) +} + +func TestHardLimitReaderFail(t *testing.T) { + const text = "hello world" + + for bufSize := len(text) / 2; bufSize < len(text)*2; bufSize++ { + t.Run(fmt.Sprintf("bufsize:%d", bufSize), func(t *testing.T) { + r := &hardLimitReader{ + r: iotest.DataErrReader(strings.NewReader(text)), + n: int64(len(text)) - 1, + } + buf := make([]byte, bufSize) + + var err error + for i := 0; err == nil && i < 1000; i++ { + _, err = r.Read(buf) + } + + require.Equal(t, ErrEntityTooLarge, err) + }) + } +} diff --git a/workhorse/internal/filestore/save_file_opts.go b/workhorse/internal/filestore/save_file_opts.go new file mode 100644 index 00000000000..1eb708c3f55 --- /dev/null +++ b/workhorse/internal/filestore/save_file_opts.go @@ -0,0 +1,171 @@ +package filestore + +import ( + "errors" + "strings" + "time" + + "gocloud.dev/blob" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" +) + +// DefaultObjectStoreTimeout is the timeout for ObjectStore upload operation +const DefaultObjectStoreTimeout = 4 * time.Hour + +type ObjectStorageConfig struct { + Provider string + + S3Credentials config.S3Credentials + S3Config config.S3Config + + // GoCloud mux that maps azureblob:// and future URLs (e.g. s3://, gcs://, etc.) to a handler + URLMux *blob.URLMux + + // Azure credentials are registered at startup in the GoCloud URLMux, so only the container name is needed + GoCloudConfig config.GoCloudConfig +} + +// SaveFileOpts represents all the options available for saving a file to object store +type SaveFileOpts struct { + // TempFilePrefix is the prefix used to create temporary local file + TempFilePrefix string + // LocalTempPath is the directory where to write a local copy of the file + LocalTempPath string + // RemoteID is the remote ObjectID provided by GitLab + RemoteID string + // RemoteURL is the final URL of the file + RemoteURL string + // PresignedPut is a presigned S3 PutObject compatible URL + PresignedPut string + // PresignedDelete is a presigned S3 DeleteObject compatible URL. + PresignedDelete string + // HTTP headers to be sent along with PUT request + PutHeaders map[string]string + // Whether to ignore Rails pre-signed URLs and have Workhorse directly access object storage provider + UseWorkhorseClient bool + // If UseWorkhorseClient is true, this is the temporary object name to store the file + RemoteTempObjectID string + // Workhorse object storage client (e.g. S3) parameters + ObjectStorageConfig ObjectStorageConfig + // Deadline it the S3 operation deadline, the upload will be aborted if not completed in time + Deadline time.Time + // The maximum accepted size in bytes of the upload + MaximumSize int64 + + //MultipartUpload parameters + // PartSize is the exact size of each uploaded part. Only the last one can be smaller + PartSize int64 + // PresignedParts contains the presigned URLs for each part + PresignedParts []string + // PresignedCompleteMultipart is a presigned URL for CompleteMulipartUpload + PresignedCompleteMultipart string + // PresignedAbortMultipart is a presigned URL for AbortMultipartUpload + PresignedAbortMultipart string +} + +// UseWorkhorseClientEnabled checks if the options require direct access to object storage +func (s *SaveFileOpts) UseWorkhorseClientEnabled() bool { + return s.UseWorkhorseClient && s.ObjectStorageConfig.IsValid() && s.RemoteTempObjectID != "" +} + +// IsLocal checks if the options require the writing of the file on disk +func (s *SaveFileOpts) IsLocal() bool { + return s.LocalTempPath != "" +} + +// IsMultipart checks if the options requires a Multipart upload +func (s *SaveFileOpts) IsMultipart() bool { + return s.PartSize > 0 +} + +// GetOpts converts GitLab api.Response to a proper SaveFileOpts +func GetOpts(apiResponse *api.Response) (*SaveFileOpts, error) { + timeout := time.Duration(apiResponse.RemoteObject.Timeout) * time.Second + if timeout == 0 { + timeout = DefaultObjectStoreTimeout + } + + opts := SaveFileOpts{ + 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 != "" { + return nil, errors.New("API response has both TempPath and RemoteObject") + } + + if opts.LocalTempPath == "" && opts.RemoteID == "" { + return nil, errors.New("API response has neither TempPath nor RemoteObject") + } + + objectStorageParams := apiResponse.RemoteObject.ObjectStorage + if opts.UseWorkhorseClient && objectStorageParams != nil { + opts.ObjectStorageConfig.Provider = objectStorageParams.Provider + opts.ObjectStorageConfig.S3Config = objectStorageParams.S3Config + opts.ObjectStorageConfig.GoCloudConfig = objectStorageParams.GoCloudConfig + } + + // Backwards compatibility to ensure API servers that do not include the + // CustomPutHeaders flag will default to the original content type. + if !apiResponse.RemoteObject.CustomPutHeaders { + opts.PutHeaders = make(map[string]string) + opts.PutHeaders["Content-Type"] = "application/octet-stream" + } + + if multiParams := apiResponse.RemoteObject.MultipartUpload; multiParams != nil { + opts.PartSize = multiParams.PartSize + opts.PresignedCompleteMultipart = multiParams.CompleteURL + opts.PresignedAbortMultipart = multiParams.AbortURL + opts.PresignedParts = append([]string(nil), multiParams.PartURLs...) + } + + return &opts, nil +} + +func (c *ObjectStorageConfig) IsAWS() bool { + return strings.EqualFold(c.Provider, "AWS") || strings.EqualFold(c.Provider, "S3") +} + +func (c *ObjectStorageConfig) IsAzure() bool { + return strings.EqualFold(c.Provider, "AzureRM") +} + +func (c *ObjectStorageConfig) IsGoCloud() bool { + return c.GoCloudConfig.URL != "" +} + +func (c *ObjectStorageConfig) IsValid() bool { + if c.IsAWS() { + return c.S3Config.Bucket != "" && c.S3Config.Region != "" && c.s3CredentialsValid() + } else if c.IsGoCloud() { + // We could parse and validate the URL, but GoCloud providers + // such as AzureRM don't have a fallback to normal HTTP, so we + // always want to try the GoCloud path if there is a URL. + return true + } + + return false +} + +func (c *ObjectStorageConfig) s3CredentialsValid() bool { + // We need to be able to distinguish between two cases of AWS access: + // 1. AWS access via key and secret, but credentials not configured in Workhorse + // 2. IAM instance profiles used + if c.S3Config.UseIamProfile { + return true + } else if c.S3Credentials.AwsAccessKeyID != "" && c.S3Credentials.AwsSecretAccessKey != "" { + return true + } + + return false +} diff --git a/workhorse/internal/filestore/save_file_opts_test.go b/workhorse/internal/filestore/save_file_opts_test.go new file mode 100644 index 00000000000..2d6cd683b51 --- /dev/null +++ b/workhorse/internal/filestore/save_file_opts_test.go @@ -0,0 +1,331 @@ +package filestore_test + +import ( + "testing" + "time" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/filestore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore/test" +) + +func TestSaveFileOptsLocalAndRemote(t *testing.T) { + tests := []struct { + name string + localTempPath string + presignedPut string + partSize int64 + isLocal bool + isRemote bool + isMultipart bool + }{ + { + name: "Only LocalTempPath", + localTempPath: "/tmp", + isLocal: true, + }, + { + name: "No paths", + }, + { + name: "Only remoteUrl", + presignedPut: "http://example.com", + }, + { + name: "Multipart", + partSize: 10, + isMultipart: true, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + opts := filestore.SaveFileOpts{ + LocalTempPath: test.localTempPath, + PresignedPut: test.presignedPut, + PartSize: test.partSize, + } + + require.Equal(t, test.isLocal, opts.IsLocal(), "IsLocal() mismatch") + require.Equal(t, test.isMultipart, opts.IsMultipart(), "IsMultipart() mismatch") + }) + } +} + +func TestGetOpts(t *testing.T) { + tests := []struct { + name string + multipart *api.MultipartUploadParams + customPutHeaders bool + putHeaders map[string]string + }{ + { + name: "Single upload", + }, { + name: "Multipart upload", + multipart: &api.MultipartUploadParams{ + PartSize: 10, + CompleteURL: "http://complete", + AbortURL: "http://abort", + PartURLs: []string{"http://part1", "http://part2"}, + }, + }, + { + name: "Single upload with custom content type", + customPutHeaders: true, + putHeaders: map[string]string{"Content-Type": "image/jpeg"}, + }, { + name: "Multipart upload with custom content type", + multipart: &api.MultipartUploadParams{ + PartSize: 10, + CompleteURL: "http://complete", + AbortURL: "http://abort", + PartURLs: []string{"http://part1", "http://part2"}, + }, + customPutHeaders: true, + putHeaders: map[string]string{"Content-Type": "image/jpeg"}, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + apiResponse := &api.Response{ + RemoteObject: api.RemoteObject{ + Timeout: 10, + ID: "id", + GetURL: "http://get", + StoreURL: "http://store", + DeleteURL: "http://delete", + MultipartUpload: test.multipart, + CustomPutHeaders: test.customPutHeaders, + PutHeaders: test.putHeaders, + }, + } + deadline := time.Now().Add(time.Duration(apiResponse.RemoteObject.Timeout) * time.Second) + opts, err := filestore.GetOpts(apiResponse) + require.NoError(t, err) + + require.Equal(t, apiResponse.TempPath, opts.LocalTempPath) + require.WithinDuration(t, deadline, opts.Deadline, time.Second) + require.Equal(t, apiResponse.RemoteObject.ID, opts.RemoteID) + require.Equal(t, apiResponse.RemoteObject.GetURL, opts.RemoteURL) + require.Equal(t, apiResponse.RemoteObject.StoreURL, opts.PresignedPut) + require.Equal(t, apiResponse.RemoteObject.DeleteURL, opts.PresignedDelete) + if test.customPutHeaders { + require.Equal(t, opts.PutHeaders, apiResponse.RemoteObject.PutHeaders) + } else { + require.Equal(t, opts.PutHeaders, map[string]string{"Content-Type": "application/octet-stream"}) + } + + if test.multipart == nil { + require.False(t, opts.IsMultipart()) + require.Empty(t, opts.PresignedCompleteMultipart) + require.Empty(t, opts.PresignedAbortMultipart) + require.Zero(t, opts.PartSize) + require.Empty(t, opts.PresignedParts) + } else { + require.True(t, opts.IsMultipart()) + require.Equal(t, test.multipart.CompleteURL, opts.PresignedCompleteMultipart) + require.Equal(t, test.multipart.AbortURL, opts.PresignedAbortMultipart) + require.Equal(t, test.multipart.PartSize, opts.PartSize) + require.Equal(t, test.multipart.PartURLs, opts.PresignedParts) + } + }) + } +} + +func TestGetOptsFail(t *testing.T) { + testCases := []struct { + desc string + in api.Response + }{ + { + desc: "neither local nor remote", + in: api.Response{}, + }, + { + desc: "both local and remote", + in: api.Response{TempPath: "/foobar", RemoteObject: api.RemoteObject{ID: "id"}}, + }, + } + + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + _, err := filestore.GetOpts(&tc.in) + require.Error(t, err, "expect input to be rejected") + }) + } +} + +func TestGetOptsDefaultTimeout(t *testing.T) { + deadline := time.Now().Add(filestore.DefaultObjectStoreTimeout) + opts, err := filestore.GetOpts(&api.Response{TempPath: "/foo/bar"}) + require.NoError(t, err) + + require.WithinDuration(t, deadline, opts.Deadline, time.Minute) +} + +func TestUseWorkhorseClientEnabled(t *testing.T) { + cfg := filestore.ObjectStorageConfig{ + Provider: "AWS", + S3Config: config.S3Config{ + Bucket: "test-bucket", + Region: "test-region", + }, + S3Credentials: config.S3Credentials{ + AwsAccessKeyID: "test-key", + AwsSecretAccessKey: "test-secret", + }, + } + + missingCfg := cfg + missingCfg.S3Credentials = config.S3Credentials{} + + iamConfig := missingCfg + iamConfig.S3Config.UseIamProfile = true + + tests := []struct { + name string + UseWorkhorseClient bool + remoteTempObjectID string + objectStorageConfig filestore.ObjectStorageConfig + expected bool + }{ + { + name: "all direct access settings used", + UseWorkhorseClient: true, + remoteTempObjectID: "test-object", + objectStorageConfig: cfg, + expected: true, + }, + { + name: "missing AWS credentials", + UseWorkhorseClient: true, + remoteTempObjectID: "test-object", + objectStorageConfig: missingCfg, + expected: false, + }, + { + name: "direct access disabled", + UseWorkhorseClient: false, + remoteTempObjectID: "test-object", + objectStorageConfig: cfg, + expected: false, + }, + { + name: "with IAM instance profile", + UseWorkhorseClient: true, + remoteTempObjectID: "test-object", + objectStorageConfig: iamConfig, + expected: true, + }, + { + name: "missing remote temp object ID", + UseWorkhorseClient: true, + remoteTempObjectID: "", + objectStorageConfig: cfg, + expected: false, + }, + { + name: "missing S3 config", + UseWorkhorseClient: true, + remoteTempObjectID: "test-object", + expected: false, + }, + { + name: "missing S3 bucket", + UseWorkhorseClient: true, + remoteTempObjectID: "test-object", + objectStorageConfig: filestore.ObjectStorageConfig{ + Provider: "AWS", + S3Config: config.S3Config{}, + }, + expected: false, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + apiResponse := &api.Response{ + RemoteObject: api.RemoteObject{ + Timeout: 10, + ID: "id", + UseWorkhorseClient: test.UseWorkhorseClient, + RemoteTempObjectID: test.remoteTempObjectID, + }, + } + deadline := time.Now().Add(time.Duration(apiResponse.RemoteObject.Timeout) * time.Second) + opts, err := filestore.GetOpts(apiResponse) + require.NoError(t, err) + opts.ObjectStorageConfig = test.objectStorageConfig + + require.Equal(t, apiResponse.TempPath, opts.LocalTempPath) + require.WithinDuration(t, deadline, opts.Deadline, time.Second) + require.Equal(t, apiResponse.RemoteObject.ID, opts.RemoteID) + require.Equal(t, apiResponse.RemoteObject.UseWorkhorseClient, opts.UseWorkhorseClient) + require.Equal(t, test.expected, opts.UseWorkhorseClientEnabled()) + }) + } +} + +func TestGoCloudConfig(t *testing.T) { + mux, _, cleanup := test.SetupGoCloudFileBucket(t, "azblob") + defer cleanup() + + tests := []struct { + name string + provider string + url string + valid bool + }{ + { + name: "valid AzureRM config", + provider: "AzureRM", + url: "azblob:://test-container", + valid: true, + }, + { + name: "invalid GoCloud scheme", + provider: "AzureRM", + url: "unknown:://test-container", + valid: true, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + apiResponse := &api.Response{ + RemoteObject: api.RemoteObject{ + Timeout: 10, + ID: "id", + UseWorkhorseClient: true, + RemoteTempObjectID: "test-object", + ObjectStorage: &api.ObjectStorageParams{ + Provider: test.provider, + GoCloudConfig: config.GoCloudConfig{ + URL: test.url, + }, + }, + }, + } + deadline := time.Now().Add(time.Duration(apiResponse.RemoteObject.Timeout) * time.Second) + opts, err := filestore.GetOpts(apiResponse) + require.NoError(t, err) + opts.ObjectStorageConfig.URLMux = mux + + require.Equal(t, apiResponse.TempPath, opts.LocalTempPath) + require.Equal(t, apiResponse.RemoteObject.RemoteTempObjectID, opts.RemoteTempObjectID) + require.WithinDuration(t, deadline, opts.Deadline, time.Second) + require.Equal(t, apiResponse.RemoteObject.ID, opts.RemoteID) + require.Equal(t, apiResponse.RemoteObject.UseWorkhorseClient, opts.UseWorkhorseClient) + require.Equal(t, test.provider, opts.ObjectStorageConfig.Provider) + require.Equal(t, apiResponse.RemoteObject.ObjectStorage.GoCloudConfig, opts.ObjectStorageConfig.GoCloudConfig) + require.True(t, opts.UseWorkhorseClientEnabled()) + require.Equal(t, test.valid, opts.ObjectStorageConfig.IsValid()) + require.False(t, opts.IsLocal()) + }) + } +} diff --git a/workhorse/internal/git/archive.go b/workhorse/internal/git/archive.go new file mode 100644 index 00000000000..b35fb2e5382 --- /dev/null +++ b/workhorse/internal/git/archive.go @@ -0,0 +1,219 @@ +/* +In this file we handle 'git archive' downloads +*/ + +package git + +import ( + "fmt" + "io" + "io/ioutil" + "net/http" + "os" + "path" + "path/filepath" + "regexp" + "time" + + "github.com/golang/protobuf/proto" //lint:ignore SA1019 https://gitlab.com/gitlab-org/gitlab-workhorse/-/issues/274 + + "github.com/prometheus/client_golang/prometheus" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/senddata" +) + +type archive struct{ senddata.Prefix } +type archiveParams struct { + ArchivePath string + ArchivePrefix string + CommitId string + GitalyServer gitaly.Server + GitalyRepository gitalypb.Repository + DisableCache bool + GetArchiveRequest []byte +} + +var ( + SendArchive = &archive{"git-archive:"} + gitArchiveCache = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_git_archive_cache", + Help: "Cache hits and misses for 'git archive' streaming", + }, + []string{"result"}, + ) +) + +func init() { + prometheus.MustRegister(gitArchiveCache) +} + +func (a *archive) Inject(w http.ResponseWriter, r *http.Request, sendData string) { + var params archiveParams + if err := a.Unpack(¶ms, sendData); err != nil { + helper.Fail500(w, r, fmt.Errorf("SendArchive: unpack sendData: %v", err)) + return + } + + urlPath := r.URL.Path + format, ok := parseBasename(filepath.Base(urlPath)) + if !ok { + helper.Fail500(w, r, fmt.Errorf("SendArchive: invalid format: %s", urlPath)) + return + } + + cacheEnabled := !params.DisableCache + archiveFilename := path.Base(params.ArchivePath) + + if cacheEnabled { + cachedArchive, err := os.Open(params.ArchivePath) + if err == nil { + defer cachedArchive.Close() + gitArchiveCache.WithLabelValues("hit").Inc() + setArchiveHeaders(w, format, archiveFilename) + // Even if somebody deleted the cachedArchive from disk since we opened + // the file, Unix file semantics guarantee we can still read from the + // open file in this process. + http.ServeContent(w, r, "", time.Unix(0, 0), cachedArchive) + return + } + } + + gitArchiveCache.WithLabelValues("miss").Inc() + + var tempFile *os.File + var err error + + if cacheEnabled { + // We assume the tempFile has a unique name so that concurrent requests are + // safe. We create the tempfile in the same directory as the final cached + // archive we want to create so that we can use an atomic link(2) operation + // to finalize the cached archive. + tempFile, err = prepareArchiveTempfile(path.Dir(params.ArchivePath), archiveFilename) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("SendArchive: create tempfile: %v", err)) + return + } + defer tempFile.Close() + defer os.Remove(tempFile.Name()) + } + + var archiveReader io.Reader + + archiveReader, err = handleArchiveWithGitaly(r, params, format) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("operations.GetArchive: %v", err)) + return + } + + reader := archiveReader + if cacheEnabled { + reader = io.TeeReader(archiveReader, tempFile) + } + + // Start writing the response + setArchiveHeaders(w, format, archiveFilename) + w.WriteHeader(200) // Don't bother with HTTP 500 from this point on, just return + if _, err := io.Copy(w, reader); err != nil { + helper.LogError(r, ©Error{fmt.Errorf("SendArchive: copy 'git archive' output: %v", err)}) + return + } + + if cacheEnabled { + err := finalizeCachedArchive(tempFile, params.ArchivePath) + if err != nil { + helper.LogError(r, fmt.Errorf("SendArchive: finalize cached archive: %v", err)) + return + } + } +} + +func handleArchiveWithGitaly(r *http.Request, params archiveParams, format gitalypb.GetArchiveRequest_Format) (io.Reader, error) { + var request *gitalypb.GetArchiveRequest + ctx, c, err := gitaly.NewRepositoryClient(r.Context(), params.GitalyServer) + if err != nil { + return nil, err + } + + if params.GetArchiveRequest != nil { + request = &gitalypb.GetArchiveRequest{} + + if err := proto.Unmarshal(params.GetArchiveRequest, request); err != nil { + return nil, fmt.Errorf("unmarshal GetArchiveRequest: %v", err) + } + } else { + request = &gitalypb.GetArchiveRequest{ + Repository: ¶ms.GitalyRepository, + CommitId: params.CommitId, + Prefix: params.ArchivePrefix, + Format: format, + } + } + + return c.ArchiveReader(ctx, request) +} + +func setArchiveHeaders(w http.ResponseWriter, format gitalypb.GetArchiveRequest_Format, archiveFilename string) { + w.Header().Del("Content-Length") + w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, archiveFilename)) + // Caching proxies usually don't cache responses with Set-Cookie header + // present because it implies user-specific data, which is not the case + // for repository archives. + w.Header().Del("Set-Cookie") + if format == gitalypb.GetArchiveRequest_ZIP { + w.Header().Set("Content-Type", "application/zip") + } else { + w.Header().Set("Content-Type", "application/octet-stream") + } + w.Header().Set("Content-Transfer-Encoding", "binary") +} + +func prepareArchiveTempfile(dir string, prefix string) (*os.File, error) { + if err := os.MkdirAll(dir, 0700); err != nil { + return nil, err + } + return ioutil.TempFile(dir, prefix) +} + +func finalizeCachedArchive(tempFile *os.File, archivePath string) error { + if err := tempFile.Close(); err != nil { + return err + } + if err := os.Link(tempFile.Name(), archivePath); err != nil && !os.IsExist(err) { + return err + } + + return nil +} + +var ( + patternZip = regexp.MustCompile(`\.zip$`) + patternTar = regexp.MustCompile(`\.tar$`) + patternTarGz = regexp.MustCompile(`\.(tar\.gz|tgz|gz)$`) + patternTarBz2 = regexp.MustCompile(`\.(tar\.bz2|tbz|tbz2|tb2|bz2)$`) +) + +func parseBasename(basename string) (gitalypb.GetArchiveRequest_Format, bool) { + var format gitalypb.GetArchiveRequest_Format + + switch { + case (basename == "archive"): + format = gitalypb.GetArchiveRequest_TAR_GZ + case patternZip.MatchString(basename): + format = gitalypb.GetArchiveRequest_ZIP + case patternTar.MatchString(basename): + format = gitalypb.GetArchiveRequest_TAR + case patternTarGz.MatchString(basename): + format = gitalypb.GetArchiveRequest_TAR_GZ + case patternTarBz2.MatchString(basename): + format = gitalypb.GetArchiveRequest_TAR_BZ2 + default: + return format, false + } + + return format, true +} diff --git a/workhorse/internal/git/archive_test.go b/workhorse/internal/git/archive_test.go new file mode 100644 index 00000000000..4b0753499e5 --- /dev/null +++ b/workhorse/internal/git/archive_test.go @@ -0,0 +1,87 @@ +package git + +import ( + "io/ioutil" + "net/http/httptest" + "testing" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" + + "github.com/stretchr/testify/require" +) + +func TestParseBasename(t *testing.T) { + for _, testCase := range []struct { + in string + out gitalypb.GetArchiveRequest_Format + }{ + {"archive", gitalypb.GetArchiveRequest_TAR_GZ}, + {"master.tar.gz", gitalypb.GetArchiveRequest_TAR_GZ}, + {"foo-master.tgz", gitalypb.GetArchiveRequest_TAR_GZ}, + {"foo-v1.2.1.gz", gitalypb.GetArchiveRequest_TAR_GZ}, + {"foo.tar.bz2", gitalypb.GetArchiveRequest_TAR_BZ2}, + {"archive.tbz", gitalypb.GetArchiveRequest_TAR_BZ2}, + {"archive.tbz2", gitalypb.GetArchiveRequest_TAR_BZ2}, + {"archive.tb2", gitalypb.GetArchiveRequest_TAR_BZ2}, + {"archive.bz2", gitalypb.GetArchiveRequest_TAR_BZ2}, + } { + basename := testCase.in + out, ok := parseBasename(basename) + if !ok { + t.Fatalf("parseBasename did not recognize %q", basename) + } + + if out != testCase.out { + t.Fatalf("expected %q, got %q", testCase.out, out) + } + } +} + +func TestFinalizeArchive(t *testing.T) { + tempFile, err := ioutil.TempFile("", "gitlab-workhorse-test") + if err != nil { + t.Fatal(err) + } + defer tempFile.Close() + + // Deliberately cause an EEXIST error: we know tempFile.Name() already exists + err = finalizeCachedArchive(tempFile, tempFile.Name()) + if err != nil { + t.Fatalf("expected nil from finalizeCachedArchive, received %v", err) + } +} + +func TestSetArchiveHeaders(t *testing.T) { + for _, testCase := range []struct { + in gitalypb.GetArchiveRequest_Format + out string + }{ + {gitalypb.GetArchiveRequest_ZIP, "application/zip"}, + {gitalypb.GetArchiveRequest_TAR, "application/octet-stream"}, + {gitalypb.GetArchiveRequest_TAR_GZ, "application/octet-stream"}, + {gitalypb.GetArchiveRequest_TAR_BZ2, "application/octet-stream"}, + } { + w := httptest.NewRecorder() + + // These should be replaced, not appended to + w.Header().Set("Content-Type", "test") + w.Header().Set("Content-Length", "test") + w.Header().Set("Content-Disposition", "test") + + // This should be deleted + w.Header().Set("Set-Cookie", "test") + + // This should be preserved + w.Header().Set("Cache-Control", "public, max-age=3600") + + setArchiveHeaders(w, testCase.in, "filename") + + testhelper.RequireResponseHeader(t, w, "Content-Type", testCase.out) + testhelper.RequireResponseHeader(t, w, "Content-Length") + testhelper.RequireResponseHeader(t, w, "Content-Disposition", `attachment; filename="filename"`) + testhelper.RequireResponseHeader(t, w, "Cache-Control", "public, max-age=3600") + require.Empty(t, w.Header().Get("Set-Cookie"), "remove Set-Cookie") + } +} diff --git a/workhorse/internal/git/blob.go b/workhorse/internal/git/blob.go new file mode 100644 index 00000000000..472f5d0bc96 --- /dev/null +++ b/workhorse/internal/git/blob.go @@ -0,0 +1,47 @@ +package git + +import ( + "fmt" + "net/http" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/senddata" +) + +type blob struct{ senddata.Prefix } +type blobParams struct { + GitalyServer gitaly.Server + GetBlobRequest gitalypb.GetBlobRequest +} + +var SendBlob = &blob{"git-blob:"} + +func (b *blob) Inject(w http.ResponseWriter, r *http.Request, sendData string) { + var params blobParams + if err := b.Unpack(¶ms, sendData); err != nil { + helper.Fail500(w, r, fmt.Errorf("SendBlob: unpack sendData: %v", err)) + return + } + + ctx, blobClient, err := gitaly.NewBlobClient(r.Context(), params.GitalyServer) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("blob.GetBlob: %v", err)) + return + } + + setBlobHeaders(w) + if err := blobClient.SendBlob(ctx, w, ¶ms.GetBlobRequest); err != nil { + helper.Fail500(w, r, fmt.Errorf("blob.GetBlob: %v", err)) + return + } +} + +func setBlobHeaders(w http.ResponseWriter) { + // Caching proxies usually don't cache responses with Set-Cookie header + // present because it implies user-specific data, which is not the case + // for blobs. + w.Header().Del("Set-Cookie") +} diff --git a/workhorse/internal/git/blob_test.go b/workhorse/internal/git/blob_test.go new file mode 100644 index 00000000000..ec28c2adb2f --- /dev/null +++ b/workhorse/internal/git/blob_test.go @@ -0,0 +1,17 @@ +package git + +import ( + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestSetBlobHeaders(t *testing.T) { + w := httptest.NewRecorder() + w.Header().Set("Set-Cookie", "gitlab_cookie=123456") + + setBlobHeaders(w) + + require.Empty(t, w.Header().Get("Set-Cookie"), "remove Set-Cookie") +} diff --git a/workhorse/internal/git/diff.go b/workhorse/internal/git/diff.go new file mode 100644 index 00000000000..b1a1c17a650 --- /dev/null +++ b/workhorse/internal/git/diff.go @@ -0,0 +1,48 @@ +package git + +import ( + "fmt" + "net/http" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/senddata" +) + +type diff struct{ senddata.Prefix } +type diffParams struct { + GitalyServer gitaly.Server + RawDiffRequest string +} + +var SendDiff = &diff{"git-diff:"} + +func (d *diff) Inject(w http.ResponseWriter, r *http.Request, sendData string) { + var params diffParams + if err := d.Unpack(¶ms, sendData); err != nil { + helper.Fail500(w, r, fmt.Errorf("SendDiff: unpack sendData: %v", err)) + return + } + + request := &gitalypb.RawDiffRequest{} + if err := gitaly.UnmarshalJSON(params.RawDiffRequest, request); err != nil { + helper.Fail500(w, r, fmt.Errorf("diff.RawDiff: %v", err)) + return + } + + ctx, diffClient, err := gitaly.NewDiffClient(r.Context(), params.GitalyServer) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("diff.RawDiff: %v", err)) + return + } + + if err := diffClient.SendRawDiff(ctx, w, request); err != nil { + helper.LogError( + r, + ©Error{fmt.Errorf("diff.RawDiff: request=%v, err=%v", request, err)}, + ) + return + } +} diff --git a/workhorse/internal/git/error.go b/workhorse/internal/git/error.go new file mode 100644 index 00000000000..2b7cad6bb64 --- /dev/null +++ b/workhorse/internal/git/error.go @@ -0,0 +1,4 @@ +package git + +// For cosmetic purposes in Sentry +type copyError struct{ error } diff --git a/workhorse/internal/git/format-patch.go b/workhorse/internal/git/format-patch.go new file mode 100644 index 00000000000..db96029b07e --- /dev/null +++ b/workhorse/internal/git/format-patch.go @@ -0,0 +1,48 @@ +package git + +import ( + "fmt" + "net/http" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/senddata" +) + +type patch struct{ senddata.Prefix } +type patchParams struct { + GitalyServer gitaly.Server + RawPatchRequest string +} + +var SendPatch = &patch{"git-format-patch:"} + +func (p *patch) Inject(w http.ResponseWriter, r *http.Request, sendData string) { + var params patchParams + if err := p.Unpack(¶ms, sendData); err != nil { + helper.Fail500(w, r, fmt.Errorf("SendPatch: unpack sendData: %v", err)) + return + } + + request := &gitalypb.RawPatchRequest{} + if err := gitaly.UnmarshalJSON(params.RawPatchRequest, request); err != nil { + helper.Fail500(w, r, fmt.Errorf("diff.RawPatch: %v", err)) + return + } + + ctx, diffClient, err := gitaly.NewDiffClient(r.Context(), params.GitalyServer) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("diff.RawPatch: %v", err)) + return + } + + if err := diffClient.SendRawPatch(ctx, w, request); err != nil { + helper.LogError( + r, + ©Error{fmt.Errorf("diff.RawPatch: request=%v, err=%v", request, err)}, + ) + return + } +} diff --git a/workhorse/internal/git/git-http.go b/workhorse/internal/git/git-http.go new file mode 100644 index 00000000000..5df20a68bb7 --- /dev/null +++ b/workhorse/internal/git/git-http.go @@ -0,0 +1,100 @@ +/* +In this file we handle the Git 'smart HTTP' protocol +*/ + +package git + +import ( + "fmt" + "io" + "net/http" + "path/filepath" + "sync" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +const ( + // We have to use a negative transfer.hideRefs since this is the only way + // to undo an already set parameter: https://www.spinics.net/lists/git/msg256772.html + GitConfigShowAllRefs = "transfer.hideRefs=!refs" +) + +func ReceivePack(a *api.API) http.Handler { + return postRPCHandler(a, "handleReceivePack", handleReceivePack) +} + +func UploadPack(a *api.API) http.Handler { + return postRPCHandler(a, "handleUploadPack", handleUploadPack) +} + +func gitConfigOptions(a *api.Response) []string { + var out []string + + if a.ShowAllRefs { + out = append(out, GitConfigShowAllRefs) + } + + return out +} + +func postRPCHandler(a *api.API, name string, handler func(*HttpResponseWriter, *http.Request, *api.Response) error) http.Handler { + return repoPreAuthorizeHandler(a, func(rw http.ResponseWriter, r *http.Request, ar *api.Response) { + cr := &countReadCloser{ReadCloser: r.Body} + r.Body = cr + + w := NewHttpResponseWriter(rw) + defer func() { + w.Log(r, cr.Count()) + }() + + if err := handler(w, r, ar); err != nil { + // If the handler already wrote a response this WriteHeader call is a + // no-op. It never reaches net/http because GitHttpResponseWriter calls + // WriteHeader on its underlying ResponseWriter at most once. + w.WriteHeader(500) + helper.LogError(r, fmt.Errorf("%s: %v", name, err)) + } + }) +} + +func repoPreAuthorizeHandler(myAPI *api.API, handleFunc api.HandleFunc) http.Handler { + return myAPI.PreAuthorizeHandler(func(w http.ResponseWriter, r *http.Request, a *api.Response) { + handleFunc(w, r, a) + }, "") +} + +func writePostRPCHeader(w http.ResponseWriter, action string) { + w.Header().Set("Content-Type", fmt.Sprintf("application/x-%s-result", action)) + w.Header().Set("Cache-Control", "no-cache") +} + +func getService(r *http.Request) string { + if r.Method == "GET" { + return r.URL.Query().Get("service") + } + return filepath.Base(r.URL.Path) +} + +type countReadCloser struct { + n int64 + io.ReadCloser + sync.Mutex +} + +func (c *countReadCloser) Read(p []byte) (n int, err error) { + n, err = c.ReadCloser.Read(p) + + c.Lock() + defer c.Unlock() + c.n += int64(n) + + return n, err +} + +func (c *countReadCloser) Count() int64 { + c.Lock() + defer c.Unlock() + return c.n +} diff --git a/workhorse/internal/git/info-refs.go b/workhorse/internal/git/info-refs.go new file mode 100644 index 00000000000..e5491a7b733 --- /dev/null +++ b/workhorse/internal/git/info-refs.go @@ -0,0 +1,76 @@ +package git + +import ( + "compress/gzip" + "context" + "fmt" + "io" + "net/http" + + "github.com/golang/gddo/httputil" + + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +func GetInfoRefsHandler(a *api.API) http.Handler { + return repoPreAuthorizeHandler(a, handleGetInfoRefs) +} + +func handleGetInfoRefs(rw http.ResponseWriter, r *http.Request, a *api.Response) { + responseWriter := NewHttpResponseWriter(rw) + // Log 0 bytes in because we ignore the request body (and there usually is none anyway). + defer responseWriter.Log(r, 0) + + rpc := getService(r) + if !(rpc == "git-upload-pack" || rpc == "git-receive-pack") { + // The 'dumb' Git HTTP protocol is not supported + http.Error(responseWriter, "Not Found", 404) + return + } + + responseWriter.Header().Set("Content-Type", fmt.Sprintf("application/x-%s-advertisement", rpc)) + responseWriter.Header().Set("Cache-Control", "no-cache") + + gitProtocol := r.Header.Get("Git-Protocol") + + offers := []string{"gzip", "identity"} + encoding := httputil.NegotiateContentEncoding(r, offers) + + if err := handleGetInfoRefsWithGitaly(r.Context(), responseWriter, a, rpc, gitProtocol, encoding); err != nil { + helper.Fail500(responseWriter, r, fmt.Errorf("handleGetInfoRefs: %v", err)) + } +} + +func handleGetInfoRefsWithGitaly(ctx context.Context, responseWriter *HttpResponseWriter, a *api.Response, rpc, gitProtocol, encoding string) error { + ctx, smarthttp, err := gitaly.NewSmartHTTPClient(ctx, a.GitalyServer) + if err != nil { + return fmt.Errorf("GetInfoRefsHandler: %v", err) + } + + infoRefsResponseReader, err := smarthttp.InfoRefsResponseReader(ctx, &a.Repository, rpc, gitConfigOptions(a), gitProtocol) + if err != nil { + return fmt.Errorf("GetInfoRefsHandler: %v", err) + } + + var w io.Writer + + if encoding == "gzip" { + gzWriter := gzip.NewWriter(responseWriter) + w = gzWriter + defer gzWriter.Close() + + responseWriter.Header().Set("Content-Encoding", "gzip") + } else { + w = responseWriter + } + + if _, err = io.Copy(w, infoRefsResponseReader); err != nil { + log.WithError(err).Error("GetInfoRefsHandler: error copying gitaly response") + } + + return nil +} diff --git a/workhorse/internal/git/pktline.go b/workhorse/internal/git/pktline.go new file mode 100644 index 00000000000..e970f60182d --- /dev/null +++ b/workhorse/internal/git/pktline.go @@ -0,0 +1,59 @@ +package git + +import ( + "bufio" + "bytes" + "fmt" + "io" + "strconv" +) + +func scanDeepen(body io.Reader) bool { + scanner := bufio.NewScanner(body) + scanner.Split(pktLineSplitter) + for scanner.Scan() { + if bytes.HasPrefix(scanner.Bytes(), []byte("deepen")) && scanner.Err() == nil { + return true + } + } + + return false +} + +func pktLineSplitter(data []byte, atEOF bool) (advance int, token []byte, err error) { + if len(data) < 4 { + if atEOF && len(data) > 0 { + return 0, nil, fmt.Errorf("pktLineSplitter: incomplete length prefix on %q", data) + } + return 0, nil, nil // want more data + } + + if bytes.HasPrefix(data, []byte("0000")) { + // special case: "0000" terminator packet: return empty token + return 4, data[:0], nil + } + + // We have at least 4 bytes available so we can decode the 4-hex digit + // length prefix of the packet line. + pktLength64, err := strconv.ParseInt(string(data[:4]), 16, 0) + if err != nil { + return 0, nil, fmt.Errorf("pktLineSplitter: decode length: %v", err) + } + + // Cast is safe because we requested an int-size number from strconv.ParseInt + pktLength := int(pktLength64) + + if pktLength < 0 { + return 0, nil, fmt.Errorf("pktLineSplitter: invalid length: %d", pktLength) + } + + if len(data) < pktLength { + if atEOF { + return 0, nil, fmt.Errorf("pktLineSplitter: less than %d bytes in input %q", pktLength, data) + } + return 0, nil, nil // want more data + } + + // return "pkt" token without length prefix + return pktLength, data[4:pktLength], nil +} diff --git a/workhorse/internal/git/pktline_test.go b/workhorse/internal/git/pktline_test.go new file mode 100644 index 00000000000..d4be8634538 --- /dev/null +++ b/workhorse/internal/git/pktline_test.go @@ -0,0 +1,39 @@ +package git + +import ( + "bytes" + "testing" +) + +func TestSuccessfulScanDeepen(t *testing.T) { + examples := []struct { + input string + output bool + }{ + {"000dsomething000cdeepen 10000", true}, + {"000dsomething0000000cdeepen 1", true}, + {"000dsomething0000", false}, + } + + for _, example := range examples { + hasDeepen := scanDeepen(bytes.NewReader([]byte(example.input))) + + if hasDeepen != example.output { + t.Fatalf("scanDeepen %q: expected %v, got %v", example.input, example.output, hasDeepen) + } + } +} + +func TestFailedScanDeepen(t *testing.T) { + examples := []string{ + "invalid data", + "deepen", + "000cdeepen", + } + + for _, example := range examples { + if scanDeepen(bytes.NewReader([]byte(example))) { + t.Fatalf("scanDeepen %q: expected result to be false, got true", example) + } + } +} diff --git a/workhorse/internal/git/receive-pack.go b/workhorse/internal/git/receive-pack.go new file mode 100644 index 00000000000..e72d8be5174 --- /dev/null +++ b/workhorse/internal/git/receive-pack.go @@ -0,0 +1,33 @@ +package git + +import ( + "fmt" + "net/http" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +// Will not return a non-nil error after the response body has been +// written to. +func handleReceivePack(w *HttpResponseWriter, r *http.Request, a *api.Response) error { + action := getService(r) + writePostRPCHeader(w, action) + + cr, cw := helper.NewWriteAfterReader(r.Body, w) + defer cw.Flush() + + gitProtocol := r.Header.Get("Git-Protocol") + + ctx, smarthttp, err := gitaly.NewSmartHTTPClient(r.Context(), a.GitalyServer) + if err != nil { + return fmt.Errorf("smarthttp.ReceivePack: %v", err) + } + + if err := smarthttp.ReceivePack(ctx, &a.Repository, a.GL_ID, a.GL_USERNAME, a.GL_REPOSITORY, a.GitConfigOptions, cr, cw, gitProtocol); err != nil { + return fmt.Errorf("smarthttp.ReceivePack: %v", err) + } + + return nil +} diff --git a/workhorse/internal/git/responsewriter.go b/workhorse/internal/git/responsewriter.go new file mode 100644 index 00000000000..12796e985c4 --- /dev/null +++ b/workhorse/internal/git/responsewriter.go @@ -0,0 +1,80 @@ +package git + +import ( + "net/http" + "strconv" + + "github.com/prometheus/client_golang/prometheus" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +const ( + directionIn = "in" + directionOut = "out" +) + +var ( + gitHTTPSessionsActive = prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "gitlab_workhorse_git_http_sessions_active", + Help: "Number of Git HTTP request-response cycles currently being handled by gitlab-workhorse.", + }) + + gitHTTPRequests = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_git_http_requests", + Help: "How many Git HTTP requests have been processed by gitlab-workhorse, partitioned by request type and agent.", + }, + []string{"method", "code", "service", "agent"}, + ) + + gitHTTPBytes = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_git_http_bytes", + Help: "How many Git HTTP bytes have been sent by gitlab-workhorse, partitioned by request type, agent and direction.", + }, + []string{"method", "code", "service", "agent", "direction"}, + ) +) + +func init() { + prometheus.MustRegister(gitHTTPSessionsActive) + prometheus.MustRegister(gitHTTPRequests) + prometheus.MustRegister(gitHTTPBytes) +} + +type HttpResponseWriter struct { + helper.CountingResponseWriter +} + +func NewHttpResponseWriter(rw http.ResponseWriter) *HttpResponseWriter { + gitHTTPSessionsActive.Inc() + return &HttpResponseWriter{ + CountingResponseWriter: helper.NewCountingResponseWriter(rw), + } +} + +func (w *HttpResponseWriter) Log(r *http.Request, writtenIn int64) { + service := getService(r) + agent := getRequestAgent(r) + + gitHTTPSessionsActive.Dec() + gitHTTPRequests.WithLabelValues(r.Method, strconv.Itoa(w.Status()), service, agent).Inc() + gitHTTPBytes.WithLabelValues(r.Method, strconv.Itoa(w.Status()), service, agent, directionIn). + Add(float64(writtenIn)) + gitHTTPBytes.WithLabelValues(r.Method, strconv.Itoa(w.Status()), service, agent, directionOut). + Add(float64(w.Count())) +} + +func getRequestAgent(r *http.Request) string { + u, _, ok := r.BasicAuth() + if !ok { + return "anonymous" + } + + if u == "gitlab-ci-token" { + return "gitlab-ci" + } + + return "logged" +} diff --git a/workhorse/internal/git/snapshot.go b/workhorse/internal/git/snapshot.go new file mode 100644 index 00000000000..eb38becbd06 --- /dev/null +++ b/workhorse/internal/git/snapshot.go @@ -0,0 +1,64 @@ +package git + +import ( + "fmt" + "io" + "net/http" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/senddata" +) + +type snapshot struct { + senddata.Prefix +} + +type snapshotParams struct { + GitalyServer gitaly.Server + GetSnapshotRequest string +} + +var ( + SendSnapshot = &snapshot{"git-snapshot:"} +) + +func (s *snapshot) Inject(w http.ResponseWriter, r *http.Request, sendData string) { + var params snapshotParams + + if err := s.Unpack(¶ms, sendData); err != nil { + helper.Fail500(w, r, fmt.Errorf("SendSnapshot: unpack sendData: %v", err)) + return + } + + request := &gitalypb.GetSnapshotRequest{} + if err := gitaly.UnmarshalJSON(params.GetSnapshotRequest, request); err != nil { + helper.Fail500(w, r, fmt.Errorf("SendSnapshot: unmarshal GetSnapshotRequest: %v", err)) + return + } + + ctx, c, err := gitaly.NewRepositoryClient(r.Context(), params.GitalyServer) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("SendSnapshot: gitaly.NewRepositoryClient: %v", err)) + return + } + + reader, err := c.SnapshotReader(ctx, request) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("SendSnapshot: client.SnapshotReader: %v", err)) + return + } + + w.Header().Del("Content-Length") + w.Header().Set("Content-Disposition", `attachment; filename="snapshot.tar"`) + w.Header().Set("Content-Type", "application/x-tar") + w.Header().Set("Content-Transfer-Encoding", "binary") + w.Header().Set("Cache-Control", "private") + w.WriteHeader(http.StatusOK) // Errors aren't detectable beyond this point + + if _, err := io.Copy(w, reader); err != nil { + helper.LogError(r, fmt.Errorf("SendSnapshot: copy gitaly output: %v", err)) + } +} diff --git a/workhorse/internal/git/upload-pack.go b/workhorse/internal/git/upload-pack.go new file mode 100644 index 00000000000..a3dbf2f2e02 --- /dev/null +++ b/workhorse/internal/git/upload-pack.go @@ -0,0 +1,57 @@ +package git + +import ( + "context" + "fmt" + "io" + "net/http" + "time" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +var ( + uploadPackTimeout = 10 * time.Minute +) + +// Will not return a non-nil error after the response body has been +// written to. +func handleUploadPack(w *HttpResponseWriter, r *http.Request, a *api.Response) error { + ctx := r.Context() + + // Prevent the client from holding the connection open indefinitely. A + // transfer rate of 17KiB/sec is sufficient to send 10MiB of data in + // ten minutes, which seems adequate. Most requests will be much smaller. + // This mitigates a use-after-check issue. + // + // We can't reliably interrupt the read from a http handler, but we can + // ensure the request will (eventually) fail: https://github.com/golang/go/issues/16100 + readerCtx, cancel := context.WithTimeout(ctx, uploadPackTimeout) + defer cancel() + + limited := helper.NewContextReader(readerCtx, r.Body) + cr, cw := helper.NewWriteAfterReader(limited, w) + defer cw.Flush() + + action := getService(r) + writePostRPCHeader(w, action) + + gitProtocol := r.Header.Get("Git-Protocol") + + return handleUploadPackWithGitaly(ctx, a, cr, cw, gitProtocol) +} + +func handleUploadPackWithGitaly(ctx context.Context, a *api.Response, clientRequest io.Reader, clientResponse io.Writer, gitProtocol string) error { + ctx, smarthttp, err := gitaly.NewSmartHTTPClient(ctx, a.GitalyServer) + if err != nil { + return fmt.Errorf("smarthttp.UploadPack: %v", err) + } + + if err := smarthttp.UploadPack(ctx, &a.Repository, clientRequest, clientResponse, gitConfigOptions(a), gitProtocol); err != nil { + return fmt.Errorf("smarthttp.UploadPack: %v", err) + } + + return nil +} diff --git a/workhorse/internal/git/upload-pack_test.go b/workhorse/internal/git/upload-pack_test.go new file mode 100644 index 00000000000..c198939d5df --- /dev/null +++ b/workhorse/internal/git/upload-pack_test.go @@ -0,0 +1,85 @@ +package git + +import ( + "fmt" + "io/ioutil" + "net" + "net/http/httptest" + "os" + "path/filepath" + "testing" + "time" + + "github.com/stretchr/testify/require" + "google.golang.org/grpc" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" +) + +var ( + originalUploadPackTimeout = uploadPackTimeout +) + +type fakeReader struct { + n int + err error +} + +func (f *fakeReader) Read(b []byte) (int, error) { + return f.n, f.err +} + +type smartHTTPServiceServer struct { + gitalypb.UnimplementedSmartHTTPServiceServer + PostUploadPackFunc func(gitalypb.SmartHTTPService_PostUploadPackServer) error +} + +func (srv *smartHTTPServiceServer) PostUploadPack(s gitalypb.SmartHTTPService_PostUploadPackServer) error { + return srv.PostUploadPackFunc(s) +} + +func TestUploadPackTimesOut(t *testing.T) { + uploadPackTimeout = time.Millisecond + defer func() { uploadPackTimeout = originalUploadPackTimeout }() + + addr, cleanUp := startSmartHTTPServer(t, &smartHTTPServiceServer{ + PostUploadPackFunc: func(stream gitalypb.SmartHTTPService_PostUploadPackServer) error { + _, err := stream.Recv() // trigger a read on the client request body + require.NoError(t, err) + return nil + }, + }) + defer cleanUp() + + body := &fakeReader{n: 0, err: nil} + + w := httptest.NewRecorder() + r := httptest.NewRequest("GET", "/", body) + a := &api.Response{GitalyServer: gitaly.Server{Address: addr}} + + err := handleUploadPack(NewHttpResponseWriter(w), r, a) + require.EqualError(t, err, "smarthttp.UploadPack: busyReader: context deadline exceeded") +} + +func startSmartHTTPServer(t testing.TB, s gitalypb.SmartHTTPServiceServer) (string, func()) { + tmp, err := ioutil.TempDir("", "") + require.NoError(t, err) + + socket := filepath.Join(tmp, "gitaly.sock") + ln, err := net.Listen("unix", socket) + require.NoError(t, err) + + srv := grpc.NewServer() + gitalypb.RegisterSmartHTTPServiceServer(srv, s) + go func() { + require.NoError(t, srv.Serve(ln)) + }() + + return fmt.Sprintf("%s://%s", ln.Addr().Network(), ln.Addr().String()), func() { + srv.GracefulStop() + require.NoError(t, os.RemoveAll(tmp), "error removing temp dir %q", tmp) + } +} diff --git a/workhorse/internal/gitaly/blob.go b/workhorse/internal/gitaly/blob.go new file mode 100644 index 00000000000..c6f5d6676f3 --- /dev/null +++ b/workhorse/internal/gitaly/blob.go @@ -0,0 +1,41 @@ +package gitaly + +import ( + "context" + "fmt" + "io" + "net/http" + "strconv" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + "gitlab.com/gitlab-org/gitaly/streamio" +) + +type BlobClient struct { + gitalypb.BlobServiceClient +} + +func (client *BlobClient) SendBlob(ctx context.Context, w http.ResponseWriter, request *gitalypb.GetBlobRequest) error { + c, err := client.GetBlob(ctx, request) + if err != nil { + return fmt.Errorf("rpc failed: %v", err) + } + + firstResponseReceived := false + rr := streamio.NewReader(func() ([]byte, error) { + resp, err := c.Recv() + + if !firstResponseReceived && err == nil { + firstResponseReceived = true + w.Header().Set("Content-Length", strconv.FormatInt(resp.GetSize(), 10)) + } + + return resp.GetData(), err + }) + + if _, err := io.Copy(w, rr); err != nil { + return fmt.Errorf("copy rpc data: %v", err) + } + + return nil +} diff --git a/workhorse/internal/gitaly/diff.go b/workhorse/internal/gitaly/diff.go new file mode 100644 index 00000000000..035a58ec6fd --- /dev/null +++ b/workhorse/internal/gitaly/diff.go @@ -0,0 +1,55 @@ +package gitaly + +import ( + "context" + "fmt" + "io" + "net/http" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + "gitlab.com/gitlab-org/gitaly/streamio" +) + +type DiffClient struct { + gitalypb.DiffServiceClient +} + +func (client *DiffClient) SendRawDiff(ctx context.Context, w http.ResponseWriter, request *gitalypb.RawDiffRequest) error { + c, err := client.RawDiff(ctx, request) + if err != nil { + return fmt.Errorf("rpc failed: %v", err) + } + + w.Header().Del("Content-Length") + + rr := streamio.NewReader(func() ([]byte, error) { + resp, err := c.Recv() + return resp.GetData(), err + }) + + if _, err := io.Copy(w, rr); err != nil { + return fmt.Errorf("copy rpc data: %v", err) + } + + return nil +} + +func (client *DiffClient) SendRawPatch(ctx context.Context, w http.ResponseWriter, request *gitalypb.RawPatchRequest) error { + c, err := client.RawPatch(ctx, request) + if err != nil { + return fmt.Errorf("rpc failed: %v", err) + } + + w.Header().Del("Content-Length") + + rr := streamio.NewReader(func() ([]byte, error) { + resp, err := c.Recv() + return resp.GetData(), err + }) + + if _, err := io.Copy(w, rr); err != nil { + return fmt.Errorf("copy rpc data: %v", err) + } + + return nil +} diff --git a/workhorse/internal/gitaly/gitaly.go b/workhorse/internal/gitaly/gitaly.go new file mode 100644 index 00000000000..ba9fbd1c919 --- /dev/null +++ b/workhorse/internal/gitaly/gitaly.go @@ -0,0 +1,191 @@ +package gitaly + +import ( + "context" + "strings" + "sync" + + "github.com/golang/protobuf/jsonpb" //lint:ignore SA1019 https://gitlab.com/gitlab-org/gitlab-workhorse/-/issues/274 + "github.com/golang/protobuf/proto" //lint:ignore SA1019 https://gitlab.com/gitlab-org/gitlab-workhorse/-/issues/274 + grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" + grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus" + "github.com/prometheus/client_golang/prometheus" + gitalyauth "gitlab.com/gitlab-org/gitaly/auth" + gitalyclient "gitlab.com/gitlab-org/gitaly/client" + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + + grpccorrelation "gitlab.com/gitlab-org/labkit/correlation/grpc" + grpctracing "gitlab.com/gitlab-org/labkit/tracing/grpc" +) + +type Server struct { + Address string `json:"address"` + Token string `json:"token"` + Features map[string]string `json:"features"` +} + +type cacheKey struct{ address, token string } + +func (server Server) cacheKey() cacheKey { + return cacheKey{address: server.Address, token: server.Token} +} + +type connectionsCache struct { + sync.RWMutex + connections map[cacheKey]*grpc.ClientConn +} + +var ( + jsonUnMarshaler = jsonpb.Unmarshaler{AllowUnknownFields: true} + cache = connectionsCache{ + connections: make(map[cacheKey]*grpc.ClientConn), + } + + connectionsTotal = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_gitaly_connections_total", + Help: "Number of Gitaly connections that have been established", + }, + []string{"status"}, + ) +) + +func init() { + prometheus.MustRegister(connectionsTotal) +} + +func withOutgoingMetadata(ctx context.Context, features map[string]string) context.Context { + md := metadata.New(nil) + for k, v := range features { + if !strings.HasPrefix(k, "gitaly-feature-") { + continue + } + md.Append(k, v) + } + + return metadata.NewOutgoingContext(ctx, md) +} + +func NewSmartHTTPClient(ctx context.Context, server Server) (context.Context, *SmartHTTPClient, error) { + conn, err := getOrCreateConnection(server) + if err != nil { + return nil, nil, err + } + grpcClient := gitalypb.NewSmartHTTPServiceClient(conn) + return withOutgoingMetadata(ctx, server.Features), &SmartHTTPClient{grpcClient}, nil +} + +func NewBlobClient(ctx context.Context, server Server) (context.Context, *BlobClient, error) { + conn, err := getOrCreateConnection(server) + if err != nil { + return nil, nil, err + } + grpcClient := gitalypb.NewBlobServiceClient(conn) + return withOutgoingMetadata(ctx, server.Features), &BlobClient{grpcClient}, nil +} + +func NewRepositoryClient(ctx context.Context, server Server) (context.Context, *RepositoryClient, error) { + conn, err := getOrCreateConnection(server) + if err != nil { + return nil, nil, err + } + grpcClient := gitalypb.NewRepositoryServiceClient(conn) + return withOutgoingMetadata(ctx, server.Features), &RepositoryClient{grpcClient}, nil +} + +// NewNamespaceClient is only used by the Gitaly integration tests at present +func NewNamespaceClient(ctx context.Context, server Server) (context.Context, *NamespaceClient, error) { + conn, err := getOrCreateConnection(server) + if err != nil { + return nil, nil, err + } + grpcClient := gitalypb.NewNamespaceServiceClient(conn) + return withOutgoingMetadata(ctx, server.Features), &NamespaceClient{grpcClient}, nil +} + +func NewDiffClient(ctx context.Context, server Server) (context.Context, *DiffClient, error) { + conn, err := getOrCreateConnection(server) + if err != nil { + return nil, nil, err + } + grpcClient := gitalypb.NewDiffServiceClient(conn) + return withOutgoingMetadata(ctx, server.Features), &DiffClient{grpcClient}, nil +} + +func getOrCreateConnection(server Server) (*grpc.ClientConn, error) { + key := server.cacheKey() + + cache.RLock() + conn := cache.connections[key] + cache.RUnlock() + + if conn != nil { + return conn, nil + } + + cache.Lock() + defer cache.Unlock() + + if conn := cache.connections[key]; conn != nil { + return conn, nil + } + + conn, err := newConnection(server) + if err != nil { + return nil, err + } + + cache.connections[key] = conn + + return conn, nil +} + +func CloseConnections() { + cache.Lock() + defer cache.Unlock() + + for _, conn := range cache.connections { + conn.Close() + } +} + +func newConnection(server Server) (*grpc.ClientConn, error) { + connOpts := append(gitalyclient.DefaultDialOpts, + grpc.WithPerRPCCredentials(gitalyauth.RPCCredentialsV2(server.Token)), + grpc.WithStreamInterceptor( + grpc_middleware.ChainStreamClient( + grpctracing.StreamClientTracingInterceptor(), + grpc_prometheus.StreamClientInterceptor, + grpccorrelation.StreamClientCorrelationInterceptor( + grpccorrelation.WithClientName("gitlab-workhorse"), + ), + ), + ), + + grpc.WithUnaryInterceptor( + grpc_middleware.ChainUnaryClient( + grpctracing.UnaryClientTracingInterceptor(), + grpc_prometheus.UnaryClientInterceptor, + grpccorrelation.UnaryClientCorrelationInterceptor( + grpccorrelation.WithClientName("gitlab-workhorse"), + ), + ), + ), + ) + + conn, connErr := gitalyclient.Dial(server.Address, connOpts) + + label := "ok" + if connErr != nil { + label = "fail" + } + connectionsTotal.WithLabelValues(label).Inc() + + return conn, connErr +} + +func UnmarshalJSON(s string, msg proto.Message) error { + return jsonUnMarshaler.Unmarshal(strings.NewReader(s), msg) +} diff --git a/workhorse/internal/gitaly/gitaly_test.go b/workhorse/internal/gitaly/gitaly_test.go new file mode 100644 index 00000000000..b17fb5c1d7b --- /dev/null +++ b/workhorse/internal/gitaly/gitaly_test.go @@ -0,0 +1,80 @@ +package gitaly + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + "google.golang.org/grpc/metadata" +) + +func TestNewSmartHTTPClient(t *testing.T) { + ctx, _, err := NewSmartHTTPClient(context.Background(), serverFixture()) + require.NoError(t, err) + testOutgoingMetadata(t, ctx) +} + +func TestNewBlobClient(t *testing.T) { + ctx, _, err := NewBlobClient(context.Background(), serverFixture()) + require.NoError(t, err) + testOutgoingMetadata(t, ctx) +} + +func TestNewRepositoryClient(t *testing.T) { + ctx, _, err := NewRepositoryClient(context.Background(), serverFixture()) + require.NoError(t, err) + testOutgoingMetadata(t, ctx) +} + +func TestNewNamespaceClient(t *testing.T) { + ctx, _, err := NewNamespaceClient(context.Background(), serverFixture()) + require.NoError(t, err) + testOutgoingMetadata(t, ctx) +} + +func TestNewDiffClient(t *testing.T) { + ctx, _, err := NewDiffClient(context.Background(), serverFixture()) + require.NoError(t, err) + testOutgoingMetadata(t, ctx) +} + +func testOutgoingMetadata(t *testing.T, ctx context.Context) { + md, ok := metadata.FromOutgoingContext(ctx) + require.True(t, ok, "get metadata from context") + + for k, v := range allowedFeatures() { + actual := md[k] + require.Len(t, actual, 1, "expect one value for %v", k) + require.Equal(t, v, actual[0], "value for %v", k) + } + + for k := range badFeatureMetadata() { + require.Empty(t, md[k], "value for bad key %v", k) + } +} + +func serverFixture() Server { + features := make(map[string]string) + for k, v := range allowedFeatures() { + features[k] = v + } + for k, v := range badFeatureMetadata() { + features[k] = v + } + + return Server{Address: "tcp://localhost:123", Features: features} +} + +func allowedFeatures() map[string]string { + return map[string]string{ + "gitaly-feature-foo": "bar", + "gitaly-feature-qux": "baz", + } +} + +func badFeatureMetadata() map[string]string { + return map[string]string{ + "bad-metadata-1": "bad-value-1", + "bad-metadata-2": "bad-value-2", + } +} diff --git a/workhorse/internal/gitaly/namespace.go b/workhorse/internal/gitaly/namespace.go new file mode 100644 index 00000000000..6db6ed4fc32 --- /dev/null +++ b/workhorse/internal/gitaly/namespace.go @@ -0,0 +1,8 @@ +package gitaly + +import "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + +// NamespaceClient encapsulates NamespaceService calls +type NamespaceClient struct { + gitalypb.NamespaceServiceClient +} diff --git a/workhorse/internal/gitaly/repository.go b/workhorse/internal/gitaly/repository.go new file mode 100644 index 00000000000..e3ec3257a85 --- /dev/null +++ b/workhorse/internal/gitaly/repository.go @@ -0,0 +1,45 @@ +package gitaly + +import ( + "context" + "fmt" + "io" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + "gitlab.com/gitlab-org/gitaly/streamio" +) + +// RepositoryClient encapsulates RepositoryService calls +type RepositoryClient struct { + gitalypb.RepositoryServiceClient +} + +// ArchiveReader performs a GetArchive Gitaly request and returns an io.Reader +// for the response +func (client *RepositoryClient) ArchiveReader(ctx context.Context, request *gitalypb.GetArchiveRequest) (io.Reader, error) { + c, err := client.GetArchive(ctx, request) + if err != nil { + return nil, fmt.Errorf("RepositoryService::GetArchive: %v", err) + } + + return streamio.NewReader(func() ([]byte, error) { + resp, err := c.Recv() + + return resp.GetData(), err + }), nil +} + +// SnapshotReader performs a GetSnapshot Gitaly request and returns an io.Reader +// for the response +func (client *RepositoryClient) SnapshotReader(ctx context.Context, request *gitalypb.GetSnapshotRequest) (io.Reader, error) { + c, err := client.GetSnapshot(ctx, request) + if err != nil { + return nil, fmt.Errorf("RepositoryService::GetSnapshot: %v", err) + } + + return streamio.NewReader(func() ([]byte, error) { + resp, err := c.Recv() + + return resp.GetData(), err + }), nil +} diff --git a/workhorse/internal/gitaly/smarthttp.go b/workhorse/internal/gitaly/smarthttp.go new file mode 100644 index 00000000000..d1fe6fae5ba --- /dev/null +++ b/workhorse/internal/gitaly/smarthttp.go @@ -0,0 +1,139 @@ +package gitaly + +import ( + "context" + "fmt" + "io" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + "gitlab.com/gitlab-org/gitaly/streamio" +) + +type SmartHTTPClient struct { + gitalypb.SmartHTTPServiceClient +} + +func (client *SmartHTTPClient) InfoRefsResponseReader(ctx context.Context, repo *gitalypb.Repository, rpc string, gitConfigOptions []string, gitProtocol string) (io.Reader, error) { + rpcRequest := &gitalypb.InfoRefsRequest{ + Repository: repo, + GitConfigOptions: gitConfigOptions, + GitProtocol: gitProtocol, + } + + switch rpc { + case "git-upload-pack": + stream, err := client.InfoRefsUploadPack(ctx, rpcRequest) + return infoRefsReader(stream), err + case "git-receive-pack": + stream, err := client.InfoRefsReceivePack(ctx, rpcRequest) + return infoRefsReader(stream), err + default: + return nil, fmt.Errorf("InfoRefsResponseWriterTo: Unsupported RPC: %q", rpc) + } +} + +type infoRefsClient interface { + Recv() (*gitalypb.InfoRefsResponse, error) +} + +func infoRefsReader(stream infoRefsClient) io.Reader { + return streamio.NewReader(func() ([]byte, error) { + resp, err := stream.Recv() + return resp.GetData(), err + }) +} + +func (client *SmartHTTPClient) ReceivePack(ctx context.Context, repo *gitalypb.Repository, glId string, glUsername string, glRepository string, gitConfigOptions []string, clientRequest io.Reader, clientResponse io.Writer, gitProtocol string) error { + stream, err := client.PostReceivePack(ctx) + if err != nil { + return err + } + + rpcRequest := &gitalypb.PostReceivePackRequest{ + Repository: repo, + GlId: glId, + GlUsername: glUsername, + GlRepository: glRepository, + GitConfigOptions: gitConfigOptions, + GitProtocol: gitProtocol, + } + + if err := stream.Send(rpcRequest); err != nil { + return fmt.Errorf("initial request: %v", err) + } + + numStreams := 2 + errC := make(chan error, numStreams) + + go func() { + rr := streamio.NewReader(func() ([]byte, error) { + response, err := stream.Recv() + return response.GetData(), err + }) + _, err := io.Copy(clientResponse, rr) + errC <- err + }() + + go func() { + sw := streamio.NewWriter(func(data []byte) error { + return stream.Send(&gitalypb.PostReceivePackRequest{Data: data}) + }) + _, err := io.Copy(sw, clientRequest) + stream.CloseSend() + errC <- err + }() + + for i := 0; i < numStreams; i++ { + if err := <-errC; err != nil { + return err + } + } + + return nil +} + +func (client *SmartHTTPClient) UploadPack(ctx context.Context, repo *gitalypb.Repository, clientRequest io.Reader, clientResponse io.Writer, gitConfigOptions []string, gitProtocol string) error { + stream, err := client.PostUploadPack(ctx) + if err != nil { + return err + } + + rpcRequest := &gitalypb.PostUploadPackRequest{ + Repository: repo, + GitConfigOptions: gitConfigOptions, + GitProtocol: gitProtocol, + } + + if err := stream.Send(rpcRequest); err != nil { + return fmt.Errorf("initial request: %v", err) + } + + numStreams := 2 + errC := make(chan error, numStreams) + + go func() { + rr := streamio.NewReader(func() ([]byte, error) { + response, err := stream.Recv() + return response.GetData(), err + }) + _, err := io.Copy(clientResponse, rr) + errC <- err + }() + + go func() { + sw := streamio.NewWriter(func(data []byte) error { + return stream.Send(&gitalypb.PostUploadPackRequest{Data: data}) + }) + _, err := io.Copy(sw, clientRequest) + stream.CloseSend() + errC <- err + }() + + for i := 0; i < numStreams; i++ { + if err := <-errC; err != nil { + return err + } + } + + return nil +} diff --git a/workhorse/internal/gitaly/unmarshal_test.go b/workhorse/internal/gitaly/unmarshal_test.go new file mode 100644 index 00000000000..e2256903339 --- /dev/null +++ b/workhorse/internal/gitaly/unmarshal_test.go @@ -0,0 +1,35 @@ +package gitaly + +import ( + "testing" + + "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" +) + +func TestUnmarshalJSON(t *testing.T) { + testCases := []struct { + desc string + in string + out gitalypb.Repository + }{ + { + desc: "basic example", + in: `{"relative_path":"foo/bar.git"}`, + out: gitalypb.Repository{RelativePath: "foo/bar.git"}, + }, + { + desc: "unknown field", + in: `{"relative_path":"foo/bar.git","unknown_field":12345}`, + out: gitalypb.Repository{RelativePath: "foo/bar.git"}, + }, + } + + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + result := gitalypb.Repository{} + require.NoError(t, UnmarshalJSON(tc.in, &result)) + require.Equal(t, tc.out, result) + }) + } +} diff --git a/workhorse/internal/headers/content_headers.go b/workhorse/internal/headers/content_headers.go new file mode 100644 index 00000000000..e43f10745d4 --- /dev/null +++ b/workhorse/internal/headers/content_headers.go @@ -0,0 +1,109 @@ +package headers + +import ( + "net/http" + "regexp" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/utils/svg" +) + +var ( + ImageTypeRegex = regexp.MustCompile(`^image/*`) + SvgMimeTypeRegex = regexp.MustCompile(`^image/svg\+xml$`) + + TextTypeRegex = regexp.MustCompile(`^text/*`) + + VideoTypeRegex = regexp.MustCompile(`^video/*`) + + PdfTypeRegex = regexp.MustCompile(`application\/pdf`) + + AttachmentRegex = regexp.MustCompile(`^attachment`) + InlineRegex = regexp.MustCompile(`^inline`) +) + +// Mime types that can't be inlined. Usually subtypes of main types +var forbiddenInlineTypes = []*regexp.Regexp{SvgMimeTypeRegex} + +// Mime types that can be inlined. We can add global types like "image/" or +// specific types like "text/plain". If there is a specific type inside a global +// allowed type that can't be inlined we must add it to the forbiddenInlineTypes var. +// One example of this is the mime type "image". We allow all images to be +// inlined except for SVGs. +var allowedInlineTypes = []*regexp.Regexp{ImageTypeRegex, TextTypeRegex, VideoTypeRegex, PdfTypeRegex} + +func SafeContentHeaders(data []byte, contentDisposition string) (string, string) { + contentType := safeContentType(data) + contentDisposition = safeContentDisposition(contentType, contentDisposition) + return contentType, contentDisposition +} + +func safeContentType(data []byte) string { + // Special case for svg because DetectContentType detects it as text + if svg.Is(data) { + return "image/svg+xml" + } + + // Override any existing Content-Type header from other ResponseWriters + contentType := http.DetectContentType(data) + + // If the content is text type, we set to plain, because we don't + // want to render it inline if they're html or javascript + if isType(contentType, TextTypeRegex) { + return "text/plain; charset=utf-8" + } + + return contentType +} + +func safeContentDisposition(contentType string, contentDisposition string) string { + // If the existing disposition is attachment we return that. This allow us + // to force a download from GitLab (ie: RawController) + if AttachmentRegex.MatchString(contentDisposition) { + return contentDisposition + } + + // Checks for mime types that are forbidden to be inline + for _, element := range forbiddenInlineTypes { + if isType(contentType, element) { + return attachmentDisposition(contentDisposition) + } + } + + // Checks for mime types allowed to be inline + for _, element := range allowedInlineTypes { + if isType(contentType, element) { + return inlineDisposition(contentDisposition) + } + } + + // Anything else is set to attachment + return attachmentDisposition(contentDisposition) +} + +func attachmentDisposition(contentDisposition string) string { + if contentDisposition == "" { + return "attachment" + } + + if InlineRegex.MatchString(contentDisposition) { + return InlineRegex.ReplaceAllString(contentDisposition, "attachment") + } + + return contentDisposition +} + +func inlineDisposition(contentDisposition string) string { + if contentDisposition == "" { + return "inline" + } + + if AttachmentRegex.MatchString(contentDisposition) { + return AttachmentRegex.ReplaceAllString(contentDisposition, "inline") + } + + return contentDisposition +} + +func isType(contentType string, mimeType *regexp.Regexp) bool { + return mimeType.MatchString(contentType) +} diff --git a/workhorse/internal/headers/headers.go b/workhorse/internal/headers/headers.go new file mode 100644 index 00000000000..63b39a6aa41 --- /dev/null +++ b/workhorse/internal/headers/headers.go @@ -0,0 +1,62 @@ +package headers + +import ( + "net/http" + "strconv" +) + +// Max number of bytes that http.DetectContentType needs to get the content type +// Fixme: Go back to 512 bytes once https://gitlab.com/gitlab-org/gitlab-workhorse/issues/208 +// has been merged +const MaxDetectSize = 4096 + +// HTTP Headers +const ( + ContentDispositionHeader = "Content-Disposition" + ContentTypeHeader = "Content-Type" + + // Workhorse related headers + GitlabWorkhorseSendDataHeader = "Gitlab-Workhorse-Send-Data" + XSendFileHeader = "X-Sendfile" + XSendFileTypeHeader = "X-Sendfile-Type" + + // Signal header that indicates Workhorse should detect and set the content headers + GitlabWorkhorseDetectContentTypeHeader = "Gitlab-Workhorse-Detect-Content-Type" +) + +var ResponseHeaders = []string{ + XSendFileHeader, + GitlabWorkhorseSendDataHeader, + GitlabWorkhorseDetectContentTypeHeader, +} + +func IsDetectContentTypeHeaderPresent(rw http.ResponseWriter) bool { + header, err := strconv.ParseBool(rw.Header().Get(GitlabWorkhorseDetectContentTypeHeader)) + if err != nil || !header { + return false + } + + return true +} + +// AnyResponseHeaderPresent checks in the ResponseWriter if there is any Response Header +func AnyResponseHeaderPresent(rw http.ResponseWriter) bool { + // If this header is not present means that we want the old behavior + if !IsDetectContentTypeHeaderPresent(rw) { + return false + } + + for _, header := range ResponseHeaders { + if rw.Header().Get(header) != "" { + return true + } + } + return false +} + +// RemoveResponseHeaders removes any ResponseHeader from the ResponseWriter +func RemoveResponseHeaders(rw http.ResponseWriter) { + for _, header := range ResponseHeaders { + rw.Header().Del(header) + } +} diff --git a/workhorse/internal/headers/headers_test.go b/workhorse/internal/headers/headers_test.go new file mode 100644 index 00000000000..555406ff165 --- /dev/null +++ b/workhorse/internal/headers/headers_test.go @@ -0,0 +1,24 @@ +package headers + +import ( + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestIsDetectContentTypeHeaderPresent(t *testing.T) { + rw := httptest.NewRecorder() + + rw.Header().Del(GitlabWorkhorseDetectContentTypeHeader) + require.Equal(t, false, IsDetectContentTypeHeaderPresent(rw)) + + rw.Header().Set(GitlabWorkhorseDetectContentTypeHeader, "true") + require.Equal(t, true, IsDetectContentTypeHeaderPresent(rw)) + + rw.Header().Set(GitlabWorkhorseDetectContentTypeHeader, "false") + require.Equal(t, false, IsDetectContentTypeHeaderPresent(rw)) + + rw.Header().Set(GitlabWorkhorseDetectContentTypeHeader, "foobar") + require.Equal(t, false, IsDetectContentTypeHeaderPresent(rw)) +} diff --git a/workhorse/internal/helper/context_reader.go b/workhorse/internal/helper/context_reader.go new file mode 100644 index 00000000000..a4764043147 --- /dev/null +++ b/workhorse/internal/helper/context_reader.go @@ -0,0 +1,40 @@ +package helper + +import ( + "context" + "io" +) + +type ContextReader struct { + ctx context.Context + underlyingReader io.Reader +} + +func NewContextReader(ctx context.Context, underlyingReader io.Reader) *ContextReader { + return &ContextReader{ + ctx: ctx, + underlyingReader: underlyingReader, + } +} + +func (r *ContextReader) Read(b []byte) (int, error) { + if r.canceled() { + return 0, r.err() + } + + n, err := r.underlyingReader.Read(b) + + if r.canceled() { + err = r.err() + } + + return n, err +} + +func (r *ContextReader) canceled() bool { + return r.err() != nil +} + +func (r *ContextReader) err() error { + return r.ctx.Err() +} diff --git a/workhorse/internal/helper/context_reader_test.go b/workhorse/internal/helper/context_reader_test.go new file mode 100644 index 00000000000..257ec4e35f2 --- /dev/null +++ b/workhorse/internal/helper/context_reader_test.go @@ -0,0 +1,83 @@ +package helper + +import ( + "context" + "io" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +type fakeReader struct { + n int + err error +} + +func (f *fakeReader) Read(b []byte) (int, error) { + return f.n, f.err +} + +type fakeContextWithTimeout struct { + n int + threshold int +} + +func (*fakeContextWithTimeout) Deadline() (deadline time.Time, ok bool) { + return +} + +func (*fakeContextWithTimeout) Done() <-chan struct{} { + return nil +} + +func (*fakeContextWithTimeout) Value(key interface{}) interface{} { + return nil +} + +func (f *fakeContextWithTimeout) Err() error { + f.n++ + if f.n > f.threshold { + return context.DeadlineExceeded + } + + return nil +} + +func TestContextReaderRead(t *testing.T) { + underlyingReader := &fakeReader{n: 1, err: io.EOF} + + for _, tc := range []struct { + desc string + ctx *fakeContextWithTimeout + expectedN int + expectedErr error + }{ + { + desc: "Before and after read deadline checks are fine", + ctx: &fakeContextWithTimeout{n: 0, threshold: 2}, + expectedN: underlyingReader.n, + expectedErr: underlyingReader.err, + }, + { + desc: "Before read deadline check fails", + ctx: &fakeContextWithTimeout{n: 0, threshold: 0}, + expectedN: 0, + expectedErr: context.DeadlineExceeded, + }, + { + desc: "After read deadline check fails", + ctx: &fakeContextWithTimeout{n: 0, threshold: 1}, + expectedN: underlyingReader.n, + expectedErr: context.DeadlineExceeded, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + cr := NewContextReader(tc.ctx, underlyingReader) + + n, err := cr.Read(nil) + require.Equal(t, tc.expectedN, n) + require.Equal(t, tc.expectedErr, err) + }) + } +} diff --git a/workhorse/internal/helper/countingresponsewriter.go b/workhorse/internal/helper/countingresponsewriter.go new file mode 100644 index 00000000000..a79d51d4c6a --- /dev/null +++ b/workhorse/internal/helper/countingresponsewriter.go @@ -0,0 +1,56 @@ +package helper + +import ( + "net/http" +) + +type CountingResponseWriter interface { + http.ResponseWriter + Count() int64 + Status() int +} + +type countingResponseWriter struct { + rw http.ResponseWriter + status int + count int64 +} + +func NewCountingResponseWriter(rw http.ResponseWriter) CountingResponseWriter { + return &countingResponseWriter{rw: rw} +} + +func (c *countingResponseWriter) Header() http.Header { + return c.rw.Header() +} + +func (c *countingResponseWriter) Write(data []byte) (int, error) { + if c.status == 0 { + c.WriteHeader(http.StatusOK) + } + + n, err := c.rw.Write(data) + c.count += int64(n) + return n, err +} + +func (c *countingResponseWriter) WriteHeader(status int) { + if c.status != 0 { + return + } + + c.status = status + c.rw.WriteHeader(status) +} + +// Count returns the number of bytes written to the ResponseWriter. This +// function is not thread-safe. +func (c *countingResponseWriter) Count() int64 { + return c.count +} + +// Status returns the first HTTP status value that was written to the +// ResponseWriter. This function is not thread-safe. +func (c *countingResponseWriter) Status() int { + return c.status +} diff --git a/workhorse/internal/helper/countingresponsewriter_test.go b/workhorse/internal/helper/countingresponsewriter_test.go new file mode 100644 index 00000000000..f9f2f4ced5b --- /dev/null +++ b/workhorse/internal/helper/countingresponsewriter_test.go @@ -0,0 +1,50 @@ +package helper + +import ( + "bytes" + "io" + "net/http" + "testing" + "testing/iotest" + + "github.com/stretchr/testify/require" +) + +type testResponseWriter struct { + data []byte +} + +func (*testResponseWriter) WriteHeader(int) {} +func (*testResponseWriter) Header() http.Header { return nil } + +func (trw *testResponseWriter) Write(p []byte) (int, error) { + trw.data = append(trw.data, p...) + return len(p), nil +} + +func TestCountingResponseWriterStatus(t *testing.T) { + crw := NewCountingResponseWriter(&testResponseWriter{}) + crw.WriteHeader(123) + crw.WriteHeader(456) + require.Equal(t, 123, crw.Status()) +} + +func TestCountingResponseWriterCount(t *testing.T) { + crw := NewCountingResponseWriter(&testResponseWriter{}) + for _, n := range []int{1, 2, 4, 8, 16, 32} { + _, err := crw.Write(bytes.Repeat([]byte{'.'}, n)) + require.NoError(t, err) + } + require.Equal(t, int64(63), crw.Count()) +} + +func TestCountingResponseWriterWrite(t *testing.T) { + trw := &testResponseWriter{} + crw := NewCountingResponseWriter(trw) + + testData := []byte("test data") + _, err := io.Copy(crw, iotest.OneByteReader(bytes.NewReader(testData))) + require.NoError(t, err) + + require.Equal(t, string(testData), string(trw.data)) +} diff --git a/workhorse/internal/helper/helpers.go b/workhorse/internal/helper/helpers.go new file mode 100644 index 00000000000..5f1e5fc51b3 --- /dev/null +++ b/workhorse/internal/helper/helpers.go @@ -0,0 +1,217 @@ +package helper + +import ( + "bytes" + "errors" + "io/ioutil" + "mime" + "net" + "net/http" + "net/url" + "os" + "os/exec" + "strings" + "syscall" + + "github.com/sebest/xff" + "gitlab.com/gitlab-org/labkit/log" + "gitlab.com/gitlab-org/labkit/mask" +) + +const NginxResponseBufferHeader = "X-Accel-Buffering" + +func LogError(r *http.Request, err error) { + LogErrorWithFields(r, err, nil) +} + +func LogErrorWithFields(r *http.Request, err error, fields log.Fields) { + if err != nil { + captureRavenError(r, err, fields) + } + + printError(r, err, fields) +} + +func CaptureAndFail(w http.ResponseWriter, r *http.Request, err error, msg string, code int) { + http.Error(w, msg, code) + LogError(r, err) +} + +func CaptureAndFailWithFields(w http.ResponseWriter, r *http.Request, err error, msg string, code int, fields log.Fields) { + http.Error(w, msg, code) + LogErrorWithFields(r, err, fields) +} + +func Fail500(w http.ResponseWriter, r *http.Request, err error) { + CaptureAndFail(w, r, err, "Internal server error", http.StatusInternalServerError) +} + +func Fail500WithFields(w http.ResponseWriter, r *http.Request, err error, fields log.Fields) { + CaptureAndFailWithFields(w, r, err, "Internal server error", http.StatusInternalServerError, fields) +} + +func RequestEntityTooLarge(w http.ResponseWriter, r *http.Request, err error) { + CaptureAndFail(w, r, err, "Request Entity Too Large", http.StatusRequestEntityTooLarge) +} + +func printError(r *http.Request, err error, fields log.Fields) { + if r != nil { + entry := log.WithContextFields(r.Context(), log.Fields{ + "method": r.Method, + "uri": mask.URL(r.RequestURI), + }) + entry.WithFields(fields).WithError(err).Error("error") + } else { + log.WithFields(fields).WithError(err).Error("unknown error") + } +} + +func SetNoCacheHeaders(header http.Header) { + header.Set("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate") + header.Set("Pragma", "no-cache") + header.Set("Expires", "Fri, 01 Jan 1990 00:00:00 GMT") +} + +func OpenFile(path string) (file *os.File, fi os.FileInfo, err error) { + file, err = os.Open(path) + if err != nil { + return + } + + defer func() { + if err != nil { + file.Close() + } + }() + + fi, err = file.Stat() + if err != nil { + return + } + + // The os.Open can also open directories + if fi.IsDir() { + err = &os.PathError{ + Op: "open", + Path: path, + Err: errors.New("path is directory"), + } + return + } + + return +} + +func URLMustParse(s string) *url.URL { + u, err := url.Parse(s) + if err != nil { + log.WithError(err).WithField("url", s).Fatal("urlMustParse") + } + return u +} + +func HTTPError(w http.ResponseWriter, r *http.Request, error string, code int) { + if r.ProtoAtLeast(1, 1) { + // Force client to disconnect if we render request error + w.Header().Set("Connection", "close") + } + + http.Error(w, error, code) +} + +func HeaderClone(h http.Header) http.Header { + h2 := make(http.Header, len(h)) + for k, vv := range h { + vv2 := make([]string, len(vv)) + copy(vv2, vv) + h2[k] = vv2 + } + return h2 +} + +func CleanUpProcessGroup(cmd *exec.Cmd) { + if cmd == nil { + return + } + + process := cmd.Process + if process != nil && process.Pid > 0 { + // Send SIGTERM to the process group of cmd + syscall.Kill(-process.Pid, syscall.SIGTERM) + } + + // reap our child process + cmd.Wait() +} + +func ExitStatus(err error) (int, bool) { + exitError, ok := err.(*exec.ExitError) + if !ok { + return 0, false + } + + waitStatus, ok := exitError.Sys().(syscall.WaitStatus) + if !ok { + return 0, false + } + + return waitStatus.ExitStatus(), true +} + +func DisableResponseBuffering(w http.ResponseWriter) { + w.Header().Set(NginxResponseBufferHeader, "no") +} + +func AllowResponseBuffering(w http.ResponseWriter) { + w.Header().Del(NginxResponseBufferHeader) +} + +func FixRemoteAddr(r *http.Request) { + // Unix domain sockets have a remote addr of @. This will make the + // xff package lookup the X-Forwarded-For address if available. + if r.RemoteAddr == "@" { + r.RemoteAddr = "127.0.0.1:0" + } + r.RemoteAddr = xff.GetRemoteAddr(r) +} + +func SetForwardedFor(newHeaders *http.Header, originalRequest *http.Request) { + if clientIP, _, err := net.SplitHostPort(originalRequest.RemoteAddr); err == nil { + var header string + + // If we aren't the first proxy retain prior + // X-Forwarded-For information as a comma+space + // separated list and fold multiple headers into one. + if prior, ok := originalRequest.Header["X-Forwarded-For"]; ok { + header = strings.Join(prior, ", ") + ", " + clientIP + } else { + header = clientIP + } + newHeaders.Set("X-Forwarded-For", header) + } +} + +func IsContentType(expected, actual string) bool { + parsed, _, err := mime.ParseMediaType(actual) + return err == nil && parsed == expected +} + +func IsApplicationJson(r *http.Request) bool { + contentType := r.Header.Get("Content-Type") + return IsContentType("application/json", contentType) +} + +func ReadRequestBody(w http.ResponseWriter, r *http.Request, maxBodySize int64) ([]byte, error) { + limitedBody := http.MaxBytesReader(w, r.Body, maxBodySize) + defer limitedBody.Close() + + return ioutil.ReadAll(limitedBody) +} + +func CloneRequestWithNewBody(r *http.Request, body []byte) *http.Request { + newReq := *r + newReq.Body = ioutil.NopCloser(bytes.NewReader(body)) + newReq.Header = HeaderClone(r.Header) + newReq.ContentLength = int64(len(body)) + return &newReq +} diff --git a/workhorse/internal/helper/helpers_test.go b/workhorse/internal/helper/helpers_test.go new file mode 100644 index 00000000000..6a895aded03 --- /dev/null +++ b/workhorse/internal/helper/helpers_test.go @@ -0,0 +1,258 @@ +package helper + +import ( + "bytes" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/sirupsen/logrus" + "github.com/stretchr/testify/require" +) + +func TestFixRemoteAddr(t *testing.T) { + testCases := []struct { + initial string + forwarded string + expected string + }{ + {initial: "@", forwarded: "", expected: "127.0.0.1:0"}, + {initial: "@", forwarded: "18.245.0.1", expected: "18.245.0.1:0"}, + {initial: "@", forwarded: "127.0.0.1", expected: "127.0.0.1:0"}, + {initial: "@", forwarded: "192.168.0.1", expected: "127.0.0.1:0"}, + {initial: "192.168.1.1:0", forwarded: "", expected: "192.168.1.1:0"}, + {initial: "192.168.1.1:0", forwarded: "18.245.0.1", expected: "18.245.0.1:0"}, + } + + for _, tc := range testCases { + req, err := http.NewRequest("POST", "unix:///tmp/test.socket/info/refs", nil) + require.NoError(t, err) + + req.RemoteAddr = tc.initial + + if tc.forwarded != "" { + req.Header.Add("X-Forwarded-For", tc.forwarded) + } + + FixRemoteAddr(req) + + require.Equal(t, tc.expected, req.RemoteAddr) + } +} + +func TestSetForwardedForGeneratesHeader(t *testing.T) { + testCases := []struct { + remoteAddr string + previousForwardedFor []string + expected string + }{ + { + "8.8.8.8:3000", + nil, + "8.8.8.8", + }, + { + "8.8.8.8:3000", + []string{"138.124.33.63, 151.146.211.237"}, + "138.124.33.63, 151.146.211.237, 8.8.8.8", + }, + { + "8.8.8.8:3000", + []string{"8.154.76.107", "115.206.118.179"}, + "8.154.76.107, 115.206.118.179, 8.8.8.8", + }, + } + for _, tc := range testCases { + headers := http.Header{} + originalRequest := http.Request{ + RemoteAddr: tc.remoteAddr, + } + + if tc.previousForwardedFor != nil { + originalRequest.Header = http.Header{ + "X-Forwarded-For": tc.previousForwardedFor, + } + } + + SetForwardedFor(&headers, &originalRequest) + + result := headers.Get("X-Forwarded-For") + if result != tc.expected { + t.Fatalf("Expected %v, got %v", tc.expected, result) + } + } +} + +func TestReadRequestBody(t *testing.T) { + data := []byte("123456") + rw := httptest.NewRecorder() + req, _ := http.NewRequest("POST", "/test", bytes.NewBuffer(data)) + + result, err := ReadRequestBody(rw, req, 1000) + require.NoError(t, err) + require.Equal(t, data, result) +} + +func TestReadRequestBodyLimit(t *testing.T) { + data := []byte("123456") + rw := httptest.NewRecorder() + req, _ := http.NewRequest("POST", "/test", bytes.NewBuffer(data)) + + _, err := ReadRequestBody(rw, req, 2) + require.Error(t, err) +} + +func TestCloneRequestWithBody(t *testing.T) { + input := []byte("test") + newInput := []byte("new body") + req, _ := http.NewRequest("POST", "/test", bytes.NewBuffer(input)) + newReq := CloneRequestWithNewBody(req, newInput) + + require.NotEqual(t, req, newReq) + require.NotEqual(t, req.Body, newReq.Body) + require.NotEqual(t, len(newInput), newReq.ContentLength) + + var buffer bytes.Buffer + io.Copy(&buffer, newReq.Body) + require.Equal(t, newInput, buffer.Bytes()) +} + +func TestApplicationJson(t *testing.T) { + req, _ := http.NewRequest("POST", "/test", nil) + req.Header.Set("Content-Type", "application/json") + + require.True(t, IsApplicationJson(req), "expected to match 'application/json' as 'application/json'") + + req.Header.Set("Content-Type", "application/json; charset=utf-8") + require.True(t, IsApplicationJson(req), "expected to match 'application/json; charset=utf-8' as 'application/json'") + + req.Header.Set("Content-Type", "text/plain") + require.False(t, IsApplicationJson(req), "expected not to match 'text/plain' as 'application/json'") +} + +func TestFail500WorksWithNils(t *testing.T) { + body := bytes.NewBuffer(nil) + w := httptest.NewRecorder() + w.Body = body + + Fail500(w, nil, nil) + + require.Equal(t, http.StatusInternalServerError, w.Code) + require.Equal(t, "Internal server error\n", body.String()) +} + +func TestLogError(t *testing.T) { + tests := []struct { + name string + method string + uri string + err error + logMatchers []string + }{ + { + name: "nil_request", + err: fmt.Errorf("crash"), + logMatchers: []string{ + `level=error msg="unknown error" error=crash`, + }, + }, + { + name: "nil_request_nil_error", + err: nil, + logMatchers: []string{ + `level=error msg="unknown error" error=""`, + }, + }, + { + name: "basic_url", + method: "GET", + uri: "http://localhost:3000/", + err: fmt.Errorf("error"), + logMatchers: []string{ + `level=error msg=error correlation_id= error=error method=GET uri="http://localhost:3000/"`, + }, + }, + { + name: "secret_url", + method: "GET", + uri: "http://localhost:3000/path?certificate=123&sharedSecret=123&import_url=the_url&my_password_string=password", + err: fmt.Errorf("error"), + logMatchers: []string{ + `level=error msg=error correlation_id= error=error method=GET uri="http://localhost:3000/path\?certificate=\[FILTERED\]&sharedSecret=\[FILTERED\]&import_url=\[FILTERED\]&my_password_string=\[FILTERED\]"`, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + buf := &bytes.Buffer{} + + oldOut := logrus.StandardLogger().Out + logrus.StandardLogger().Out = buf + defer func() { + logrus.StandardLogger().Out = oldOut + }() + + var r *http.Request + if tt.uri != "" { + r = httptest.NewRequest(tt.method, tt.uri, nil) + } + + LogError(r, tt.err) + + logString := buf.String() + for _, v := range tt.logMatchers { + require.Regexp(t, v, logString) + } + }) + } +} + +func TestLogErrorWithFields(t *testing.T) { + tests := []struct { + name string + request *http.Request + err error + fields map[string]interface{} + logMatcher string + }{ + { + name: "nil_request", + err: fmt.Errorf("crash"), + fields: map[string]interface{}{"extra_one": 123}, + logMatcher: `level=error msg="unknown error" error=crash extra_one=123`, + }, + { + name: "nil_request_nil_error", + err: nil, + fields: map[string]interface{}{"extra_one": 123, "extra_two": "test"}, + logMatcher: `level=error msg="unknown error" error="" extra_one=123 extra_two=test`, + }, + { + name: "basic_url", + request: httptest.NewRequest("GET", "http://localhost:3000/", nil), + err: fmt.Errorf("error"), + fields: map[string]interface{}{"extra_one": 123, "extra_two": "test"}, + logMatcher: `level=error msg=error correlation_id= error=error extra_one=123 extra_two=test method=GET uri="http://localhost:3000/`, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + buf := &bytes.Buffer{} + + oldOut := logrus.StandardLogger().Out + logrus.StandardLogger().Out = buf + defer func() { + logrus.StandardLogger().Out = oldOut + }() + + LogErrorWithFields(tt.request, tt.err, tt.fields) + + logString := buf.String() + require.Contains(t, logString, tt.logMatcher) + }) + } +} diff --git a/workhorse/internal/helper/raven.go b/workhorse/internal/helper/raven.go new file mode 100644 index 00000000000..ea1d0e1f6cc --- /dev/null +++ b/workhorse/internal/helper/raven.go @@ -0,0 +1,58 @@ +package helper + +import ( + "net/http" + "reflect" + + raven "github.com/getsentry/raven-go" + + //lint:ignore SA1019 this was recently deprecated. Update workhorse to use labkit errortracking package. + correlation "gitlab.com/gitlab-org/labkit/correlation/raven" + + "gitlab.com/gitlab-org/labkit/log" +) + +var ravenHeaderBlacklist = []string{ + "Authorization", + "Private-Token", +} + +func captureRavenError(r *http.Request, err error, fields log.Fields) { + client := raven.DefaultClient + extra := raven.Extra{} + + for k, v := range fields { + extra[k] = v + } + + interfaces := []raven.Interface{} + if r != nil { + CleanHeadersForRaven(r) + interfaces = append(interfaces, raven.NewHttp(r)) + + //lint:ignore SA1019 this was recently deprecated. Update workhorse to use labkit errortracking package. + extra = correlation.SetExtra(r.Context(), extra) + } + + exception := &raven.Exception{ + Stacktrace: raven.NewStacktrace(2, 3, nil), + Value: err.Error(), + Type: reflect.TypeOf(err).String(), + } + interfaces = append(interfaces, exception) + + packet := raven.NewPacketWithExtra(err.Error(), extra, interfaces...) + client.Capture(packet, nil) +} + +func CleanHeadersForRaven(r *http.Request) { + if r == nil { + return + } + + for _, key := range ravenHeaderBlacklist { + if r.Header.Get(key) != "" { + r.Header.Set(key, "[redacted]") + } + } +} diff --git a/workhorse/internal/helper/tempfile.go b/workhorse/internal/helper/tempfile.go new file mode 100644 index 00000000000..d8fc0d44698 --- /dev/null +++ b/workhorse/internal/helper/tempfile.go @@ -0,0 +1,35 @@ +package helper + +import ( + "io" + "io/ioutil" + "os" +) + +func ReadAllTempfile(r io.Reader) (tempfile *os.File, err error) { + tempfile, err = ioutil.TempFile("", "gitlab-workhorse-read-all-tempfile") + if err != nil { + return nil, err + } + + defer func() { + // Avoid leaking an open file if the function returns with an error + if err != nil { + tempfile.Close() + } + }() + + if err := os.Remove(tempfile.Name()); err != nil { + return nil, err + } + + if _, err := io.Copy(tempfile, r); err != nil { + return nil, err + } + + if _, err := tempfile.Seek(0, 0); err != nil { + return nil, err + } + + return tempfile, nil +} diff --git a/workhorse/internal/helper/writeafterreader.go b/workhorse/internal/helper/writeafterreader.go new file mode 100644 index 00000000000..d583ae4a9b8 --- /dev/null +++ b/workhorse/internal/helper/writeafterreader.go @@ -0,0 +1,144 @@ +package helper + +import ( + "fmt" + "io" + "io/ioutil" + "os" + "sync" +) + +type WriteFlusher interface { + io.Writer + Flush() error +} + +// Couple r and w so that until r has been drained (before r.Read() has +// returned some error), all writes to w are sent to a tempfile first. +// The caller must call Flush() on the returned WriteFlusher to ensure +// all data is propagated to w. +func NewWriteAfterReader(r io.Reader, w io.Writer) (io.Reader, WriteFlusher) { + br := &busyReader{Reader: r} + return br, &coupledWriter{Writer: w, busyReader: br} +} + +type busyReader struct { + io.Reader + + error + errorMutex sync.RWMutex +} + +func (r *busyReader) Read(p []byte) (int, error) { + if err := r.getError(); err != nil { + return 0, err + } + + n, err := r.Reader.Read(p) + if err != nil { + if err != io.EOF { + err = fmt.Errorf("busyReader: %v", err) + } + r.setError(err) + } + return n, err +} + +func (r *busyReader) IsBusy() bool { + return r.getError() == nil +} + +func (r *busyReader) getError() error { + r.errorMutex.RLock() + defer r.errorMutex.RUnlock() + return r.error +} + +func (r *busyReader) setError(err error) { + if err == nil { + panic("busyReader: attempt to reset error to nil") + } + r.errorMutex.Lock() + defer r.errorMutex.Unlock() + r.error = err +} + +type coupledWriter struct { + io.Writer + *busyReader + + tempfile *os.File + tempfileMutex sync.Mutex + + writeError error +} + +func (w *coupledWriter) Write(data []byte) (int, error) { + if w.writeError != nil { + return 0, w.writeError + } + + if w.busyReader.IsBusy() { + n, err := w.tempfileWrite(data) + if err != nil { + w.writeError = fmt.Errorf("coupledWriter: %v", err) + } + return n, w.writeError + } + + if err := w.Flush(); err != nil { + w.writeError = fmt.Errorf("coupledWriter: %v", err) + return 0, w.writeError + } + + return w.Writer.Write(data) +} + +func (w *coupledWriter) Flush() error { + w.tempfileMutex.Lock() + defer w.tempfileMutex.Unlock() + + tempfile := w.tempfile + if tempfile == nil { + return nil + } + + w.tempfile = nil + defer tempfile.Close() + + if _, err := tempfile.Seek(0, 0); err != nil { + return err + } + if _, err := io.Copy(w.Writer, tempfile); err != nil { + return err + } + return nil +} + +func (w *coupledWriter) tempfileWrite(data []byte) (int, error) { + w.tempfileMutex.Lock() + defer w.tempfileMutex.Unlock() + + if w.tempfile == nil { + tempfile, err := w.newTempfile() + if err != nil { + return 0, err + } + w.tempfile = tempfile + } + + return w.tempfile.Write(data) +} + +func (*coupledWriter) newTempfile() (tempfile *os.File, err error) { + tempfile, err = ioutil.TempFile("", "gitlab-workhorse-coupledWriter") + if err != nil { + return nil, err + } + if err := os.Remove(tempfile.Name()); err != nil { + tempfile.Close() + return nil, err + } + + return tempfile, nil +} diff --git a/workhorse/internal/helper/writeafterreader_test.go b/workhorse/internal/helper/writeafterreader_test.go new file mode 100644 index 00000000000..67cb3e6e542 --- /dev/null +++ b/workhorse/internal/helper/writeafterreader_test.go @@ -0,0 +1,115 @@ +package helper + +import ( + "bytes" + "fmt" + "io" + "io/ioutil" + "testing" + "testing/iotest" +) + +func TestBusyReader(t *testing.T) { + testData := "test data" + r := testReader(testData) + br, _ := NewWriteAfterReader(r, &bytes.Buffer{}) + + result, err := ioutil.ReadAll(br) + if err != nil { + t.Fatal(err) + } + + if string(result) != testData { + t.Fatalf("expected %q, got %q", testData, result) + } +} + +func TestFirstWriteAfterReadDone(t *testing.T) { + writeRecorder := &bytes.Buffer{} + br, cw := NewWriteAfterReader(&bytes.Buffer{}, writeRecorder) + if _, err := io.Copy(ioutil.Discard, br); err != nil { + t.Fatalf("copy from busyreader: %v", err) + } + testData := "test data" + if _, err := io.Copy(cw, testReader(testData)); err != nil { + t.Fatalf("copy test data: %v", err) + } + if err := cw.Flush(); err != nil { + t.Fatalf("flush error: %v", err) + } + if result := writeRecorder.String(); result != testData { + t.Fatalf("expected %q, got %q", testData, result) + } +} + +func TestWriteDelay(t *testing.T) { + writeRecorder := &bytes.Buffer{} + w := &complainingWriter{Writer: writeRecorder} + br, cw := NewWriteAfterReader(&bytes.Buffer{}, w) + + testData1 := "1 test" + if _, err := io.Copy(cw, testReader(testData1)); err != nil { + t.Fatalf("error on first copy: %v", err) + } + + // Unblock the coupled writer by draining the reader + if _, err := io.Copy(ioutil.Discard, br); err != nil { + t.Fatalf("copy from busyreader: %v", err) + } + // Now it is no longer an error if 'w' receives a Write() + w.CheerUp() + + testData2 := "2 experiment" + if _, err := io.Copy(cw, testReader(testData2)); err != nil { + t.Fatalf("error on second copy: %v", err) + } + + if err := cw.Flush(); err != nil { + t.Fatalf("flush error: %v", err) + } + + expected := testData1 + testData2 + if result := writeRecorder.String(); result != expected { + t.Fatalf("total write: expected %q, got %q", expected, result) + } +} + +func TestComplainingWriterSanity(t *testing.T) { + recorder := &bytes.Buffer{} + w := &complainingWriter{Writer: recorder} + + testData := "test data" + if _, err := io.Copy(w, testReader(testData)); err == nil { + t.Error("error expected, none received") + } + + w.CheerUp() + if _, err := io.Copy(w, testReader(testData)); err != nil { + t.Errorf("copy after CheerUp: %v", err) + } + + if result := recorder.String(); result != testData { + t.Errorf("expected %q, got %q", testData, result) + } +} + +func testReader(data string) io.Reader { + return iotest.OneByteReader(bytes.NewBuffer([]byte(data))) +} + +type complainingWriter struct { + happy bool + io.Writer +} + +func (comp *complainingWriter) Write(data []byte) (int, error) { + if comp.happy { + return comp.Writer.Write(data) + } + + return 0, fmt.Errorf("I am unhappy about you wanting to write %q", data) +} + +func (comp *complainingWriter) CheerUp() { + comp.happy = true +} diff --git a/workhorse/internal/httprs/LICENSE b/workhorse/internal/httprs/LICENSE new file mode 100644 index 00000000000..58b9dd5ced1 --- /dev/null +++ b/workhorse/internal/httprs/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015 Jean-François Bustarret + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/workhorse/internal/httprs/README.md b/workhorse/internal/httprs/README.md new file mode 100644 index 00000000000..4f42489ab73 --- /dev/null +++ b/workhorse/internal/httprs/README.md @@ -0,0 +1,2 @@ +This directory contains a vendored copy of https://github.com/jfbus/httprs at commit SHA +b0af8319bb15446bbf29715477f841a49330a1e7. diff --git a/workhorse/internal/httprs/httprs.go b/workhorse/internal/httprs/httprs.go new file mode 100644 index 00000000000..a38230c1968 --- /dev/null +++ b/workhorse/internal/httprs/httprs.go @@ -0,0 +1,217 @@ +/* +Package httprs provides a ReadSeeker for http.Response.Body. + +Usage : + + resp, err := http.Get(url) + rs := httprs.NewHttpReadSeeker(resp) + defer rs.Close() + io.ReadFull(rs, buf) // reads the first bytes from the response body + rs.Seek(1024, 0) // moves the position, but does no range request + io.ReadFull(rs, buf) // does a range request and reads from the response body + +If you want use a specific http.Client for additional range requests : + rs := httprs.NewHttpReadSeeker(resp, client) +*/ +package httprs + +import ( + "context" + "errors" + "fmt" + "io" + "io/ioutil" + "net/http" + + "github.com/mitchellh/copystructure" +) + +const shortSeekBytes = 1024 + +// A HttpReadSeeker reads from a http.Response.Body. It can Seek +// by doing range requests. +type HttpReadSeeker struct { + c *http.Client + req *http.Request + res *http.Response + ctx context.Context + r io.ReadCloser + pos int64 + + Requests int +} + +var _ io.ReadCloser = (*HttpReadSeeker)(nil) +var _ io.Seeker = (*HttpReadSeeker)(nil) + +var ( + // ErrNoContentLength is returned by Seek when the initial http response did not include a Content-Length header + ErrNoContentLength = errors.New("header Content-Length was not set") + // ErrRangeRequestsNotSupported is returned by Seek and Read + // when the remote server does not allow range requests (Accept-Ranges was not set) + ErrRangeRequestsNotSupported = errors.New("range requests are not supported by the remote server") + // ErrInvalidRange is returned by Read when trying to read past the end of the file + ErrInvalidRange = errors.New("invalid range") + // ErrContentHasChanged is returned by Read when the content has changed since the first request + ErrContentHasChanged = errors.New("content has changed since first request") +) + +// NewHttpReadSeeker returns a HttpReadSeeker, using the http.Response and, optionaly, the http.Client +// that needs to be used for future range requests. If no http.Client is given, http.DefaultClient will +// be used. +// +// res.Request will be reused for range requests, headers may be added/removed +func NewHttpReadSeeker(res *http.Response, client ...*http.Client) *HttpReadSeeker { + r := &HttpReadSeeker{ + req: res.Request, + ctx: res.Request.Context(), + res: res, + r: res.Body, + } + if len(client) > 0 { + r.c = client[0] + } else { + r.c = http.DefaultClient + } + return r +} + +// Clone clones the reader to enable parallel downloads of ranges +func (r *HttpReadSeeker) Clone() (*HttpReadSeeker, error) { + req, err := copystructure.Copy(r.req) + if err != nil { + return nil, err + } + return &HttpReadSeeker{ + req: req.(*http.Request), + res: r.res, + r: nil, + c: r.c, + }, nil +} + +// Read reads from the response body. It does a range request if Seek was called before. +// +// May return ErrRangeRequestsNotSupported, ErrInvalidRange or ErrContentHasChanged +func (r *HttpReadSeeker) Read(p []byte) (n int, err error) { + if r.r == nil { + err = r.rangeRequest() + } + if r.r != nil { + n, err = r.r.Read(p) + r.pos += int64(n) + } + return +} + +// ReadAt reads from the response body starting at offset off. +// +// May return ErrRangeRequestsNotSupported, ErrInvalidRange or ErrContentHasChanged +func (r *HttpReadSeeker) ReadAt(p []byte, off int64) (n int, err error) { + var nn int + + r.Seek(off, 0) + + for n < len(p) && err == nil { + nn, err = r.Read(p[n:]) + n += nn + } + return +} + +// Close closes the response body +func (r *HttpReadSeeker) Close() error { + if r.r != nil { + return r.r.Close() + } + return nil +} + +// Seek moves the reader position to a new offset. +// +// It does not send http requests, allowing for multiple seeks without overhead. +// The http request will be sent by the next Read call. +// +// May return ErrNoContentLength or ErrRangeRequestsNotSupported +func (r *HttpReadSeeker) Seek(offset int64, whence int) (int64, error) { + var err error + switch whence { + case 0: + case 1: + offset += r.pos + case 2: + if r.res.ContentLength <= 0 { + return 0, ErrNoContentLength + } + offset = r.res.ContentLength - offset + } + if r.r != nil { + // Try to read, which is cheaper than doing a request + if r.pos < offset && offset-r.pos <= shortSeekBytes { + _, err := io.CopyN(ioutil.Discard, r, offset-r.pos) + if err != nil { + return 0, err + } + } + + if r.pos != offset { + err = r.r.Close() + r.r = nil + } + } + r.pos = offset + return r.pos, err +} + +func cloneHeader(h http.Header) http.Header { + h2 := make(http.Header, len(h)) + for k, vv := range h { + vv2 := make([]string, len(vv)) + copy(vv2, vv) + h2[k] = vv2 + } + return h2 +} + +func (r *HttpReadSeeker) newRequest() *http.Request { + newreq := r.req.WithContext(r.ctx) // includes shallow copies of maps, but okay + if r.req.ContentLength == 0 { + newreq.Body = nil // Issue 16036: nil Body for http.Transport retries + } + newreq.Header = cloneHeader(r.req.Header) + return newreq +} + +func (r *HttpReadSeeker) rangeRequest() error { + r.req = r.newRequest() + r.req.Header.Set("Range", fmt.Sprintf("bytes=%d-", r.pos)) + etag, last := r.res.Header.Get("ETag"), r.res.Header.Get("Last-Modified") + switch { + case last != "": + r.req.Header.Set("If-Range", last) + case etag != "": + r.req.Header.Set("If-Range", etag) + } + + r.Requests++ + + res, err := r.c.Do(r.req) + if err != nil { + return err + } + switch res.StatusCode { + case http.StatusRequestedRangeNotSatisfiable: + return ErrInvalidRange + case http.StatusOK: + // some servers return 200 OK for bytes=0- + if r.pos > 0 || + (etag != "" && etag != res.Header.Get("ETag")) { + return ErrContentHasChanged + } + fallthrough + case http.StatusPartialContent: + r.r = res.Body + return nil + } + return ErrRangeRequestsNotSupported +} diff --git a/workhorse/internal/httprs/httprs_test.go b/workhorse/internal/httprs/httprs_test.go new file mode 100644 index 00000000000..62279d895c9 --- /dev/null +++ b/workhorse/internal/httprs/httprs_test.go @@ -0,0 +1,257 @@ +package httprs + +import ( + "fmt" + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" + "time" + + . "github.com/smartystreets/goconvey/convey" +) + +type fakeResponseWriter struct { + code int + h http.Header + tmp *os.File +} + +func (f *fakeResponseWriter) Header() http.Header { + return f.h +} + +func (f *fakeResponseWriter) Write(b []byte) (int, error) { + return f.tmp.Write(b) +} + +func (f *fakeResponseWriter) Close(b []byte) error { + return f.tmp.Close() +} + +func (f *fakeResponseWriter) WriteHeader(code int) { + f.code = code +} + +func (f *fakeResponseWriter) Response() *http.Response { + f.tmp.Seek(0, io.SeekStart) + return &http.Response{Body: f.tmp, StatusCode: f.code, Header: f.h} +} + +type fakeRoundTripper struct { + src *os.File + downgradeZeroToNoRange bool +} + +func (f *fakeRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) { + fw := &fakeResponseWriter{h: http.Header{}} + var err error + fw.tmp, err = ioutil.TempFile(os.TempDir(), "httprs") + if err != nil { + return nil, err + } + if f.downgradeZeroToNoRange { + // There are implementations that downgrades bytes=0- to a normal un-ranged GET + if r.Header.Get("Range") == "bytes=0-" { + r.Header.Del("Range") + } + } + http.ServeContent(fw, r, "temp.txt", time.Now(), f.src) + + return fw.Response(), nil +} + +const SZ = 4096 + +const ( + downgradeZeroToNoRange = 1 << iota + sendAcceptRanges +) + +type RSFactory func() *HttpReadSeeker + +func newRSFactory(flags int) RSFactory { + return func() *HttpReadSeeker { + tmp, err := ioutil.TempFile(os.TempDir(), "httprs") + if err != nil { + return nil + } + for i := 0; i < SZ; i++ { + tmp.WriteString(fmt.Sprintf("%04d", i)) + } + + req, err := http.NewRequest("GET", "http://www.example.com", nil) + if err != nil { + return nil + } + res := &http.Response{ + Request: req, + ContentLength: SZ * 4, + } + + if flags&sendAcceptRanges > 0 { + res.Header = http.Header{"Accept-Ranges": []string{"bytes"}} + } + + downgradeZeroToNoRange := (flags & downgradeZeroToNoRange) > 0 + return NewHttpReadSeeker(res, &http.Client{Transport: &fakeRoundTripper{src: tmp, downgradeZeroToNoRange: downgradeZeroToNoRange}}) + } +} + +func TestHttpWebServer(t *testing.T) { + Convey("Scenario: testing WebServer", t, func() { + dir, err := ioutil.TempDir("", "webserver") + So(err, ShouldBeNil) + defer os.RemoveAll(dir) + + err = ioutil.WriteFile(filepath.Join(dir, "file"), make([]byte, 10000), 0755) + So(err, ShouldBeNil) + + server := httptest.NewServer(http.FileServer(http.Dir(dir))) + + Convey("When requesting /file", func() { + res, err := http.Get(server.URL + "/file") + So(err, ShouldBeNil) + + stream := NewHttpReadSeeker(res) + So(stream, ShouldNotBeNil) + + Convey("Can read 100 bytes from start of file", func() { + n, err := stream.Read(make([]byte, 100)) + So(err, ShouldBeNil) + So(n, ShouldEqual, 100) + + Convey("When seeking 4KiB forward", func() { + pos, err := stream.Seek(4096, io.SeekCurrent) + So(err, ShouldBeNil) + So(pos, ShouldEqual, 4096+100) + + Convey("Can read 100 bytes", func() { + n, err := stream.Read(make([]byte, 100)) + So(err, ShouldBeNil) + So(n, ShouldEqual, 100) + }) + }) + }) + }) + }) +} + +func TestHttpReaderSeeker(t *testing.T) { + tests := []struct { + name string + newRS func() *HttpReadSeeker + }{ + {name: "with no flags", newRS: newRSFactory(0)}, + {name: "with only Accept-Ranges", newRS: newRSFactory(sendAcceptRanges)}, + {name: "downgrade 0-range to no range", newRS: newRSFactory(downgradeZeroToNoRange)}, + {name: "downgrade 0-range with Accept-Ranges", newRS: newRSFactory(downgradeZeroToNoRange | sendAcceptRanges)}, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + testHttpReaderSeeker(t, test.newRS) + }) + } +} + +func testHttpReaderSeeker(t *testing.T, newRS RSFactory) { + Convey("Scenario: testing HttpReaderSeeker", t, func() { + + Convey("Read should start at the beginning", func() { + r := newRS() + So(r, ShouldNotBeNil) + defer r.Close() + buf := make([]byte, 4) + n, err := io.ReadFull(r, buf) + So(n, ShouldEqual, 4) + So(err, ShouldBeNil) + So(string(buf), ShouldEqual, "0000") + }) + + Convey("Seek w SEEK_SET should seek to right offset", func() { + r := newRS() + So(r, ShouldNotBeNil) + defer r.Close() + s, err := r.Seek(4*64, io.SeekStart) + So(s, ShouldEqual, 4*64) + So(err, ShouldBeNil) + buf := make([]byte, 4) + n, err := io.ReadFull(r, buf) + So(n, ShouldEqual, 4) + So(err, ShouldBeNil) + So(string(buf), ShouldEqual, "0064") + }) + + Convey("Read + Seek w SEEK_CUR should seek to right offset", func() { + r := newRS() + So(r, ShouldNotBeNil) + defer r.Close() + buf := make([]byte, 4) + io.ReadFull(r, buf) + s, err := r.Seek(4*64, os.SEEK_CUR) + So(s, ShouldEqual, 4*64+4) + So(err, ShouldBeNil) + n, err := io.ReadFull(r, buf) + So(n, ShouldEqual, 4) + So(err, ShouldBeNil) + So(string(buf), ShouldEqual, "0065") + }) + + Convey("Seek w SEEK_END should seek to right offset", func() { + r := newRS() + So(r, ShouldNotBeNil) + defer r.Close() + buf := make([]byte, 4) + io.ReadFull(r, buf) + s, err := r.Seek(4, os.SEEK_END) + So(s, ShouldEqual, SZ*4-4) + So(err, ShouldBeNil) + n, err := io.ReadFull(r, buf) + So(n, ShouldEqual, 4) + So(err, ShouldBeNil) + So(string(buf), ShouldEqual, fmt.Sprintf("%04d", SZ-1)) + }) + + Convey("Short seek should consume existing request", func() { + r := newRS() + So(r, ShouldNotBeNil) + defer r.Close() + buf := make([]byte, 4) + So(r.Requests, ShouldEqual, 0) + io.ReadFull(r, buf) + So(r.Requests, ShouldEqual, 1) + s, err := r.Seek(shortSeekBytes, os.SEEK_CUR) + So(r.Requests, ShouldEqual, 1) + So(s, ShouldEqual, shortSeekBytes+4) + So(err, ShouldBeNil) + n, err := io.ReadFull(r, buf) + So(n, ShouldEqual, 4) + So(err, ShouldBeNil) + So(string(buf), ShouldEqual, "0257") + So(r.Requests, ShouldEqual, 1) + }) + + Convey("Long seek should do a new request", func() { + r := newRS() + So(r, ShouldNotBeNil) + defer r.Close() + buf := make([]byte, 4) + So(r.Requests, ShouldEqual, 0) + io.ReadFull(r, buf) + So(r.Requests, ShouldEqual, 1) + s, err := r.Seek(shortSeekBytes+1, os.SEEK_CUR) + So(r.Requests, ShouldEqual, 1) + So(s, ShouldEqual, shortSeekBytes+4+1) + So(err, ShouldBeNil) + n, err := io.ReadFull(r, buf) + So(n, ShouldEqual, 4) + So(err, ShouldBeNil) + So(string(buf), ShouldEqual, "2570") + So(r.Requests, ShouldEqual, 2) + }) + }) +} diff --git a/workhorse/internal/imageresizer/image_resizer.go b/workhorse/internal/imageresizer/image_resizer.go new file mode 100644 index 00000000000..feefd9c6dee --- /dev/null +++ b/workhorse/internal/imageresizer/image_resizer.go @@ -0,0 +1,448 @@ +package imageresizer + +import ( + "bufio" + "context" + "fmt" + "io" + "math" + "net" + "net/http" + "os" + "os/exec" + "strconv" + "strings" + "sync/atomic" + "syscall" + "time" + + "github.com/prometheus/client_golang/prometheus" + + "gitlab.com/gitlab-org/labkit/correlation" + "gitlab.com/gitlab-org/labkit/log" + "gitlab.com/gitlab-org/labkit/mask" + "gitlab.com/gitlab-org/labkit/tracing" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/senddata" +) + +type Resizer struct { + config.Config + senddata.Prefix + numScalerProcs processCounter +} + +type resizeParams struct { + Location string + ContentType string + Width uint +} + +type processCounter struct { + n int32 +} + +type resizeStatus = string + +type imageFile struct { + reader io.ReadCloser + contentLength int64 + lastModified time.Time +} + +// Carries information about how the scaler succeeded or failed. +type resizeOutcome struct { + bytesWritten int64 + originalFileSize int64 + status resizeStatus + err error +} + +const ( + statusSuccess = "success" // a rescaled image was served + statusClientCache = "success-client-cache" // scaling was skipped because client cache was fresh + statusServedOriginal = "served-original" // scaling failed but the original image was served + statusRequestFailure = "request-failed" // no image was served + statusUnknown = "unknown" // indicates an unhandled status case +) + +var envInjector = tracing.NewEnvInjector() + +// Images might be located remotely in object storage, in which case we need to stream +// it via http(s) +var httpTransport = tracing.NewRoundTripper(correlation.NewInstrumentedRoundTripper(&http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 10 * time.Second, + }).DialContext, + MaxIdleConns: 2, + IdleConnTimeout: 30 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 10 * time.Second, + ResponseHeaderTimeout: 30 * time.Second, +})) + +var httpClient = &http.Client{ + Transport: httpTransport, +} + +const ( + namespace = "gitlab_workhorse" + subsystem = "image_resize" + logSystem = "imageresizer" +) + +var ( + imageResizeConcurrencyLimitExceeds = prometheus.NewCounter( + prometheus.CounterOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: "concurrency_limit_exceeds_total", + Help: "Amount of image resizing requests that exceeded the maximum allowed scaler processes", + }, + ) + imageResizeProcesses = prometheus.NewGauge( + prometheus.GaugeOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: "processes", + Help: "Amount of image scaler processes working now", + }, + ) + imageResizeMaxProcesses = prometheus.NewGauge( + prometheus.GaugeOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: "max_processes", + Help: "The maximum amount of image scaler processes allowed to run concurrently", + }, + ) + imageResizeRequests = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: "requests_total", + Help: "Image resizing operations requested", + }, + []string{"status"}, + ) + imageResizeDurations = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: namespace, + Subsystem: subsystem, + Name: "duration_seconds", + Help: "Breakdown of total time spent serving successful image resizing requests (incl. data transfer)", + Buckets: []float64{ + 0.025, /* 25ms */ + 0.050, /* 50ms */ + 0.1, /* 100ms */ + 0.2, /* 200ms */ + 0.4, /* 400ms */ + 0.8, /* 800ms */ + }, + }, + []string{"content_type", "width"}, + ) +) + +const ( + jpegMagic = "\xff\xd8" // 2 bytes + pngMagic = "\x89PNG\r\n\x1a\n" // 8 bytes + maxMagicLen = 8 // 8 first bytes is enough to detect PNG or JPEG +) + +func init() { + prometheus.MustRegister(imageResizeConcurrencyLimitExceeds) + prometheus.MustRegister(imageResizeProcesses) + prometheus.MustRegister(imageResizeMaxProcesses) + prometheus.MustRegister(imageResizeRequests) + prometheus.MustRegister(imageResizeDurations) +} + +func NewResizer(cfg config.Config) *Resizer { + imageResizeMaxProcesses.Set(float64(cfg.ImageResizerConfig.MaxScalerProcs)) + + return &Resizer{Config: cfg, Prefix: "send-scaled-img:"} +} + +// Inject forks into a dedicated scaler process to resize an image identified by path or URL +// and streams the resized image back to the client +func (r *Resizer) Inject(w http.ResponseWriter, req *http.Request, paramsData string) { + var outcome = resizeOutcome{status: statusUnknown, originalFileSize: 0, bytesWritten: 0} + start := time.Now() + params, err := r.unpackParameters(paramsData) + + defer func() { + imageResizeRequests.WithLabelValues(outcome.status).Inc() + handleOutcome(w, req, start, params, &outcome) + }() + + if err != nil { + // This means the response header coming from Rails was malformed; there is no way + // to sensibly recover from this other than failing fast + outcome.error(fmt.Errorf("read image resize params: %v", err)) + return + } + + imageFile, err := openSourceImage(params.Location) + if err != nil { + // This means we cannot even read the input image; fail fast. + outcome.error(fmt.Errorf("open image data stream: %v", err)) + return + } + defer imageFile.reader.Close() + + outcome.originalFileSize = imageFile.contentLength + + setLastModified(w, imageFile.lastModified) + // If the original file has not changed, then any cached resized versions have not changed either. + if checkNotModified(req, imageFile.lastModified) { + writeNotModified(w) + outcome.ok(statusClientCache) + return + } + + // We first attempt to rescale the image; if this should fail for any reason, imageReader + // will point to the original image, i.e. we render it unchanged. + imageReader, resizeCmd, err := r.tryResizeImage(req, imageFile, params, r.Config.ImageResizerConfig) + if err != nil { + // Something failed, but we can still write out the original image, so don't return early. + // We need to log this separately since the subsequent steps might add other failures. + helper.LogErrorWithFields(req, err, *logFields(start, params, &outcome)) + } + defer helper.CleanUpProcessGroup(resizeCmd) + + w.Header().Del("Content-Length") + outcome.bytesWritten, err = serveImage(imageReader, w, resizeCmd) + + // We failed serving image data; this is a hard failure. + if err != nil { + outcome.error(err) + return + } + + // This means we served the original image because rescaling failed; this is a soft failure + if resizeCmd == nil { + outcome.ok(statusServedOriginal) + return + } + + widthLabelVal := strconv.Itoa(int(params.Width)) + imageResizeDurations.WithLabelValues(params.ContentType, widthLabelVal).Observe(time.Since(start).Seconds()) + + outcome.ok(statusSuccess) +} + +// Streams image data from the given reader to the given writer and returns the number of bytes written. +func serveImage(r io.Reader, w io.Writer, resizeCmd *exec.Cmd) (int64, error) { + bytesWritten, err := io.Copy(w, r) + if err != nil { + return bytesWritten, err + } + + if resizeCmd != nil { + // If a scaler process had been forked, wait for the command to finish. + if err = resizeCmd.Wait(); err != nil { + // err will be an ExitError; this is not useful beyond knowing the exit code since anything + // interesting has been written to stderr, so we turn that into an error we can return. + stdErr := resizeCmd.Stderr.(*strings.Builder) + return bytesWritten, fmt.Errorf(stdErr.String()) + } + } + + return bytesWritten, nil +} + +func (r *Resizer) unpackParameters(paramsData string) (*resizeParams, error) { + var params resizeParams + if err := r.Unpack(¶ms, paramsData); err != nil { + return nil, err + } + + if params.Location == "" { + return nil, fmt.Errorf("'Location' not set") + } + + if params.ContentType == "" { + return nil, fmt.Errorf("'ContentType' must be set") + } + + return ¶ms, nil +} + +// Attempts to rescale the given image data, or in case of errors, falls back to the original image. +func (r *Resizer) tryResizeImage(req *http.Request, f *imageFile, params *resizeParams, cfg config.ImageResizerConfig) (io.Reader, *exec.Cmd, error) { + if f.contentLength > int64(cfg.MaxFilesize) { + return f.reader, nil, fmt.Errorf("%d bytes exceeds maximum file size of %d bytes", f.contentLength, cfg.MaxFilesize) + } + + if !r.numScalerProcs.tryIncrement(int32(cfg.MaxScalerProcs)) { + return f.reader, nil, fmt.Errorf("too many running scaler processes (%d / %d)", r.numScalerProcs.n, cfg.MaxScalerProcs) + } + + ctx := req.Context() + go func() { + <-ctx.Done() + r.numScalerProcs.decrement() + }() + + // Prevents EOF if the file is smaller than 8 bytes + bufferSize := int(math.Min(maxMagicLen, float64(f.contentLength))) + buffered := bufio.NewReaderSize(f.reader, bufferSize) + + headerBytes, err := buffered.Peek(bufferSize) + if err != nil { + return buffered, nil, fmt.Errorf("peek stream: %v", err) + } + + // Check magic bytes to identify file type. + if string(headerBytes) != pngMagic && string(headerBytes[0:2]) != jpegMagic { + return buffered, nil, fmt.Errorf("unrecognized file signature: %v", headerBytes) + } + + resizeCmd, resizedImageReader, err := startResizeImageCommand(ctx, buffered, params) + if err != nil { + return buffered, nil, fmt.Errorf("fork into scaler process: %w", err) + } + return resizedImageReader, resizeCmd, nil +} + +func startResizeImageCommand(ctx context.Context, imageReader io.Reader, params *resizeParams) (*exec.Cmd, io.ReadCloser, error) { + cmd := exec.CommandContext(ctx, "gitlab-resize-image") + cmd.Stdin = imageReader + cmd.Stderr = &strings.Builder{} + cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} + cmd.Env = []string{ + "GL_RESIZE_IMAGE_WIDTH=" + strconv.Itoa(int(params.Width)), + } + cmd.Env = envInjector(ctx, cmd.Env) + + stdout, err := cmd.StdoutPipe() + if err != nil { + return nil, nil, err + } + + if err := cmd.Start(); err != nil { + return nil, nil, err + } + + return cmd, stdout, nil +} + +func isURL(location string) bool { + return strings.HasPrefix(location, "http://") || strings.HasPrefix(location, "https://") +} + +func openSourceImage(location string) (*imageFile, error) { + if isURL(location) { + return openFromURL(location) + } + + return openFromFile(location) +} + +func openFromURL(location string) (*imageFile, error) { + res, err := httpClient.Get(location) + if err != nil { + return nil, err + } + + switch res.StatusCode { + case http.StatusOK, http.StatusNotModified: + // Extract headers for conditional GETs from response. + lastModified, err := http.ParseTime(res.Header.Get("Last-Modified")) + if err != nil { + // This is unlikely to happen, coming from an object storage provider. + lastModified = time.Now().UTC() + } + return &imageFile{res.Body, res.ContentLength, lastModified}, nil + default: + res.Body.Close() + return nil, fmt.Errorf("stream data from %q: %d %s", location, res.StatusCode, res.Status) + } +} + +func openFromFile(location string) (*imageFile, error) { + file, err := os.Open(location) + if err != nil { + return nil, err + } + + fi, err := file.Stat() + if err != nil { + file.Close() + return nil, err + } + + return &imageFile{file, fi.Size(), fi.ModTime()}, nil +} + +// Only allow more scaling requests if we haven't yet reached the maximum +// allowed number of concurrent scaler processes +func (c *processCounter) tryIncrement(maxScalerProcs int32) bool { + if p := atomic.AddInt32(&c.n, 1); p > maxScalerProcs { + c.decrement() + imageResizeConcurrencyLimitExceeds.Inc() + + return false + } + + imageResizeProcesses.Set(float64(c.n)) + return true +} + +func (c *processCounter) decrement() { + atomic.AddInt32(&c.n, -1) + imageResizeProcesses.Set(float64(c.n)) +} + +func (o *resizeOutcome) ok(status resizeStatus) { + o.status = status + o.err = nil +} + +func (o *resizeOutcome) error(err error) { + o.status = statusRequestFailure + o.err = err +} + +func logFields(startTime time.Time, params *resizeParams, outcome *resizeOutcome) *log.Fields { + var targetWidth, contentType string + if params != nil { + targetWidth = fmt.Sprint(params.Width) + contentType = fmt.Sprint(params.ContentType) + } + return &log.Fields{ + "subsystem": logSystem, + "written_bytes": outcome.bytesWritten, + "duration_s": time.Since(startTime).Seconds(), + logSystem + ".status": outcome.status, + logSystem + ".target_width": targetWidth, + logSystem + ".content_type": contentType, + logSystem + ".original_filesize": outcome.originalFileSize, + } +} + +func handleOutcome(w http.ResponseWriter, req *http.Request, startTime time.Time, params *resizeParams, outcome *resizeOutcome) { + logger := log.ContextLogger(req.Context()) + fields := *logFields(startTime, params, outcome) + + switch outcome.status { + case statusRequestFailure: + if outcome.bytesWritten <= 0 { + helper.Fail500WithFields(w, req, outcome.err, fields) + } else { + helper.LogErrorWithFields(req, outcome.err, fields) + } + default: + logger.WithFields(fields).WithFields( + log.Fields{ + "method": req.Method, + "uri": mask.URL(req.RequestURI), + }, + ).Printf(outcome.status) + } +} diff --git a/workhorse/internal/imageresizer/image_resizer_caching.go b/workhorse/internal/imageresizer/image_resizer_caching.go new file mode 100644 index 00000000000..bbe0e3260d7 --- /dev/null +++ b/workhorse/internal/imageresizer/image_resizer_caching.go @@ -0,0 +1,44 @@ +// This file contains code derived from https://github.com/golang/go/blob/master/src/net/http/fs.go +// +// Copyright 2020 GitLab Inc. All rights reserved. +// Copyright 2009 The Go Authors. All rights reserved. + +package imageresizer + +import ( + "net/http" + "time" +) + +func checkNotModified(r *http.Request, modtime time.Time) bool { + ims := r.Header.Get("If-Modified-Since") + if ims == "" || isZeroTime(modtime) { + // Treat bogus times as if there was no such header at all + return false + } + t, err := http.ParseTime(ims) + if err != nil { + return false + } + // The Last-Modified header truncates sub-second precision so + // the modtime needs to be truncated too. + return !modtime.Truncate(time.Second).After(t) +} + +// isZeroTime reports whether t is obviously unspecified (either zero or Unix epoch time). +func isZeroTime(t time.Time) bool { + return t.IsZero() || t.Equal(time.Unix(0, 0)) +} + +func setLastModified(w http.ResponseWriter, modtime time.Time) { + if !isZeroTime(modtime) { + w.Header().Set("Last-Modified", modtime.UTC().Format(http.TimeFormat)) + } +} + +func writeNotModified(w http.ResponseWriter) { + h := w.Header() + h.Del("Content-Type") + h.Del("Content-Length") + w.WriteHeader(http.StatusNotModified) +} diff --git a/workhorse/internal/imageresizer/image_resizer_test.go b/workhorse/internal/imageresizer/image_resizer_test.go new file mode 100644 index 00000000000..49cd88200aa --- /dev/null +++ b/workhorse/internal/imageresizer/image_resizer_test.go @@ -0,0 +1,236 @@ +package imageresizer + +import ( + "encoding/base64" + "encoding/json" + "image" + "image/png" + "io/ioutil" + "net/http" + "net/http/httptest" + "os" + "testing" + "time" + + "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" + + _ "image/jpeg" // need this for image.Decode with JPEG +) + +const imagePath = "../../testdata/image.png" + +func TestMain(m *testing.M) { + if err := testhelper.BuildExecutables(); err != nil { + log.WithError(err).Fatal() + } + + os.Exit(m.Run()) +} + +func requestScaledImage(t *testing.T, httpHeaders http.Header, params resizeParams, cfg config.ImageResizerConfig) *http.Response { + httpRequest := httptest.NewRequest("GET", "/image", nil) + if httpHeaders != nil { + httpRequest.Header = httpHeaders + } + responseWriter := httptest.NewRecorder() + paramsJSON := encodeParams(t, ¶ms) + + NewResizer(config.Config{ImageResizerConfig: cfg}).Inject(responseWriter, httpRequest, paramsJSON) + + return responseWriter.Result() +} + +func TestRequestScaledImageFromPath(t *testing.T) { + cfg := config.DefaultImageResizerConfig + + testCases := []struct { + desc string + imagePath string + contentType string + }{ + { + desc: "PNG", + imagePath: imagePath, + contentType: "image/png", + }, + { + desc: "JPEG", + imagePath: "../../testdata/image.jpg", + contentType: "image/jpeg", + }, + { + desc: "JPEG < 1kb", + imagePath: "../../testdata/image_single_pixel.jpg", + contentType: "image/jpeg", + }, + } + + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + params := resizeParams{Location: tc.imagePath, ContentType: tc.contentType, Width: 64} + + resp := requestScaledImage(t, nil, params, cfg) + require.Equal(t, http.StatusOK, resp.StatusCode) + + bounds := imageFromResponse(t, resp).Bounds() + require.Equal(t, int(params.Width), bounds.Size().X, "wrong width after resizing") + }) + } +} + +func TestRequestScaledImageWithConditionalGetAndImageNotChanged(t *testing.T) { + cfg := config.DefaultImageResizerConfig + params := resizeParams{Location: imagePath, ContentType: "image/png", Width: 64} + + clientTime := testImageLastModified(t) + header := http.Header{} + header.Set("If-Modified-Since", httpTimeStr(clientTime)) + + resp := requestScaledImage(t, header, params, cfg) + require.Equal(t, http.StatusNotModified, resp.StatusCode) + require.Equal(t, httpTimeStr(testImageLastModified(t)), resp.Header.Get("Last-Modified")) + require.Empty(t, resp.Header.Get("Content-Type")) + require.Empty(t, resp.Header.Get("Content-Length")) +} + +func TestRequestScaledImageWithConditionalGetAndImageChanged(t *testing.T) { + cfg := config.DefaultImageResizerConfig + params := resizeParams{Location: imagePath, ContentType: "image/png", Width: 64} + + clientTime := testImageLastModified(t).Add(-1 * time.Second) + header := http.Header{} + header.Set("If-Modified-Since", httpTimeStr(clientTime)) + + resp := requestScaledImage(t, header, params, cfg) + require.Equal(t, http.StatusOK, resp.StatusCode) + require.Equal(t, httpTimeStr(testImageLastModified(t)), resp.Header.Get("Last-Modified")) +} + +func TestRequestScaledImageWithConditionalGetAndInvalidClientTime(t *testing.T) { + cfg := config.DefaultImageResizerConfig + params := resizeParams{Location: imagePath, ContentType: "image/png", Width: 64} + + header := http.Header{} + header.Set("If-Modified-Since", "0") + + resp := requestScaledImage(t, header, params, cfg) + require.Equal(t, http.StatusOK, resp.StatusCode) + require.Equal(t, httpTimeStr(testImageLastModified(t)), resp.Header.Get("Last-Modified")) +} + +func TestServeOriginalImageWhenSourceImageTooLarge(t *testing.T) { + originalImage := testImage(t) + cfg := config.ImageResizerConfig{MaxScalerProcs: 1, MaxFilesize: 1} + params := resizeParams{Location: imagePath, ContentType: "image/png", Width: 64} + + resp := requestScaledImage(t, nil, params, cfg) + require.Equal(t, http.StatusOK, resp.StatusCode) + + img := imageFromResponse(t, resp) + require.Equal(t, originalImage.Bounds(), img.Bounds(), "expected original image size") +} + +func TestFailFastOnOpenStreamFailure(t *testing.T) { + cfg := config.DefaultImageResizerConfig + params := resizeParams{Location: "does_not_exist.png", ContentType: "image/png", Width: 64} + resp := requestScaledImage(t, nil, params, cfg) + + require.Equal(t, http.StatusInternalServerError, resp.StatusCode) +} + +func TestIgnoreContentTypeMismatchIfImageFormatIsAllowed(t *testing.T) { + cfg := config.DefaultImageResizerConfig + params := resizeParams{Location: imagePath, ContentType: "image/jpeg", Width: 64} + resp := requestScaledImage(t, nil, params, cfg) + require.Equal(t, http.StatusOK, resp.StatusCode) + + bounds := imageFromResponse(t, resp).Bounds() + require.Equal(t, int(params.Width), bounds.Size().X, "wrong width after resizing") +} + +func TestUnpackParametersReturnsParamsInstanceForValidInput(t *testing.T) { + r := Resizer{} + inParams := resizeParams{Location: imagePath, Width: 64, ContentType: "image/png"} + + outParams, err := r.unpackParameters(encodeParams(t, &inParams)) + + require.NoError(t, err, "unexpected error when unpacking params") + require.Equal(t, inParams, *outParams) +} + +func TestUnpackParametersReturnsErrorWhenLocationBlank(t *testing.T) { + r := Resizer{} + inParams := resizeParams{Location: "", Width: 64, ContentType: "image/jpg"} + + _, err := r.unpackParameters(encodeParams(t, &inParams)) + + require.Error(t, err, "expected error when Location is blank") +} + +func TestUnpackParametersReturnsErrorWhenContentTypeBlank(t *testing.T) { + r := Resizer{} + inParams := resizeParams{Location: imagePath, Width: 64, ContentType: ""} + + _, err := r.unpackParameters(encodeParams(t, &inParams)) + + require.Error(t, err, "expected error when ContentType is blank") +} + +func TestServeOriginalImageWhenSourceImageFormatIsNotAllowed(t *testing.T) { + cfg := config.DefaultImageResizerConfig + // SVG images are not allowed to be resized + svgImagePath := "../../testdata/image.svg" + svgImage, err := ioutil.ReadFile(svgImagePath) + require.NoError(t, err) + // ContentType is no longer used to perform the format validation. + // To make the test more strict, we'll use allowed, but incorrect ContentType. + params := resizeParams{Location: svgImagePath, ContentType: "image/png", Width: 64} + + resp := requestScaledImage(t, nil, params, cfg) + require.Equal(t, http.StatusOK, resp.StatusCode) + + responseData, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, svgImage, responseData, "expected original image") +} + +// The Rails applications sends a Base64 encoded JSON string carrying +// these parameters in an HTTP response header +func encodeParams(t *testing.T, p *resizeParams) string { + json, err := json.Marshal(*p) + if err != nil { + require.NoError(t, err, "JSON encoder encountered unexpected error") + } + return base64.StdEncoding.EncodeToString(json) +} + +func testImage(t *testing.T) image.Image { + f, err := os.Open(imagePath) + require.NoError(t, err) + + image, err := png.Decode(f) + require.NoError(t, err, "decode original image") + + return image +} + +func testImageLastModified(t *testing.T) time.Time { + fi, err := os.Stat(imagePath) + require.NoError(t, err) + + return fi.ModTime() +} + +func imageFromResponse(t *testing.T, resp *http.Response) image.Image { + img, _, err := image.Decode(resp.Body) + require.NoError(t, err, "decode resized image") + return img +} + +func httpTimeStr(time time.Time) string { + return time.UTC().Format(http.TimeFormat) +} diff --git a/workhorse/internal/lfs/lfs.go b/workhorse/internal/lfs/lfs.go new file mode 100644 index 00000000000..ec48dc05ef9 --- /dev/null +++ b/workhorse/internal/lfs/lfs.go @@ -0,0 +1,55 @@ +/* +In this file we handle git lfs objects downloads and uploads +*/ + +package lfs + +import ( + "fmt" + "net/http" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/filestore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upload" +) + +type object struct { + size int64 + oid string +} + +func (l *object) Verify(fh *filestore.FileHandler) error { + if fh.Size != l.size { + return fmt.Errorf("LFSObject: expected size %d, wrote %d", l.size, fh.Size) + } + + if fh.SHA256() != l.oid { + return fmt.Errorf("LFSObject: expected sha256 %s, got %s", l.oid, fh.SHA256()) + } + + return nil +} + +type uploadPreparer struct { + objectPreparer upload.Preparer +} + +func NewLfsUploadPreparer(c config.Config, objectPreparer upload.Preparer) upload.Preparer { + return &uploadPreparer{objectPreparer: objectPreparer} +} + +func (l *uploadPreparer) Prepare(a *api.Response) (*filestore.SaveFileOpts, upload.Verifier, error) { + opts, _, err := l.objectPreparer.Prepare(a) + if err != nil { + return nil, nil, err + } + + opts.TempFilePrefix = a.LfsOid + + return opts, &object{oid: a.LfsOid, size: a.LfsSize}, nil +} + +func PutStore(a *api.API, h http.Handler, p upload.Preparer) http.Handler { + return upload.BodyUploader(a, h, p) +} diff --git a/workhorse/internal/lfs/lfs_test.go b/workhorse/internal/lfs/lfs_test.go new file mode 100644 index 00000000000..828ed1bfe90 --- /dev/null +++ b/workhorse/internal/lfs/lfs_test.go @@ -0,0 +1,61 @@ +package lfs_test + +import ( + "testing" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/lfs" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upload" + + "github.com/stretchr/testify/require" +) + +func TestLfsUploadPreparerWithConfig(t *testing.T) { + lfsOid := "abcd1234" + creds := config.S3Credentials{ + AwsAccessKeyID: "test-key", + AwsSecretAccessKey: "test-secret", + } + + c := config.Config{ + ObjectStorageCredentials: config.ObjectStorageCredentials{ + Provider: "AWS", + S3Credentials: creds, + }, + } + + r := &api.Response{ + LfsOid: lfsOid, + RemoteObject: api.RemoteObject{ + ID: "the upload ID", + UseWorkhorseClient: true, + ObjectStorage: &api.ObjectStorageParams{ + Provider: "AWS", + }, + }, + } + + uploadPreparer := upload.NewObjectStoragePreparer(c) + lfsPreparer := lfs.NewLfsUploadPreparer(c, uploadPreparer) + opts, verifier, err := lfsPreparer.Prepare(r) + + require.NoError(t, err) + require.Equal(t, lfsOid, opts.TempFilePrefix) + require.True(t, opts.ObjectStorageConfig.IsAWS()) + require.True(t, opts.UseWorkhorseClient) + require.Equal(t, creds, opts.ObjectStorageConfig.S3Credentials) + require.NotNil(t, verifier) +} + +func TestLfsUploadPreparerWithNoConfig(t *testing.T) { + c := config.Config{} + r := &api.Response{RemoteObject: api.RemoteObject{ID: "the upload ID"}} + uploadPreparer := upload.NewObjectStoragePreparer(c) + lfsPreparer := lfs.NewLfsUploadPreparer(c, uploadPreparer) + opts, verifier, err := lfsPreparer.Prepare(r) + + require.NoError(t, err) + require.False(t, opts.UseWorkhorseClient) + require.NotNil(t, verifier) +} diff --git a/workhorse/internal/lsif_transformer/parser/cache.go b/workhorse/internal/lsif_transformer/parser/cache.go new file mode 100644 index 00000000000..395069cd217 --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/cache.go @@ -0,0 +1,56 @@ +package parser + +import ( + "encoding/binary" + "io" + "io/ioutil" + "os" +) + +// This cache implementation is using a temp file to provide key-value data storage +// It allows to avoid storing intermediate calculations in RAM +// The stored data must be a fixed-size value or a slice of fixed-size values, or a pointer to such data +type cache struct { + file *os.File + chunkSize int64 +} + +func newCache(tempDir, filename string, data interface{}) (*cache, error) { + f, err := ioutil.TempFile(tempDir, filename) + if err != nil { + return nil, err + } + + if err := os.Remove(f.Name()); err != nil { + return nil, err + } + + return &cache{file: f, chunkSize: int64(binary.Size(data))}, nil +} + +func (c *cache) SetEntry(id Id, data interface{}) error { + if err := c.setOffset(id); err != nil { + return err + } + + return binary.Write(c.file, binary.LittleEndian, data) +} + +func (c *cache) Entry(id Id, data interface{}) error { + if err := c.setOffset(id); err != nil { + return err + } + + return binary.Read(c.file, binary.LittleEndian, data) +} + +func (c *cache) Close() error { + return c.file.Close() +} + +func (c *cache) setOffset(id Id) error { + offset := int64(id) * c.chunkSize + _, err := c.file.Seek(offset, io.SeekStart) + + return err +} diff --git a/workhorse/internal/lsif_transformer/parser/cache_test.go b/workhorse/internal/lsif_transformer/parser/cache_test.go new file mode 100644 index 00000000000..23a2ac6e9a9 --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/cache_test.go @@ -0,0 +1,33 @@ +package parser + +import ( + "io/ioutil" + "testing" + + "github.com/stretchr/testify/require" +) + +type chunk struct { + A int16 + B int16 +} + +func TestCache(t *testing.T) { + cache, err := newCache("", "test-chunks", chunk{}) + require.NoError(t, err) + defer cache.Close() + + c := chunk{A: 1, B: 2} + require.NoError(t, cache.SetEntry(1, &c)) + require.NoError(t, cache.setOffset(0)) + + content, err := ioutil.ReadAll(cache.file) + require.NoError(t, err) + + expected := []byte{0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0} + require.Equal(t, expected, content) + + var nc chunk + require.NoError(t, cache.Entry(1, &nc)) + require.Equal(t, c, nc) +} diff --git a/workhorse/internal/lsif_transformer/parser/code_hover.go b/workhorse/internal/lsif_transformer/parser/code_hover.go new file mode 100644 index 00000000000..dbdaba643d1 --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/code_hover.go @@ -0,0 +1,124 @@ +package parser + +import ( + "encoding/json" + "strings" + "unicode/utf8" + + "github.com/alecthomas/chroma" + "github.com/alecthomas/chroma/lexers" +) + +const maxValueSize = 250 + +type token struct { + Class string `json:"class,omitempty"` + Value string `json:"value"` +} + +type codeHover struct { + TruncatedValue *truncatableString `json:"value,omitempty"` + Tokens [][]token `json:"tokens,omitempty"` + Language string `json:"language,omitempty"` + Truncated bool `json:"truncated,omitempty"` +} + +type truncatableString struct { + Value string + Truncated bool +} + +func (ts *truncatableString) UnmarshalText(b []byte) error { + s := 0 + for i := 0; s < len(b); i++ { + if i >= maxValueSize { + ts.Truncated = true + break + } + + _, size := utf8.DecodeRune(b[s:]) + + s += size + } + + ts.Value = string(b[0:s]) + + return nil +} + +func (ts *truncatableString) MarshalJSON() ([]byte, error) { + return json.Marshal(ts.Value) +} + +func newCodeHover(content json.RawMessage) (*codeHover, error) { + // Hover value can be either an object: { "value": "func main()", "language": "go" } + // Or a string with documentation + // We try to unmarshal the content into a string and if we fail, we unmarshal it into an object + var c codeHover + if err := json.Unmarshal(content, &c.TruncatedValue); err != nil { + if err := json.Unmarshal(content, &c); err != nil { + return nil, err + } + + c.setTokens() + } + + c.Truncated = c.TruncatedValue.Truncated + + if len(c.Tokens) > 0 { + c.TruncatedValue = nil // remove value for hovers which have tokens + } + + return &c, nil +} + +func (c *codeHover) setTokens() { + lexer := lexers.Get(c.Language) + if lexer == nil { + return + } + + iterator, err := lexer.Tokenise(nil, c.TruncatedValue.Value) + if err != nil { + return + } + + var tokenLines [][]token + for _, tokenLine := range chroma.SplitTokensIntoLines(iterator.Tokens()) { + var tokens []token + var rawToken string + for _, t := range tokenLine { + class := c.classFor(t.Type) + + // accumulate consequent raw values in a single string to store them as + // [{ Class: "kd", Value: "func" }, { Value: " main() {" }] instead of + // [{ Class: "kd", Value: "func" }, { Value: " " }, { Value: "main" }, { Value: "(" }...] + if class == "" { + rawToken = rawToken + t.Value + } else { + if rawToken != "" { + tokens = append(tokens, token{Value: rawToken}) + rawToken = "" + } + + tokens = append(tokens, token{Class: class, Value: t.Value}) + } + } + + if rawToken != "" { + tokens = append(tokens, token{Value: rawToken}) + } + + tokenLines = append(tokenLines, tokens) + } + + c.Tokens = tokenLines +} + +func (c *codeHover) classFor(tokenType chroma.TokenType) string { + if strings.HasPrefix(tokenType.String(), "Keyword") || tokenType == chroma.String || tokenType == chroma.Comment { + return chroma.StandardTypes[tokenType] + } + + return "" +} diff --git a/workhorse/internal/lsif_transformer/parser/code_hover_test.go b/workhorse/internal/lsif_transformer/parser/code_hover_test.go new file mode 100644 index 00000000000..2030e530155 --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/code_hover_test.go @@ -0,0 +1,106 @@ +package parser + +import ( + "encoding/json" + "fmt" + "strings" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestHighlight(t *testing.T) { + tests := []struct { + name string + language string + value string + want [][]token + }{ + { + name: "go function definition", + language: "go", + value: "func main()", + want: [][]token{{{Class: "kd", Value: "func"}, {Value: " main()"}}}, + }, + { + name: "go struct definition", + language: "go", + value: "type Command struct", + want: [][]token{{{Class: "kd", Value: "type"}, {Value: " Command "}, {Class: "kd", Value: "struct"}}}, + }, + { + name: "go struct multiline definition", + language: "go", + value: `struct {\nConfig *Config\nReadWriter *ReadWriter\nEOFSent bool\n}`, + want: [][]token{ + {{Class: "kd", Value: "struct"}, {Value: " {\n"}}, + {{Value: "Config *Config\n"}}, + {{Value: "ReadWriter *ReadWriter\n"}}, + {{Value: "EOFSent "}, {Class: "kt", Value: "bool"}, {Value: "\n"}}, + {{Value: "}"}}, + }, + }, + { + name: "ruby method definition", + language: "ruby", + value: "def read(line)", + want: [][]token{{{Class: "k", Value: "def"}, {Value: " read(line)"}}}, + }, + { + name: "ruby multiline method definition", + language: "ruby", + value: `def read(line)\nend`, + want: [][]token{ + {{Class: "k", Value: "def"}, {Value: " read(line)\n"}}, + {{Class: "k", Value: "end"}}, + }, + }, + { + name: "unknown/malicious language is passed", + language: " alert(1); ", + value: `def a;\nend`, + want: [][]token(nil), + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + raw := []byte(fmt.Sprintf(`{"language":"%s","value":"%s"}`, tt.language, tt.value)) + c, err := newCodeHover(json.RawMessage(raw)) + + require.NoError(t, err) + require.Equal(t, tt.want, c.Tokens) + }) + } +} + +func TestMarkdown(t *testing.T) { + value := `"This method reverses a string \n\n"` + c, err := newCodeHover(json.RawMessage(value)) + + require.NoError(t, err) + require.Equal(t, "This method reverses a string \n\n", c.TruncatedValue.Value) +} + +func TestTruncatedValue(t *testing.T) { + value := strings.Repeat("a", 500) + rawValue, err := json.Marshal(value) + require.NoError(t, err) + + c, err := newCodeHover(rawValue) + require.NoError(t, err) + + require.Equal(t, value[0:maxValueSize], c.TruncatedValue.Value) + require.True(t, c.TruncatedValue.Truncated) +} + +func TestTruncatingMultiByteChars(t *testing.T) { + value := strings.Repeat("ಅ", 500) + rawValue, err := json.Marshal(value) + require.NoError(t, err) + + c, err := newCodeHover(rawValue) + require.NoError(t, err) + + symbolSize := 3 + require.Equal(t, value[0:maxValueSize*symbolSize], c.TruncatedValue.Value) +} diff --git a/workhorse/internal/lsif_transformer/parser/docs.go b/workhorse/internal/lsif_transformer/parser/docs.go new file mode 100644 index 00000000000..c626e07d3fe --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/docs.go @@ -0,0 +1,144 @@ +package parser + +import ( + "archive/zip" + "bufio" + "encoding/json" + "io" + "strings" +) + +const maxScanTokenSize = 1024 * 1024 + +type Line struct { + Type string `json:"label"` +} + +type Docs struct { + Root string + Entries map[Id]string + DocRanges map[Id][]Id + Ranges *Ranges +} + +type Document struct { + Id Id `json:"id"` + Uri string `json:"uri"` +} + +type DocumentRange struct { + OutV Id `json:"outV"` + RangeIds []Id `json:"inVs"` +} + +type Metadata struct { + Root string `json:"projectRoot"` +} + +func NewDocs(config Config) (*Docs, error) { + ranges, err := NewRanges(config) + if err != nil { + return nil, err + } + + return &Docs{ + Root: "file:///", + Entries: make(map[Id]string), + DocRanges: make(map[Id][]Id), + Ranges: ranges, + }, nil +} + +func (d *Docs) Parse(r io.Reader) error { + scanner := bufio.NewScanner(r) + buf := make([]byte, 0, bufio.MaxScanTokenSize) + scanner.Buffer(buf, maxScanTokenSize) + + for scanner.Scan() { + if err := d.process(scanner.Bytes()); err != nil { + return err + } + } + + return scanner.Err() +} + +func (d *Docs) process(line []byte) error { + l := Line{} + if err := json.Unmarshal(line, &l); err != nil { + return err + } + + switch l.Type { + case "metaData": + if err := d.addMetadata(line); err != nil { + return err + } + case "document": + if err := d.addDocument(line); err != nil { + return err + } + case "contains": + if err := d.addDocRanges(line); err != nil { + return err + } + default: + return d.Ranges.Read(l.Type, line) + } + + return nil +} + +func (d *Docs) Close() error { + return d.Ranges.Close() +} + +func (d *Docs) SerializeEntries(w *zip.Writer) error { + for id, path := range d.Entries { + filePath := Lsif + "/" + path + ".json" + + f, err := w.Create(filePath) + if err != nil { + return err + } + + if err := d.Ranges.Serialize(f, d.DocRanges[id], d.Entries); err != nil { + return err + } + } + + return nil +} + +func (d *Docs) addMetadata(line []byte) error { + var metadata Metadata + if err := json.Unmarshal(line, &metadata); err != nil { + return err + } + + d.Root = strings.TrimSpace(metadata.Root) + "/" + + return nil +} + +func (d *Docs) addDocument(line []byte) error { + var doc Document + if err := json.Unmarshal(line, &doc); err != nil { + return err + } + + d.Entries[doc.Id] = strings.TrimPrefix(doc.Uri, d.Root) + + return nil +} + +func (d *Docs) addDocRanges(line []byte) error { + var docRange DocumentRange + if err := json.Unmarshal(line, &docRange); err != nil { + return err + } + + d.DocRanges[docRange.OutV] = append(d.DocRanges[docRange.OutV], docRange.RangeIds...) + + return nil +} diff --git a/workhorse/internal/lsif_transformer/parser/docs_test.go b/workhorse/internal/lsif_transformer/parser/docs_test.go new file mode 100644 index 00000000000..57dca8e773d --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/docs_test.go @@ -0,0 +1,54 @@ +package parser + +import ( + "bytes" + "fmt" + "strings" + "testing" + + "github.com/stretchr/testify/require" +) + +func createLine(id, label, uri string) []byte { + return []byte(fmt.Sprintf(`{"id":"%s","label":"%s","uri":"%s"}`+"\n", id, label, uri)) +} + +func TestParse(t *testing.T) { + d, err := NewDocs(Config{}) + require.NoError(t, err) + defer d.Close() + + data := []byte(`{"id":"1","label":"metaData","projectRoot":"file:///Users/nested"}` + "\n") + data = append(data, createLine("2", "document", "file:///Users/nested/file.rb")...) + data = append(data, createLine("3", "document", "file:///Users/nested/folder/file.rb")...) + data = append(data, createLine("4", "document", "file:///Users/wrong/file.rb")...) + + require.NoError(t, d.Parse(bytes.NewReader(data))) + + require.Equal(t, d.Entries[2], "file.rb") + require.Equal(t, d.Entries[3], "folder/file.rb") + require.Equal(t, d.Entries[4], "file:///Users/wrong/file.rb") +} + +func TestParseContainsLine(t *testing.T) { + d, err := NewDocs(Config{}) + require.NoError(t, err) + defer d.Close() + + data := []byte(`{"id":"5","label":"contains","outV":"1", "inVs": ["2", "3"]}` + "\n") + data = append(data, []byte(`{"id":"6","label":"contains","outV":"1", "inVs": [4]}`+"\n")...) + + require.NoError(t, d.Parse(bytes.NewReader(data))) + + require.Equal(t, []Id{2, 3, 4}, d.DocRanges[1]) +} + +func TestParsingVeryLongLine(t *testing.T) { + d, err := NewDocs(Config{}) + require.NoError(t, err) + defer d.Close() + + line := []byte(`{"id": "` + strings.Repeat("a", 64*1024) + `"}`) + + require.NoError(t, d.Parse(bytes.NewReader(line))) +} diff --git a/workhorse/internal/lsif_transformer/parser/errors.go b/workhorse/internal/lsif_transformer/parser/errors.go new file mode 100644 index 00000000000..1040a789413 --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/errors.go @@ -0,0 +1,30 @@ +package parser + +import ( + "errors" + "strings" +) + +func combineErrors(errsOrNil ...error) error { + var errs []error + for _, err := range errsOrNil { + if err != nil { + errs = append(errs, err) + } + } + + if len(errs) == 0 { + return nil + } + + if len(errs) == 1 { + return errs[0] + } + + var msgs []string + for _, err := range errs { + msgs = append(msgs, err.Error()) + } + + return errors.New(strings.Join(msgs, "\n")) +} diff --git a/workhorse/internal/lsif_transformer/parser/errors_test.go b/workhorse/internal/lsif_transformer/parser/errors_test.go new file mode 100644 index 00000000000..31a7130d05e --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/errors_test.go @@ -0,0 +1,26 @@ +package parser + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/require" +) + +type customErr struct { + err string +} + +func (e customErr) Error() string { + return e.err +} + +func TestCombineErrors(t *testing.T) { + err := combineErrors(nil, errors.New("first"), nil, customErr{"second"}) + require.EqualError(t, err, "first\nsecond") + + err = customErr{"custom error"} + require.Equal(t, err, combineErrors(nil, err, nil)) + + require.Nil(t, combineErrors(nil, nil, nil)) +} diff --git a/workhorse/internal/lsif_transformer/parser/hovers.go b/workhorse/internal/lsif_transformer/parser/hovers.go new file mode 100644 index 00000000000..e96d7e4fca3 --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/hovers.go @@ -0,0 +1,162 @@ +package parser + +import ( + "encoding/json" + "io/ioutil" + "os" +) + +type Offset struct { + At int32 + Len int32 +} + +type Hovers struct { + File *os.File + Offsets *cache + CurrentOffset int +} + +type RawResult struct { + Contents []json.RawMessage `json:"contents"` +} + +type RawData struct { + Id Id `json:"id"` + Result RawResult `json:"result"` +} + +type HoverRef struct { + ResultSetId Id `json:"outV"` + HoverId Id `json:"inV"` +} + +type ResultSetRef struct { + ResultSetId Id `json:"outV"` + RefId Id `json:"inV"` +} + +func NewHovers(config Config) (*Hovers, error) { + tempPath := config.TempPath + + file, err := ioutil.TempFile(tempPath, "hovers") + if err != nil { + return nil, err + } + + if err := os.Remove(file.Name()); err != nil { + return nil, err + } + + offsets, err := newCache(tempPath, "hovers-indexes", Offset{}) + if err != nil { + return nil, err + } + + return &Hovers{ + File: file, + Offsets: offsets, + CurrentOffset: 0, + }, nil +} + +func (h *Hovers) Read(label string, line []byte) error { + switch label { + case "hoverResult": + if err := h.addData(line); err != nil { + return err + } + case "textDocument/hover": + if err := h.addHoverRef(line); err != nil { + return err + } + case "textDocument/references": + if err := h.addResultSetRef(line); err != nil { + return err + } + } + + return nil +} + +func (h *Hovers) For(refId Id) json.RawMessage { + var offset Offset + if err := h.Offsets.Entry(refId, &offset); err != nil || offset.Len == 0 { + return nil + } + + hover := make([]byte, offset.Len) + _, err := h.File.ReadAt(hover, int64(offset.At)) + if err != nil { + return nil + } + + return json.RawMessage(hover) +} + +func (h *Hovers) Close() error { + return combineErrors( + h.File.Close(), + h.Offsets.Close(), + ) +} + +func (h *Hovers) addData(line []byte) error { + var rawData RawData + if err := json.Unmarshal(line, &rawData); err != nil { + return err + } + + codeHovers := []*codeHover{} + for _, rawContent := range rawData.Result.Contents { + c, err := newCodeHover(rawContent) + if err != nil { + return err + } + + codeHovers = append(codeHovers, c) + } + + codeHoversData, err := json.Marshal(codeHovers) + if err != nil { + return err + } + + n, err := h.File.Write(codeHoversData) + if err != nil { + return err + } + + offset := Offset{At: int32(h.CurrentOffset), Len: int32(n)} + h.CurrentOffset += n + + return h.Offsets.SetEntry(rawData.Id, &offset) +} + +func (h *Hovers) addHoverRef(line []byte) error { + var hoverRef HoverRef + if err := json.Unmarshal(line, &hoverRef); err != nil { + return err + } + + var offset Offset + if err := h.Offsets.Entry(hoverRef.HoverId, &offset); err != nil { + return err + } + + return h.Offsets.SetEntry(hoverRef.ResultSetId, &offset) +} + +func (h *Hovers) addResultSetRef(line []byte) error { + var ref ResultSetRef + if err := json.Unmarshal(line, &ref); err != nil { + return err + } + + var offset Offset + if err := h.Offsets.Entry(ref.ResultSetId, &offset); err != nil { + return nil + } + + return h.Offsets.SetEntry(ref.RefId, &offset) +} diff --git a/workhorse/internal/lsif_transformer/parser/hovers_test.go b/workhorse/internal/lsif_transformer/parser/hovers_test.go new file mode 100644 index 00000000000..3037be103af --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/hovers_test.go @@ -0,0 +1,30 @@ +package parser + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestHoversRead(t *testing.T) { + h := setupHovers(t) + + var offset Offset + require.NoError(t, h.Offsets.Entry(2, &offset)) + require.Equal(t, Offset{At: 0, Len: 19}, offset) + + require.Equal(t, `[{"value":"hello"}]`, string(h.For(1))) + + require.NoError(t, h.Close()) +} + +func setupHovers(t *testing.T) *Hovers { + h, err := NewHovers(Config{}) + require.NoError(t, err) + + require.NoError(t, h.Read("hoverResult", []byte(`{"id":"2","label":"hoverResult","result":{"contents": ["hello"]}}`))) + require.NoError(t, h.Read("textDocument/hover", []byte(`{"id":4,"label":"textDocument/hover","outV":"3","inV":2}`))) + require.NoError(t, h.Read("textDocument/references", []byte(`{"id":"3","label":"textDocument/references","outV":3,"inV":"1"}`))) + + return h +} diff --git a/workhorse/internal/lsif_transformer/parser/id.go b/workhorse/internal/lsif_transformer/parser/id.go new file mode 100644 index 00000000000..2adc4e092f5 --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/id.go @@ -0,0 +1,52 @@ +package parser + +import ( + "encoding/json" + "errors" + "strconv" +) + +const ( + minId = 1 + maxId = 20 * 1000 * 1000 +) + +type Id int32 + +func (id *Id) UnmarshalJSON(b []byte) error { + if len(b) > 0 && b[0] != '"' { + if err := id.unmarshalInt(b); err != nil { + return err + } + } else { + if err := id.unmarshalString(b); err != nil { + return err + } + } + + if *id < minId || *id > maxId { + return errors.New("json: id is invalid") + } + + return nil +} + +func (id *Id) unmarshalInt(b []byte) error { + return json.Unmarshal(b, (*int32)(id)) +} + +func (id *Id) unmarshalString(b []byte) error { + var s string + if err := json.Unmarshal(b, &s); err != nil { + return err + } + + i, err := strconv.Atoi(s) + if err != nil { + return err + } + + *id = Id(i) + + return nil +} diff --git a/workhorse/internal/lsif_transformer/parser/id_test.go b/workhorse/internal/lsif_transformer/parser/id_test.go new file mode 100644 index 00000000000..c1c53928378 --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/id_test.go @@ -0,0 +1,28 @@ +package parser + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/require" +) + +type jsonWithId struct { + Value Id `json:"value"` +} + +func TestId(t *testing.T) { + var v jsonWithId + require.NoError(t, json.Unmarshal([]byte(`{ "value": 1230 }`), &v)) + require.Equal(t, Id(1230), v.Value) + + require.NoError(t, json.Unmarshal([]byte(`{ "value": "1230" }`), &v)) + require.Equal(t, Id(1230), v.Value) + + require.Error(t, json.Unmarshal([]byte(`{ "value": "1.5" }`), &v)) + require.Error(t, json.Unmarshal([]byte(`{ "value": 1.5 }`), &v)) + require.Error(t, json.Unmarshal([]byte(`{ "value": "-1" }`), &v)) + require.Error(t, json.Unmarshal([]byte(`{ "value": -1 }`), &v)) + require.Error(t, json.Unmarshal([]byte(`{ "value": 21000000 }`), &v)) + require.Error(t, json.Unmarshal([]byte(`{ "value": "21000000" }`), &v)) +} diff --git a/workhorse/internal/lsif_transformer/parser/parser.go b/workhorse/internal/lsif_transformer/parser/parser.go new file mode 100644 index 00000000000..085e7a856aa --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/parser.go @@ -0,0 +1,109 @@ +package parser + +import ( + "archive/zip" + "context" + "errors" + "fmt" + "io" + "io/ioutil" + "os" + + "gitlab.com/gitlab-org/labkit/log" +) + +var ( + Lsif = "lsif" +) + +type Parser struct { + Docs *Docs + + pr *io.PipeReader +} + +type Config struct { + TempPath string +} + +func NewParser(ctx context.Context, r io.Reader, config Config) (io.ReadCloser, error) { + docs, err := NewDocs(config) + if err != nil { + return nil, err + } + + // ZIP files need to be seekable. Don't hold it all in RAM, use a tempfile + tempFile, err := ioutil.TempFile(config.TempPath, Lsif) + if err != nil { + return nil, err + } + + defer tempFile.Close() + + if err := os.Remove(tempFile.Name()); err != nil { + return nil, err + } + + size, err := io.Copy(tempFile, r) + if err != nil { + return nil, err + } + log.WithContextFields(ctx, log.Fields{"lsif_zip_cache_bytes": size}).Print("cached incoming LSIF zip on disk") + + zr, err := zip.NewReader(tempFile, size) + if err != nil { + return nil, err + } + + if len(zr.File) == 0 { + return nil, errors.New("empty zip file") + } + + file, err := zr.File[0].Open() + if err != nil { + return nil, err + } + + defer file.Close() + + if err := docs.Parse(file); err != nil { + return nil, err + } + + pr, pw := io.Pipe() + parser := &Parser{ + Docs: docs, + pr: pr, + } + + go parser.transform(pw) + + return parser, nil +} + +func (p *Parser) Read(b []byte) (int, error) { + return p.pr.Read(b) +} + +func (p *Parser) Close() error { + p.pr.Close() + + return p.Docs.Close() +} + +func (p *Parser) transform(pw *io.PipeWriter) { + zw := zip.NewWriter(pw) + + if err := p.Docs.SerializeEntries(zw); err != nil { + zw.Close() // Free underlying resources only + pw.CloseWithError(fmt.Errorf("lsif parser: Docs.SerializeEntries: %v", err)) + return + } + + if err := zw.Close(); err != nil { + pw.CloseWithError(fmt.Errorf("lsif parser: ZipWriter.Close: %v", err)) + return + } + + pw.Close() +} diff --git a/workhorse/internal/lsif_transformer/parser/parser_test.go b/workhorse/internal/lsif_transformer/parser/parser_test.go new file mode 100644 index 00000000000..3a4d72360e2 --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/parser_test.go @@ -0,0 +1,80 @@ +package parser + +import ( + "archive/zip" + "bytes" + "context" + "encoding/json" + "io" + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestGenerate(t *testing.T) { + filePath := "testdata/dump.lsif.zip" + tmpDir := filePath + ".tmp" + defer os.RemoveAll(tmpDir) + + createFiles(t, filePath, tmpDir) + + verifyCorrectnessOf(t, tmpDir, "lsif/main.go.json") + verifyCorrectnessOf(t, tmpDir, "lsif/morestrings/reverse.go.json") +} + +func verifyCorrectnessOf(t *testing.T, tmpDir, fileName string) { + file, err := ioutil.ReadFile(filepath.Join(tmpDir, fileName)) + require.NoError(t, err) + + var buf bytes.Buffer + require.NoError(t, json.Indent(&buf, file, "", " ")) + + expected, err := ioutil.ReadFile(filepath.Join("testdata/expected/", fileName)) + require.NoError(t, err) + + require.Equal(t, string(expected), buf.String()) +} + +func createFiles(t *testing.T, filePath, tmpDir string) { + t.Helper() + file, err := os.Open(filePath) + require.NoError(t, err) + + parser, err := NewParser(context.Background(), file, Config{}) + require.NoError(t, err) + + zipFileName := tmpDir + ".zip" + w, err := os.Create(zipFileName) + require.NoError(t, err) + defer os.RemoveAll(zipFileName) + + _, err = io.Copy(w, parser) + require.NoError(t, err) + require.NoError(t, parser.Close()) + + extractZipFiles(t, tmpDir, zipFileName) +} + +func extractZipFiles(t *testing.T, tmpDir, zipFileName string) { + zipReader, err := zip.OpenReader(zipFileName) + require.NoError(t, err) + + for _, file := range zipReader.Reader.File { + zippedFile, err := file.Open() + require.NoError(t, err) + defer zippedFile.Close() + + fileDir, fileName := filepath.Split(file.Name) + require.NoError(t, os.MkdirAll(filepath.Join(tmpDir, fileDir), os.ModePerm)) + + outputFile, err := os.Create(filepath.Join(tmpDir, fileDir, fileName)) + require.NoError(t, err) + defer outputFile.Close() + + _, err = io.Copy(outputFile, zippedFile) + require.NoError(t, err) + } +} diff --git a/workhorse/internal/lsif_transformer/parser/performance_test.go b/workhorse/internal/lsif_transformer/parser/performance_test.go new file mode 100644 index 00000000000..5a12d90072f --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/performance_test.go @@ -0,0 +1,47 @@ +package parser + +import ( + "context" + "io" + "io/ioutil" + "os" + "runtime" + "testing" + + "github.com/stretchr/testify/require" +) + +func BenchmarkGenerate(b *testing.B) { + filePath := "testdata/workhorse.lsif.zip" + tmpDir := filePath + ".tmp" + defer os.RemoveAll(tmpDir) + + var memoryUsage float64 + for i := 0; i < b.N; i++ { + memoryUsage += measureMemory(func() { + file, err := os.Open(filePath) + require.NoError(b, err) + + parser, err := NewParser(context.Background(), file, Config{}) + require.NoError(b, err) + + _, err = io.Copy(ioutil.Discard, parser) + require.NoError(b, err) + require.NoError(b, parser.Close()) + }) + } + + b.ReportMetric(memoryUsage/float64(b.N), "MiB/op") +} + +func measureMemory(f func()) float64 { + var m, m1 runtime.MemStats + runtime.ReadMemStats(&m) + + f() + + runtime.ReadMemStats(&m1) + runtime.GC() + + return float64(m1.Alloc-m.Alloc) / 1024 / 1024 +} diff --git a/workhorse/internal/lsif_transformer/parser/ranges.go b/workhorse/internal/lsif_transformer/parser/ranges.go new file mode 100644 index 00000000000..a11a66d70ca --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/ranges.go @@ -0,0 +1,214 @@ +package parser + +import ( + "encoding/json" + "errors" + "io" + "strconv" +) + +const ( + definitions = "definitions" + references = "references" +) + +type Ranges struct { + DefRefs map[Id]Item + References *References + Hovers *Hovers + Cache *cache +} + +type RawRange struct { + Id Id `json:"id"` + Data Range `json:"start"` +} + +type Range struct { + Line int32 `json:"line"` + Character int32 `json:"character"` + RefId Id +} + +type RawItem struct { + Property string `json:"property"` + RefId Id `json:"outV"` + RangeIds []Id `json:"inVs"` + DocId Id `json:"document"` +} + +type Item struct { + Line int32 + DocId Id +} + +type SerializedRange struct { + StartLine int32 `json:"start_line"` + StartChar int32 `json:"start_char"` + DefinitionPath string `json:"definition_path,omitempty"` + Hover json.RawMessage `json:"hover"` + References []SerializedReference `json:"references,omitempty"` +} + +func NewRanges(config Config) (*Ranges, error) { + hovers, err := NewHovers(config) + if err != nil { + return nil, err + } + + references, err := NewReferences(config) + if err != nil { + return nil, err + } + + cache, err := newCache(config.TempPath, "ranges", Range{}) + if err != nil { + return nil, err + } + + return &Ranges{ + DefRefs: make(map[Id]Item), + References: references, + Hovers: hovers, + Cache: cache, + }, nil +} + +func (r *Ranges) Read(label string, line []byte) error { + switch label { + case "range": + if err := r.addRange(line); err != nil { + return err + } + case "item": + if err := r.addItem(line); err != nil { + return err + } + default: + return r.Hovers.Read(label, line) + } + + return nil +} + +func (r *Ranges) Serialize(f io.Writer, rangeIds []Id, docs map[Id]string) error { + encoder := json.NewEncoder(f) + n := len(rangeIds) + + if _, err := f.Write([]byte("[")); err != nil { + return err + } + + for i, rangeId := range rangeIds { + entry, err := r.getRange(rangeId) + if err != nil { + continue + } + + serializedRange := SerializedRange{ + StartLine: entry.Line, + StartChar: entry.Character, + DefinitionPath: r.definitionPathFor(docs, entry.RefId), + Hover: r.Hovers.For(entry.RefId), + References: r.References.For(docs, entry.RefId), + } + if err := encoder.Encode(serializedRange); err != nil { + return err + } + if i+1 < n { + if _, err := f.Write([]byte(",")); err != nil { + return err + } + } + } + + if _, err := f.Write([]byte("]")); err != nil { + return err + } + + return nil +} + +func (r *Ranges) Close() error { + return combineErrors( + r.Cache.Close(), + r.References.Close(), + r.Hovers.Close(), + ) +} + +func (r *Ranges) definitionPathFor(docs map[Id]string, refId Id) string { + defRef, ok := r.DefRefs[refId] + if !ok { + return "" + } + + defPath := docs[defRef.DocId] + "#L" + strconv.Itoa(int(defRef.Line)) + + return defPath +} + +func (r *Ranges) addRange(line []byte) error { + var rg RawRange + if err := json.Unmarshal(line, &rg); err != nil { + return err + } + + return r.Cache.SetEntry(rg.Id, &rg.Data) +} + +func (r *Ranges) addItem(line []byte) error { + var rawItem RawItem + if err := json.Unmarshal(line, &rawItem); err != nil { + return err + } + + if rawItem.Property != definitions && rawItem.Property != references { + return nil + } + + if len(rawItem.RangeIds) == 0 { + return errors.New("no range IDs") + } + + var references []Item + + for _, rangeId := range rawItem.RangeIds { + rg, err := r.getRange(rangeId) + if err != nil { + return err + } + + rg.RefId = rawItem.RefId + + if err := r.Cache.SetEntry(rangeId, rg); err != nil { + return err + } + + item := Item{ + Line: rg.Line + 1, + DocId: rawItem.DocId, + } + + if rawItem.Property == definitions { + r.DefRefs[rawItem.RefId] = item + } else { + references = append(references, item) + } + } + + if err := r.References.Store(rawItem.RefId, references); err != nil { + return err + } + + return nil +} + +func (r *Ranges) getRange(rangeId Id) (*Range, error) { + var rg Range + if err := r.Cache.Entry(rangeId, &rg); err != nil { + return nil, err + } + + return &rg, nil +} diff --git a/workhorse/internal/lsif_transformer/parser/ranges_test.go b/workhorse/internal/lsif_transformer/parser/ranges_test.go new file mode 100644 index 00000000000..c1400ba61da --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/ranges_test.go @@ -0,0 +1,61 @@ +package parser + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestRangesRead(t *testing.T) { + r, cleanup := setup(t) + defer cleanup() + + firstRange := Range{Line: 1, Character: 2, RefId: 4} + rg, err := r.getRange(1) + require.NoError(t, err) + require.Equal(t, &firstRange, rg) + + secondRange := Range{Line: 5, Character: 4, RefId: 4} + rg, err = r.getRange(2) + require.NoError(t, err) + require.Equal(t, &secondRange, rg) + + thirdRange := Range{Line: 7, Character: 4, RefId: 4} + rg, err = r.getRange(3) + require.NoError(t, err) + require.Equal(t, &thirdRange, rg) +} + +func TestSerialize(t *testing.T) { + r, cleanup := setup(t) + defer cleanup() + + docs := map[Id]string{6: "def-path", 7: "ref-path"} + + var buf bytes.Buffer + err := r.Serialize(&buf, []Id{1}, docs) + want := `[{"start_line":1,"start_char":2,"definition_path":"def-path#L2","hover":null,"references":[{"path":"ref-path#L6"},{"path":"ref-path#L8"}]}` + "\n]" + + require.NoError(t, err) + require.Equal(t, want, buf.String()) +} + +func setup(t *testing.T) (*Ranges, func()) { + r, err := NewRanges(Config{}) + require.NoError(t, err) + + require.NoError(t, r.Read("range", []byte(`{"id":1,"label":"range","start":{"line":1,"character":2}}`))) + require.NoError(t, r.Read("range", []byte(`{"id":"2","label":"range","start":{"line":5,"character":4}}`))) + require.NoError(t, r.Read("range", []byte(`{"id":"3","label":"range","start":{"line":7,"character":4}}`))) + + require.NoError(t, r.Read("item", []byte(`{"id":5,"label":"item","property":"definitions","outV":"4","inVs":[1],"document":"6"}`))) + require.NoError(t, r.Read("item", []byte(`{"id":"6","label":"item","property":"references","outV":4,"inVs":["2"],"document":"7"}`))) + require.NoError(t, r.Read("item", []byte(`{"id":"7","label":"item","property":"references","outV":4,"inVs":["3"],"document":"7"}`))) + + cleanup := func() { + require.NoError(t, r.Close()) + } + + return r, cleanup +} diff --git a/workhorse/internal/lsif_transformer/parser/references.go b/workhorse/internal/lsif_transformer/parser/references.go new file mode 100644 index 00000000000..58ff9a61c02 --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/references.go @@ -0,0 +1,107 @@ +package parser + +import ( + "strconv" +) + +type ReferencesOffset struct { + Id Id + Len int32 +} + +type References struct { + Items *cache + Offsets *cache + CurrentOffsetId Id +} + +type SerializedReference struct { + Path string `json:"path"` +} + +func NewReferences(config Config) (*References, error) { + tempPath := config.TempPath + + items, err := newCache(tempPath, "references", Item{}) + if err != nil { + return nil, err + } + + offsets, err := newCache(tempPath, "references-offsets", ReferencesOffset{}) + if err != nil { + return nil, err + } + + return &References{ + Items: items, + Offsets: offsets, + CurrentOffsetId: 0, + }, nil +} + +// Store is responsible for keeping track of references that will be used when +// serializing in `For`. +// +// The references are stored in a file to cache them. It is like +// `map[Id][]Item` (where `Id` is `refId`) but relies on caching the array and +// its offset in files for storage to reduce RAM usage. The items can be +// fetched by calling `getItems`. +func (r *References) Store(refId Id, references []Item) error { + size := len(references) + + if size == 0 { + return nil + } + + items := append(r.getItems(refId), references...) + err := r.Items.SetEntry(r.CurrentOffsetId, items) + if err != nil { + return err + } + + size = len(items) + r.Offsets.SetEntry(refId, ReferencesOffset{Id: r.CurrentOffsetId, Len: int32(size)}) + r.CurrentOffsetId += Id(size) + + return nil +} + +func (r *References) For(docs map[Id]string, refId Id) []SerializedReference { + references := r.getItems(refId) + if references == nil { + return nil + } + + var serializedReferences []SerializedReference + + for _, reference := range references { + serializedReference := SerializedReference{ + Path: docs[reference.DocId] + "#L" + strconv.Itoa(int(reference.Line)), + } + + serializedReferences = append(serializedReferences, serializedReference) + } + + return serializedReferences +} + +func (r *References) Close() error { + return combineErrors( + r.Items.Close(), + r.Offsets.Close(), + ) +} + +func (r *References) getItems(refId Id) []Item { + var offset ReferencesOffset + if err := r.Offsets.Entry(refId, &offset); err != nil || offset.Len == 0 { + return nil + } + + items := make([]Item, offset.Len) + if err := r.Items.Entry(offset.Id, &items); err != nil { + return nil + } + + return items +} diff --git a/workhorse/internal/lsif_transformer/parser/references_test.go b/workhorse/internal/lsif_transformer/parser/references_test.go new file mode 100644 index 00000000000..7b47513bc53 --- /dev/null +++ b/workhorse/internal/lsif_transformer/parser/references_test.go @@ -0,0 +1,44 @@ +package parser + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestReferencesStore(t *testing.T) { + const ( + docId = 1 + refId = 3 + ) + + r, err := NewReferences(Config{}) + require.NoError(t, err) + + err = r.Store(refId, []Item{{Line: 2, DocId: docId}, {Line: 3, DocId: docId}}) + require.NoError(t, err) + + docs := map[Id]string{docId: "doc.go"} + serializedReferences := r.For(docs, refId) + + require.Contains(t, serializedReferences, SerializedReference{Path: "doc.go#L2"}) + require.Contains(t, serializedReferences, SerializedReference{Path: "doc.go#L3"}) + + require.NoError(t, r.Close()) +} + +func TestReferencesStoreEmpty(t *testing.T) { + const refId = 3 + + r, err := NewReferences(Config{}) + require.NoError(t, err) + + err = r.Store(refId, []Item{}) + require.NoError(t, err) + + docs := map[Id]string{1: "doc.go"} + serializedReferences := r.For(docs, refId) + + require.Nil(t, serializedReferences) + require.NoError(t, r.Close()) +} diff --git a/workhorse/internal/lsif_transformer/parser/testdata/dump.lsif.zip b/workhorse/internal/lsif_transformer/parser/testdata/dump.lsif.zip new file mode 100644 index 0000000000000000000000000000000000000000..e7c9ef2da66c7eac23519c72a6595c37c342f6a2 GIT binary patch literal 2023 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%0AZbmvVhNu}m{kzF; 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≤P}f7|vy>pwqtmyb68{@mL= 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�f(?H)4m0sjS%a1NEW2%4?Ha&2 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® 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


q`J!=SF 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Π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�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 z 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�<)L-vsdoOGG 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�T| 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
    hE&5&CayX}3u2ye_muYH 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
      mFV4CME$C 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


      j(n_{Oz8F5Ok*XyNTalXLq(Ys~c=8GRt6 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�+n=ZA32KIuRS-WetLQ1CmVV7@NDNVbjnMj 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
      % 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 w$4KdzlOAvnH$$6vTguc-y{_Qgsa1kubyA-ZB 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�sI+~fQK={!}LP~EsD69UI1GU8bc1h+}xKA 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
      *5jf6w@G<5J1f$h%v)r{VFQ1e~;lrzSC39 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%0AWgmm2`P2k4kbdMpBv=GJX0GO#t{7k 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 literal 0 HcmV?d00001 diff --git a/workhorse/internal/objectstore/gocloud_object.go b/workhorse/internal/objectstore/gocloud_object.go new file mode 100644 index 00000000000..38545086994 --- /dev/null +++ b/workhorse/internal/objectstore/gocloud_object.go @@ -0,0 +1,100 @@ +package objectstore + +import ( + "context" + "io" + "time" + + "gitlab.com/gitlab-org/labkit/log" + "gocloud.dev/blob" + "gocloud.dev/gcerrors" +) + +type GoCloudObject struct { + bucket *blob.Bucket + mux *blob.URLMux + bucketURL string + objectName string + *uploader +} + +type GoCloudObjectParams struct { + Ctx context.Context + Mux *blob.URLMux + BucketURL string + ObjectName string +} + +func NewGoCloudObject(p *GoCloudObjectParams) (*GoCloudObject, error) { + bucket, err := p.Mux.OpenBucket(p.Ctx, p.BucketURL) + if err != nil { + return nil, err + } + + o := &GoCloudObject{ + bucket: bucket, + mux: p.Mux, + bucketURL: p.BucketURL, + objectName: p.ObjectName, + } + + o.uploader = newUploader(o) + return o, nil +} + +func (o *GoCloudObject) Upload(ctx context.Context, r io.Reader) error { + defer o.bucket.Close() + + writer, err := o.bucket.NewWriter(ctx, o.objectName, nil) + if err != nil { + log.ContextLogger(ctx).WithError(err).Error("error creating GoCloud bucket") + return err + } + + if _, err = io.Copy(writer, r); err != nil { + log.ContextLogger(ctx).WithError(err).Error("error writing to GoCloud bucket") + writer.Close() + return err + } + + if err := writer.Close(); err != nil { + log.ContextLogger(ctx).WithError(err).Error("error closing GoCloud bucket") + return err + } + + return nil +} + +func (o *GoCloudObject) ETag() string { + return "" +} + +func (o *GoCloudObject) Abort() { + o.Delete() +} + +// Delete will always attempt to delete the temporary file. +// According to https://github.com/google/go-cloud/blob/7818961b5c9a112f7e092d3a2d8479cbca80d187/blob/azureblob/azureblob.go#L881-L883, +// if the writer is closed before any Write is called, Close will create an empty file. +func (o *GoCloudObject) Delete() { + if o.bucketURL == "" || o.objectName == "" { + return + } + + // Note we can't use the request context because in a successful + // case, the original request has already completed. + deleteCtx, cancel := context.WithTimeout(context.Background(), 60*time.Second) // lint:allow context.Background + defer cancel() + + bucket, err := o.mux.OpenBucket(deleteCtx, o.bucketURL) + if err != nil { + log.WithError(err).Error("error opening bucket for delete") + return + } + + if err := bucket.Delete(deleteCtx, o.objectName); err != nil { + if gcerrors.Code(err) != gcerrors.NotFound { + log.WithError(err).Error("error deleting object") + } + } +} diff --git a/workhorse/internal/objectstore/gocloud_object_test.go b/workhorse/internal/objectstore/gocloud_object_test.go new file mode 100644 index 00000000000..4dc9d2d75cc --- /dev/null +++ b/workhorse/internal/objectstore/gocloud_object_test.go @@ -0,0 +1,56 @@ +package objectstore_test + +import ( + "context" + "fmt" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore/test" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" +) + +func TestGoCloudObjectUpload(t *testing.T) { + mux, _, cleanup := test.SetupGoCloudFileBucket(t, "azuretest") + defer cleanup() + + ctx, cancel := context.WithCancel(context.Background()) + deadline := time.Now().Add(testTimeout) + + objectName := "test.png" + testURL := "azuretest://azure.example.com/test-container" + p := &objectstore.GoCloudObjectParams{Ctx: ctx, Mux: mux, BucketURL: testURL, ObjectName: objectName} + object, err := objectstore.NewGoCloudObject(p) + require.NotNil(t, object) + require.NoError(t, err) + + // copy data + n, err := object.Consume(ctx, strings.NewReader(test.ObjectContent), deadline) + require.NoError(t, err) + require.Equal(t, test.ObjectSize, n, "Uploaded file mismatch") + + bucket, err := mux.OpenBucket(ctx, testURL) + require.NoError(t, err) + + // Verify the data was copied correctly. + received, err := bucket.ReadAll(ctx, objectName) + require.NoError(t, err) + require.Equal(t, []byte(test.ObjectContent), received) + + cancel() + + testhelper.Retry(t, 5*time.Second, func() error { + exists, err := bucket.Exists(ctx, objectName) + require.NoError(t, err) + + if exists { + return fmt.Errorf("file %s is still present", objectName) + } else { + return nil + } + }) +} diff --git a/workhorse/internal/objectstore/multipart.go b/workhorse/internal/objectstore/multipart.go new file mode 100644 index 00000000000..fd1c0ed487d --- /dev/null +++ b/workhorse/internal/objectstore/multipart.go @@ -0,0 +1,188 @@ +package objectstore + +import ( + "bytes" + "context" + "encoding/xml" + "errors" + "fmt" + "io" + "io/ioutil" + "net/http" + "os" + + "gitlab.com/gitlab-org/labkit/log" + "gitlab.com/gitlab-org/labkit/mask" +) + +// ErrNotEnoughParts will be used when writing more than size * len(partURLs) +var ErrNotEnoughParts = errors.New("not enough Parts") + +// Multipart represents a MultipartUpload on a S3 compatible Object Store service. +// It can be used as io.WriteCloser for uploading an object +type Multipart struct { + PartURLs []string + // CompleteURL is a presigned URL for CompleteMultipartUpload + CompleteURL string + // AbortURL is a presigned URL for AbortMultipartUpload + AbortURL string + // DeleteURL is a presigned URL for RemoveObject + DeleteURL string + PutHeaders map[string]string + partSize int64 + etag string + + *uploader +} + +// NewMultipart provides Multipart pointer that can be used for uploading. Data written will be split buffered on disk up to size bytes +// then uploaded with S3 Upload Part. Once Multipart is Closed a final call to CompleteMultipartUpload will be sent. +// In case of any error a call to AbortMultipartUpload will be made to cleanup all the resources +func NewMultipart(partURLs []string, completeURL, abortURL, deleteURL string, putHeaders map[string]string, partSize int64) (*Multipart, error) { + m := &Multipart{ + PartURLs: partURLs, + CompleteURL: completeURL, + AbortURL: abortURL, + DeleteURL: deleteURL, + PutHeaders: putHeaders, + partSize: partSize, + } + + m.uploader = newUploader(m) + return m, nil +} + +func (m *Multipart) Upload(ctx context.Context, r io.Reader) error { + cmu := &CompleteMultipartUpload{} + for i, partURL := range m.PartURLs { + src := io.LimitReader(r, m.partSize) + part, err := m.readAndUploadOnePart(ctx, partURL, m.PutHeaders, src, i+1) + if err != nil { + return err + } + if part == nil { + break + } else { + cmu.Part = append(cmu.Part, part) + } + } + + n, err := io.Copy(ioutil.Discard, r) + if err != nil { + return fmt.Errorf("drain pipe: %v", err) + } + if n > 0 { + return ErrNotEnoughParts + } + + if err := m.complete(ctx, cmu); err != nil { + return err + } + + return nil +} + +func (m *Multipart) ETag() string { + return m.etag +} +func (m *Multipart) Abort() { + deleteURL(m.AbortURL) +} + +func (m *Multipart) Delete() { + deleteURL(m.DeleteURL) +} + +func (m *Multipart) readAndUploadOnePart(ctx context.Context, partURL string, putHeaders map[string]string, src io.Reader, partNumber int) (*completeMultipartUploadPart, error) { + file, err := ioutil.TempFile("", "part-buffer") + if err != nil { + return nil, fmt.Errorf("create temporary buffer file: %v", err) + } + defer func(path string) { + if err := os.Remove(path); err != nil { + log.WithError(err).WithField("file", path).Warning("Unable to delete temporary file") + } + }(file.Name()) + + n, err := io.Copy(file, src) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + if _, err = file.Seek(0, io.SeekStart); err != nil { + return nil, fmt.Errorf("rewind part %d temporary dump : %v", partNumber, err) + } + + etag, err := m.uploadPart(ctx, partURL, putHeaders, file, n) + if err != nil { + return nil, fmt.Errorf("upload part %d: %v", partNumber, err) + } + return &completeMultipartUploadPart{PartNumber: partNumber, ETag: etag}, nil +} + +func (m *Multipart) uploadPart(ctx context.Context, url string, headers map[string]string, body io.Reader, size int64) (string, error) { + deadline, ok := ctx.Deadline() + if !ok { + return "", fmt.Errorf("missing deadline") + } + + part, err := newObject(url, "", headers, size, false) + if err != nil { + return "", err + } + + if n, err := part.Consume(ctx, io.LimitReader(body, size), deadline); err != nil || n < size { + if err == nil { + err = io.ErrUnexpectedEOF + } + return "", err + } + + return part.ETag(), nil +} + +func (m *Multipart) complete(ctx context.Context, cmu *CompleteMultipartUpload) error { + body, err := xml.Marshal(cmu) + if err != nil { + return fmt.Errorf("marshal CompleteMultipartUpload request: %v", err) + } + + req, err := http.NewRequest("POST", m.CompleteURL, bytes.NewReader(body)) + if err != nil { + return fmt.Errorf("create CompleteMultipartUpload request: %v", err) + } + req.ContentLength = int64(len(body)) + req.Header.Set("Content-Type", "application/xml") + req = req.WithContext(ctx) + + resp, err := httpClient.Do(req) + if err != nil { + return fmt.Errorf("CompleteMultipartUpload request %q: %v", mask.URL(m.CompleteURL), err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("CompleteMultipartUpload request %v returned: %s", mask.URL(m.CompleteURL), resp.Status) + } + + result := &compoundCompleteMultipartUploadResult{} + decoder := xml.NewDecoder(resp.Body) + if err := decoder.Decode(&result); err != nil { + return fmt.Errorf("decode CompleteMultipartUpload answer: %v", err) + } + + if result.isError() { + return result + } + + if result.CompleteMultipartUploadResult == nil { + return fmt.Errorf("empty CompleteMultipartUploadResult") + } + + m.etag = extractETag(result.ETag) + + return nil +} diff --git a/workhorse/internal/objectstore/multipart_test.go b/workhorse/internal/objectstore/multipart_test.go new file mode 100644 index 00000000000..00d6efc0982 --- /dev/null +++ b/workhorse/internal/objectstore/multipart_test.go @@ -0,0 +1,64 @@ +package objectstore_test + +import ( + "context" + "io/ioutil" + "net/http" + "net/http/httptest" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore/test" +) + +func TestMultipartUploadWithUpcaseETags(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + var putCnt, postCnt int + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, err := ioutil.ReadAll(r.Body) + require.NoError(t, err) + defer r.Body.Close() + + // Part upload request + if r.Method == "PUT" { + putCnt++ + + w.Header().Set("ETag", strings.ToUpper(test.ObjectMD5)) + } + + // POST with CompleteMultipartUpload request + if r.Method == "POST" { + completeBody := ` + test-bucket + No Longer Checked + ` + postCnt++ + + w.Write([]byte(completeBody)) + } + })) + defer ts.Close() + + deadline := time.Now().Add(testTimeout) + + m, err := objectstore.NewMultipart( + []string{ts.URL}, // a single presigned part URL + ts.URL, // the complete multipart upload URL + "", // no abort + "", // no delete + map[string]string{}, // no custom headers + test.ObjectSize) // parts size equal to the whole content. Only 1 part + require.NoError(t, err) + + _, err = m.Consume(ctx, strings.NewReader(test.ObjectContent), deadline) + require.NoError(t, err) + require.Equal(t, 1, putCnt, "1 part expected") + require.Equal(t, 1, postCnt, "1 complete multipart upload expected") +} diff --git a/workhorse/internal/objectstore/object.go b/workhorse/internal/objectstore/object.go new file mode 100644 index 00000000000..eaf3bfb2e36 --- /dev/null +++ b/workhorse/internal/objectstore/object.go @@ -0,0 +1,114 @@ +package objectstore + +import ( + "context" + "fmt" + "io" + "io/ioutil" + "net" + "net/http" + "time" + + "gitlab.com/gitlab-org/labkit/correlation" + "gitlab.com/gitlab-org/labkit/mask" + "gitlab.com/gitlab-org/labkit/tracing" +) + +// httpTransport defines a http.Transport with values +// that are more restrictive than for http.DefaultTransport, +// they define shorter TLS Handshake, and more aggressive connection closing +// to prevent the connection hanging and reduce FD usage +var httpTransport = tracing.NewRoundTripper(correlation.NewInstrumentedRoundTripper(&http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 10 * time.Second, + }).DialContext, + MaxIdleConns: 2, + IdleConnTimeout: 30 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 10 * time.Second, + ResponseHeaderTimeout: 30 * time.Second, +})) + +var httpClient = &http.Client{ + Transport: httpTransport, +} + +// Object represents an object on a S3 compatible Object Store service. +// It can be used as io.WriteCloser for uploading an object +type Object struct { + // putURL is a presigned URL for PutObject + putURL string + // deleteURL is a presigned URL for RemoveObject + deleteURL string + putHeaders map[string]string + size int64 + etag string + metrics bool + + *uploader +} + +type StatusCodeError error + +// NewObject opens an HTTP connection to Object Store and returns an Object pointer that can be used for uploading. +func NewObject(putURL, deleteURL string, putHeaders map[string]string, size int64) (*Object, error) { + return newObject(putURL, deleteURL, putHeaders, size, true) +} + +func newObject(putURL, deleteURL string, putHeaders map[string]string, size int64, metrics bool) (*Object, error) { + o := &Object{ + putURL: putURL, + deleteURL: deleteURL, + putHeaders: putHeaders, + size: size, + metrics: metrics, + } + + o.uploader = newETagCheckUploader(o, metrics) + return o, nil +} + +func (o *Object) Upload(ctx context.Context, r io.Reader) error { + // we should prevent pr.Close() otherwise it may shadow error set with pr.CloseWithError(err) + req, err := http.NewRequest(http.MethodPut, o.putURL, ioutil.NopCloser(r)) + + if err != nil { + return fmt.Errorf("PUT %q: %v", mask.URL(o.putURL), err) + } + req.ContentLength = o.size + + for k, v := range o.putHeaders { + req.Header.Set(k, v) + } + + resp, err := httpClient.Do(req) + if err != nil { + return fmt.Errorf("PUT request %q: %v", mask.URL(o.putURL), err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + if o.metrics { + objectStorageUploadRequestsInvalidStatus.Inc() + } + return StatusCodeError(fmt.Errorf("PUT request %v returned: %s", mask.URL(o.putURL), resp.Status)) + } + + o.etag = extractETag(resp.Header.Get("ETag")) + + return nil +} + +func (o *Object) ETag() string { + return o.etag +} + +func (o *Object) Abort() { + o.Delete() +} + +func (o *Object) Delete() { + deleteURL(o.deleteURL) +} diff --git a/workhorse/internal/objectstore/object_test.go b/workhorse/internal/objectstore/object_test.go new file mode 100644 index 00000000000..2ec45520e97 --- /dev/null +++ b/workhorse/internal/objectstore/object_test.go @@ -0,0 +1,155 @@ +package objectstore_test + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore/test" +) + +const testTimeout = 10 * time.Second + +type osFactory func() (*test.ObjectstoreStub, *httptest.Server) + +func testObjectUploadNoErrors(t *testing.T, startObjectStore osFactory, useDeleteURL bool, contentType string) { + osStub, ts := startObjectStore() + defer ts.Close() + + objectURL := ts.URL + test.ObjectPath + var deleteURL string + if useDeleteURL { + deleteURL = objectURL + } + + putHeaders := map[string]string{"Content-Type": contentType} + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + deadline := time.Now().Add(testTimeout) + object, err := objectstore.NewObject(objectURL, deleteURL, putHeaders, test.ObjectSize) + require.NoError(t, err) + + // copy data + n, err := object.Consume(ctx, strings.NewReader(test.ObjectContent), deadline) + require.NoError(t, err) + require.Equal(t, test.ObjectSize, n, "Uploaded file mismatch") + + require.Equal(t, contentType, osStub.GetHeader(test.ObjectPath, "Content-Type")) + + // Checking MD5 extraction + require.Equal(t, osStub.GetObjectMD5(test.ObjectPath), object.ETag()) + + // Checking cleanup + cancel() + require.Equal(t, 1, osStub.PutsCnt(), "Object hasn't been uploaded") + + var expectedDeleteCnt int + if useDeleteURL { + expectedDeleteCnt = 1 + } + // Poll because the object removal is async + for i := 0; i < 100; i++ { + if osStub.DeletesCnt() == expectedDeleteCnt { + break + } + time.Sleep(10 * time.Millisecond) + } + + if useDeleteURL { + require.Equal(t, 1, osStub.DeletesCnt(), "Object hasn't been deleted") + } else { + require.Equal(t, 0, osStub.DeletesCnt(), "Object has been deleted") + } +} + +func TestObjectUpload(t *testing.T) { + t.Run("with delete URL", func(t *testing.T) { + testObjectUploadNoErrors(t, test.StartObjectStore, true, "application/octet-stream") + }) + t.Run("without delete URL", func(t *testing.T) { + testObjectUploadNoErrors(t, test.StartObjectStore, false, "application/octet-stream") + }) + t.Run("with custom content type", func(t *testing.T) { + testObjectUploadNoErrors(t, test.StartObjectStore, false, "image/jpeg") + }) + t.Run("with upcase ETAG", func(t *testing.T) { + factory := func() (*test.ObjectstoreStub, *httptest.Server) { + md5s := map[string]string{ + test.ObjectPath: strings.ToUpper(test.ObjectMD5), + } + + return test.StartObjectStoreWithCustomMD5(md5s) + } + + testObjectUploadNoErrors(t, factory, false, "application/octet-stream") + }) +} + +func TestObjectUpload404(t *testing.T) { + ts := httptest.NewServer(http.NotFoundHandler()) + defer ts.Close() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + deadline := time.Now().Add(testTimeout) + objectURL := ts.URL + test.ObjectPath + object, err := objectstore.NewObject(objectURL, "", map[string]string{}, test.ObjectSize) + require.NoError(t, err) + _, err = object.Consume(ctx, strings.NewReader(test.ObjectContent), deadline) + + require.Error(t, err) + _, isStatusCodeError := err.(objectstore.StatusCodeError) + require.True(t, isStatusCodeError, "Should fail with StatusCodeError") + require.Contains(t, err.Error(), "404") +} + +type endlessReader struct{} + +func (e *endlessReader) Read(p []byte) (n int, err error) { + for i := 0; i < len(p); i++ { + p[i] = '*' + } + + return len(p), nil +} + +// TestObjectUploadBrokenConnection purpose is to ensure that errors caused by the upload destination get propagated back correctly. +// This is important for troubleshooting in production. +func TestObjectUploadBrokenConnection(t *testing.T) { + // This test server closes connection immediately + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + hj, ok := w.(http.Hijacker) + if !ok { + require.FailNow(t, "webserver doesn't support hijacking") + } + conn, _, err := hj.Hijack() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + conn.Close() + })) + defer ts.Close() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + deadline := time.Now().Add(testTimeout) + objectURL := ts.URL + test.ObjectPath + object, err := objectstore.NewObject(objectURL, "", map[string]string{}, -1) + require.NoError(t, err) + + _, copyErr := object.Consume(ctx, &endlessReader{}, deadline) + require.Error(t, copyErr) + require.NotEqual(t, io.ErrClosedPipe, copyErr, "We are shadowing the real error") +} diff --git a/workhorse/internal/objectstore/prometheus.go b/workhorse/internal/objectstore/prometheus.go new file mode 100644 index 00000000000..bfc2beddf34 --- /dev/null +++ b/workhorse/internal/objectstore/prometheus.go @@ -0,0 +1,43 @@ +package objectstore + +import "github.com/prometheus/client_golang/prometheus" + +var ( + objectStorageUploadRequests = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_object_storage_upload_requests", + Help: "How many object storage requests have been processed", + }, + []string{"status"}, + ) + objectStorageUploadsOpen = prometheus.NewGauge( + prometheus.GaugeOpts{ + Name: "gitlab_workhorse_object_storage_upload_open", + Help: "Describes many object storage requests are open now", + }, + ) + objectStorageUploadBytes = prometheus.NewCounter( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_object_storage_upload_bytes", + Help: "How many bytes were sent to object storage", + }, + ) + objectStorageUploadTime = prometheus.NewHistogram( + prometheus.HistogramOpts{ + Name: "gitlab_workhorse_object_storage_upload_time", + Help: "How long it took to upload objects", + Buckets: objectStorageUploadTimeBuckets, + }) + + objectStorageUploadRequestsRequestFailed = objectStorageUploadRequests.WithLabelValues("request-failed") + objectStorageUploadRequestsInvalidStatus = objectStorageUploadRequests.WithLabelValues("invalid-status") + + objectStorageUploadTimeBuckets = []float64{.1, .25, .5, 1, 2.5, 5, 10, 25, 50, 100} +) + +func init() { + prometheus.MustRegister( + objectStorageUploadRequests, + objectStorageUploadsOpen, + objectStorageUploadBytes) +} diff --git a/workhorse/internal/objectstore/s3_complete_multipart_api.go b/workhorse/internal/objectstore/s3_complete_multipart_api.go new file mode 100644 index 00000000000..b84f5757f49 --- /dev/null +++ b/workhorse/internal/objectstore/s3_complete_multipart_api.go @@ -0,0 +1,51 @@ +package objectstore + +import ( + "encoding/xml" + "fmt" +) + +// CompleteMultipartUpload is the S3 CompleteMultipartUpload body +type CompleteMultipartUpload struct { + Part []*completeMultipartUploadPart +} + +type completeMultipartUploadPart struct { + PartNumber int + ETag string +} + +// CompleteMultipartUploadResult is the S3 answer to CompleteMultipartUpload request +type CompleteMultipartUploadResult struct { + Location string + Bucket string + Key string + ETag string +} + +// CompleteMultipartUploadError is the in-body error structure +// https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadComplete.html#mpUploadComplete-examples +// the answer contains other fields we are not using +type CompleteMultipartUploadError struct { + XMLName xml.Name `xml:"Error"` + Code string + Message string +} + +func (c *CompleteMultipartUploadError) Error() string { + return fmt.Sprintf("CompleteMultipartUpload remote error %q: %s", c.Code, c.Message) +} + +// compoundCompleteMultipartUploadResult holds both CompleteMultipartUploadResult and CompleteMultipartUploadError +// this allow us to deserialize the response body where the root element can either be Error orCompleteMultipartUploadResult +type compoundCompleteMultipartUploadResult struct { + *CompleteMultipartUploadResult + *CompleteMultipartUploadError + + // XMLName this overrides CompleteMultipartUploadError.XMLName tags + XMLName xml.Name +} + +func (c *compoundCompleteMultipartUploadResult) isError() bool { + return c.CompleteMultipartUploadError != nil +} diff --git a/workhorse/internal/objectstore/s3_object.go b/workhorse/internal/objectstore/s3_object.go new file mode 100644 index 00000000000..1f79f88224f --- /dev/null +++ b/workhorse/internal/objectstore/s3_object.go @@ -0,0 +1,119 @@ +package objectstore + +import ( + "context" + "io" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/service/s3" + "github.com/aws/aws-sdk-go/service/s3/s3manager" + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" +) + +type S3Object struct { + credentials config.S3Credentials + config config.S3Config + objectName string + uploaded bool + + *uploader +} + +func NewS3Object(objectName string, s3Credentials config.S3Credentials, s3Config config.S3Config) (*S3Object, error) { + o := &S3Object{ + credentials: s3Credentials, + config: s3Config, + objectName: objectName, + } + + o.uploader = newUploader(o) + return o, nil +} + +func setEncryptionOptions(input *s3manager.UploadInput, s3Config config.S3Config) { + if s3Config.ServerSideEncryption != "" { + input.ServerSideEncryption = aws.String(s3Config.ServerSideEncryption) + + if s3Config.ServerSideEncryption == s3.ServerSideEncryptionAwsKms && s3Config.SSEKMSKeyID != "" { + input.SSEKMSKeyId = aws.String(s3Config.SSEKMSKeyID) + } + } +} + +func (s *S3Object) Upload(ctx context.Context, r io.Reader) error { + sess, err := setupS3Session(s.credentials, s.config) + if err != nil { + log.WithError(err).Error("error creating S3 session") + return err + } + + uploader := s3manager.NewUploader(sess) + + input := &s3manager.UploadInput{ + Bucket: aws.String(s.config.Bucket), + Key: aws.String(s.objectName), + Body: r, + } + + setEncryptionOptions(input, s.config) + + _, err = uploader.UploadWithContext(ctx, input) + if err != nil { + log.WithError(err).Error("error uploading S3 session") + // Get the root cause, such as ErrEntityTooLarge, so we can return the proper HTTP status code + return unwrapAWSError(err) + } + + s.uploaded = true + + return nil +} + +func (s *S3Object) ETag() string { + return "" +} + +func (s *S3Object) Abort() { + s.Delete() +} + +func (s *S3Object) Delete() { + if !s.uploaded { + return + } + + session, err := setupS3Session(s.credentials, s.config) + if err != nil { + log.WithError(err).Error("error setting up S3 session in delete") + return + } + + svc := s3.New(session) + input := &s3.DeleteObjectInput{ + Bucket: aws.String(s.config.Bucket), + Key: aws.String(s.objectName), + } + + // Note we can't use the request context because in a successful + // case, the original request has already completed. + deleteCtx, cancel := context.WithTimeout(context.Background(), 60*time.Second) // lint:allow context.Background + defer cancel() + + _, err = svc.DeleteObjectWithContext(deleteCtx, input) + if err != nil { + log.WithError(err).Error("error deleting S3 object", err) + } +} + +// This is needed until https://github.com/aws/aws-sdk-go/issues/2820 is closed. +func unwrapAWSError(e error) error { + if awsErr, ok := e.(awserr.Error); ok { + return unwrapAWSError(awsErr.OrigErr()) + } + + return e +} diff --git a/workhorse/internal/objectstore/s3_object_test.go b/workhorse/internal/objectstore/s3_object_test.go new file mode 100644 index 00000000000..d9ebbd7f979 --- /dev/null +++ b/workhorse/internal/objectstore/s3_object_test.go @@ -0,0 +1,174 @@ +package objectstore_test + +import ( + "context" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "sync" + "testing" + "time" + + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/s3" + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore/test" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" +) + +type failedReader struct { + io.Reader +} + +func (r *failedReader) Read(p []byte) (int, error) { + origErr := fmt.Errorf("entity is too large") + return 0, awserr.New("Read", "read failed", origErr) +} + +func TestS3ObjectUpload(t *testing.T) { + testCases := []struct { + encryption string + }{ + {encryption: ""}, + {encryption: s3.ServerSideEncryptionAes256}, + {encryption: s3.ServerSideEncryptionAwsKms}, + } + + for _, tc := range testCases { + t.Run(fmt.Sprintf("encryption=%v", tc.encryption), func(t *testing.T) { + creds, config, sess, ts := test.SetupS3(t, tc.encryption) + defer ts.Close() + + deadline := time.Now().Add(testTimeout) + tmpDir, err := ioutil.TempDir("", "workhorse-test-") + require.NoError(t, err) + defer os.Remove(tmpDir) + + objectName := filepath.Join(tmpDir, "s3-test-data") + ctx, cancel := context.WithCancel(context.Background()) + + object, err := objectstore.NewS3Object(objectName, creds, config) + require.NoError(t, err) + + // copy data + n, err := object.Consume(ctx, strings.NewReader(test.ObjectContent), deadline) + require.NoError(t, err) + require.Equal(t, test.ObjectSize, n, "Uploaded file mismatch") + + test.S3ObjectExists(t, sess, config, objectName, test.ObjectContent) + test.CheckS3Metadata(t, sess, config, objectName) + + cancel() + + testhelper.Retry(t, 5*time.Second, func() error { + if test.S3ObjectDoesNotExist(t, sess, config, objectName) { + return nil + } + + return fmt.Errorf("file is still present") + }) + }) + } +} + +func TestConcurrentS3ObjectUpload(t *testing.T) { + creds, uploadsConfig, uploadsSession, uploadServer := test.SetupS3WithBucket(t, "uploads", "") + defer uploadServer.Close() + + // This will return a separate S3 endpoint + _, artifactsConfig, artifactsSession, artifactsServer := test.SetupS3WithBucket(t, "artifacts", "") + defer artifactsServer.Close() + + deadline := time.Now().Add(testTimeout) + tmpDir, err := ioutil.TempDir("", "workhorse-test-") + require.NoError(t, err) + defer os.Remove(tmpDir) + + var wg sync.WaitGroup + + for i := 0; i < 4; i++ { + wg.Add(1) + + go func(index int) { + var sess *session.Session + var config config.S3Config + + if index%2 == 0 { + sess = uploadsSession + config = uploadsConfig + } else { + sess = artifactsSession + config = artifactsConfig + } + + name := fmt.Sprintf("s3-test-data-%d", index) + objectName := filepath.Join(tmpDir, name) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + object, err := objectstore.NewS3Object(objectName, creds, config) + require.NoError(t, err) + + // copy data + n, err := object.Consume(ctx, strings.NewReader(test.ObjectContent), deadline) + require.NoError(t, err) + require.Equal(t, test.ObjectSize, n, "Uploaded file mismatch") + + test.S3ObjectExists(t, sess, config, objectName, test.ObjectContent) + wg.Done() + }(i) + } + + wg.Wait() +} + +func TestS3ObjectUploadCancel(t *testing.T) { + creds, config, _, ts := test.SetupS3(t, "") + defer ts.Close() + + ctx, cancel := context.WithCancel(context.Background()) + + deadline := time.Now().Add(testTimeout) + tmpDir, err := ioutil.TempDir("", "workhorse-test-") + require.NoError(t, err) + defer os.Remove(tmpDir) + + objectName := filepath.Join(tmpDir, "s3-test-data") + + object, err := objectstore.NewS3Object(objectName, creds, config) + + require.NoError(t, err) + + // Cancel the transfer before the data has been copied to ensure + // we handle this gracefully. + cancel() + + _, err = object.Consume(ctx, strings.NewReader(test.ObjectContent), deadline) + require.Error(t, err) + require.Equal(t, "context canceled", err.Error()) +} + +func TestS3ObjectUploadLimitReached(t *testing.T) { + creds, config, _, ts := test.SetupS3(t, "") + defer ts.Close() + + deadline := time.Now().Add(testTimeout) + tmpDir, err := ioutil.TempDir("", "workhorse-test-") + require.NoError(t, err) + defer os.Remove(tmpDir) + + objectName := filepath.Join(tmpDir, "s3-test-data") + object, err := objectstore.NewS3Object(objectName, creds, config) + require.NoError(t, err) + + _, err = object.Consume(context.Background(), &failedReader{}, deadline) + require.Error(t, err) + require.Equal(t, "entity is too large", err.Error()) +} diff --git a/workhorse/internal/objectstore/s3_session.go b/workhorse/internal/objectstore/s3_session.go new file mode 100644 index 00000000000..ebc8daf534c --- /dev/null +++ b/workhorse/internal/objectstore/s3_session.go @@ -0,0 +1,94 @@ +package objectstore + +import ( + "sync" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" +) + +type s3Session struct { + session *session.Session + expiry time.Time +} + +type s3SessionCache struct { + // An S3 session is cached by its input configuration (e.g. region, + // endpoint, path style, etc.), but the bucket is actually + // determined by the type of object to be uploaded (e.g. CI + // artifact, LFS, etc.) during runtime. In practice, we should only + // need one session per Workhorse process if we only allow one + // configuration for many different buckets. However, using a map + // indexed by the config avoids potential pitfalls in case the + // bucket configuration is supplied at startup or we need to support + // multiple S3 endpoints. + sessions map[config.S3Config]*s3Session + sync.Mutex +} + +func (s *s3Session) isExpired() bool { + return time.Now().After(s.expiry) +} + +func newS3SessionCache() *s3SessionCache { + return &s3SessionCache{sessions: make(map[config.S3Config]*s3Session)} +} + +var ( + // By default, it looks like IAM instance profiles may last 6 hours + // (via curl http://169.254.169.254/latest/meta-data/iam/security-credentials/), + // but this may be configurable from anywhere for 15 minutes to 12 + // hours. To be safe, refresh AWS sessions every 10 minutes. + sessionExpiration = time.Duration(10 * time.Minute) + sessionCache = newS3SessionCache() +) + +// SetupS3Session initializes a new AWS S3 session and refreshes one if +// necessary. As recommended in https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/sessions.html, +// sessions should be cached when possible. Sessions are safe to use +// concurrently as long as the session isn't modified. +func setupS3Session(s3Credentials config.S3Credentials, s3Config config.S3Config) (*session.Session, error) { + sessionCache.Lock() + defer sessionCache.Unlock() + + if s, ok := sessionCache.sessions[s3Config]; ok && !s.isExpired() { + return s.session, nil + } + + cfg := &aws.Config{ + Region: aws.String(s3Config.Region), + S3ForcePathStyle: aws.Bool(s3Config.PathStyle), + } + + // In case IAM profiles aren't being used, use the static credentials + if s3Credentials.AwsAccessKeyID != "" && s3Credentials.AwsSecretAccessKey != "" { + cfg.Credentials = credentials.NewStaticCredentials(s3Credentials.AwsAccessKeyID, s3Credentials.AwsSecretAccessKey, "") + } + + if s3Config.Endpoint != "" { + cfg.Endpoint = aws.String(s3Config.Endpoint) + } + + sess, err := session.NewSession(cfg) + if err != nil { + return nil, err + } + + sessionCache.sessions[s3Config] = &s3Session{ + expiry: time.Now().Add(sessionExpiration), + session: sess, + } + + return sess, nil +} + +func ResetS3Session(s3Config config.S3Config) { + sessionCache.Lock() + defer sessionCache.Unlock() + + delete(sessionCache.sessions, s3Config) +} diff --git a/workhorse/internal/objectstore/s3_session_test.go b/workhorse/internal/objectstore/s3_session_test.go new file mode 100644 index 00000000000..8601f305917 --- /dev/null +++ b/workhorse/internal/objectstore/s3_session_test.go @@ -0,0 +1,57 @@ +package objectstore + +import ( + "testing" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" +) + +func TestS3SessionSetup(t *testing.T) { + credentials := config.S3Credentials{} + cfg := config.S3Config{Region: "us-west-1", PathStyle: true} + + sess, err := setupS3Session(credentials, cfg) + require.NoError(t, err) + + require.Equal(t, aws.StringValue(sess.Config.Region), "us-west-1") + require.True(t, aws.BoolValue(sess.Config.S3ForcePathStyle)) + + require.Equal(t, len(sessionCache.sessions), 1) + anotherConfig := cfg + _, err = setupS3Session(credentials, anotherConfig) + require.NoError(t, err) + require.Equal(t, len(sessionCache.sessions), 1) + + ResetS3Session(cfg) +} + +func TestS3SessionExpiry(t *testing.T) { + credentials := config.S3Credentials{} + cfg := config.S3Config{Region: "us-west-1", PathStyle: true} + + sess, err := setupS3Session(credentials, cfg) + require.NoError(t, err) + + require.Equal(t, aws.StringValue(sess.Config.Region), "us-west-1") + require.True(t, aws.BoolValue(sess.Config.S3ForcePathStyle)) + + firstSession, ok := sessionCache.sessions[cfg] + require.True(t, ok) + require.False(t, firstSession.isExpired()) + + firstSession.expiry = time.Now().Add(-1 * time.Second) + require.True(t, firstSession.isExpired()) + + _, err = setupS3Session(credentials, cfg) + require.NoError(t, err) + + nextSession, ok := sessionCache.sessions[cfg] + require.True(t, ok) + require.False(t, nextSession.isExpired()) + + ResetS3Session(cfg) +} diff --git a/workhorse/internal/objectstore/test/consts.go b/workhorse/internal/objectstore/test/consts.go new file mode 100644 index 00000000000..7a1bcc28d45 --- /dev/null +++ b/workhorse/internal/objectstore/test/consts.go @@ -0,0 +1,19 @@ +package test + +// Some useful const for testing purpose +const ( + // ObjectContent an example textual content + ObjectContent = "TEST OBJECT CONTENT" + // ObjectSize is the ObjectContent size + ObjectSize = int64(len(ObjectContent)) + // Objectpath is an example remote object path (including bucket name) + ObjectPath = "/bucket/object" + // ObjectMD5 is ObjectContent MD5 hash + ObjectMD5 = "42d000eea026ee0760677e506189cb33" + // ObjectSHA1 is ObjectContent SHA1 hash + ObjectSHA1 = "173cfd58c6b60cb910f68a26cbb77e3fc5017a6d" + // ObjectSHA256 is ObjectContent SHA256 hash + ObjectSHA256 = "b0257e9e657ef19b15eed4fbba975bd5238d651977564035ef91cb45693647aa" + // ObjectSHA512 is ObjectContent SHA512 hash + ObjectSHA512 = "51af8197db2047f7894652daa7437927bf831d5aa63f1b0b7277c4800b06f5e3057251f0e4c2d344ca8c2daf1ffc08a28dd3b2f5fe0e316d3fd6c3af58c34b97" +) diff --git a/workhorse/internal/objectstore/test/gocloud_stub.go b/workhorse/internal/objectstore/test/gocloud_stub.go new file mode 100644 index 00000000000..cf22075e407 --- /dev/null +++ b/workhorse/internal/objectstore/test/gocloud_stub.go @@ -0,0 +1,47 @@ +package test + +import ( + "context" + "io/ioutil" + "net/url" + "os" + "testing" + + "github.com/stretchr/testify/require" + "gocloud.dev/blob" + "gocloud.dev/blob/fileblob" +) + +type dirOpener struct { + tmpDir string +} + +func (o *dirOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*blob.Bucket, error) { + return fileblob.OpenBucket(o.tmpDir, nil) +} + +func SetupGoCloudFileBucket(t *testing.T, scheme string) (m *blob.URLMux, bucketDir string, cleanup func()) { + tmpDir, err := ioutil.TempDir("", "") + require.NoError(t, err) + + mux := new(blob.URLMux) + fake := &dirOpener{tmpDir: tmpDir} + mux.RegisterBucket(scheme, fake) + cleanup = func() { + os.RemoveAll(tmpDir) + } + + return mux, tmpDir, cleanup +} + +func GoCloudObjectExists(t *testing.T, bucketDir string, objectName string) { + bucket, err := fileblob.OpenBucket(bucketDir, nil) + require.NoError(t, err) + + ctx, cancel := context.WithCancel(context.Background()) // lint:allow context.Background + defer cancel() + + exists, err := bucket.Exists(ctx, objectName) + require.NoError(t, err) + require.True(t, exists) +} diff --git a/workhorse/internal/objectstore/test/objectstore_stub.go b/workhorse/internal/objectstore/test/objectstore_stub.go new file mode 100644 index 00000000000..31ef4913305 --- /dev/null +++ b/workhorse/internal/objectstore/test/objectstore_stub.go @@ -0,0 +1,278 @@ +package test + +import ( + "crypto/md5" + "encoding/hex" + "encoding/xml" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "strconv" + "strings" + "sync" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/objectstore" +) + +type partsEtagMap map[int]string + +// ObjectstoreStub is a testing implementation of ObjectStore. +// Instead of storing objects it will just save md5sum. +type ObjectstoreStub struct { + // bucket contains md5sum of uploaded objects + bucket map[string]string + // overwriteMD5 contains overwrites for md5sum that should be return instead of the regular hash + overwriteMD5 map[string]string + // multipart is a map of MultipartUploads + multipart map[string]partsEtagMap + // HTTP header sent along request + headers map[string]*http.Header + + puts int + deletes int + + m sync.Mutex +} + +// StartObjectStore will start an ObjectStore stub +func StartObjectStore() (*ObjectstoreStub, *httptest.Server) { + return StartObjectStoreWithCustomMD5(make(map[string]string)) +} + +// StartObjectStoreWithCustomMD5 will start an ObjectStore stub: md5Hashes contains overwrites for md5sum that should be return on PutObject +func StartObjectStoreWithCustomMD5(md5Hashes map[string]string) (*ObjectstoreStub, *httptest.Server) { + os := &ObjectstoreStub{ + bucket: make(map[string]string), + multipart: make(map[string]partsEtagMap), + overwriteMD5: make(map[string]string), + headers: make(map[string]*http.Header), + } + + for k, v := range md5Hashes { + os.overwriteMD5[k] = v + } + + return os, httptest.NewServer(os) +} + +// PutsCnt counts PutObject invocations +func (o *ObjectstoreStub) PutsCnt() int { + o.m.Lock() + defer o.m.Unlock() + + return o.puts +} + +// DeletesCnt counts DeleteObject invocation of a valid object +func (o *ObjectstoreStub) DeletesCnt() int { + o.m.Lock() + defer o.m.Unlock() + + return o.deletes +} + +// GetObjectMD5 return the calculated MD5 of the object uploaded to path +// it will return an empty string if no object has been uploaded on such path +func (o *ObjectstoreStub) GetObjectMD5(path string) string { + o.m.Lock() + defer o.m.Unlock() + + return o.bucket[path] +} + +// GetHeader returns a given HTTP header of the object uploaded to the path +func (o *ObjectstoreStub) GetHeader(path, key string) string { + o.m.Lock() + defer o.m.Unlock() + + if val, ok := o.headers[path]; ok { + return val.Get(key) + } + + return "" +} + +// InitiateMultipartUpload prepare the ObjectstoreStob to receive a MultipartUpload on path +// It will return an error if a MultipartUpload is already in progress on that path +// InitiateMultipartUpload is only used during test setup. +// Workhorse's production code does not know how to initiate a multipart upload. +// +// Real S3 multipart uploads are more complicated than what we do here, +// but this is enough to verify that workhorse's production code behaves as intended. +func (o *ObjectstoreStub) InitiateMultipartUpload(path string) error { + o.m.Lock() + defer o.m.Unlock() + + if o.multipart[path] != nil { + return fmt.Errorf("MultipartUpload for %q already in progress", path) + } + + o.multipart[path] = make(partsEtagMap) + return nil +} + +// IsMultipartUpload check if the given path has a MultipartUpload in progress +func (o *ObjectstoreStub) IsMultipartUpload(path string) bool { + o.m.Lock() + defer o.m.Unlock() + + return o.isMultipartUpload(path) +} + +// isMultipartUpload is the lock free version of IsMultipartUpload +func (o *ObjectstoreStub) isMultipartUpload(path string) bool { + return o.multipart[path] != nil +} + +func (o *ObjectstoreStub) removeObject(w http.ResponseWriter, r *http.Request) { + o.m.Lock() + defer o.m.Unlock() + + objectPath := r.URL.Path + if o.isMultipartUpload(objectPath) { + o.deletes++ + delete(o.multipart, objectPath) + + w.WriteHeader(200) + } else if _, ok := o.bucket[objectPath]; ok { + o.deletes++ + delete(o.bucket, objectPath) + + w.WriteHeader(200) + } else { + w.WriteHeader(404) + } +} + +func (o *ObjectstoreStub) putObject(w http.ResponseWriter, r *http.Request) { + o.m.Lock() + defer o.m.Unlock() + + objectPath := r.URL.Path + + etag, overwritten := o.overwriteMD5[objectPath] + if !overwritten { + hasher := md5.New() + io.Copy(hasher, r.Body) + + checksum := hasher.Sum(nil) + etag = hex.EncodeToString(checksum) + } + + o.headers[objectPath] = &r.Header + o.puts++ + if o.isMultipartUpload(objectPath) { + pNumber := r.URL.Query().Get("partNumber") + idx, err := strconv.Atoi(pNumber) + if err != nil { + http.Error(w, fmt.Sprintf("malformed partNumber: %v", err), 400) + return + } + + o.multipart[objectPath][idx] = etag + } else { + o.bucket[objectPath] = etag + } + + w.Header().Set("ETag", etag) + w.WriteHeader(200) +} + +func MultipartUploadInternalError() *objectstore.CompleteMultipartUploadError { + return &objectstore.CompleteMultipartUploadError{Code: "InternalError", Message: "malformed object path"} +} + +func (o *ObjectstoreStub) completeMultipartUpload(w http.ResponseWriter, r *http.Request) { + o.m.Lock() + defer o.m.Unlock() + + objectPath := r.URL.Path + + multipart := o.multipart[objectPath] + if multipart == nil { + http.Error(w, "Unknown MultipartUpload", 404) + return + } + + buf, err := ioutil.ReadAll(r.Body) + if err != nil { + http.Error(w, err.Error(), 500) + return + } + + var msg objectstore.CompleteMultipartUpload + err = xml.Unmarshal(buf, &msg) + if err != nil { + http.Error(w, err.Error(), 400) + return + } + + for _, part := range msg.Part { + etag := multipart[part.PartNumber] + if etag != part.ETag { + msg := fmt.Sprintf("ETag mismatch on part %d. Expected %q got %q", part.PartNumber, etag, part.ETag) + http.Error(w, msg, 400) + return + } + } + + etag, overwritten := o.overwriteMD5[objectPath] + if !overwritten { + etag = "CompleteMultipartUploadETag" + } + + o.bucket[objectPath] = etag + delete(o.multipart, objectPath) + + w.Header().Set("ETag", etag) + split := strings.SplitN(objectPath[1:], "/", 2) + if len(split) < 2 { + encodeXMLAnswer(w, MultipartUploadInternalError()) + return + } + + bucket := split[0] + key := split[1] + answer := objectstore.CompleteMultipartUploadResult{ + Location: r.URL.String(), + Bucket: bucket, + Key: key, + ETag: etag, + } + encodeXMLAnswer(w, answer) +} + +func encodeXMLAnswer(w http.ResponseWriter, answer interface{}) { + w.Header().Set("Content-Type", "text/xml") + + enc := xml.NewEncoder(w) + if err := enc.Encode(answer); err != nil { + http.Error(w, err.Error(), 500) + } +} + +func (o *ObjectstoreStub) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if r.Body != nil { + defer r.Body.Close() + } + + fmt.Println("ObjectStore Stub:", r.Method, r.URL.String()) + + if r.URL.Path == "" { + http.Error(w, "No path provided", 404) + return + } + + switch r.Method { + case "DELETE": + o.removeObject(w, r) + case "PUT": + o.putObject(w, r) + case "POST": + o.completeMultipartUpload(w, r) + default: + w.WriteHeader(404) + } +} diff --git a/workhorse/internal/objectstore/test/objectstore_stub_test.go b/workhorse/internal/objectstore/test/objectstore_stub_test.go new file mode 100644 index 00000000000..8c0d52a2d79 --- /dev/null +++ b/workhorse/internal/objectstore/test/objectstore_stub_test.go @@ -0,0 +1,167 @@ +package test + +import ( + "fmt" + "io" + "net/http" + "strings" + "testing" + + "github.com/stretchr/testify/require" +) + +func doRequest(method, url string, body io.Reader) error { + req, err := http.NewRequest(method, url, body) + if err != nil { + return err + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return err + } + + return resp.Body.Close() +} + +func TestObjectStoreStub(t *testing.T) { + stub, ts := StartObjectStore() + defer ts.Close() + + require.Equal(t, 0, stub.PutsCnt()) + require.Equal(t, 0, stub.DeletesCnt()) + + objectURL := ts.URL + ObjectPath + + require.NoError(t, doRequest(http.MethodPut, objectURL, strings.NewReader(ObjectContent))) + + require.Equal(t, 1, stub.PutsCnt()) + require.Equal(t, 0, stub.DeletesCnt()) + require.Equal(t, ObjectMD5, stub.GetObjectMD5(ObjectPath)) + + require.NoError(t, doRequest(http.MethodDelete, objectURL, nil)) + + require.Equal(t, 1, stub.PutsCnt()) + require.Equal(t, 1, stub.DeletesCnt()) +} + +func TestObjectStoreStubDelete404(t *testing.T) { + stub, ts := StartObjectStore() + defer ts.Close() + + objectURL := ts.URL + ObjectPath + + req, err := http.NewRequest(http.MethodDelete, objectURL, nil) + require.NoError(t, err) + + resp, err := http.DefaultClient.Do(req) + require.NoError(t, err) + defer resp.Body.Close() + require.Equal(t, 404, resp.StatusCode) + + require.Equal(t, 0, stub.DeletesCnt()) +} + +func TestObjectStoreInitiateMultipartUpload(t *testing.T) { + stub, ts := StartObjectStore() + defer ts.Close() + + path := "/my-multipart" + err := stub.InitiateMultipartUpload(path) + require.NoError(t, err) + + err = stub.InitiateMultipartUpload(path) + require.Error(t, err, "second attempt to open the same MultipartUpload") +} + +func TestObjectStoreCompleteMultipartUpload(t *testing.T) { + stub, ts := StartObjectStore() + defer ts.Close() + + objectURL := ts.URL + ObjectPath + parts := []struct { + number int + content string + contentMD5 string + }{ + { + number: 1, + content: "first part", + contentMD5: "550cf6b6e60f65a0e3104a26e70fea42", + }, { + number: 2, + content: "second part", + contentMD5: "920b914bca0a70780b40881b8f376135", + }, + } + + stub.InitiateMultipartUpload(ObjectPath) + + require.True(t, stub.IsMultipartUpload(ObjectPath)) + require.Equal(t, 0, stub.PutsCnt()) + require.Equal(t, 0, stub.DeletesCnt()) + + // Workhorse knows nothing about S3 MultipartUpload, it receives some URLs + // from GitLab-rails and PUTs chunk of data to each of them. + // Then it completes the upload with a final POST + partPutURLs := []string{ + fmt.Sprintf("%s?partNumber=%d", objectURL, 1), + fmt.Sprintf("%s?partNumber=%d", objectURL, 2), + } + completePostURL := objectURL + + for i, partPutURL := range partPutURLs { + part := parts[i] + + require.NoError(t, doRequest(http.MethodPut, partPutURL, strings.NewReader(part.content))) + + require.Equal(t, i+1, stub.PutsCnt()) + require.Equal(t, 0, stub.DeletesCnt()) + require.Equal(t, part.contentMD5, stub.multipart[ObjectPath][part.number], "Part %d was not uploaded into ObjectStorage", part.number) + require.Empty(t, stub.GetObjectMD5(ObjectPath), "Part %d was mistakenly uploaded as a single object", part.number) + require.True(t, stub.IsMultipartUpload(ObjectPath), "MultipartUpload completed or aborted") + } + + completeBody := fmt.Sprintf(` + + 1 + %s + + + 2 + %s + + `, parts[0].contentMD5, parts[1].contentMD5) + require.NoError(t, doRequest(http.MethodPost, completePostURL, strings.NewReader(completeBody))) + + require.Equal(t, len(parts), stub.PutsCnt()) + require.Equal(t, 0, stub.DeletesCnt()) + require.False(t, stub.IsMultipartUpload(ObjectPath), "MultipartUpload is still in progress") +} + +func TestObjectStoreAbortMultipartUpload(t *testing.T) { + stub, ts := StartObjectStore() + defer ts.Close() + + stub.InitiateMultipartUpload(ObjectPath) + + require.True(t, stub.IsMultipartUpload(ObjectPath)) + require.Equal(t, 0, stub.PutsCnt()) + require.Equal(t, 0, stub.DeletesCnt()) + + objectURL := ts.URL + ObjectPath + require.NoError(t, doRequest(http.MethodPut, fmt.Sprintf("%s?partNumber=%d", objectURL, 1), strings.NewReader(ObjectContent))) + + require.Equal(t, 1, stub.PutsCnt()) + require.Equal(t, 0, stub.DeletesCnt()) + require.Equal(t, ObjectMD5, stub.multipart[ObjectPath][1], "Part was not uploaded into ObjectStorage") + require.Empty(t, stub.GetObjectMD5(ObjectPath), "Part was mistakenly uploaded as a single object") + require.True(t, stub.IsMultipartUpload(ObjectPath), "MultipartUpload completed or aborted") + + require.NoError(t, doRequest(http.MethodDelete, objectURL, nil)) + + require.Equal(t, 1, stub.PutsCnt()) + require.Equal(t, 1, stub.DeletesCnt()) + require.Empty(t, stub.GetObjectMD5(ObjectPath), "MultiUpload has been completed") + require.False(t, stub.IsMultipartUpload(ObjectPath), "MultiUpload is still in progress") +} diff --git a/workhorse/internal/objectstore/test/s3_stub.go b/workhorse/internal/objectstore/test/s3_stub.go new file mode 100644 index 00000000000..36514b3b887 --- /dev/null +++ b/workhorse/internal/objectstore/test/s3_stub.go @@ -0,0 +1,142 @@ +package test + +import ( + "io/ioutil" + "net/http/httptest" + "os" + "strings" + "testing" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + + "github.com/aws/aws-sdk-go/service/s3" + "github.com/aws/aws-sdk-go/service/s3/s3manager" + + "github.com/johannesboyne/gofakes3" + "github.com/johannesboyne/gofakes3/backend/s3mem" +) + +func SetupS3(t *testing.T, encryption string) (config.S3Credentials, config.S3Config, *session.Session, *httptest.Server) { + return SetupS3WithBucket(t, "test-bucket", encryption) +} + +func SetupS3WithBucket(t *testing.T, bucket string, encryption string) (config.S3Credentials, config.S3Config, *session.Session, *httptest.Server) { + backend := s3mem.New() + faker := gofakes3.New(backend) + ts := httptest.NewServer(faker.Server()) + + creds := config.S3Credentials{ + AwsAccessKeyID: "YOUR-ACCESSKEYID", + AwsSecretAccessKey: "YOUR-SECRETACCESSKEY", + } + + config := config.S3Config{ + Bucket: bucket, + Endpoint: ts.URL, + Region: "eu-central-1", + PathStyle: true, + } + + if encryption != "" { + config.ServerSideEncryption = encryption + + if encryption == s3.ServerSideEncryptionAwsKms { + config.SSEKMSKeyID = "arn:aws:1234" + } + } + + sess, err := session.NewSession(&aws.Config{ + Credentials: credentials.NewStaticCredentials(creds.AwsAccessKeyID, creds.AwsSecretAccessKey, ""), + Endpoint: aws.String(ts.URL), + Region: aws.String(config.Region), + DisableSSL: aws.Bool(true), + S3ForcePathStyle: aws.Bool(true), + }) + require.NoError(t, err) + + // Create S3 service client + svc := s3.New(sess) + + _, err = svc.CreateBucket(&s3.CreateBucketInput{ + Bucket: aws.String(bucket), + }) + require.NoError(t, err) + + return creds, config, sess, ts +} + +// S3ObjectExists will fail the test if the file does not exist. +func S3ObjectExists(t *testing.T, sess *session.Session, config config.S3Config, objectName string, expectedBytes string) { + downloadObject(t, sess, config, objectName, func(tmpfile *os.File, numBytes int64, err error) { + require.NoError(t, err) + require.Equal(t, int64(len(expectedBytes)), numBytes) + + output, err := ioutil.ReadFile(tmpfile.Name()) + require.NoError(t, err) + + require.Equal(t, []byte(expectedBytes), output) + }) +} + +func CheckS3Metadata(t *testing.T, sess *session.Session, config config.S3Config, objectName string) { + // In a real S3 provider, s3crypto.NewDecryptionClient should probably be used + svc := s3.New(sess) + result, err := svc.GetObject(&s3.GetObjectInput{ + Bucket: aws.String(config.Bucket), + Key: aws.String(objectName), + }) + require.NoError(t, err) + + if config.ServerSideEncryption != "" { + require.Equal(t, aws.String(config.ServerSideEncryption), result.ServerSideEncryption) + + if config.ServerSideEncryption == s3.ServerSideEncryptionAwsKms { + require.Equal(t, aws.String(config.SSEKMSKeyID), result.SSEKMSKeyId) + } else { + require.Nil(t, result.SSEKMSKeyId) + } + } else { + require.Nil(t, result.ServerSideEncryption) + require.Nil(t, result.SSEKMSKeyId) + } +} + +// S3ObjectDoesNotExist returns true if the object has been deleted, +// false otherwise. The return signature is different from +// S3ObjectExists because deletion may need to be retried since deferred +// clean up callsinternal/objectstore/test/s3_stub.go may cause the actual deletion to happen after the +// initial check. +func S3ObjectDoesNotExist(t *testing.T, sess *session.Session, config config.S3Config, objectName string) bool { + deleted := false + + downloadObject(t, sess, config, objectName, func(tmpfile *os.File, numBytes int64, err error) { + if err != nil && strings.Contains(err.Error(), "NoSuchKey") { + deleted = true + } + }) + + return deleted +} + +func downloadObject(t *testing.T, sess *session.Session, config config.S3Config, objectName string, handler func(tmpfile *os.File, numBytes int64, err error)) { + tmpDir, err := ioutil.TempDir("", "workhorse-test-") + require.NoError(t, err) + defer os.Remove(tmpDir) + + tmpfile, err := ioutil.TempFile(tmpDir, "s3-output") + require.NoError(t, err) + defer os.Remove(tmpfile.Name()) + + downloadSvc := s3manager.NewDownloader(sess) + numBytes, err := downloadSvc.Download(tmpfile, &s3.GetObjectInput{ + Bucket: aws.String(config.Bucket), + Key: aws.String(objectName), + }) + + handler(tmpfile, numBytes, err) +} diff --git a/workhorse/internal/objectstore/upload_strategy.go b/workhorse/internal/objectstore/upload_strategy.go new file mode 100644 index 00000000000..5707ba5f24e --- /dev/null +++ b/workhorse/internal/objectstore/upload_strategy.go @@ -0,0 +1,46 @@ +package objectstore + +import ( + "context" + "io" + "net/http" + + "gitlab.com/gitlab-org/labkit/log" + "gitlab.com/gitlab-org/labkit/mask" +) + +type uploadStrategy interface { + Upload(ctx context.Context, r io.Reader) error + ETag() string + Abort() + Delete() +} + +func deleteURL(url string) { + if url == "" { + return + } + + req, err := http.NewRequest("DELETE", url, nil) + if err != nil { + log.WithError(err).WithField("object", mask.URL(url)).Warning("Delete failed") + return + } + // TODO: consider adding the context to the outgoing request for better instrumentation + + // here we are not using u.ctx because we must perform cleanup regardless of parent context + resp, err := httpClient.Do(req) + if err != nil { + log.WithError(err).WithField("object", mask.URL(url)).Warning("Delete failed") + return + } + resp.Body.Close() +} + +func extractETag(rawETag string) string { + if rawETag != "" && rawETag[0] == '"' { + rawETag = rawETag[1 : len(rawETag)-1] + } + + return rawETag +} diff --git a/workhorse/internal/objectstore/uploader.go b/workhorse/internal/objectstore/uploader.go new file mode 100644 index 00000000000..fb93cb83630 --- /dev/null +++ b/workhorse/internal/objectstore/uploader.go @@ -0,0 +1,113 @@ +package objectstore + +import ( + "context" + "crypto/md5" + "encoding/hex" + "fmt" + "hash" + "io" + "strings" + "time" + + "gitlab.com/gitlab-org/labkit/log" +) + +// uploader consumes an io.Reader and uploads it using a pluggable uploadStrategy. +type uploader struct { + strategy uploadStrategy + + // In the case of S3 uploads, we have a multipart upload which + // instantiates uploads for the individual parts. We don't want to + // increment metrics for the individual parts, so that is why we have + // this boolean flag. + metrics bool + + // With S3 we compare the MD5 of the data we sent with the ETag returned + // by the object storage server. + checkETag bool +} + +func newUploader(strategy uploadStrategy) *uploader { + return &uploader{strategy: strategy, metrics: true} +} + +func newETagCheckUploader(strategy uploadStrategy, metrics bool) *uploader { + return &uploader{strategy: strategy, metrics: metrics, checkETag: true} +} + +func hexString(h hash.Hash) string { return hex.EncodeToString(h.Sum(nil)) } + +// Consume reads the reader until it reaches EOF or an error. It spawns a +// goroutine that waits for outerCtx to be done, after which the remote +// file is deleted. The deadline applies to the upload performed inside +// Consume, not to outerCtx. +func (u *uploader) Consume(outerCtx context.Context, reader io.Reader, deadline time.Time) (_ int64, err error) { + if u.metrics { + objectStorageUploadsOpen.Inc() + defer func(started time.Time) { + objectStorageUploadsOpen.Dec() + objectStorageUploadTime.Observe(time.Since(started).Seconds()) + if err != nil { + objectStorageUploadRequestsRequestFailed.Inc() + } + }(time.Now()) + } + + defer func() { + // We do this mainly to abort S3 multipart uploads: it is not enough to + // "delete" them. + if err != nil { + u.strategy.Abort() + } + }() + + go func() { + // Once gitlab-rails is done handling the request, we are supposed to + // delete the upload from its temporary location. + <-outerCtx.Done() + u.strategy.Delete() + }() + + uploadCtx, cancelFn := context.WithDeadline(outerCtx, deadline) + defer cancelFn() + + var hasher hash.Hash + if u.checkETag { + hasher = md5.New() + reader = io.TeeReader(reader, hasher) + } + + cr := &countReader{r: reader} + if err := u.strategy.Upload(uploadCtx, cr); err != nil { + return cr.n, err + } + + if u.checkETag { + if err := compareMD5(hexString(hasher), u.strategy.ETag()); err != nil { + log.ContextLogger(uploadCtx).WithError(err).Error("error comparing MD5 checksum") + return cr.n, err + } + } + + return cr.n, nil +} + +func compareMD5(local, remote string) error { + if !strings.EqualFold(local, remote) { + return fmt.Errorf("ETag mismatch. expected %q got %q", local, remote) + } + + return nil +} + +type countReader struct { + r io.Reader + n int64 +} + +func (cr *countReader) Read(p []byte) (int, error) { + nRead, err := cr.r.Read(p) + cr.n += int64(nRead) + return nRead, err +} diff --git a/workhorse/internal/proxy/proxy.go b/workhorse/internal/proxy/proxy.go new file mode 100644 index 00000000000..1bc417a841f --- /dev/null +++ b/workhorse/internal/proxy/proxy.go @@ -0,0 +1,62 @@ +package proxy + +import ( + "fmt" + "net/http" + "net/http/httputil" + "net/url" + "time" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +var ( + defaultTarget = helper.URLMustParse("http://localhost") +) + +type Proxy struct { + Version string + reverseProxy *httputil.ReverseProxy + AllowResponseBuffering bool +} + +func NewProxy(myURL *url.URL, version string, roundTripper http.RoundTripper) *Proxy { + p := Proxy{Version: version, AllowResponseBuffering: true} + + if myURL == nil { + myURL = defaultTarget + } + + u := *myURL // Make a copy of p.URL + u.Path = "" + p.reverseProxy = httputil.NewSingleHostReverseProxy(&u) + p.reverseProxy.Transport = roundTripper + return &p +} + +func (p *Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request) { + // Clone request + req := *r + req.Header = helper.HeaderClone(r.Header) + + // Set Workhorse version + req.Header.Set("Gitlab-Workhorse", p.Version) + req.Header.Set("Gitlab-Workhorse-Proxy-Start", fmt.Sprintf("%d", time.Now().UnixNano())) + + if p.AllowResponseBuffering { + helper.AllowResponseBuffering(w) + } + + // If the ultimate client disconnects when the response isn't fully written + // to them yet, httputil.ReverseProxy panics with a net/http.ErrAbortHandler + // error. We can catch and discard this to keep the error log clean + defer func() { + if err := recover(); err != nil { + if err != http.ErrAbortHandler { + panic(err) + } + } + }() + + p.reverseProxy.ServeHTTP(w, &req) +} diff --git a/workhorse/internal/queueing/queue.go b/workhorse/internal/queueing/queue.go new file mode 100644 index 00000000000..b8d6954490c --- /dev/null +++ b/workhorse/internal/queueing/queue.go @@ -0,0 +1,208 @@ +package queueing + +import ( + "errors" + "time" + + "github.com/prometheus/client_golang/prometheus" +) + +type errTooManyRequests struct{ error } +type errQueueingTimedout struct{ error } + +var ErrTooManyRequests = &errTooManyRequests{errors.New("too many requests queued")} +var ErrQueueingTimedout = &errQueueingTimedout{errors.New("queueing timedout")} + +type queueMetrics struct { + queueingLimit prometheus.Gauge + queueingQueueLimit prometheus.Gauge + queueingQueueTimeout prometheus.Gauge + queueingBusy prometheus.Gauge + queueingWaiting prometheus.Gauge + queueingWaitingTime prometheus.Histogram + queueingErrors *prometheus.CounterVec +} + +// newQueueMetrics prepares Prometheus metrics for queueing mechanism +// name specifies name of the queue, used to label metrics with ConstLabel `queue_name` +// Don't call newQueueMetrics twice with the same name argument! +// timeout specifies the timeout of storing a request in queue - queueMetrics +// uses it to calculate histogram buckets for gitlab_workhorse_queueing_waiting_time +// metric +func newQueueMetrics(name string, timeout time.Duration) *queueMetrics { + waitingTimeBuckets := []float64{ + timeout.Seconds() * 0.01, + timeout.Seconds() * 0.05, + timeout.Seconds() * 0.10, + timeout.Seconds() * 0.25, + timeout.Seconds() * 0.50, + timeout.Seconds() * 0.75, + timeout.Seconds() * 0.90, + timeout.Seconds() * 0.95, + timeout.Seconds() * 0.99, + timeout.Seconds(), + } + + metrics := &queueMetrics{ + queueingLimit: prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "gitlab_workhorse_queueing_limit", + Help: "Current limit set for the queueing mechanism", + ConstLabels: prometheus.Labels{ + "queue_name": name, + }, + }), + + queueingQueueLimit: prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "gitlab_workhorse_queueing_queue_limit", + Help: "Current queueLimit set for the queueing mechanism", + ConstLabels: prometheus.Labels{ + "queue_name": name, + }, + }), + + queueingQueueTimeout: prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "gitlab_workhorse_queueing_queue_timeout", + Help: "Current queueTimeout set for the queueing mechanism", + ConstLabels: prometheus.Labels{ + "queue_name": name, + }, + }), + + queueingBusy: prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "gitlab_workhorse_queueing_busy", + Help: "How many queued requests are now processed", + ConstLabels: prometheus.Labels{ + "queue_name": name, + }, + }), + + queueingWaiting: prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "gitlab_workhorse_queueing_waiting", + Help: "How many requests are now queued", + ConstLabels: prometheus.Labels{ + "queue_name": name, + }, + }), + + queueingWaitingTime: prometheus.NewHistogram(prometheus.HistogramOpts{ + Name: "gitlab_workhorse_queueing_waiting_time", + Help: "How many time a request spent in queue", + ConstLabels: prometheus.Labels{ + "queue_name": name, + }, + Buckets: waitingTimeBuckets, + }), + + queueingErrors: prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_queueing_errors", + Help: "How many times the TooManyRequests or QueueintTimedout errors were returned while queueing, partitioned by error type", + ConstLabels: prometheus.Labels{ + "queue_name": name, + }, + }, + []string{"type"}, + ), + } + + prometheus.MustRegister(metrics.queueingLimit) + prometheus.MustRegister(metrics.queueingQueueLimit) + prometheus.MustRegister(metrics.queueingQueueTimeout) + prometheus.MustRegister(metrics.queueingBusy) + prometheus.MustRegister(metrics.queueingWaiting) + prometheus.MustRegister(metrics.queueingWaitingTime) + prometheus.MustRegister(metrics.queueingErrors) + + return metrics +} + +type Queue struct { + *queueMetrics + + name string + busyCh chan struct{} + waitingCh chan time.Time + timeout time.Duration +} + +// newQueue creates a new queue +// name specifies name used to label queue metrics. +// Don't call newQueue twice with the same name argument! +// limit specifies number of requests run concurrently +// queueLimit specifies maximum number of requests that can be queued +// timeout specifies the time limit of storing the request in the queue +// if the number of requests is above the limit +func newQueue(name string, limit, queueLimit uint, timeout time.Duration) *Queue { + queue := &Queue{ + name: name, + busyCh: make(chan struct{}, limit), + waitingCh: make(chan time.Time, limit+queueLimit), + timeout: timeout, + } + + queue.queueMetrics = newQueueMetrics(name, timeout) + queue.queueingLimit.Set(float64(limit)) + queue.queueingQueueLimit.Set(float64(queueLimit)) + queue.queueingQueueTimeout.Set(timeout.Seconds()) + + return queue +} + +// Acquire takes one slot from the Queue +// and returns when a request should be processed +// it allows up to (limit) of requests running at a time +// it allows to queue up to (queue-limit) requests +func (s *Queue) Acquire() (err error) { + // push item to a queue to claim your own slot (non-blocking) + select { + case s.waitingCh <- time.Now(): + s.queueingWaiting.Inc() + break + default: + s.queueingErrors.WithLabelValues("too_many_requests").Inc() + return ErrTooManyRequests + } + + defer func() { + if err != nil { + waitStarted := <-s.waitingCh + s.queueingWaiting.Dec() + s.queueingWaitingTime.Observe(float64(time.Since(waitStarted).Seconds())) + } + }() + + // fast path: push item to current processed items (non-blocking) + select { + case s.busyCh <- struct{}{}: + s.queueingBusy.Inc() + return nil + default: + break + } + + timer := time.NewTimer(s.timeout) + defer timer.Stop() + + // push item to current processed items (blocking) + select { + case s.busyCh <- struct{}{}: + s.queueingBusy.Inc() + return nil + + case <-timer.C: + s.queueingErrors.WithLabelValues("queueing_timedout").Inc() + return ErrQueueingTimedout + } +} + +// Release marks the finish of processing of requests +// It triggers next request to be processed if it's in queue +func (s *Queue) Release() { + // dequeue from queue to allow next request to be processed + waitStarted := <-s.waitingCh + s.queueingWaiting.Dec() + s.queueingWaitingTime.Observe(float64(time.Since(waitStarted).Seconds())) + + <-s.busyCh + s.queueingBusy.Dec() +} diff --git a/workhorse/internal/queueing/queue_test.go b/workhorse/internal/queueing/queue_test.go new file mode 100644 index 00000000000..7f5ed9154f4 --- /dev/null +++ b/workhorse/internal/queueing/queue_test.go @@ -0,0 +1,62 @@ +package queueing + +import ( + "testing" + "time" +) + +func TestNormalQueueing(t *testing.T) { + q := newQueue("queue 1", 2, 1, time.Microsecond) + err1 := q.Acquire() + if err1 != nil { + t.Fatal("we should acquire a new slot") + } + + err2 := q.Acquire() + if err2 != nil { + t.Fatal("we should acquire a new slot") + } + + err3 := q.Acquire() + if err3 != ErrQueueingTimedout { + t.Fatal("we should timeout") + } + + q.Release() + + err4 := q.Acquire() + if err4 != nil { + t.Fatal("we should acquire a new slot") + } +} + +func TestQueueLimit(t *testing.T) { + q := newQueue("queue 2", 1, 0, time.Microsecond) + err1 := q.Acquire() + if err1 != nil { + t.Fatal("we should acquire a new slot") + } + + err2 := q.Acquire() + if err2 != ErrTooManyRequests { + t.Fatal("we should fail because of not enough slots in queue") + } +} + +func TestQueueProcessing(t *testing.T) { + q := newQueue("queue 3", 1, 1, time.Second) + err1 := q.Acquire() + if err1 != nil { + t.Fatal("we should acquire a new slot") + } + + go func() { + time.Sleep(50 * time.Microsecond) + q.Release() + }() + + err2 := q.Acquire() + if err2 != nil { + t.Fatal("we should acquire slot after the previous one finished") + } +} diff --git a/workhorse/internal/queueing/requests.go b/workhorse/internal/queueing/requests.go new file mode 100644 index 00000000000..409a7656fa4 --- /dev/null +++ b/workhorse/internal/queueing/requests.go @@ -0,0 +1,51 @@ +package queueing + +import ( + "net/http" + "time" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +const ( + DefaultTimeout = 30 * time.Second + httpStatusTooManyRequests = 429 +) + +// QueueRequests creates a new request queue +// name specifies the name of queue, used to label Prometheus metrics +// Don't call QueueRequests twice with the same name argument! +// h specifies a http.Handler which will handle the queue requests +// limit specifies number of requests run concurrently +// queueLimit specifies maximum number of requests that can be queued +// queueTimeout specifies the time limit of storing the request in the queue +func QueueRequests(name string, h http.Handler, limit, queueLimit uint, queueTimeout time.Duration) http.Handler { + if limit == 0 { + return h + } + if queueTimeout == 0 { + queueTimeout = DefaultTimeout + } + + queue := newQueue(name, limit, queueLimit, queueTimeout) + + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + err := queue.Acquire() + + switch err { + case nil: + defer queue.Release() + h.ServeHTTP(w, r) + + case ErrTooManyRequests: + http.Error(w, "Too Many Requests", httpStatusTooManyRequests) + + case ErrQueueingTimedout: + http.Error(w, "Service Unavailable", http.StatusServiceUnavailable) + + default: + helper.Fail500(w, r, err) + } + + }) +} diff --git a/workhorse/internal/queueing/requests_test.go b/workhorse/internal/queueing/requests_test.go new file mode 100644 index 00000000000..f1c52e5c6f5 --- /dev/null +++ b/workhorse/internal/queueing/requests_test.go @@ -0,0 +1,76 @@ +package queueing + +import ( + "fmt" + "net/http" + "net/http/httptest" + "testing" + "time" +) + +var httpHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintln(w, "OK") +}) + +func pausedHttpHandler(pauseCh chan struct{}) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + <-pauseCh + fmt.Fprintln(w, "OK") + }) +} + +func TestNormalRequestProcessing(t *testing.T) { + w := httptest.NewRecorder() + h := QueueRequests("Normal request processing", httpHandler, 1, 1, time.Second) + h.ServeHTTP(w, nil) + if w.Code != 200 { + t.Fatal("QueueRequests should process request") + } +} + +// testSlowRequestProcessing creates a new queue, +// then it runs a number of requests that are going through queue, +// we return the response of first finished request, +// where status of request can be 200, 429 or 503 +func testSlowRequestProcessing(name string, count int, limit, queueLimit uint, queueTimeout time.Duration) *httptest.ResponseRecorder { + pauseCh := make(chan struct{}) + defer close(pauseCh) + + handler := QueueRequests("Slow request processing: "+name, pausedHttpHandler(pauseCh), limit, queueLimit, queueTimeout) + + respCh := make(chan *httptest.ResponseRecorder, count) + + // queue requests to use up the queue + for i := 0; i < count; i++ { + go func() { + w := httptest.NewRecorder() + handler.ServeHTTP(w, nil) + respCh <- w + }() + } + + // dequeue first request + return <-respCh +} + +// TestQueueingTimeout performs 2 requests +// the queue limit and length is 1, +// the second request gets timed-out +func TestQueueingTimeout(t *testing.T) { + w := testSlowRequestProcessing("timeout", 2, 1, 1, time.Microsecond) + + if w.Code != 503 { + t.Fatal("QueueRequests should timeout queued request") + } +} + +// TestQueueingTooManyRequests performs 3 requests +// the queue limit and length is 1, +// so the third request has to be rejected with 429 +func TestQueueingTooManyRequests(t *testing.T) { + w := testSlowRequestProcessing("too many requests", 3, 1, 1, time.Minute) + + if w.Code != 429 { + t.Fatal("QueueRequests should return immediately and return too many requests") + } +} diff --git a/workhorse/internal/redis/keywatcher.go b/workhorse/internal/redis/keywatcher.go new file mode 100644 index 00000000000..9861956683a --- /dev/null +++ b/workhorse/internal/redis/keywatcher.go @@ -0,0 +1,204 @@ +package redis + +import ( + "fmt" + "strings" + "sync" + "time" + + "github.com/gomodule/redigo/redis" + "github.com/jpillora/backoff" + "github.com/prometheus/client_golang/prometheus" + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +var ( + keyWatcher = make(map[string][]chan string) + keyWatcherMutex sync.Mutex + redisReconnectTimeout = backoff.Backoff{ + //These are the defaults + Min: 100 * time.Millisecond, + Max: 60 * time.Second, + Factor: 2, + Jitter: true, + } + keyWatchers = prometheus.NewGauge( + prometheus.GaugeOpts{ + Name: "gitlab_workhorse_keywatcher_keywatchers", + Help: "The number of keys that is being watched by gitlab-workhorse", + }, + ) + totalMessages = prometheus.NewCounter( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_keywatcher_total_messages", + Help: "How many messages gitlab-workhorse has received in total on pubsub.", + }, + ) +) + +func init() { + prometheus.MustRegister( + keyWatchers, + totalMessages, + ) +} + +const ( + keySubChannel = "workhorse:notifications" +) + +// KeyChan holds a key and a channel +type KeyChan struct { + Key string + Chan chan string +} + +func processInner(conn redis.Conn) error { + defer conn.Close() + psc := redis.PubSubConn{Conn: conn} + if err := psc.Subscribe(keySubChannel); err != nil { + return err + } + defer psc.Unsubscribe(keySubChannel) + + for { + switch v := psc.Receive().(type) { + case redis.Message: + totalMessages.Inc() + dataStr := string(v.Data) + msg := strings.SplitN(dataStr, "=", 2) + if len(msg) != 2 { + helper.LogError(nil, fmt.Errorf("keywatcher: invalid notification: %q", dataStr)) + continue + } + key, value := msg[0], msg[1] + notifyChanWatchers(key, value) + case error: + helper.LogError(nil, fmt.Errorf("keywatcher: pubsub receive: %v", v)) + // Intermittent error, return nil so that it doesn't wait before reconnect + return nil + } + } +} + +func dialPubSub(dialer redisDialerFunc) (redis.Conn, error) { + conn, err := dialer() + if err != nil { + return nil, err + } + + // Make sure Redis is actually connected + conn.Do("PING") + if err := conn.Err(); err != nil { + conn.Close() + return nil, err + } + + return conn, nil +} + +// Process redis subscriptions +// +// NOTE: There Can Only Be One! +func Process() { + log.Info("keywatcher: starting process loop") + for { + conn, err := dialPubSub(workerDialFunc) + if err != nil { + helper.LogError(nil, fmt.Errorf("keywatcher: %v", err)) + time.Sleep(redisReconnectTimeout.Duration()) + continue + } + redisReconnectTimeout.Reset() + + if err = processInner(conn); err != nil { + helper.LogError(nil, fmt.Errorf("keywatcher: process loop: %v", err)) + } + } +} + +func notifyChanWatchers(key, value string) { + keyWatcherMutex.Lock() + defer keyWatcherMutex.Unlock() + if chanList, ok := keyWatcher[key]; ok { + for _, c := range chanList { + c <- value + keyWatchers.Dec() + } + delete(keyWatcher, key) + } +} + +func addKeyChan(kc *KeyChan) { + keyWatcherMutex.Lock() + defer keyWatcherMutex.Unlock() + keyWatcher[kc.Key] = append(keyWatcher[kc.Key], kc.Chan) + keyWatchers.Inc() +} + +func delKeyChan(kc *KeyChan) { + keyWatcherMutex.Lock() + defer keyWatcherMutex.Unlock() + if chans, ok := keyWatcher[kc.Key]; ok { + for i, c := range chans { + if kc.Chan == c { + keyWatcher[kc.Key] = append(chans[:i], chans[i+1:]...) + keyWatchers.Dec() + break + } + } + if len(keyWatcher[kc.Key]) == 0 { + delete(keyWatcher, kc.Key) + } + } +} + +// WatchKeyStatus is used to tell how WatchKey returned +type WatchKeyStatus int + +const ( + // WatchKeyStatusTimeout is returned when the watch timeout provided by the caller was exceeded + WatchKeyStatusTimeout WatchKeyStatus = iota + // WatchKeyStatusAlreadyChanged is returned when the value passed by the caller was never observed + WatchKeyStatusAlreadyChanged + // WatchKeyStatusSeenChange is returned when we have seen the value passed by the caller get changed + WatchKeyStatusSeenChange + // WatchKeyStatusNoChange is returned when the function had to return before observing a change. + // Also returned on errors. + WatchKeyStatusNoChange +) + +// WatchKey waits for a key to be updated or expired +func WatchKey(key, value string, timeout time.Duration) (WatchKeyStatus, error) { + kw := &KeyChan{ + Key: key, + Chan: make(chan string, 1), + } + + addKeyChan(kw) + defer delKeyChan(kw) + + currentValue, err := GetString(key) + if err != nil { + return WatchKeyStatusNoChange, fmt.Errorf("keywatcher: redis GET: %v", err) + } + if currentValue != value { + return WatchKeyStatusAlreadyChanged, nil + } + + select { + case currentValue := <-kw.Chan: + if currentValue == "" { + return WatchKeyStatusNoChange, fmt.Errorf("keywatcher: redis GET failed") + } + if currentValue == value { + return WatchKeyStatusNoChange, nil + } + return WatchKeyStatusSeenChange, nil + + case <-time.After(timeout): + return WatchKeyStatusTimeout, nil + } +} diff --git a/workhorse/internal/redis/keywatcher_test.go b/workhorse/internal/redis/keywatcher_test.go new file mode 100644 index 00000000000..f1ee77e2194 --- /dev/null +++ b/workhorse/internal/redis/keywatcher_test.go @@ -0,0 +1,162 @@ +package redis + +import ( + "sync" + "testing" + "time" + + "github.com/rafaeljusto/redigomock" + "github.com/stretchr/testify/require" +) + +const ( + runnerKey = "runner:build_queue:10" +) + +func createSubscriptionMessage(key, data string) []interface{} { + return []interface{}{ + []byte("message"), + []byte(key), + []byte(data), + } +} + +func createSubscribeMessage(key string) []interface{} { + return []interface{}{ + []byte("subscribe"), + []byte(key), + []byte("1"), + } +} +func createUnsubscribeMessage(key string) []interface{} { + return []interface{}{ + []byte("unsubscribe"), + []byte(key), + []byte("1"), + } +} + +func countWatchers(key string) int { + keyWatcherMutex.Lock() + defer keyWatcherMutex.Unlock() + return len(keyWatcher[key]) +} + +func deleteWatchers(key string) { + keyWatcherMutex.Lock() + defer keyWatcherMutex.Unlock() + delete(keyWatcher, key) +} + +// Forces a run of the `Process` loop against a mock PubSubConn. +func processMessages(numWatchers int, value string) { + psc := redigomock.NewConn() + + // Setup the initial subscription message + psc.Command("SUBSCRIBE", keySubChannel).Expect(createSubscribeMessage(keySubChannel)) + psc.Command("UNSUBSCRIBE", keySubChannel).Expect(createUnsubscribeMessage(keySubChannel)) + psc.AddSubscriptionMessage(createSubscriptionMessage(keySubChannel, runnerKey+"="+value)) + + // Wait for all the `WatchKey` calls to be registered + for countWatchers(runnerKey) != numWatchers { + time.Sleep(time.Millisecond) + } + + processInner(psc) +} + +func TestWatchKeySeenChange(t *testing.T) { + conn, td := setupMockPool() + defer td() + + conn.Command("GET", runnerKey).Expect("something") + + wg := &sync.WaitGroup{} + wg.Add(1) + + go func() { + val, err := WatchKey(runnerKey, "something", time.Second) + require.NoError(t, err, "Expected no error") + require.Equal(t, WatchKeyStatusSeenChange, val, "Expected value to change") + wg.Done() + }() + + processMessages(1, "somethingelse") + wg.Wait() +} + +func TestWatchKeyNoChange(t *testing.T) { + conn, td := setupMockPool() + defer td() + + conn.Command("GET", runnerKey).Expect("something") + + wg := &sync.WaitGroup{} + wg.Add(1) + + go func() { + val, err := WatchKey(runnerKey, "something", time.Second) + require.NoError(t, err, "Expected no error") + require.Equal(t, WatchKeyStatusNoChange, val, "Expected notification without change to value") + wg.Done() + }() + + processMessages(1, "something") + wg.Wait() +} + +func TestWatchKeyTimeout(t *testing.T) { + conn, td := setupMockPool() + defer td() + + conn.Command("GET", runnerKey).Expect("something") + + val, err := WatchKey(runnerKey, "something", time.Millisecond) + require.NoError(t, err, "Expected no error") + require.Equal(t, WatchKeyStatusTimeout, val, "Expected value to not change") + + // Clean up watchers since Process isn't doing that for us (not running) + deleteWatchers(runnerKey) +} + +func TestWatchKeyAlreadyChanged(t *testing.T) { + conn, td := setupMockPool() + defer td() + + conn.Command("GET", runnerKey).Expect("somethingelse") + + val, err := WatchKey(runnerKey, "something", time.Second) + require.NoError(t, err, "Expected no error") + require.Equal(t, WatchKeyStatusAlreadyChanged, val, "Expected value to have already changed") + + // Clean up watchers since Process isn't doing that for us (not running) + deleteWatchers(runnerKey) +} + +func TestWatchKeyMassivelyParallel(t *testing.T) { + runTimes := 100 // 100 parallel watchers + + conn, td := setupMockPool() + defer td() + + wg := &sync.WaitGroup{} + wg.Add(runTimes) + + getCmd := conn.Command("GET", runnerKey) + + for i := 0; i < runTimes; i++ { + getCmd = getCmd.Expect("something") + } + + for i := 0; i < runTimes; i++ { + go func() { + val, err := WatchKey(runnerKey, "something", time.Second) + require.NoError(t, err, "Expected no error") + require.Equal(t, WatchKeyStatusSeenChange, val, "Expected value to change") + wg.Done() + }() + } + + processMessages(runTimes, "somethingelse") + wg.Wait() +} diff --git a/workhorse/internal/redis/redis.go b/workhorse/internal/redis/redis.go new file mode 100644 index 00000000000..9f96cef9d8f --- /dev/null +++ b/workhorse/internal/redis/redis.go @@ -0,0 +1,301 @@ +package redis + +import ( + "errors" + "fmt" + "net" + "net/url" + "time" + + "github.com/FZambia/sentinel" + "github.com/gomodule/redigo/redis" + "github.com/prometheus/client_golang/prometheus" + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +var ( + pool *redis.Pool + sntnl *sentinel.Sentinel +) + +const ( + // Max Idle Connections in the pool. + defaultMaxIdle = 1 + // Max Active Connections in the pool. + defaultMaxActive = 1 + // Timeout for Read operations on the pool. 1 second is technically overkill, + // it's just for sanity. + defaultReadTimeout = 1 * time.Second + // Timeout for Write operations on the pool. 1 second is technically overkill, + // it's just for sanity. + defaultWriteTimeout = 1 * time.Second + // Timeout before killing Idle connections in the pool. 3 minutes seemed good. + // If you _actually_ hit this timeout often, you should consider turning of + // redis-support since it's not necessary at that point... + defaultIdleTimeout = 3 * time.Minute + // KeepAlivePeriod is to keep a TCP connection open for an extended period of + // time without being killed. This is used both in the pool, and in the + // worker-connection. + // See https://en.wikipedia.org/wiki/Keepalive#TCP_keepalive for more + // information. + defaultKeepAlivePeriod = 5 * time.Minute +) + +var ( + totalConnections = prometheus.NewCounter( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_redis_total_connections", + Help: "How many connections gitlab-workhorse has opened in total. Can be used to track Redis connection rate for this process", + }, + ) + + errorCounter = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_redis_errors", + Help: "Counts different types of Redis errors encountered by workhorse, by type and destination (redis, sentinel)", + }, + []string{"type", "dst"}, + ) +) + +func init() { + prometheus.MustRegister( + totalConnections, + errorCounter, + ) +} + +func sentinelConn(master string, urls []config.TomlURL) *sentinel.Sentinel { + if len(urls) == 0 { + return nil + } + var addrs []string + for _, url := range urls { + h := url.URL.String() + log.WithFields(log.Fields{ + "scheme": url.URL.Scheme, + "host": url.URL.Host, + }).Printf("redis: using sentinel") + addrs = append(addrs, h) + } + return &sentinel.Sentinel{ + Addrs: addrs, + MasterName: master, + Dial: func(addr string) (redis.Conn, error) { + // This timeout is recommended for Sentinel-support according to the guidelines. + // https://redis.io/topics/sentinel-clients#redis-service-discovery-via-sentinel + // For every address it should try to connect to the Sentinel, + // using a short timeout (in the order of a few hundreds of milliseconds). + timeout := 500 * time.Millisecond + url := helper.URLMustParse(addr) + + var c redis.Conn + var err error + options := []redis.DialOption{ + redis.DialConnectTimeout(timeout), + redis.DialReadTimeout(timeout), + redis.DialWriteTimeout(timeout), + } + + if url.Scheme == "redis" || url.Scheme == "rediss" { + c, err = redis.DialURL(addr, options...) + } else { + c, err = redis.Dial("tcp", url.Host, options...) + } + + if err != nil { + errorCounter.WithLabelValues("dial", "sentinel").Inc() + return nil, err + } + return c, nil + }, + } +} + +var poolDialFunc func() (redis.Conn, error) +var workerDialFunc func() (redis.Conn, error) + +func timeoutDialOptions(cfg *config.RedisConfig) []redis.DialOption { + readTimeout := defaultReadTimeout + writeTimeout := defaultWriteTimeout + + if cfg != nil { + if cfg.ReadTimeout != nil { + readTimeout = cfg.ReadTimeout.Duration + } + + if cfg.WriteTimeout != nil { + writeTimeout = cfg.WriteTimeout.Duration + } + } + return []redis.DialOption{ + redis.DialReadTimeout(readTimeout), + redis.DialWriteTimeout(writeTimeout), + } +} + +func dialOptionsBuilder(cfg *config.RedisConfig, setTimeouts bool) []redis.DialOption { + var dopts []redis.DialOption + if setTimeouts { + dopts = timeoutDialOptions(cfg) + } + if cfg == nil { + return dopts + } + if cfg.Password != "" { + dopts = append(dopts, redis.DialPassword(cfg.Password)) + } + if cfg.DB != nil { + dopts = append(dopts, redis.DialDatabase(*cfg.DB)) + } + return dopts +} + +func keepAliveDialer(timeout time.Duration) func(string, string) (net.Conn, error) { + return func(network, address string) (net.Conn, error) { + addr, err := net.ResolveTCPAddr(network, address) + if err != nil { + return nil, err + } + tc, err := net.DialTCP(network, nil, addr) + if err != nil { + return nil, err + } + if err := tc.SetKeepAlive(true); err != nil { + return nil, err + } + if err := tc.SetKeepAlivePeriod(timeout); err != nil { + return nil, err + } + return tc, nil + } +} + +type redisDialerFunc func() (redis.Conn, error) + +func sentinelDialer(dopts []redis.DialOption, keepAlivePeriod time.Duration) redisDialerFunc { + return func() (redis.Conn, error) { + address, err := sntnl.MasterAddr() + if err != nil { + errorCounter.WithLabelValues("master", "sentinel").Inc() + return nil, err + } + dopts = append(dopts, redis.DialNetDial(keepAliveDialer(keepAlivePeriod))) + return redisDial("tcp", address, dopts...) + } +} + +func defaultDialer(dopts []redis.DialOption, keepAlivePeriod time.Duration, url url.URL) redisDialerFunc { + return func() (redis.Conn, error) { + if url.Scheme == "unix" { + return redisDial(url.Scheme, url.Path, dopts...) + } + + dopts = append(dopts, redis.DialNetDial(keepAliveDialer(keepAlivePeriod))) + + // redis.DialURL only works with redis[s]:// URLs + if url.Scheme == "redis" || url.Scheme == "rediss" { + return redisURLDial(url, dopts...) + } + + return redisDial(url.Scheme, url.Host, dopts...) + } +} + +func redisURLDial(url url.URL, options ...redis.DialOption) (redis.Conn, error) { + log.WithFields(log.Fields{ + "scheme": url.Scheme, + "address": url.Host, + }).Printf("redis: dialing") + + return redis.DialURL(url.String(), options...) +} + +func redisDial(network, address string, options ...redis.DialOption) (redis.Conn, error) { + log.WithFields(log.Fields{ + "network": network, + "address": address, + }).Printf("redis: dialing") + + return redis.Dial(network, address, options...) +} + +func countDialer(dialer redisDialerFunc) redisDialerFunc { + return func() (redis.Conn, error) { + c, err := dialer() + if err != nil { + errorCounter.WithLabelValues("dial", "redis").Inc() + } else { + totalConnections.Inc() + } + return c, err + } +} + +// DefaultDialFunc should always used. Only exception is for unit-tests. +func DefaultDialFunc(cfg *config.RedisConfig, setReadTimeout bool) func() (redis.Conn, error) { + keepAlivePeriod := defaultKeepAlivePeriod + if cfg.KeepAlivePeriod != nil { + keepAlivePeriod = cfg.KeepAlivePeriod.Duration + } + dopts := dialOptionsBuilder(cfg, setReadTimeout) + if sntnl != nil { + return countDialer(sentinelDialer(dopts, keepAlivePeriod)) + } + return countDialer(defaultDialer(dopts, keepAlivePeriod, cfg.URL.URL)) +} + +// Configure redis-connection +func Configure(cfg *config.RedisConfig, dialFunc func(*config.RedisConfig, bool) func() (redis.Conn, error)) { + if cfg == nil { + return + } + maxIdle := defaultMaxIdle + if cfg.MaxIdle != nil { + maxIdle = *cfg.MaxIdle + } + maxActive := defaultMaxActive + if cfg.MaxActive != nil { + maxActive = *cfg.MaxActive + } + sntnl = sentinelConn(cfg.SentinelMaster, cfg.Sentinel) + workerDialFunc = dialFunc(cfg, false) + poolDialFunc = dialFunc(cfg, true) + pool = &redis.Pool{ + MaxIdle: maxIdle, // Keep at most X hot connections + MaxActive: maxActive, // Keep at most X live connections, 0 means unlimited + IdleTimeout: defaultIdleTimeout, // X time until an unused connection is closed + Dial: poolDialFunc, + Wait: true, + } + if sntnl != nil { + pool.TestOnBorrow = func(c redis.Conn, t time.Time) error { + if !sentinel.TestRole(c, "master") { + return errors.New("role check failed") + } + return nil + } + } +} + +// Get a connection for the Redis-pool +func Get() redis.Conn { + if pool != nil { + return pool.Get() + } + return nil +} + +// GetString fetches the value of a key in Redis as a string +func GetString(key string) (string, error) { + conn := Get() + if conn == nil { + return "", fmt.Errorf("redis: could not get connection from pool") + } + defer conn.Close() + + return redis.String(conn.Do("GET", key)) +} diff --git a/workhorse/internal/redis/redis_test.go b/workhorse/internal/redis/redis_test.go new file mode 100644 index 00000000000..f4b4120517d --- /dev/null +++ b/workhorse/internal/redis/redis_test.go @@ -0,0 +1,234 @@ +package redis + +import ( + "net" + "testing" + "time" + + "github.com/gomodule/redigo/redis" + "github.com/rafaeljusto/redigomock" + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +func mockRedisServer(t *testing.T, connectReceived *bool) string { + ln, err := net.Listen("tcp", "127.0.0.1:0") + + require.Nil(t, err) + + go func() { + defer ln.Close() + conn, err := ln.Accept() + require.Nil(t, err) + *connectReceived = true + conn.Write([]byte("OK\n")) + }() + + return ln.Addr().String() +} + +// Setup a MockPool for Redis +// +// Returns a teardown-function and the mock-connection +func setupMockPool() (*redigomock.Conn, func()) { + conn := redigomock.NewConn() + cfg := &config.RedisConfig{URL: config.TomlURL{}} + Configure(cfg, func(_ *config.RedisConfig, _ bool) func() (redis.Conn, error) { + return func() (redis.Conn, error) { + return conn, nil + } + }) + return conn, func() { + pool = nil + } +} + +func TestDefaultDialFunc(t *testing.T) { + testCases := []struct { + scheme string + }{ + { + scheme: "tcp", + }, + { + scheme: "redis", + }, + } + + for _, tc := range testCases { + t.Run(tc.scheme, func(t *testing.T) { + connectReceived := false + a := mockRedisServer(t, &connectReceived) + + parsedURL := helper.URLMustParse(tc.scheme + "://" + a) + cfg := &config.RedisConfig{URL: config.TomlURL{URL: *parsedURL}} + + dialer := DefaultDialFunc(cfg, true) + conn, err := dialer() + + require.Nil(t, err) + conn.Receive() + + require.True(t, connectReceived) + }) + } +} + +func TestConfigureNoConfig(t *testing.T) { + pool = nil + Configure(nil, nil) + require.Nil(t, pool, "Pool should be nil") +} + +func TestConfigureMinimalConfig(t *testing.T) { + cfg := &config.RedisConfig{URL: config.TomlURL{}, Password: ""} + Configure(cfg, DefaultDialFunc) + + require.NotNil(t, pool, "Pool should not be nil") + require.Equal(t, 1, pool.MaxIdle) + require.Equal(t, 1, pool.MaxActive) + require.Equal(t, 3*time.Minute, pool.IdleTimeout) + + pool = nil +} + +func TestConfigureFullConfig(t *testing.T) { + i, a := 4, 10 + r := config.TomlDuration{Duration: 3} + cfg := &config.RedisConfig{ + URL: config.TomlURL{}, + Password: "", + MaxIdle: &i, + MaxActive: &a, + ReadTimeout: &r, + } + Configure(cfg, DefaultDialFunc) + + require.NotNil(t, pool, "Pool should not be nil") + require.Equal(t, i, pool.MaxIdle) + require.Equal(t, a, pool.MaxActive) + require.Equal(t, 3*time.Minute, pool.IdleTimeout) + + pool = nil +} + +func TestGetConnFail(t *testing.T) { + conn := Get() + require.Nil(t, conn, "Expected `conn` to be nil") +} + +func TestGetConnPass(t *testing.T) { + _, teardown := setupMockPool() + defer teardown() + conn := Get() + require.NotNil(t, conn, "Expected `conn` to be non-nil") +} + +func TestGetStringPass(t *testing.T) { + conn, teardown := setupMockPool() + defer teardown() + conn.Command("GET", "foobar").Expect("baz") + str, err := GetString("foobar") + + require.NoError(t, err, "Expected `err` to be nil") + var value string + require.IsType(t, value, str, "Expected value to be a string") + require.Equal(t, "baz", str, "Expected it to be equal") +} + +func TestGetStringFail(t *testing.T) { + _, err := GetString("foobar") + require.Error(t, err, "Expected error when not connected to redis") +} + +func TestSentinelConnNoSentinel(t *testing.T) { + s := sentinelConn("", []config.TomlURL{}) + + require.Nil(t, s, "Sentinel without urls should return nil") +} + +func TestSentinelConnDialURL(t *testing.T) { + testCases := []struct { + scheme string + }{ + { + scheme: "tcp", + }, + { + scheme: "redis", + }, + } + + for _, tc := range testCases { + t.Run(tc.scheme, func(t *testing.T) { + connectReceived := false + a := mockRedisServer(t, &connectReceived) + + addrs := []string{tc.scheme + "://" + a} + var sentinelUrls []config.TomlURL + + for _, a := range addrs { + parsedURL := helper.URLMustParse(a) + sentinelUrls = append(sentinelUrls, config.TomlURL{URL: *parsedURL}) + } + + s := sentinelConn("foobar", sentinelUrls) + require.Equal(t, len(addrs), len(s.Addrs)) + + for i := range addrs { + require.Equal(t, addrs[i], s.Addrs[i]) + } + + conn, err := s.Dial(s.Addrs[0]) + + require.Nil(t, err) + conn.Receive() + + require.True(t, connectReceived) + }) + } +} + +func TestSentinelConnTwoURLs(t *testing.T) { + addrs := []string{"tcp://10.0.0.1:12345", "tcp://10.0.0.2:12345"} + var sentinelUrls []config.TomlURL + + for _, a := range addrs { + parsedURL := helper.URLMustParse(a) + sentinelUrls = append(sentinelUrls, config.TomlURL{URL: *parsedURL}) + } + + s := sentinelConn("foobar", sentinelUrls) + require.Equal(t, len(addrs), len(s.Addrs)) + + for i := range addrs { + require.Equal(t, addrs[i], s.Addrs[i]) + } +} + +func TestDialOptionsBuildersPassword(t *testing.T) { + dopts := dialOptionsBuilder(&config.RedisConfig{Password: "foo"}, false) + require.Equal(t, 1, len(dopts)) +} + +func TestDialOptionsBuildersSetTimeouts(t *testing.T) { + dopts := dialOptionsBuilder(nil, true) + require.Equal(t, 2, len(dopts)) +} + +func TestDialOptionsBuildersSetTimeoutsConfig(t *testing.T) { + cfg := &config.RedisConfig{ + ReadTimeout: &config.TomlDuration{Duration: time.Second * time.Duration(15)}, + WriteTimeout: &config.TomlDuration{Duration: time.Second * time.Duration(15)}, + } + dopts := dialOptionsBuilder(cfg, true) + require.Equal(t, 2, len(dopts)) +} + +func TestDialOptionsBuildersSelectDB(t *testing.T) { + db := 3 + dopts := dialOptionsBuilder(&config.RedisConfig{DB: &db}, false) + require.Equal(t, 1, len(dopts)) +} diff --git a/workhorse/internal/secret/jwt.go b/workhorse/internal/secret/jwt.go new file mode 100644 index 00000000000..04335e58f76 --- /dev/null +++ b/workhorse/internal/secret/jwt.go @@ -0,0 +1,25 @@ +package secret + +import ( + "fmt" + + "github.com/dgrijalva/jwt-go" +) + +var ( + DefaultClaims = jwt.StandardClaims{Issuer: "gitlab-workhorse"} +) + +func JWTTokenString(claims jwt.Claims) (string, error) { + secretBytes, err := Bytes() + if err != nil { + return "", fmt.Errorf("secret.JWTTokenString: %v", err) + } + + tokenString, err := jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(secretBytes) + if err != nil { + return "", fmt.Errorf("secret.JWTTokenString: sign JWT: %v", err) + } + + return tokenString, nil +} diff --git a/workhorse/internal/secret/roundtripper.go b/workhorse/internal/secret/roundtripper.go new file mode 100644 index 00000000000..50bf7fff5b8 --- /dev/null +++ b/workhorse/internal/secret/roundtripper.go @@ -0,0 +1,35 @@ +package secret + +import ( + "net/http" +) + +const ( + // This header carries the JWT token for gitlab-rails + RequestHeader = "Gitlab-Workhorse-Api-Request" +) + +type roundTripper struct { + next http.RoundTripper + version string +} + +// NewRoundTripper creates a RoundTripper that adds the JWT token header to a +// request. This is used to verify that a request came from workhorse +func NewRoundTripper(next http.RoundTripper, version string) http.RoundTripper { + return &roundTripper{next: next, version: version} +} + +func (r *roundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + tokenString, err := JWTTokenString(DefaultClaims) + if err != nil { + return nil, err + } + + // Set a custom header for the request. This can be used in some + // configurations (Passenger) to solve auth request routing problems. + req.Header.Set("Gitlab-Workhorse", r.version) + req.Header.Set(RequestHeader, tokenString) + + return r.next.RoundTrip(req) +} diff --git a/workhorse/internal/secret/secret.go b/workhorse/internal/secret/secret.go new file mode 100644 index 00000000000..e8c7c25393c --- /dev/null +++ b/workhorse/internal/secret/secret.go @@ -0,0 +1,77 @@ +package secret + +import ( + "encoding/base64" + "fmt" + "io/ioutil" + "sync" +) + +const numSecretBytes = 32 + +type sec struct { + path string + bytes []byte + sync.RWMutex +} + +var ( + theSecret = &sec{} +) + +func SetPath(path string) { + theSecret.Lock() + defer theSecret.Unlock() + theSecret.path = path + theSecret.bytes = nil +} + +// Lazy access to the HMAC secret key. We must be lazy because if the key +// is not already there, it will be generated by gitlab-rails, and +// gitlab-rails is slow. +func Bytes() ([]byte, error) { + if bytes := getBytes(); bytes != nil { + return copyBytes(bytes), nil + } + + return setBytes() +} + +func getBytes() []byte { + theSecret.RLock() + defer theSecret.RUnlock() + return theSecret.bytes +} + +func copyBytes(bytes []byte) []byte { + out := make([]byte, len(bytes)) + copy(out, bytes) + return out +} + +func setBytes() ([]byte, error) { + theSecret.Lock() + defer theSecret.Unlock() + + if theSecret.bytes != nil { + return theSecret.bytes, nil + } + + base64Bytes, err := ioutil.ReadFile(theSecret.path) + if err != nil { + return nil, fmt.Errorf("secret.setBytes: read %q: %v", theSecret.path, err) + } + + secretBytes := make([]byte, base64.StdEncoding.DecodedLen(len(base64Bytes))) + n, err := base64.StdEncoding.Decode(secretBytes, base64Bytes) + if err != nil { + return nil, fmt.Errorf("secret.setBytes: decode secret: %v", err) + } + + if n != numSecretBytes { + return nil, fmt.Errorf("secret.setBytes: expected %d secretBytes in %s, found %d", numSecretBytes, theSecret.path, n) + } + + theSecret.bytes = secretBytes + return copyBytes(theSecret.bytes), nil +} diff --git a/workhorse/internal/senddata/contentprocessor/contentprocessor.go b/workhorse/internal/senddata/contentprocessor/contentprocessor.go new file mode 100644 index 00000000000..a5cc0fee013 --- /dev/null +++ b/workhorse/internal/senddata/contentprocessor/contentprocessor.go @@ -0,0 +1,126 @@ +package contentprocessor + +import ( + "bytes" + "io" + "net/http" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/headers" +) + +type contentDisposition struct { + rw http.ResponseWriter + buf *bytes.Buffer + wroteHeader bool + flushed bool + active bool + removedResponseHeaders bool + status int + sentStatus bool +} + +// SetContentHeaders buffers the response if Gitlab-Workhorse-Detect-Content-Type +// header is found and set the proper content headers based on the current +// value of content type and disposition +func SetContentHeaders(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + cd := &contentDisposition{ + rw: w, + buf: &bytes.Buffer{}, + status: http.StatusOK, + } + + defer cd.flush() + + h.ServeHTTP(cd, r) + }) +} + +func (cd *contentDisposition) Header() http.Header { + return cd.rw.Header() +} + +func (cd *contentDisposition) Write(data []byte) (int, error) { + // Normal write if we don't need to buffer + if cd.isUnbuffered() { + cd.WriteHeader(cd.status) + return cd.rw.Write(data) + } + + // Write the new data into the buffer + n, _ := cd.buf.Write(data) + + // If we have enough data to calculate the content headers then flush the Buffer + var err error + if cd.buf.Len() >= headers.MaxDetectSize { + err = cd.flushBuffer() + } + + return n, err +} + +func (cd *contentDisposition) flushBuffer() error { + if cd.isUnbuffered() { + return nil + } + + cd.flushed = true + + // If the buffer has any content then we calculate the content headers and + // write in the response + if cd.buf.Len() > 0 { + cd.writeContentHeaders() + cd.WriteHeader(cd.status) + _, err := io.Copy(cd.rw, cd.buf) + return err + } + + // If no content is present in the buffer we still need to send the headers + cd.WriteHeader(cd.status) + return nil +} + +func (cd *contentDisposition) writeContentHeaders() { + if cd.wroteHeader { + return + } + + cd.wroteHeader = true + contentType, contentDisposition := headers.SafeContentHeaders(cd.buf.Bytes(), cd.Header().Get(headers.ContentDispositionHeader)) + cd.Header().Set(headers.ContentTypeHeader, contentType) + cd.Header().Set(headers.ContentDispositionHeader, contentDisposition) +} + +func (cd *contentDisposition) WriteHeader(status int) { + if cd.sentStatus { + return + } + + cd.status = status + + if cd.isUnbuffered() { + cd.rw.WriteHeader(cd.status) + cd.sentStatus = true + } +} + +// If we find any response header, then we must calculate the content headers +// If we don't find any, the data is not buffered and it works as +// a usual ResponseWriter +func (cd *contentDisposition) isUnbuffered() bool { + if !cd.removedResponseHeaders { + if headers.IsDetectContentTypeHeaderPresent(cd.rw) { + cd.active = true + } + + cd.removedResponseHeaders = true + // We ensure to clear any response header from the response + headers.RemoveResponseHeaders(cd.rw) + } + + return cd.flushed || !cd.active +} + +func (cd *contentDisposition) flush() { + cd.flushBuffer() +} diff --git a/workhorse/internal/senddata/contentprocessor/contentprocessor_test.go b/workhorse/internal/senddata/contentprocessor/contentprocessor_test.go new file mode 100644 index 00000000000..5e3a74f04f9 --- /dev/null +++ b/workhorse/internal/senddata/contentprocessor/contentprocessor_test.go @@ -0,0 +1,293 @@ +package contentprocessor + +import ( + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "testing" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/headers" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" + + "github.com/stretchr/testify/require" +) + +func TestFailSetContentTypeAndDisposition(t *testing.T) { + testCaseBody := "Hello world!" + + h := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + _, err := io.WriteString(w, testCaseBody) + require.NoError(t, err) + }) + + resp := makeRequest(t, h, testCaseBody, "") + + require.Equal(t, "", resp.Header.Get(headers.ContentDispositionHeader)) + require.Equal(t, "", resp.Header.Get(headers.ContentTypeHeader)) +} + +func TestSuccessSetContentTypeAndDispositionFeatureEnabled(t *testing.T) { + testCaseBody := "Hello world!" + + resp := makeRequest(t, nil, testCaseBody, "") + + require.Equal(t, "inline", resp.Header.Get(headers.ContentDispositionHeader)) + require.Equal(t, "text/plain; charset=utf-8", resp.Header.Get(headers.ContentTypeHeader)) +} + +func TestSetProperContentTypeAndDisposition(t *testing.T) { + testCases := []struct { + desc string + contentType string + contentDisposition string + body string + }{ + { + desc: "text type", + contentType: "text/plain; charset=utf-8", + contentDisposition: "inline", + body: "Hello world!", + }, + { + desc: "HTML type", + contentType: "text/plain; charset=utf-8", + contentDisposition: "inline", + body: "Hello world!", + }, + { + desc: "Javascript type", + contentType: "text/plain; charset=utf-8", + contentDisposition: "inline", + body: "", + }, + { + desc: "Image type", + contentType: "image/png", + contentDisposition: "inline", + body: testhelper.LoadFile(t, "testdata/image.png"), + }, + { + desc: "SVG type", + contentType: "image/svg+xml", + contentDisposition: "attachment", + body: testhelper.LoadFile(t, "testdata/image.svg"), + }, + { + desc: "Partial SVG type", + contentType: "image/svg+xml", + contentDisposition: "attachment", + body: "SVG logo combined with the W3C logo, set horizontallyThe logo combines three entities displayed horizontall", + }, + { + desc: "Application type", + contentType: "application/pdf", + contentDisposition: "attachment", + body: testhelper.LoadFile(t, "testdata/file.pdf"), + }, + { + desc: "Application type pdf with inline disposition", + contentType: "application/pdf", + contentDisposition: "inline", + body: testhelper.LoadFile(t, "testdata/file.pdf"), + }, + { + desc: "Application executable type", + contentType: "application/octet-stream", + contentDisposition: "attachment", + body: testhelper.LoadFile(t, "testdata/file.swf"), + }, + { + desc: "Video type", + contentType: "video/mp4", + contentDisposition: "inline", + body: testhelper.LoadFile(t, "testdata/video.mp4"), + }, + { + desc: "Audio type", + contentType: "audio/mpeg", + contentDisposition: "attachment", + body: testhelper.LoadFile(t, "testdata/audio.mp3"), + }, + { + desc: "JSON type", + contentType: "text/plain; charset=utf-8", + contentDisposition: "inline", + body: "{ \"glossary\": { \"title\": \"example glossary\", \"GlossDiv\": { \"title\": \"S\" } } }", + }, + { + desc: "Forged file with png extension but SWF content", + contentType: "application/octet-stream", + contentDisposition: "attachment", + body: testhelper.LoadFile(t, "testdata/forgedfile.png"), + }, + { + desc: "BMPR file", + contentType: "application/octet-stream", + contentDisposition: "attachment", + body: testhelper.LoadFile(t, "testdata/file.bmpr"), + }, + { + desc: "STL file", + contentType: "application/octet-stream", + contentDisposition: "attachment", + body: testhelper.LoadFile(t, "testdata/file.stl"), + }, + { + desc: "RDoc file", + contentType: "text/plain; charset=utf-8", + contentDisposition: "inline", + body: testhelper.LoadFile(t, "testdata/file.rdoc"), + }, + { + desc: "IPYNB file", + contentType: "text/plain; charset=utf-8", + contentDisposition: "inline", + body: testhelper.LoadFile(t, "testdata/file.ipynb"), + }, + { + desc: "Sketch file", + contentType: "application/zip", + contentDisposition: "attachment", + body: testhelper.LoadFile(t, "testdata/file.sketch"), + }, + { + desc: "PDF file with non-ASCII characters in filename", + contentType: "application/pdf", + contentDisposition: `attachment; filename="file-ä.pdf"; filename*=UTF-8''file-%c3.pdf`, + body: testhelper.LoadFile(t, "testdata/file-ä.pdf"), + }, + } + + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + resp := makeRequest(t, nil, tc.body, tc.contentDisposition) + + require.Equal(t, tc.contentType, resp.Header.Get(headers.ContentTypeHeader)) + require.Equal(t, tc.contentDisposition, resp.Header.Get(headers.ContentDispositionHeader)) + }) + } +} + +func TestFailOverrideContentType(t *testing.T) { + testCase := struct { + contentType string + body string + }{ + contentType: "text/plain; charset=utf-8", + body: "Hello world!", + } + + h := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + // We are pretending to be upstream or an inner layer of the ResponseWriter chain + w.Header().Set(headers.GitlabWorkhorseDetectContentTypeHeader, "true") + w.Header().Set(headers.ContentTypeHeader, "text/html; charset=utf-8") + _, err := io.WriteString(w, testCase.body) + require.NoError(t, err) + }) + + resp := makeRequest(t, h, testCase.body, "") + + require.Equal(t, testCase.contentType, resp.Header.Get(headers.ContentTypeHeader)) +} + +func TestSuccessOverrideContentDispositionFromInlineToAttachment(t *testing.T) { + testCaseBody := "Hello world!" + + h := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + // We are pretending to be upstream or an inner layer of the ResponseWriter chain + w.Header().Set(headers.ContentDispositionHeader, "attachment") + w.Header().Set(headers.GitlabWorkhorseDetectContentTypeHeader, "true") + _, err := io.WriteString(w, testCaseBody) + require.NoError(t, err) + }) + + resp := makeRequest(t, h, testCaseBody, "") + + require.Equal(t, "attachment", resp.Header.Get(headers.ContentDispositionHeader)) +} + +func TestInlineContentDispositionForPdfFiles(t *testing.T) { + testCaseBody := testhelper.LoadFile(t, "testdata/file.pdf") + + h := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + // We are pretending to be upstream or an inner layer of the ResponseWriter chain + w.Header().Set(headers.ContentDispositionHeader, "inline") + w.Header().Set(headers.GitlabWorkhorseDetectContentTypeHeader, "true") + _, err := io.WriteString(w, testCaseBody) + require.NoError(t, err) + }) + + resp := makeRequest(t, h, testCaseBody, "") + + require.Equal(t, "inline", resp.Header.Get(headers.ContentDispositionHeader)) +} + +func TestFailOverrideContentDispositionFromAttachmentToInline(t *testing.T) { + testCaseBody := testhelper.LoadFile(t, "testdata/image.svg") + + h := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + // We are pretending to be upstream or an inner layer of the ResponseWriter chain + w.Header().Set(headers.ContentDispositionHeader, "inline") + w.Header().Set(headers.GitlabWorkhorseDetectContentTypeHeader, "true") + _, err := io.WriteString(w, testCaseBody) + require.NoError(t, err) + }) + + resp := makeRequest(t, h, testCaseBody, "") + + require.Equal(t, "attachment", resp.Header.Get(headers.ContentDispositionHeader)) +} + +func TestHeadersDelete(t *testing.T) { + for _, code := range []int{200, 400} { + recorder := httptest.NewRecorder() + rw := &contentDisposition{rw: recorder} + for _, name := range headers.ResponseHeaders { + rw.Header().Set(name, "foobar") + } + + rw.WriteHeader(code) + + for _, name := range headers.ResponseHeaders { + if header := recorder.Header().Get(name); header != "" { + t.Fatalf("HTTP %d response: expected header to be empty, found %q", code, name) + } + } + } +} + +func TestWriteHeadersCalledOnce(t *testing.T) { + recorder := httptest.NewRecorder() + rw := &contentDisposition{rw: recorder} + rw.WriteHeader(400) + require.Equal(t, 400, rw.status) + require.Equal(t, true, rw.sentStatus) + + rw.WriteHeader(200) + require.Equal(t, 400, rw.status) +} + +func makeRequest(t *testing.T, handler http.HandlerFunc, body string, disposition string) *http.Response { + if handler == nil { + handler = http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + // We are pretending to be upstream + w.Header().Set(headers.GitlabWorkhorseDetectContentTypeHeader, "true") + w.Header().Set(headers.ContentDispositionHeader, disposition) + _, err := io.WriteString(w, body) + require.NoError(t, err) + }) + } + req, _ := http.NewRequest("GET", "/", nil) + + rw := httptest.NewRecorder() + SetContentHeaders(handler).ServeHTTP(rw, req) + + resp := rw.Result() + respBody, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + require.Equal(t, body, string(respBody)) + + return resp +} diff --git a/workhorse/internal/senddata/injecter.go b/workhorse/internal/senddata/injecter.go new file mode 100644 index 00000000000..d5739d2a053 --- /dev/null +++ b/workhorse/internal/senddata/injecter.go @@ -0,0 +1,35 @@ +package senddata + +import ( + "encoding/base64" + "encoding/json" + "net/http" + "strings" +) + +type Injecter interface { + Match(string) bool + Inject(http.ResponseWriter, *http.Request, string) + Name() string +} + +type Prefix string + +func (p Prefix) Match(s string) bool { + return strings.HasPrefix(s, string(p)) +} + +func (p Prefix) Unpack(result interface{}, sendData string) error { + jsonBytes, err := base64.URLEncoding.DecodeString(strings.TrimPrefix(sendData, string(p))) + if err != nil { + return err + } + if err := json.Unmarshal([]byte(jsonBytes), result); err != nil { + return err + } + return nil +} + +func (p Prefix) Name() string { + return strings.TrimSuffix(string(p), ":") +} diff --git a/workhorse/internal/senddata/senddata.go b/workhorse/internal/senddata/senddata.go new file mode 100644 index 00000000000..d654ae03fa4 --- /dev/null +++ b/workhorse/internal/senddata/senddata.go @@ -0,0 +1,109 @@ +package senddata + +import ( + "net/http" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/headers" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/senddata/contentprocessor" + + "github.com/prometheus/client_golang/prometheus" +) + +var ( + sendDataResponses = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_senddata_responses", + Help: "How many HTTP responses have been hijacked by a workhorse senddata injecter", + }, + []string{"injecter"}, + ) + sendDataResponseBytes = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_senddata_response_bytes", + Help: "How many bytes have been written by workhorse senddata response injecters", + }, + []string{"injecter"}, + ) +) + +func init() { + prometheus.MustRegister(sendDataResponses) + prometheus.MustRegister(sendDataResponseBytes) +} + +type sendDataResponseWriter struct { + rw http.ResponseWriter + status int + hijacked bool + req *http.Request + injecters []Injecter +} + +func SendData(h http.Handler, injecters ...Injecter) http.Handler { + return contentprocessor.SetContentHeaders(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + s := sendDataResponseWriter{ + rw: w, + req: r, + injecters: injecters, + } + defer s.flush() + h.ServeHTTP(&s, r) + })) +} + +func (s *sendDataResponseWriter) Header() http.Header { + return s.rw.Header() +} + +func (s *sendDataResponseWriter) Write(data []byte) (int, error) { + if s.status == 0 { + s.WriteHeader(http.StatusOK) + } + if s.hijacked { + return len(data), nil + } + return s.rw.Write(data) +} + +func (s *sendDataResponseWriter) WriteHeader(status int) { + if s.status != 0 { + return + } + s.status = status + + if s.status == http.StatusOK && s.tryInject() { + return + } + + s.rw.WriteHeader(s.status) +} + +func (s *sendDataResponseWriter) tryInject() bool { + if s.hijacked { + return false + } + + header := s.Header().Get(headers.GitlabWorkhorseSendDataHeader) + if header == "" { + return false + } + + for _, injecter := range s.injecters { + if injecter.Match(header) { + s.hijacked = true + helper.DisableResponseBuffering(s.rw) + crw := helper.NewCountingResponseWriter(s.rw) + injecter.Inject(crw, s.req, header) + sendDataResponses.WithLabelValues(injecter.Name()).Inc() + sendDataResponseBytes.WithLabelValues(injecter.Name()).Add(float64(crw.Count())) + return true + } + } + + return false +} + +func (s *sendDataResponseWriter) flush() { + s.WriteHeader(http.StatusOK) +} diff --git a/workhorse/internal/senddata/writer_test.go b/workhorse/internal/senddata/writer_test.go new file mode 100644 index 00000000000..1262acd5472 --- /dev/null +++ b/workhorse/internal/senddata/writer_test.go @@ -0,0 +1,71 @@ +package senddata + +import ( + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/headers" +) + +func TestWriter(t *testing.T) { + upstreamResponse := "hello world" + + testCases := []struct { + desc string + headerValue string + out string + }{ + { + desc: "inject", + headerValue: testInjecterName + ":" + testInjecterName, + out: testInjecterData, + }, + { + desc: "pass", + headerValue: "", + out: upstreamResponse, + }, + } + + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + recorder := httptest.NewRecorder() + rw := &sendDataResponseWriter{rw: recorder, injecters: []Injecter{&testInjecter{}}} + + rw.Header().Set(headers.GitlabWorkhorseSendDataHeader, tc.headerValue) + + n, err := rw.Write([]byte(upstreamResponse)) + require.NoError(t, err) + require.Equal(t, len(upstreamResponse), n, "bytes written") + + recorder.Flush() + + body := recorder.Result().Body + data, err := ioutil.ReadAll(body) + require.NoError(t, err) + require.NoError(t, body.Close()) + + require.Equal(t, tc.out, string(data)) + }) + } +} + +const ( + testInjecterName = "test-injecter" + testInjecterData = "hello this is injected data" +) + +type testInjecter struct{} + +func (ti *testInjecter) Inject(w http.ResponseWriter, r *http.Request, sendData string) { + io.WriteString(w, testInjecterData) +} + +func (ti *testInjecter) Match(s string) bool { return strings.HasPrefix(s, testInjecterName+":") } +func (ti *testInjecter) Name() string { return testInjecterName } diff --git a/workhorse/internal/sendfile/sendfile.go b/workhorse/internal/sendfile/sendfile.go new file mode 100644 index 00000000000..7e5e863d5f1 --- /dev/null +++ b/workhorse/internal/sendfile/sendfile.go @@ -0,0 +1,166 @@ +/* +The xSendFile middleware transparently sends static files in HTTP responses +via the X-Sendfile mechanism. All that is needed in the Rails code is the +'send_file' method. +*/ + +package sendfile + +import ( + "fmt" + "io" + "io/ioutil" + "net/http" + "regexp" + + "github.com/prometheus/client_golang/prometheus" + + "gitlab.com/gitlab-org/labkit/log" + "gitlab.com/gitlab-org/labkit/mask" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/headers" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +var ( + sendFileRequests = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_sendfile_requests", + Help: "How many X-Sendfile requests have been processed by gitlab-workhorse, partitioned by sendfile type.", + }, + []string{"type"}, + ) + + sendFileBytes = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_sendfile_bytes", + Help: "How many X-Sendfile bytes have been sent by gitlab-workhorse, partitioned by sendfile type.", + }, + []string{"type"}, + ) + + artifactsSendFile = regexp.MustCompile("builds/[0-9]+/artifacts") +) + +type sendFileResponseWriter struct { + rw http.ResponseWriter + status int + hijacked bool + req *http.Request +} + +func init() { + prometheus.MustRegister(sendFileRequests) + prometheus.MustRegister(sendFileBytes) +} + +func SendFile(h http.Handler) http.Handler { + return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { + s := &sendFileResponseWriter{ + rw: rw, + req: req, + } + // Advertise to upstream (Rails) that we support X-Sendfile + req.Header.Set(headers.XSendFileTypeHeader, headers.XSendFileHeader) + defer s.flush() + h.ServeHTTP(s, req) + }) +} + +func (s *sendFileResponseWriter) Header() http.Header { + return s.rw.Header() +} + +func (s *sendFileResponseWriter) Write(data []byte) (int, error) { + if s.status == 0 { + s.WriteHeader(http.StatusOK) + } + if s.hijacked { + return len(data), nil + } + return s.rw.Write(data) +} + +func (s *sendFileResponseWriter) WriteHeader(status int) { + if s.status != 0 { + return + } + + s.status = status + if s.status != http.StatusOK { + s.rw.WriteHeader(s.status) + return + } + + file := s.Header().Get(headers.XSendFileHeader) + if file != "" && !s.hijacked { + // Mark this connection as hijacked + s.hijacked = true + + // Serve the file + helper.DisableResponseBuffering(s.rw) + sendFileFromDisk(s.rw, s.req, file) + return + } + + s.rw.WriteHeader(s.status) +} + +func sendFileFromDisk(w http.ResponseWriter, r *http.Request, file string) { + log.WithContextFields(r.Context(), log.Fields{ + "file": file, + "method": r.Method, + "uri": mask.URL(r.RequestURI), + }).Print("Send file") + + contentTypeHeaderPresent := false + + if headers.IsDetectContentTypeHeaderPresent(w) { + // Removing the GitlabWorkhorseDetectContentTypeHeader header to + // avoid handling the response by the senddata handler + w.Header().Del(headers.GitlabWorkhorseDetectContentTypeHeader) + contentTypeHeaderPresent = true + } + + content, fi, err := helper.OpenFile(file) + if err != nil { + http.NotFound(w, r) + return + } + defer content.Close() + + countSendFileMetrics(fi.Size(), r) + + if contentTypeHeaderPresent { + data, err := ioutil.ReadAll(io.LimitReader(content, headers.MaxDetectSize)) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("content type detection: %v", err)) + return + } + + content.Seek(0, io.SeekStart) + + contentType, contentDisposition := headers.SafeContentHeaders(data, w.Header().Get(headers.ContentDispositionHeader)) + w.Header().Set(headers.ContentTypeHeader, contentType) + w.Header().Set(headers.ContentDispositionHeader, contentDisposition) + } + + http.ServeContent(w, r, "", fi.ModTime(), content) +} + +func countSendFileMetrics(size int64, r *http.Request) { + var requestType string + switch { + case artifactsSendFile.MatchString(r.RequestURI): + requestType = "artifacts" + default: + requestType = "other" + } + + sendFileRequests.WithLabelValues(requestType).Inc() + sendFileBytes.WithLabelValues(requestType).Add(float64(size)) +} + +func (s *sendFileResponseWriter) flush() { + s.WriteHeader(http.StatusOK) +} diff --git a/workhorse/internal/sendfile/sendfile_test.go b/workhorse/internal/sendfile/sendfile_test.go new file mode 100644 index 00000000000..d424814b5e5 --- /dev/null +++ b/workhorse/internal/sendfile/sendfile_test.go @@ -0,0 +1,171 @@ +package sendfile + +import ( + "io/ioutil" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/headers" +) + +func TestResponseWriter(t *testing.T) { + upstreamResponse := "hello world" + + fixturePath := "testdata/sent-file.txt" + fixtureContent, err := ioutil.ReadFile(fixturePath) + require.NoError(t, err) + + testCases := []struct { + desc string + sendfileHeader string + out string + }{ + { + desc: "send a file", + sendfileHeader: fixturePath, + out: string(fixtureContent), + }, + { + desc: "pass through unaltered", + sendfileHeader: "", + out: upstreamResponse, + }, + } + + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + r, err := http.NewRequest("GET", "/foo", nil) + require.NoError(t, err) + + rw := httptest.NewRecorder() + sf := &sendFileResponseWriter{rw: rw, req: r} + sf.Header().Set(headers.XSendFileHeader, tc.sendfileHeader) + + upstreamBody := []byte(upstreamResponse) + n, err := sf.Write(upstreamBody) + require.NoError(t, err) + require.Equal(t, len(upstreamBody), n, "bytes written") + + rw.Flush() + + body := rw.Result().Body + data, err := ioutil.ReadAll(body) + require.NoError(t, err) + require.NoError(t, body.Close()) + + require.Equal(t, tc.out, string(data)) + }) + } +} + +func TestAllowExistentContentHeaders(t *testing.T) { + fixturePath := "../../testdata/forgedfile.png" + + httpHeaders := map[string]string{ + headers.ContentTypeHeader: "image/png", + headers.ContentDispositionHeader: "inline", + } + + resp := makeRequest(t, fixturePath, httpHeaders) + require.Equal(t, "image/png", resp.Header.Get(headers.ContentTypeHeader)) + require.Equal(t, "inline", resp.Header.Get(headers.ContentDispositionHeader)) +} + +func TestSuccessOverrideContentHeadersFeatureEnabled(t *testing.T) { + fixturePath := "../../testdata/forgedfile.png" + + httpHeaders := make(map[string]string) + httpHeaders[headers.ContentTypeHeader] = "image/png" + httpHeaders[headers.ContentDispositionHeader] = "inline" + httpHeaders["Range"] = "bytes=1-2" + + resp := makeRequest(t, fixturePath, httpHeaders) + require.Equal(t, "image/png", resp.Header.Get(headers.ContentTypeHeader)) + require.Equal(t, "inline", resp.Header.Get(headers.ContentDispositionHeader)) +} + +func TestSuccessOverrideContentHeadersRangeRequestFeatureEnabled(t *testing.T) { + fixturePath := "../../testdata/forgedfile.png" + + fixtureContent, err := ioutil.ReadFile(fixturePath) + require.NoError(t, err) + + r, err := http.NewRequest("GET", "/foo", nil) + r.Header.Set("Range", "bytes=1-2") + require.NoError(t, err) + + rw := httptest.NewRecorder() + sf := &sendFileResponseWriter{rw: rw, req: r} + + sf.Header().Set(headers.XSendFileHeader, fixturePath) + sf.Header().Set(headers.ContentTypeHeader, "image/png") + sf.Header().Set(headers.ContentDispositionHeader, "inline") + sf.Header().Set(headers.GitlabWorkhorseDetectContentTypeHeader, "true") + + upstreamBody := []byte(fixtureContent) + _, err = sf.Write(upstreamBody) + require.NoError(t, err) + + rw.Flush() + + resp := rw.Result() + body := resp.Body + data, err := ioutil.ReadAll(body) + require.NoError(t, err) + require.NoError(t, body.Close()) + + require.Len(t, data, 2) + + require.Equal(t, "application/octet-stream", resp.Header.Get(headers.ContentTypeHeader)) + require.Equal(t, "attachment", resp.Header.Get(headers.ContentDispositionHeader)) +} + +func TestSuccessInlineWhitelistedTypesFeatureEnabled(t *testing.T) { + fixturePath := "../../testdata/image.png" + + httpHeaders := map[string]string{ + headers.ContentDispositionHeader: "inline", + headers.GitlabWorkhorseDetectContentTypeHeader: "true", + } + + resp := makeRequest(t, fixturePath, httpHeaders) + + require.Equal(t, "image/png", resp.Header.Get(headers.ContentTypeHeader)) + require.Equal(t, "inline", resp.Header.Get(headers.ContentDispositionHeader)) +} + +func makeRequest(t *testing.T, fixturePath string, httpHeaders map[string]string) *http.Response { + fixtureContent, err := ioutil.ReadFile(fixturePath) + require.NoError(t, err) + + r, err := http.NewRequest("GET", "/foo", nil) + require.NoError(t, err) + + rw := httptest.NewRecorder() + sf := &sendFileResponseWriter{rw: rw, req: r} + + sf.Header().Set(headers.XSendFileHeader, fixturePath) + for name, value := range httpHeaders { + sf.Header().Set(name, value) + } + + upstreamBody := []byte("hello") + n, err := sf.Write(upstreamBody) + require.NoError(t, err) + require.Equal(t, len(upstreamBody), n, "bytes written") + + rw.Flush() + + resp := rw.Result() + body := resp.Body + data, err := ioutil.ReadAll(body) + require.NoError(t, err) + require.NoError(t, body.Close()) + + require.Equal(t, fixtureContent, data) + + return resp +} diff --git a/workhorse/internal/sendfile/testdata/sent-file.txt b/workhorse/internal/sendfile/testdata/sent-file.txt new file mode 100644 index 00000000000..40e33f8a628 --- /dev/null +++ b/workhorse/internal/sendfile/testdata/sent-file.txt @@ -0,0 +1 @@ +This file is sent with X-SendFile diff --git a/workhorse/internal/sendurl/sendurl.go b/workhorse/internal/sendurl/sendurl.go new file mode 100644 index 00000000000..316586188f0 --- /dev/null +++ b/workhorse/internal/sendurl/sendurl.go @@ -0,0 +1,173 @@ +package sendurl + +import ( + "fmt" + "io" + "net" + "net/http" + "time" + + "github.com/prometheus/client_golang/prometheus" + + "gitlab.com/gitlab-org/labkit/correlation" + "gitlab.com/gitlab-org/labkit/log" + "gitlab.com/gitlab-org/labkit/mask" + "gitlab.com/gitlab-org/labkit/tracing" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/senddata" +) + +type entry struct{ senddata.Prefix } + +type entryParams struct { + URL string + AllowRedirects bool +} + +var SendURL = &entry{"send-url:"} + +var rangeHeaderKeys = []string{ + "If-Match", + "If-Unmodified-Since", + "If-None-Match", + "If-Modified-Since", + "If-Range", + "Range", +} + +// Keep cache headers from the original response, not the proxied response. The +// original response comes from the Rails application, which should be the +// source of truth for caching. +var preserveHeaderKeys = map[string]bool{ + "Cache-Control": true, + "Expires": true, + "Date": true, // Support for HTTP 1.0 proxies + "Pragma": true, // Support for HTTP 1.0 proxies +} + +// httpTransport defines a http.Transport with values +// that are more restrictive than for http.DefaultTransport, +// they define shorter TLS Handshake, and more aggressive connection closing +// to prevent the connection hanging and reduce FD usage +var httpTransport = tracing.NewRoundTripper(correlation.NewInstrumentedRoundTripper(&http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 10 * time.Second, + }).DialContext, + MaxIdleConns: 2, + IdleConnTimeout: 30 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 10 * time.Second, + ResponseHeaderTimeout: 30 * time.Second, +})) + +var httpClient = &http.Client{ + Transport: httpTransport, +} + +var ( + sendURLRequests = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_send_url_requests", + Help: "How many send URL requests have been processed", + }, + []string{"status"}, + ) + sendURLOpenRequests = prometheus.NewGauge( + prometheus.GaugeOpts{ + Name: "gitlab_workhorse_send_url_open_requests", + Help: "Describes how many send URL requests are open now", + }, + ) + sendURLBytes = prometheus.NewCounter( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_send_url_bytes", + Help: "How many bytes were passed with send URL", + }, + ) + + sendURLRequestsInvalidData = sendURLRequests.WithLabelValues("invalid-data") + sendURLRequestsRequestFailed = sendURLRequests.WithLabelValues("request-failed") + sendURLRequestsSucceeded = sendURLRequests.WithLabelValues("succeeded") +) + +func init() { + prometheus.MustRegister( + sendURLRequests, + sendURLOpenRequests, + sendURLBytes) +} + +func (e *entry) Inject(w http.ResponseWriter, r *http.Request, sendData string) { + var params entryParams + + sendURLOpenRequests.Inc() + defer sendURLOpenRequests.Dec() + + if err := e.Unpack(¶ms, sendData); err != nil { + helper.Fail500(w, r, fmt.Errorf("SendURL: unpack sendData: %v", err)) + return + } + + log.WithContextFields(r.Context(), log.Fields{ + "url": mask.URL(params.URL), + "path": r.URL.Path, + }).Info("SendURL: sending") + + if params.URL == "" { + sendURLRequestsInvalidData.Inc() + helper.Fail500(w, r, fmt.Errorf("SendURL: URL is empty")) + return + } + + // create new request and copy range headers + newReq, err := http.NewRequest("GET", params.URL, nil) + if err != nil { + sendURLRequestsInvalidData.Inc() + helper.Fail500(w, r, fmt.Errorf("SendURL: NewRequest: %v", err)) + return + } + newReq = newReq.WithContext(r.Context()) + + for _, header := range rangeHeaderKeys { + newReq.Header[header] = r.Header[header] + } + + // execute new request + var resp *http.Response + if params.AllowRedirects { + resp, err = httpClient.Do(newReq) + } else { + resp, err = httpTransport.RoundTrip(newReq) + } + if err != nil { + sendURLRequestsRequestFailed.Inc() + helper.Fail500(w, r, fmt.Errorf("SendURL: Do request: %v", err)) + return + } + + // Prevent Go from adding a Content-Length header automatically + w.Header().Del("Content-Length") + + // copy response headers and body, except the headers from preserveHeaderKeys + for key, value := range resp.Header { + if !preserveHeaderKeys[key] { + w.Header()[key] = value + } + } + w.WriteHeader(resp.StatusCode) + + defer resp.Body.Close() + n, err := io.Copy(w, resp.Body) + sendURLBytes.Add(float64(n)) + + if err != nil { + sendURLRequestsRequestFailed.Inc() + helper.LogError(r, fmt.Errorf("SendURL: Copy response: %v", err)) + return + } + + sendURLRequestsSucceeded.Inc() +} diff --git a/workhorse/internal/sendurl/sendurl_test.go b/workhorse/internal/sendurl/sendurl_test.go new file mode 100644 index 00000000000..41e1dbb8e0f --- /dev/null +++ b/workhorse/internal/sendurl/sendurl_test.go @@ -0,0 +1,197 @@ +package sendurl + +import ( + "encoding/base64" + "fmt" + "io/ioutil" + "net/http" + "net/http/httptest" + "os" + "strconv" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" +) + +const testData = `123456789012345678901234567890` +const testDataEtag = `W/"myetag"` + +func testEntryServer(t *testing.T, requestURL string, httpHeaders http.Header, allowRedirects bool) *httptest.ResponseRecorder { + requestHandler := func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "GET", r.Method) + + url := r.URL.String() + "/file" + jsonParams := fmt.Sprintf(`{"URL":%q,"AllowRedirects":%s}`, + url, strconv.FormatBool(allowRedirects)) + data := base64.URLEncoding.EncodeToString([]byte(jsonParams)) + + // The server returns a Content-Disposition + w.Header().Set("Content-Disposition", "attachment; filename=\"archive.txt\"") + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Expires", "") + w.Header().Set("Date", "Wed, 21 Oct 2015 05:28:00 GMT") + w.Header().Set("Pragma", "no-cache") + + SendURL.Inject(w, r, data) + } + serveFile := func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "GET", r.Method) + + tempFile, err := ioutil.TempFile("", "download_file") + require.NoError(t, err) + require.NoError(t, os.Remove(tempFile.Name())) + defer tempFile.Close() + _, err = tempFile.Write([]byte(testData)) + require.NoError(t, err) + + w.Header().Set("Etag", testDataEtag) + w.Header().Set("Cache-Control", "public") + w.Header().Set("Expires", "Wed, 21 Oct 2015 07:28:00 GMT") + w.Header().Set("Date", "Wed, 21 Oct 2015 06:28:00 GMT") + w.Header().Set("Pragma", "") + + http.ServeContent(w, r, "archive.txt", time.Now(), tempFile) + } + redirectFile := func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "GET", r.Method) + http.Redirect(w, r, r.URL.String()+"/download", http.StatusTemporaryRedirect) + } + + mux := http.NewServeMux() + mux.HandleFunc("/get/request", requestHandler) + mux.HandleFunc("/get/request/file", serveFile) + mux.HandleFunc("/get/redirect", requestHandler) + mux.HandleFunc("/get/redirect/file", redirectFile) + mux.HandleFunc("/get/redirect/file/download", serveFile) + mux.HandleFunc("/get/file-not-existing", requestHandler) + + server := httptest.NewServer(mux) + defer server.Close() + + httpRequest, err := http.NewRequest("GET", server.URL+requestURL, nil) + require.NoError(t, err) + if httpHeaders != nil { + httpRequest.Header = httpHeaders + } + + response := httptest.NewRecorder() + mux.ServeHTTP(response, httpRequest) + return response +} + +func TestDownloadingUsingSendURL(t *testing.T) { + response := testEntryServer(t, "/get/request", nil, false) + require.Equal(t, http.StatusOK, response.Code) + + testhelper.RequireResponseHeader(t, response, + "Content-Type", + "text/plain; charset=utf-8") + testhelper.RequireResponseHeader(t, response, + "Content-Disposition", + "attachment; filename=\"archive.txt\"") + + testhelper.RequireResponseBody(t, response, testData) +} + +func TestDownloadingAChunkOfDataWithSendURL(t *testing.T) { + httpHeaders := http.Header{ + "Range": []string{ + "bytes=1-2", + }, + } + + response := testEntryServer(t, "/get/request", httpHeaders, false) + require.Equal(t, http.StatusPartialContent, response.Code) + + testhelper.RequireResponseHeader(t, response, + "Content-Type", + "text/plain; charset=utf-8") + testhelper.RequireResponseHeader(t, response, + "Content-Disposition", + "attachment; filename=\"archive.txt\"") + testhelper.RequireResponseHeader(t, response, + "Content-Range", + "bytes 1-2/30") + + testhelper.RequireResponseBody(t, response, "23") +} + +func TestAccessingAlreadyDownloadedFileWithSendURL(t *testing.T) { + httpHeaders := http.Header{ + "If-None-Match": []string{testDataEtag}, + } + + response := testEntryServer(t, "/get/request", httpHeaders, false) + require.Equal(t, http.StatusNotModified, response.Code) +} + +func TestAccessingRedirectWithSendURL(t *testing.T) { + response := testEntryServer(t, "/get/redirect", nil, false) + require.Equal(t, http.StatusTemporaryRedirect, response.Code) +} + +func TestAccessingAllowedRedirectWithSendURL(t *testing.T) { + response := testEntryServer(t, "/get/redirect", nil, true) + require.Equal(t, http.StatusOK, response.Code) + + testhelper.RequireResponseHeader(t, response, + "Content-Type", + "text/plain; charset=utf-8") + testhelper.RequireResponseHeader(t, response, + "Content-Disposition", + "attachment; filename=\"archive.txt\"") +} + +func TestAccessingAllowedRedirectWithChunkOfDataWithSendURL(t *testing.T) { + httpHeaders := http.Header{ + "Range": []string{ + "bytes=1-2", + }, + } + + response := testEntryServer(t, "/get/redirect", httpHeaders, true) + require.Equal(t, http.StatusPartialContent, response.Code) + + testhelper.RequireResponseHeader(t, response, + "Content-Type", + "text/plain; charset=utf-8") + testhelper.RequireResponseHeader(t, response, + "Content-Disposition", + "attachment; filename=\"archive.txt\"") + testhelper.RequireResponseHeader(t, response, + "Content-Range", + "bytes 1-2/30") + + testhelper.RequireResponseBody(t, response, "23") +} + +func TestOriginalCacheHeadersPreservedWithSendURL(t *testing.T) { + response := testEntryServer(t, "/get/redirect", nil, true) + require.Equal(t, http.StatusOK, response.Code) + + testhelper.RequireResponseHeader(t, response, + "Cache-Control", + "no-cache") + testhelper.RequireResponseHeader(t, response, + "Expires", + "") + testhelper.RequireResponseHeader(t, response, + "Date", + "Wed, 21 Oct 2015 05:28:00 GMT") + testhelper.RequireResponseHeader(t, response, + "Pragma", + "no-cache") +} + +func TestDownloadingNonExistingFileUsingSendURL(t *testing.T) { + response := testEntryServer(t, "/invalid/path", nil, false) + require.Equal(t, http.StatusNotFound, response.Code) +} + +func TestDownloadingNonExistingRemoteFileWithSendURL(t *testing.T) { + response := testEntryServer(t, "/get/file-not-existing", nil, false) + require.Equal(t, http.StatusNotFound, response.Code) +} diff --git a/workhorse/internal/staticpages/deploy_page.go b/workhorse/internal/staticpages/deploy_page.go new file mode 100644 index 00000000000..d08ed449ae6 --- /dev/null +++ b/workhorse/internal/staticpages/deploy_page.go @@ -0,0 +1,26 @@ +package staticpages + +import ( + "io/ioutil" + "net/http" + "path/filepath" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +func (s *Static) DeployPage(handler http.Handler) http.Handler { + deployPage := filepath.Join(s.DocumentRoot, "index.html") + + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + data, err := ioutil.ReadFile(deployPage) + if err != nil { + handler.ServeHTTP(w, r) + return + } + + helper.SetNoCacheHeaders(w.Header()) + w.Header().Set("Content-Type", "text/html; charset=utf-8") + w.WriteHeader(http.StatusOK) + w.Write(data) + }) +} diff --git a/workhorse/internal/staticpages/deploy_page_test.go b/workhorse/internal/staticpages/deploy_page_test.go new file mode 100644 index 00000000000..4b081e73a97 --- /dev/null +++ b/workhorse/internal/staticpages/deploy_page_test.go @@ -0,0 +1,59 @@ +package staticpages + +import ( + "io/ioutil" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" + + "github.com/stretchr/testify/require" +) + +func TestIfNoDeployPageExist(t *testing.T) { + dir, err := ioutil.TempDir("", "deploy") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + w := httptest.NewRecorder() + + executed := false + st := &Static{dir} + st.DeployPage(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) { + executed = true + })).ServeHTTP(w, nil) + if !executed { + t.Error("The handler should get executed") + } +} + +func TestIfDeployPageExist(t *testing.T) { + dir, err := ioutil.TempDir("", "deploy") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + deployPage := "DEPLOY" + ioutil.WriteFile(filepath.Join(dir, "index.html"), []byte(deployPage), 0600) + + w := httptest.NewRecorder() + + executed := false + st := &Static{dir} + st.DeployPage(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) { + executed = true + })).ServeHTTP(w, nil) + if executed { + t.Error("The handler should not get executed") + } + w.Flush() + + require.Equal(t, 200, w.Code) + testhelper.RequireResponseBody(t, w, deployPage) +} diff --git a/workhorse/internal/staticpages/error_pages.go b/workhorse/internal/staticpages/error_pages.go new file mode 100644 index 00000000000..6ab97f396f8 --- /dev/null +++ b/workhorse/internal/staticpages/error_pages.go @@ -0,0 +1,141 @@ +package staticpages + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "path/filepath" + + "github.com/prometheus/client_golang/prometheus" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +var ( + staticErrorResponses = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "gitlab_workhorse_static_error_responses", + Help: "How many HTTP responses have been changed to a static error page, by HTTP status code.", + }, + []string{"code"}, + ) +) + +type ErrorFormat int + +const ( + ErrorFormatHTML ErrorFormat = iota + ErrorFormatJSON + ErrorFormatText +) + +func init() { + prometheus.MustRegister(staticErrorResponses) +} + +type errorPageResponseWriter struct { + rw http.ResponseWriter + status int + hijacked bool + path string + format ErrorFormat +} + +func (s *errorPageResponseWriter) Header() http.Header { + return s.rw.Header() +} + +func (s *errorPageResponseWriter) Write(data []byte) (int, error) { + if s.status == 0 { + s.WriteHeader(http.StatusOK) + } + if s.hijacked { + return len(data), nil + } + return s.rw.Write(data) +} + +func (s *errorPageResponseWriter) WriteHeader(status int) { + if s.status != 0 { + return + } + + s.status = status + + if s.status < 400 || s.status > 599 || s.rw.Header().Get("X-GitLab-Custom-Error") != "" { + s.rw.WriteHeader(status) + return + } + + var contentType string + var data []byte + switch s.format { + case ErrorFormatText: + contentType, data = s.writeText() + case ErrorFormatJSON: + contentType, data = s.writeJSON() + default: + contentType, data = s.writeHTML() + } + + if contentType == "" { + s.rw.WriteHeader(status) + return + } + + s.hijacked = true + staticErrorResponses.WithLabelValues(fmt.Sprintf("%d", s.status)).Inc() + + helper.SetNoCacheHeaders(s.rw.Header()) + s.rw.Header().Set("Content-Type", contentType) + s.rw.Header().Set("Content-Length", fmt.Sprintf("%d", len(data))) + s.rw.Header().Del("Transfer-Encoding") + s.rw.WriteHeader(s.status) + s.rw.Write(data) +} + +func (s *errorPageResponseWriter) writeHTML() (string, []byte) { + if s.rw.Header().Get("Content-Type") != "application/json" { + errorPageFile := filepath.Join(s.path, fmt.Sprintf("%d.html", s.status)) + + // check if custom error page exists, serve this page instead + if data, err := ioutil.ReadFile(errorPageFile); err == nil { + return "text/html; charset=utf-8", data + } + } + + return "", nil +} + +func (s *errorPageResponseWriter) writeJSON() (string, []byte) { + message, err := json.Marshal(map[string]interface{}{"error": http.StatusText(s.status), "status": s.status}) + if err != nil { + return "", nil + } + + return "application/json; charset=utf-8", append(message, "\n"...) +} + +func (s *errorPageResponseWriter) writeText() (string, []byte) { + return "text/plain; charset=utf-8", []byte(http.StatusText(s.status) + "\n") +} + +func (s *errorPageResponseWriter) flush() { + s.WriteHeader(http.StatusOK) +} + +func (st *Static) ErrorPagesUnless(disabled bool, format ErrorFormat, handler http.Handler) http.Handler { + if disabled { + return handler + } + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + rw := errorPageResponseWriter{ + rw: w, + path: st.DocumentRoot, + format: format, + } + defer rw.flush() + handler.ServeHTTP(&rw, r) + }) +} diff --git a/workhorse/internal/staticpages/error_pages_test.go b/workhorse/internal/staticpages/error_pages_test.go new file mode 100644 index 00000000000..05ec06cd429 --- /dev/null +++ b/workhorse/internal/staticpages/error_pages_test.go @@ -0,0 +1,191 @@ +package staticpages + +import ( + "fmt" + "io/ioutil" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" +) + +func TestIfErrorPageIsPresented(t *testing.T) { + dir, err := ioutil.TempDir("", "error_page") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + errorPage := "ERROR" + ioutil.WriteFile(filepath.Join(dir, "404.html"), []byte(errorPage), 0600) + + w := httptest.NewRecorder() + h := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(404) + upstreamBody := "Not Found" + n, err := fmt.Fprint(w, upstreamBody) + require.NoError(t, err) + require.Equal(t, len(upstreamBody), n, "bytes written") + }) + st := &Static{dir} + st.ErrorPagesUnless(false, ErrorFormatHTML, h).ServeHTTP(w, nil) + w.Flush() + + require.Equal(t, 404, w.Code) + testhelper.RequireResponseBody(t, w, errorPage) + testhelper.RequireResponseHeader(t, w, "Content-Type", "text/html; charset=utf-8") +} + +func TestIfErrorPassedIfNoErrorPageIsFound(t *testing.T) { + dir, err := ioutil.TempDir("", "error_page") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + w := httptest.NewRecorder() + errorResponse := "ERROR" + h := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(404) + fmt.Fprint(w, errorResponse) + }) + st := &Static{dir} + st.ErrorPagesUnless(false, ErrorFormatHTML, h).ServeHTTP(w, nil) + w.Flush() + + require.Equal(t, 404, w.Code) + testhelper.RequireResponseBody(t, w, errorResponse) +} + +func TestIfErrorPageIsIgnoredInDevelopment(t *testing.T) { + dir, err := ioutil.TempDir("", "error_page") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + errorPage := "ERROR" + ioutil.WriteFile(filepath.Join(dir, "500.html"), []byte(errorPage), 0600) + + w := httptest.NewRecorder() + serverError := "Interesting Server Error" + h := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(500) + fmt.Fprint(w, serverError) + }) + st := &Static{dir} + st.ErrorPagesUnless(true, ErrorFormatHTML, h).ServeHTTP(w, nil) + w.Flush() + require.Equal(t, 500, w.Code) + testhelper.RequireResponseBody(t, w, serverError) +} + +func TestIfErrorPageIsIgnoredIfCustomError(t *testing.T) { + dir, err := ioutil.TempDir("", "error_page") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + errorPage := "ERROR" + ioutil.WriteFile(filepath.Join(dir, "500.html"), []byte(errorPage), 0600) + + w := httptest.NewRecorder() + serverError := "Interesting Server Error" + h := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Add("X-GitLab-Custom-Error", "1") + w.WriteHeader(500) + fmt.Fprint(w, serverError) + }) + st := &Static{dir} + st.ErrorPagesUnless(false, ErrorFormatHTML, h).ServeHTTP(w, nil) + w.Flush() + require.Equal(t, 500, w.Code) + testhelper.RequireResponseBody(t, w, serverError) +} + +func TestErrorPageInterceptedByContentType(t *testing.T) { + testCases := []struct { + contentType string + intercepted bool + }{ + {contentType: "application/json", intercepted: false}, + {contentType: "text/plain", intercepted: true}, + {contentType: "text/html", intercepted: true}, + {contentType: "", intercepted: true}, + } + + for _, tc := range testCases { + dir, err := ioutil.TempDir("", "error_page") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + errorPage := "ERROR" + ioutil.WriteFile(filepath.Join(dir, "500.html"), []byte(errorPage), 0600) + + w := httptest.NewRecorder() + serverError := "Interesting Server Error" + h := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Add("Content-Type", tc.contentType) + w.WriteHeader(500) + fmt.Fprint(w, serverError) + }) + st := &Static{dir} + st.ErrorPagesUnless(false, ErrorFormatHTML, h).ServeHTTP(w, nil) + w.Flush() + require.Equal(t, 500, w.Code) + + if tc.intercepted { + testhelper.RequireResponseBody(t, w, errorPage) + } else { + testhelper.RequireResponseBody(t, w, serverError) + } + } +} + +func TestIfErrorPageIsPresentedJSON(t *testing.T) { + errorPage := "{\"error\":\"Not Found\",\"status\":404}\n" + + w := httptest.NewRecorder() + h := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(404) + upstreamBody := "This string is ignored" + n, err := fmt.Fprint(w, upstreamBody) + require.NoError(t, err) + require.Equal(t, len(upstreamBody), n, "bytes written") + }) + st := &Static{""} + st.ErrorPagesUnless(false, ErrorFormatJSON, h).ServeHTTP(w, nil) + w.Flush() + + require.Equal(t, 404, w.Code) + testhelper.RequireResponseBody(t, w, errorPage) + testhelper.RequireResponseHeader(t, w, "Content-Type", "application/json; charset=utf-8") +} + +func TestIfErrorPageIsPresentedText(t *testing.T) { + errorPage := "Not Found\n" + + w := httptest.NewRecorder() + h := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(404) + upstreamBody := "This string is ignored" + n, err := fmt.Fprint(w, upstreamBody) + require.NoError(t, err) + require.Equal(t, len(upstreamBody), n, "bytes written") + }) + st := &Static{""} + st.ErrorPagesUnless(false, ErrorFormatText, h).ServeHTTP(w, nil) + w.Flush() + + require.Equal(t, 404, w.Code) + testhelper.RequireResponseBody(t, w, errorPage) + testhelper.RequireResponseHeader(t, w, "Content-Type", "text/plain; charset=utf-8") +} diff --git a/workhorse/internal/staticpages/servefile.go b/workhorse/internal/staticpages/servefile.go new file mode 100644 index 00000000000..c98bc030bc2 --- /dev/null +++ b/workhorse/internal/staticpages/servefile.go @@ -0,0 +1,84 @@ +package staticpages + +import ( + "net/http" + "os" + "path/filepath" + "strings" + "time" + + "gitlab.com/gitlab-org/labkit/log" + "gitlab.com/gitlab-org/labkit/mask" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/urlprefix" +) + +type CacheMode int + +const ( + CacheDisabled CacheMode = iota + CacheExpireMax +) + +// BUG/QUIRK: If a client requests 'foo%2Fbar' and 'foo/bar' exists, +// handleServeFile will serve foo/bar instead of passing the request +// upstream. +func (s *Static) ServeExisting(prefix urlprefix.Prefix, cache CacheMode, notFoundHandler http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + file := filepath.Join(s.DocumentRoot, prefix.Strip(r.URL.Path)) + + // The filepath.Join does Clean traversing directories up + if !strings.HasPrefix(file, s.DocumentRoot) { + helper.Fail500(w, r, &os.PathError{ + Op: "open", + Path: file, + Err: os.ErrInvalid, + }) + return + } + + var content *os.File + var fi os.FileInfo + var err error + + // Serve pre-gzipped assets + if acceptEncoding := r.Header.Get("Accept-Encoding"); strings.Contains(acceptEncoding, "gzip") { + content, fi, err = helper.OpenFile(file + ".gz") + if err == nil { + w.Header().Set("Content-Encoding", "gzip") + } + } + + // If not found, open the original file + if content == nil || err != nil { + content, fi, err = helper.OpenFile(file) + } + if err != nil { + if notFoundHandler != nil { + notFoundHandler.ServeHTTP(w, r) + } else { + http.NotFound(w, r) + } + return + } + defer content.Close() + + switch cache { + case CacheExpireMax: + // Cache statically served files for 1 year + cacheUntil := time.Now().AddDate(1, 0, 0).Format(http.TimeFormat) + w.Header().Set("Cache-Control", "public") + w.Header().Set("Expires", cacheUntil) + } + + log.WithContextFields(r.Context(), log.Fields{ + "file": file, + "encoding": w.Header().Get("Content-Encoding"), + "method": r.Method, + "uri": mask.URL(r.RequestURI), + }).Info("Send static file") + + http.ServeContent(w, r, filepath.Base(file), fi.ModTime(), content) + }) +} diff --git a/workhorse/internal/staticpages/servefile_test.go b/workhorse/internal/staticpages/servefile_test.go new file mode 100644 index 00000000000..e136b876298 --- /dev/null +++ b/workhorse/internal/staticpages/servefile_test.go @@ -0,0 +1,134 @@ +package staticpages + +import ( + "bytes" + "compress/gzip" + "io/ioutil" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" + + "github.com/stretchr/testify/require" +) + +func TestServingNonExistingFile(t *testing.T) { + dir := "/path/to/non/existing/directory" + httpRequest, _ := http.NewRequest("GET", "/file", nil) + + w := httptest.NewRecorder() + st := &Static{dir} + st.ServeExisting("/", CacheDisabled, nil).ServeHTTP(w, httpRequest) + require.Equal(t, 404, w.Code) +} + +func TestServingDirectory(t *testing.T) { + dir, err := ioutil.TempDir("", "deploy") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + httpRequest, _ := http.NewRequest("GET", "/file", nil) + w := httptest.NewRecorder() + st := &Static{dir} + st.ServeExisting("/", CacheDisabled, nil).ServeHTTP(w, httpRequest) + require.Equal(t, 404, w.Code) +} + +func TestServingMalformedUri(t *testing.T) { + dir := "/path/to/non/existing/directory" + httpRequest, _ := http.NewRequest("GET", "/../../../static/file", nil) + + w := httptest.NewRecorder() + st := &Static{dir} + st.ServeExisting("/", CacheDisabled, nil).ServeHTTP(w, httpRequest) + require.Equal(t, 404, w.Code) +} + +func TestExecutingHandlerWhenNoFileFound(t *testing.T) { + dir := "/path/to/non/existing/directory" + httpRequest, _ := http.NewRequest("GET", "/file", nil) + + executed := false + st := &Static{dir} + st.ServeExisting("/", CacheDisabled, http.HandlerFunc(func(_ http.ResponseWriter, r *http.Request) { + executed = (r == httpRequest) + })).ServeHTTP(nil, httpRequest) + if !executed { + t.Error("The handler should get executed") + } +} + +func TestServingTheActualFile(t *testing.T) { + dir, err := ioutil.TempDir("", "deploy") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + httpRequest, _ := http.NewRequest("GET", "/file", nil) + + fileContent := "STATIC" + ioutil.WriteFile(filepath.Join(dir, "file"), []byte(fileContent), 0600) + + w := httptest.NewRecorder() + st := &Static{dir} + st.ServeExisting("/", CacheDisabled, nil).ServeHTTP(w, httpRequest) + require.Equal(t, 200, w.Code) + if w.Body.String() != fileContent { + t.Error("We should serve the file: ", w.Body.String()) + } +} + +func testServingThePregzippedFile(t *testing.T, enableGzip bool) { + dir, err := ioutil.TempDir("", "deploy") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + httpRequest, _ := http.NewRequest("GET", "/file", nil) + + if enableGzip { + httpRequest.Header.Set("Accept-Encoding", "gzip, deflate") + } + + fileContent := "STATIC" + + var fileGzipContent bytes.Buffer + fileGzip := gzip.NewWriter(&fileGzipContent) + fileGzip.Write([]byte(fileContent)) + fileGzip.Close() + + ioutil.WriteFile(filepath.Join(dir, "file.gz"), fileGzipContent.Bytes(), 0600) + ioutil.WriteFile(filepath.Join(dir, "file"), []byte(fileContent), 0600) + + w := httptest.NewRecorder() + st := &Static{dir} + st.ServeExisting("/", CacheDisabled, nil).ServeHTTP(w, httpRequest) + require.Equal(t, 200, w.Code) + if enableGzip { + testhelper.RequireResponseHeader(t, w, "Content-Encoding", "gzip") + if !bytes.Equal(w.Body.Bytes(), fileGzipContent.Bytes()) { + t.Error("We should serve the pregzipped file") + } + } else { + require.Equal(t, 200, w.Code) + testhelper.RequireResponseHeader(t, w, "Content-Encoding") + if w.Body.String() != fileContent { + t.Error("We should serve the file: ", w.Body.String()) + } + } +} + +func TestServingThePregzippedFile(t *testing.T) { + testServingThePregzippedFile(t, true) +} + +func TestServingThePregzippedFileWithoutEncoding(t *testing.T) { + testServingThePregzippedFile(t, false) +} diff --git a/workhorse/internal/staticpages/static.go b/workhorse/internal/staticpages/static.go new file mode 100644 index 00000000000..b42351f15f5 --- /dev/null +++ b/workhorse/internal/staticpages/static.go @@ -0,0 +1,5 @@ +package staticpages + +type Static struct { + DocumentRoot string +} diff --git a/workhorse/internal/testhelper/gitaly.go b/workhorse/internal/testhelper/gitaly.go new file mode 100644 index 00000000000..24884505440 --- /dev/null +++ b/workhorse/internal/testhelper/gitaly.go @@ -0,0 +1,384 @@ +package testhelper + +import ( + "fmt" + "io" + "io/ioutil" + "path" + "strings" + "sync" + + "github.com/golang/protobuf/jsonpb" //lint:ignore SA1019 https://gitlab.com/gitlab-org/gitlab-workhorse/-/issues/274 + "github.com/golang/protobuf/proto" //lint:ignore SA1019 https://gitlab.com/gitlab-org/gitlab-workhorse/-/issues/274 + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + "gitlab.com/gitlab-org/labkit/log" + "golang.org/x/net/context" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +type GitalyTestServer struct { + finalMessageCode codes.Code + sync.WaitGroup + LastIncomingMetadata metadata.MD + gitalypb.UnimplementedRepositoryServiceServer + gitalypb.UnimplementedBlobServiceServer + gitalypb.UnimplementedDiffServiceServer +} + +var ( + GitalyInfoRefsResponseMock = strings.Repeat("Mock Gitaly InfoRefsResponse data", 100000) + GitalyGetBlobResponseMock = strings.Repeat("Mock Gitaly GetBlobResponse data", 100000) + GitalyGetArchiveResponseMock = strings.Repeat("Mock Gitaly GetArchiveResponse data", 100000) + GitalyGetDiffResponseMock = strings.Repeat("Mock Gitaly GetDiffResponse data", 100000) + GitalyGetPatchResponseMock = strings.Repeat("Mock Gitaly GetPatchResponse data", 100000) + + GitalyGetSnapshotResponseMock = strings.Repeat("Mock Gitaly GetSnapshotResponse data", 100000) + + GitalyReceivePackResponseMock []byte + GitalyUploadPackResponseMock []byte +) + +func init() { + var err error + if GitalyReceivePackResponseMock, err = ioutil.ReadFile(path.Join(RootDir(), "testdata/receive-pack-fixture.txt")); err != nil { + log.WithError(err).Fatal("Unable to read pack response") + } + if GitalyUploadPackResponseMock, err = ioutil.ReadFile(path.Join(RootDir(), "testdata/upload-pack-fixture.txt")); err != nil { + log.WithError(err).Fatal("Unable to read pack response") + } +} + +func NewGitalyServer(finalMessageCode codes.Code) *GitalyTestServer { + return &GitalyTestServer{finalMessageCode: finalMessageCode} +} + +func (s *GitalyTestServer) InfoRefsUploadPack(in *gitalypb.InfoRefsRequest, stream gitalypb.SmartHTTPService_InfoRefsUploadPackServer) error { + s.WaitGroup.Add(1) + defer s.WaitGroup.Done() + + if err := validateRepository(in.GetRepository()); err != nil { + return err + } + + fmt.Printf("Result: %+v\n", in) + + marshaler := &jsonpb.Marshaler{} + jsonString, err := marshaler.MarshalToString(in) + if err != nil { + return err + } + + data := []byte(strings.Join([]string{ + jsonString, + "git-upload-pack", + GitalyInfoRefsResponseMock, + }, "\000")) + + s.LastIncomingMetadata = nil + if md, ok := metadata.FromIncomingContext(stream.Context()); ok { + s.LastIncomingMetadata = md + } + + return s.sendInfoRefs(stream, data) +} + +func (s *GitalyTestServer) InfoRefsReceivePack(in *gitalypb.InfoRefsRequest, stream gitalypb.SmartHTTPService_InfoRefsReceivePackServer) error { + s.WaitGroup.Add(1) + defer s.WaitGroup.Done() + + if err := validateRepository(in.GetRepository()); err != nil { + return err + } + + fmt.Printf("Result: %+v\n", in) + + jsonString, err := marshalJSON(in) + if err != nil { + return err + } + + data := []byte(strings.Join([]string{ + jsonString, + "git-receive-pack", + GitalyInfoRefsResponseMock, + }, "\000")) + + return s.sendInfoRefs(stream, data) +} + +func marshalJSON(msg proto.Message) (string, error) { + marshaler := &jsonpb.Marshaler{} + return marshaler.MarshalToString(msg) +} + +type infoRefsSender interface { + Send(*gitalypb.InfoRefsResponse) error +} + +func (s *GitalyTestServer) sendInfoRefs(stream infoRefsSender, data []byte) error { + nSends, err := sendBytes(data, 100, func(p []byte) error { + return stream.Send(&gitalypb.InfoRefsResponse{Data: p}) + }) + if err != nil { + return err + } + if nSends <= 1 { + panic("should have sent more than one message") + } + + return s.finalError() +} + +func (s *GitalyTestServer) PostReceivePack(stream gitalypb.SmartHTTPService_PostReceivePackServer) error { + s.WaitGroup.Add(1) + defer s.WaitGroup.Done() + + req, err := stream.Recv() + if err != nil { + return err + } + + repo := req.GetRepository() + if err := validateRepository(repo); err != nil { + return err + } + + jsonString, err := marshalJSON(req) + if err != nil { + return err + } + + data := []byte(jsonString + "\000") + + // The body of the request starts in the second message + for { + req, err := stream.Recv() + if err != nil { + if err != io.EOF { + return err + } + break + } + + // We want to echo the request data back + data = append(data, req.GetData()...) + } + + nSends, _ := sendBytes(data, 100, func(p []byte) error { + return stream.Send(&gitalypb.PostReceivePackResponse{Data: p}) + }) + + if nSends <= 1 { + panic("should have sent more than one message") + } + + return s.finalError() +} + +func (s *GitalyTestServer) PostUploadPack(stream gitalypb.SmartHTTPService_PostUploadPackServer) error { + s.WaitGroup.Add(1) + defer s.WaitGroup.Done() + + req, err := stream.Recv() + if err != nil { + return err + } + + if err := validateRepository(req.GetRepository()); err != nil { + return err + } + + jsonString, err := marshalJSON(req) + if err != nil { + return err + } + + if err := stream.Send(&gitalypb.PostUploadPackResponse{ + Data: []byte(strings.Join([]string{jsonString}, "\000") + "\000"), + }); err != nil { + return err + } + + nSends := 0 + // The body of the request starts in the second message. Gitaly streams PostUploadPack responses + // as soon as possible without reading the request completely first. We stream messages here + // directly back to the client to simulate the streaming of the actual implementation. + for { + req, err := stream.Recv() + if err != nil { + if err != io.EOF { + return err + } + break + } + + if err := stream.Send(&gitalypb.PostUploadPackResponse{Data: req.GetData()}); err != nil { + return err + } + + nSends++ + } + + if nSends <= 1 { + panic("should have sent more than one message") + } + + return s.finalError() +} + +func (s *GitalyTestServer) CommitIsAncestor(ctx context.Context, in *gitalypb.CommitIsAncestorRequest) (*gitalypb.CommitIsAncestorResponse, error) { + return nil, nil +} + +func (s *GitalyTestServer) GetBlob(in *gitalypb.GetBlobRequest, stream gitalypb.BlobService_GetBlobServer) error { + s.WaitGroup.Add(1) + defer s.WaitGroup.Done() + + if err := validateRepository(in.GetRepository()); err != nil { + return err + } + + response := &gitalypb.GetBlobResponse{ + Oid: in.GetOid(), + Size: int64(len(GitalyGetBlobResponseMock)), + } + nSends, err := sendBytes([]byte(GitalyGetBlobResponseMock), 100, func(p []byte) error { + response.Data = p + + if err := stream.Send(response); err != nil { + return err + } + + // Use a new response so we don't send other fields (Size, ...) over and over + response = &gitalypb.GetBlobResponse{} + + return nil + }) + if err != nil { + return err + } + if nSends <= 1 { + panic("should have sent more than one message") + } + + return s.finalError() +} + +func (s *GitalyTestServer) GetArchive(in *gitalypb.GetArchiveRequest, stream gitalypb.RepositoryService_GetArchiveServer) error { + s.WaitGroup.Add(1) + defer s.WaitGroup.Done() + + if err := validateRepository(in.GetRepository()); err != nil { + return err + } + + nSends, err := sendBytes([]byte(GitalyGetArchiveResponseMock), 100, func(p []byte) error { + return stream.Send(&gitalypb.GetArchiveResponse{Data: p}) + }) + if err != nil { + return err + } + if nSends <= 1 { + panic("should have sent more than one message") + } + + return s.finalError() +} + +func (s *GitalyTestServer) RawDiff(in *gitalypb.RawDiffRequest, stream gitalypb.DiffService_RawDiffServer) error { + nSends, err := sendBytes([]byte(GitalyGetDiffResponseMock), 100, func(p []byte) error { + return stream.Send(&gitalypb.RawDiffResponse{ + Data: p, + }) + }) + if err != nil { + return err + } + if nSends <= 1 { + panic("should have sent more than one message") + } + + return s.finalError() +} + +func (s *GitalyTestServer) RawPatch(in *gitalypb.RawPatchRequest, stream gitalypb.DiffService_RawPatchServer) error { + s.WaitGroup.Add(1) + defer s.WaitGroup.Done() + + if err := validateRepository(in.GetRepository()); err != nil { + return err + } + + nSends, err := sendBytes([]byte(GitalyGetPatchResponseMock), 100, func(p []byte) error { + return stream.Send(&gitalypb.RawPatchResponse{ + Data: p, + }) + }) + if err != nil { + return err + } + if nSends <= 1 { + panic("should have sent more than one message") + } + + return s.finalError() +} + +func (s *GitalyTestServer) GetSnapshot(in *gitalypb.GetSnapshotRequest, stream gitalypb.RepositoryService_GetSnapshotServer) error { + s.WaitGroup.Add(1) + defer s.WaitGroup.Done() + + if err := validateRepository(in.GetRepository()); err != nil { + return err + } + + nSends, err := sendBytes([]byte(GitalyGetSnapshotResponseMock), 100, func(p []byte) error { + return stream.Send(&gitalypb.GetSnapshotResponse{Data: p}) + }) + if err != nil { + return err + } + if nSends <= 1 { + panic("should have sent more than one message") + } + + return s.finalError() +} + +// sendBytes returns the number of times the 'sender' function was called and an error. +func sendBytes(data []byte, chunkSize int, sender func([]byte) error) (int, error) { + i := 0 + for ; len(data) > 0; i++ { + n := chunkSize + if n > len(data) { + n = len(data) + } + + if err := sender(data[:n]); err != nil { + return i, err + } + data = data[n:] + } + + return i, nil +} + +func (s *GitalyTestServer) finalError() error { + if code := s.finalMessageCode; code != codes.OK { + return status.Errorf(code, "error as specified by test") + } + + return nil +} + +func validateRepository(repo *gitalypb.Repository) error { + if len(repo.GetStorageName()) == 0 { + return fmt.Errorf("missing storage_name: %v", repo) + } + if len(repo.GetRelativePath()) == 0 { + return fmt.Errorf("missing relative_path: %v", repo) + } + return nil +} diff --git a/workhorse/internal/testhelper/testhelper.go b/workhorse/internal/testhelper/testhelper.go new file mode 100644 index 00000000000..40097bd453a --- /dev/null +++ b/workhorse/internal/testhelper/testhelper.go @@ -0,0 +1,152 @@ +package testhelper + +import ( + "errors" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "os" + "path" + "regexp" + "runtime" + "testing" + "time" + + "github.com/dgrijalva/jwt-go" + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/secret" +) + +func ConfigureSecret() { + secret.SetPath(path.Join(RootDir(), "testdata/test-secret")) +} + +func RequireResponseBody(t *testing.T, response *httptest.ResponseRecorder, expectedBody string) { + t.Helper() + require.Equal(t, expectedBody, response.Body.String(), "response body") +} + +func RequireResponseHeader(t *testing.T, w interface{}, header string, expected ...string) { + t.Helper() + var actual []string + + header = http.CanonicalHeaderKey(header) + type headerer interface{ Header() http.Header } + + switch resp := w.(type) { + case *http.Response: + actual = resp.Header[header] + case headerer: + actual = resp.Header()[header] + default: + t.Fatal("invalid type of w passed RequireResponseHeader") + } + + require.Equal(t, expected, actual, "values for HTTP header %s", header) +} + +func TestServerWithHandler(url *regexp.Regexp, handler http.HandlerFunc) *httptest.Server { + return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + logEntry := log.WithFields(log.Fields{ + "method": r.Method, + "url": r.URL, + "action": "DENY", + }) + + if url != nil && !url.MatchString(r.URL.Path) { + logEntry.Info("UPSTREAM") + w.WriteHeader(404) + return + } + + if version := r.Header.Get("Gitlab-Workhorse"); version == "" { + logEntry.Info("UPSTREAM") + w.WriteHeader(403) + return + } + + handler(w, r) + })) +} + +var workhorseExecutables = []string{"gitlab-workhorse", "gitlab-zip-cat", "gitlab-zip-metadata", "gitlab-resize-image"} + +func BuildExecutables() error { + rootDir := RootDir() + + for _, exe := range workhorseExecutables { + if _, err := os.Stat(path.Join(rootDir, exe)); os.IsNotExist(err) { + return fmt.Errorf("cannot find executable %s. Please run 'make prepare-tests'", exe) + } + } + + oldPath := os.Getenv("PATH") + testPath := fmt.Sprintf("%s:%s", rootDir, oldPath) + if err := os.Setenv("PATH", testPath); err != nil { + return fmt.Errorf("failed to set PATH to %v", testPath) + } + + return nil +} + +func RootDir() string { + _, currentFile, _, ok := runtime.Caller(0) + if !ok { + panic(errors.New("RootDir: calling runtime.Caller failed")) + } + return path.Join(path.Dir(currentFile), "../..") +} + +func LoadFile(t *testing.T, filePath string) string { + t.Helper() + content, err := ioutil.ReadFile(path.Join(RootDir(), filePath)) + require.NoError(t, err) + return string(content) +} + +func ReadAll(t *testing.T, r io.Reader) []byte { + t.Helper() + + b, err := ioutil.ReadAll(r) + require.NoError(t, err) + return b +} + +func ParseJWT(token *jwt.Token) (interface{}, error) { + // Don't forget to validate the alg is what you expect: + if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { + return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"]) + } + + ConfigureSecret() + secretBytes, err := secret.Bytes() + if err != nil { + return nil, fmt.Errorf("read secret from file: %v", err) + } + + return secretBytes, nil +} + +// UploadClaims represents the JWT claim for upload parameters +type UploadClaims struct { + Upload map[string]string `json:"upload"` + jwt.StandardClaims +} + +func Retry(t testing.TB, timeout time.Duration, fn func() error) { + t.Helper() + start := time.Now() + var err error + for ; time.Since(start) < timeout; time.Sleep(time.Millisecond) { + err = fn() + if err == nil { + return + } + } + t.Fatalf("test timeout after %v; last error: %v", timeout, err) +} diff --git a/workhorse/internal/upload/accelerate.go b/workhorse/internal/upload/accelerate.go new file mode 100644 index 00000000000..7d8ea51b14d --- /dev/null +++ b/workhorse/internal/upload/accelerate.go @@ -0,0 +1,32 @@ +package upload + +import ( + "fmt" + "net/http" + + "github.com/dgrijalva/jwt-go" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +const RewrittenFieldsHeader = "Gitlab-Workhorse-Multipart-Fields" + +type MultipartClaims struct { + RewrittenFields map[string]string `json:"rewritten_fields"` + jwt.StandardClaims +} + +func Accelerate(rails PreAuthorizer, h http.Handler, p Preparer) http.Handler { + return rails.PreAuthorizeHandler(func(w http.ResponseWriter, r *http.Request, a *api.Response) { + s := &SavedFileTracker{Request: r} + + opts, _, err := p.Prepare(a) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("Accelerate: error preparing file storage options")) + return + } + + HandleFileUploads(w, r, h, a, s, opts) + }, "/authorize") +} diff --git a/workhorse/internal/upload/body_uploader.go b/workhorse/internal/upload/body_uploader.go new file mode 100644 index 00000000000..2cee90195fb --- /dev/null +++ b/workhorse/internal/upload/body_uploader.go @@ -0,0 +1,90 @@ +package upload + +import ( + "fmt" + "io/ioutil" + "net/http" + "net/url" + "strings" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/filestore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +type PreAuthorizer interface { + PreAuthorizeHandler(next api.HandleFunc, suffix string) http.Handler +} + +// Verifier allows to check an upload before sending it to rails +type Verifier interface { + // Verify can abort the upload returning an error + Verify(handler *filestore.FileHandler) error +} + +// Preparer allows to customize BodyUploader configuration +type Preparer interface { + // Prepare converts api.Response into a *SaveFileOpts, it can optionally return an Verifier that will be + // invoked after the real upload, before the finalization with rails + Prepare(a *api.Response) (*filestore.SaveFileOpts, Verifier, error) +} + +type DefaultPreparer struct{} + +func (s *DefaultPreparer) Prepare(a *api.Response) (*filestore.SaveFileOpts, Verifier, error) { + opts, err := filestore.GetOpts(a) + return opts, nil, err +} + +// BodyUploader is an http.Handler that perform a pre authorization call to rails before hijacking the request body and +// uploading it. +// Providing an Preparer allows to customize the upload process +func BodyUploader(rails PreAuthorizer, h http.Handler, p Preparer) http.Handler { + return rails.PreAuthorizeHandler(func(w http.ResponseWriter, r *http.Request, a *api.Response) { + opts, verifier, err := p.Prepare(a) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("BodyUploader: preparation failed: %v", err)) + return + } + + fh, err := filestore.SaveFileFromReader(r.Context(), r.Body, r.ContentLength, opts) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("BodyUploader: upload failed: %v", err)) + return + } + + if verifier != nil { + if err := verifier.Verify(fh); err != nil { + helper.Fail500(w, r, fmt.Errorf("BodyUploader: verification failed: %v", err)) + return + } + } + + data := url.Values{} + fields, err := fh.GitLabFinalizeFields("file") + if err != nil { + helper.Fail500(w, r, fmt.Errorf("BodyUploader: finalize fields failed: %v", err)) + return + } + + for k, v := range fields { + data.Set(k, v) + } + + // Hijack body + body := data.Encode() + r.Body = ioutil.NopCloser(strings.NewReader(body)) + r.ContentLength = int64(len(body)) + r.Header.Set("Content-Type", "application/x-www-form-urlencoded") + + sft := SavedFileTracker{Request: r} + sft.Track("file", fh.LocalPath) + if err := sft.Finalize(r.Context()); err != nil { + helper.Fail500(w, r, fmt.Errorf("BodyUploader: finalize failed: %v", err)) + return + } + + // And proxy the request + h.ServeHTTP(w, r) + }, "/authorize") +} diff --git a/workhorse/internal/upload/body_uploader_test.go b/workhorse/internal/upload/body_uploader_test.go new file mode 100644 index 00000000000..451d7c97fab --- /dev/null +++ b/workhorse/internal/upload/body_uploader_test.go @@ -0,0 +1,195 @@ +package upload + +import ( + "fmt" + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "os" + "strconv" + "strings" + "testing" + + "github.com/dgrijalva/jwt-go" + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/filestore" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" +) + +const ( + fileContent = "A test file content" + fileLen = len(fileContent) +) + +func TestBodyUploader(t *testing.T) { + testhelper.ConfigureSecret() + + body := strings.NewReader(fileContent) + + resp := testUpload(&rails{}, &alwaysLocalPreparer{}, echoProxy(t, fileLen), body) + require.Equal(t, http.StatusOK, resp.StatusCode) + + uploadEcho, err := ioutil.ReadAll(resp.Body) + + require.NoError(t, err, "Can't read response body") + require.Equal(t, fileContent, string(uploadEcho)) +} + +func TestBodyUploaderCustomPreparer(t *testing.T) { + body := strings.NewReader(fileContent) + + resp := testUpload(&rails{}, &alwaysLocalPreparer{}, echoProxy(t, fileLen), body) + require.Equal(t, http.StatusOK, resp.StatusCode) + + uploadEcho, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err, "Can't read response body") + require.Equal(t, fileContent, string(uploadEcho)) +} + +func TestBodyUploaderCustomVerifier(t *testing.T) { + body := strings.NewReader(fileContent) + verifier := &mockVerifier{} + + resp := testUpload(&rails{}, &alwaysLocalPreparer{verifier: verifier}, echoProxy(t, fileLen), body) + require.Equal(t, http.StatusOK, resp.StatusCode) + + uploadEcho, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err, "Can't read response body") + require.Equal(t, fileContent, string(uploadEcho)) + require.True(t, verifier.invoked, "Verifier.Verify not invoked") +} + +func TestBodyUploaderAuthorizationFailure(t *testing.T) { + testNoProxyInvocation(t, http.StatusUnauthorized, &rails{unauthorized: true}, &alwaysLocalPreparer{}) +} + +func TestBodyUploaderErrors(t *testing.T) { + tests := []struct { + name string + preparer *alwaysLocalPreparer + }{ + {name: "Prepare failure", preparer: &alwaysLocalPreparer{prepareError: fmt.Errorf("")}}, + {name: "Verify failure", preparer: &alwaysLocalPreparer{verifier: &alwaysFailsVerifier{}}}, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + testNoProxyInvocation(t, http.StatusInternalServerError, &rails{}, test.preparer) + }) + } +} + +func testNoProxyInvocation(t *testing.T, expectedStatus int, auth PreAuthorizer, preparer Preparer) { + proxy := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + require.Fail(t, "request proxied upstream") + }) + + resp := testUpload(auth, preparer, proxy, nil) + require.Equal(t, expectedStatus, resp.StatusCode) +} + +func testUpload(auth PreAuthorizer, preparer Preparer, proxy http.Handler, body io.Reader) *http.Response { + req := httptest.NewRequest("POST", "http://example.com/upload", body) + w := httptest.NewRecorder() + + BodyUploader(auth, proxy, preparer).ServeHTTP(w, req) + + return w.Result() +} + +func echoProxy(t *testing.T, expectedBodyLength int) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + err := r.ParseForm() + require.NoError(t, err) + + require.Equal(t, "application/x-www-form-urlencoded", r.Header.Get("Content-Type"), "Wrong Content-Type header") + + require.Contains(t, r.PostForm, "file.md5") + require.Contains(t, r.PostForm, "file.sha1") + require.Contains(t, r.PostForm, "file.sha256") + require.Contains(t, r.PostForm, "file.sha512") + + require.Contains(t, r.PostForm, "file.path") + require.Contains(t, r.PostForm, "file.size") + require.Contains(t, r.PostForm, "file.gitlab-workhorse-upload") + require.Equal(t, strconv.Itoa(expectedBodyLength), r.PostFormValue("file.size")) + + token, err := jwt.ParseWithClaims(r.Header.Get(RewrittenFieldsHeader), &MultipartClaims{}, testhelper.ParseJWT) + require.NoError(t, err, "Wrong JWT header") + + rewrittenFields := token.Claims.(*MultipartClaims).RewrittenFields + if len(rewrittenFields) != 1 || len(rewrittenFields["file"]) == 0 { + t.Fatalf("Unexpected rewritten_fields value: %v", rewrittenFields) + } + + token, jwtErr := jwt.ParseWithClaims(r.PostFormValue("file.gitlab-workhorse-upload"), &testhelper.UploadClaims{}, testhelper.ParseJWT) + require.NoError(t, jwtErr, "Wrong signed upload fields") + + uploadFields := token.Claims.(*testhelper.UploadClaims).Upload + require.Contains(t, uploadFields, "name") + require.Contains(t, uploadFields, "path") + require.Contains(t, uploadFields, "remote_url") + require.Contains(t, uploadFields, "remote_id") + require.Contains(t, uploadFields, "size") + require.Contains(t, uploadFields, "md5") + require.Contains(t, uploadFields, "sha1") + require.Contains(t, uploadFields, "sha256") + require.Contains(t, uploadFields, "sha512") + + path := r.PostFormValue("file.path") + uploaded, err := os.Open(path) + require.NoError(t, err, "File not uploaded") + + //sending back the file for testing purpose + io.Copy(w, uploaded) + }) +} + +type rails struct { + unauthorized bool +} + +func (r *rails) PreAuthorizeHandler(next api.HandleFunc, _ string) http.Handler { + if r.unauthorized { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusUnauthorized) + }) + } + + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + next(w, r, &api.Response{TempPath: os.TempDir()}) + }) +} + +type alwaysLocalPreparer struct { + verifier Verifier + prepareError error +} + +func (a *alwaysLocalPreparer) Prepare(_ *api.Response) (*filestore.SaveFileOpts, Verifier, error) { + opts, err := filestore.GetOpts(&api.Response{TempPath: os.TempDir()}) + if err != nil { + return nil, nil, err + } + + return opts, a.verifier, a.prepareError +} + +type alwaysFailsVerifier struct{} + +func (alwaysFailsVerifier) Verify(handler *filestore.FileHandler) error { + return fmt.Errorf("Verification failed") +} + +type mockVerifier struct { + invoked bool +} + +func (m *mockVerifier) Verify(handler *filestore.FileHandler) error { + m.invoked = true + + return nil +} diff --git a/workhorse/internal/upload/exif/exif.go b/workhorse/internal/upload/exif/exif.go new file mode 100644 index 00000000000..a9307b1ca90 --- /dev/null +++ b/workhorse/internal/upload/exif/exif.go @@ -0,0 +1,107 @@ +package exif + +import ( + "bytes" + "context" + "errors" + "fmt" + "io" + "os/exec" + "regexp" + + "gitlab.com/gitlab-org/labkit/log" +) + +var ErrRemovingExif = errors.New("error while removing EXIF") + +type cleaner struct { + ctx context.Context + cmd *exec.Cmd + stdout io.Reader + stderr bytes.Buffer + eof bool +} + +func NewCleaner(ctx context.Context, stdin io.Reader) (io.ReadCloser, error) { + c := &cleaner{ctx: ctx} + + if err := c.startProcessing(stdin); err != nil { + return nil, err + } + + return c, nil +} + +func (c *cleaner) Close() error { + if c.cmd == nil { + return nil + } + + return c.cmd.Wait() +} + +func (c *cleaner) Read(p []byte) (int, error) { + if c.eof { + return 0, io.EOF + } + + n, err := c.stdout.Read(p) + if err == io.EOF { + if waitErr := c.cmd.Wait(); waitErr != nil { + log.WithContextFields(c.ctx, log.Fields{ + "command": c.cmd.Args, + "stderr": c.stderr.String(), + "error": waitErr.Error(), + }).Print("exiftool command failed") + + return n, ErrRemovingExif + } + + c.eof = true + } + + return n, err +} + +func (c *cleaner) startProcessing(stdin io.Reader) error { + var err error + + whitelisted_tags := []string{ + "-ResolutionUnit", + "-XResolution", + "-YResolution", + "-YCbCrSubSampling", + "-YCbCrPositioning", + "-BitsPerSample", + "-ImageHeight", + "-ImageWidth", + "-ImageSize", + "-Copyright", + "-CopyrightNotice", + "-Orientation", + } + + args := append([]string{"-all=", "--IPTC:all", "--XMP-iptcExt:all", "-tagsFromFile", "@"}, whitelisted_tags...) + args = append(args, "-") + c.cmd = exec.CommandContext(c.ctx, "exiftool", args...) + + c.cmd.Stderr = &c.stderr + c.cmd.Stdin = stdin + + c.stdout, err = c.cmd.StdoutPipe() + if err != nil { + return fmt.Errorf("failed to create stdout pipe: %v", err) + } + + if err = c.cmd.Start(); err != nil { + return fmt.Errorf("start %v: %v", c.cmd.Args, err) + } + + return nil +} + +func IsExifFile(filename string) bool { + filenameMatch := regexp.MustCompile(`(?i)\.(jpg|jpeg|tiff)$`) + + return filenameMatch.MatchString(filename) +} diff --git a/workhorse/internal/upload/exif/exif_test.go b/workhorse/internal/upload/exif/exif_test.go new file mode 100644 index 00000000000..373d97f7fce --- /dev/null +++ b/workhorse/internal/upload/exif/exif_test.go @@ -0,0 +1,95 @@ +package exif + +import ( + "context" + "io" + "io/ioutil" + "os" + "strings" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestIsExifFile(t *testing.T) { + tests := []struct { + name string + expected bool + }{ + { + name: "/full/path.jpg", + expected: true, + }, + { + name: "path.jpeg", + expected: true, + }, + { + name: "path.tiff", + expected: true, + }, + { + name: "path.JPG", + expected: true, + }, + { + name: "path.tar", + expected: false, + }, + { + name: "path", + expected: false, + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + require.Equal(t, test.expected, IsExifFile(test.name)) + }) + } +} + +func TestNewCleanerWithValidFile(t *testing.T) { + input, err := os.Open("testdata/sample_exif.jpg") + require.NoError(t, err) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + cleaner, err := NewCleaner(ctx, input) + require.NoError(t, err, "Expected no error when creating cleaner command") + + size, err := io.Copy(ioutil.Discard, cleaner) + require.NoError(t, err, "Expected no error when reading output") + + sizeAfterStrip := int64(25399) + require.Equal(t, sizeAfterStrip, size, "Different size of converted image") +} + +func TestNewCleanerWithInvalidFile(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + cleaner, err := NewCleaner(ctx, strings.NewReader("invalid image")) + require.NoError(t, err, "Expected no error when creating cleaner command") + + size, err := io.Copy(ioutil.Discard, cleaner) + require.Error(t, err, "Expected error when reading output") + require.Equal(t, int64(0), size, "Size of invalid image should be 0") +} + +func TestNewCleanerReadingAfterEOF(t *testing.T) { + input, err := os.Open("testdata/sample_exif.jpg") + require.NoError(t, err) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + cleaner, err := NewCleaner(ctx, input) + require.NoError(t, err, "Expected no error when creating cleaner command") + + _, err = io.Copy(ioutil.Discard, cleaner) + require.NoError(t, err, "Expected no error when reading output") + + buf := make([]byte, 1) + size, err := cleaner.Read(buf) + require.Equal(t, 0, size, "The output was already consumed by previous reads") + require.Equal(t, io.EOF, err, "We return EOF") +} diff --git a/workhorse/internal/upload/exif/testdata/sample_exif.jpg b/workhorse/internal/upload/exif/testdata/sample_exif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05eda3f7f953eec3f7f9c08428328d9c3922d7d9 GIT binary patch literal 33881 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 0, "Expected to receive not empty file") + + w.WriteHeader(200) + fmt.Fprint(w, "RESPONSE") + }) + defer ts.Close() + + httpRequest, err := http.NewRequest("POST", ts.URL+"/url/path", &buffer) + require.NoError(t, err) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + httpRequest = httpRequest.WithContext(ctx) + httpRequest.ContentLength = int64(buffer.Len()) + httpRequest.Header.Set("Content-Type", writer.FormDataContentType()) + response := httptest.NewRecorder() + + handler := newProxy(ts.URL) + apiResponse := &api.Response{TempPath: tempPath} + preparer := &DefaultPreparer{} + opts, _, err := preparer.Prepare(apiResponse) + require.NoError(t, err) + + HandleFileUploads(response, httpRequest, handler, apiResponse, &testFormProcessor{}, opts) + require.Equal(t, 200, response.Code) +} + +func TestUploadHandlerRemovingInvalidExif(t *testing.T) { + tempPath, err := ioutil.TempDir("", "uploads") + require.NoError(t, err) + defer os.RemoveAll(tempPath) + + var buffer bytes.Buffer + + writer := multipart.NewWriter(&buffer) + file, err := writer.CreateFormFile("file", "test.jpg") + require.NoError(t, err) + + fmt.Fprint(file, "this is not valid image data") + err = writer.Close() + require.NoError(t, err) + + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`/url/path\z`), func(w http.ResponseWriter, r *http.Request) { + err := r.ParseMultipartForm(100000) + require.Error(t, err) + }) + defer ts.Close() + + httpRequest, err := http.NewRequest("POST", ts.URL+"/url/path", &buffer) + require.NoError(t, err) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + httpRequest = httpRequest.WithContext(ctx) + httpRequest.ContentLength = int64(buffer.Len()) + httpRequest.Header.Set("Content-Type", writer.FormDataContentType()) + response := httptest.NewRecorder() + + handler := newProxy(ts.URL) + apiResponse := &api.Response{TempPath: tempPath} + preparer := &DefaultPreparer{} + opts, _, err := preparer.Prepare(apiResponse) + require.NoError(t, err) + + HandleFileUploads(response, httpRequest, handler, apiResponse, &testFormProcessor{}, opts) + require.Equal(t, 422, response.Code) +} + +func newProxy(url string) *proxy.Proxy { + parsedURL := helper.URLMustParse(url) + return proxy.NewProxy(parsedURL, "123", roundtripper.NewTestBackendRoundTripper(parsedURL)) +} + +func waitUntilDeleted(t *testing.T, path string) { + var err error + + // Poll because the file removal is async + for i := 0; i < 100; i++ { + _, err = os.Stat(path) + if err != nil { + break + } + time.Sleep(100 * time.Millisecond) + } + + require.True(t, os.IsNotExist(err), "expected the file to be deleted") +} diff --git a/workhorse/internal/upstream/development_test.go b/workhorse/internal/upstream/development_test.go new file mode 100644 index 00000000000..d2957abb18b --- /dev/null +++ b/workhorse/internal/upstream/development_test.go @@ -0,0 +1,39 @@ +package upstream + +import ( + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestDevelopmentModeEnabled(t *testing.T) { + developmentMode := true + + r, _ := http.NewRequest("GET", "/something", nil) + w := httptest.NewRecorder() + + executed := false + NotFoundUnless(developmentMode, http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) { + executed = true + })).ServeHTTP(w, r) + + require.True(t, executed, "The handler should get executed") +} + +func TestDevelopmentModeDisabled(t *testing.T) { + developmentMode := false + + r, _ := http.NewRequest("GET", "/something", nil) + w := httptest.NewRecorder() + + executed := false + NotFoundUnless(developmentMode, http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) { + executed = true + })).ServeHTTP(w, r) + + require.False(t, executed, "The handler should not get executed") + + require.Equal(t, 404, w.Code) +} diff --git a/workhorse/internal/upstream/handlers.go b/workhorse/internal/upstream/handlers.go new file mode 100644 index 00000000000..a6aa148a4ae --- /dev/null +++ b/workhorse/internal/upstream/handlers.go @@ -0,0 +1,39 @@ +package upstream + +import ( + "compress/gzip" + "fmt" + "io" + "net/http" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +func contentEncodingHandler(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var body io.ReadCloser + var err error + + // The client request body may have been gzipped. + contentEncoding := r.Header.Get("Content-Encoding") + switch contentEncoding { + case "": + body = r.Body + case "gzip": + body, err = gzip.NewReader(r.Body) + default: + err = fmt.Errorf("unsupported content encoding: %s", contentEncoding) + } + + if err != nil { + helper.Fail500(w, r, fmt.Errorf("contentEncodingHandler: %v", err)) + return + } + defer body.Close() + + r.Body = body + r.Header.Del("Content-Encoding") + + h.ServeHTTP(w, r) + }) +} diff --git a/workhorse/internal/upstream/handlers_test.go b/workhorse/internal/upstream/handlers_test.go new file mode 100644 index 00000000000..10c7479f5c5 --- /dev/null +++ b/workhorse/internal/upstream/handlers_test.go @@ -0,0 +1,67 @@ +package upstream + +import ( + "bytes" + "compress/gzip" + "fmt" + "io/ioutil" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestGzipEncoding(t *testing.T) { + resp := httptest.NewRecorder() + + var b bytes.Buffer + w := gzip.NewWriter(&b) + fmt.Fprint(w, "test") + w.Close() + + body := ioutil.NopCloser(&b) + + req, err := http.NewRequest("POST", "http://address/test", body) + require.NoError(t, err) + req.Header.Set("Content-Encoding", "gzip") + + contentEncodingHandler(http.HandlerFunc(func(_ http.ResponseWriter, r *http.Request) { + require.IsType(t, &gzip.Reader{}, r.Body, "body type") + require.Empty(t, r.Header.Get("Content-Encoding"), "Content-Encoding should be deleted") + })).ServeHTTP(resp, req) + + require.Equal(t, 200, resp.Code) +} + +func TestNoEncoding(t *testing.T) { + resp := httptest.NewRecorder() + + var b bytes.Buffer + body := ioutil.NopCloser(&b) + + req, err := http.NewRequest("POST", "http://address/test", body) + require.NoError(t, err) + req.Header.Set("Content-Encoding", "") + + contentEncodingHandler(http.HandlerFunc(func(_ http.ResponseWriter, r *http.Request) { + require.Equal(t, body, r.Body, "Expected the same body") + require.Empty(t, r.Header.Get("Content-Encoding"), "Content-Encoding should be deleted") + })).ServeHTTP(resp, req) + + require.Equal(t, 200, resp.Code) +} + +func TestInvalidEncoding(t *testing.T) { + resp := httptest.NewRecorder() + + req, err := http.NewRequest("POST", "http://address/test", nil) + require.NoError(t, err) + req.Header.Set("Content-Encoding", "application/unknown") + + contentEncodingHandler(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) { + t.Fatal("it shouldn't be executed") + })).ServeHTTP(resp, req) + + require.Equal(t, 500, resp.Code) +} diff --git a/workhorse/internal/upstream/metrics.go b/workhorse/internal/upstream/metrics.go new file mode 100644 index 00000000000..f5bc276f403 --- /dev/null +++ b/workhorse/internal/upstream/metrics.go @@ -0,0 +1,124 @@ +package upstream + +import ( + "net/http" + + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promhttp" +) + +const ( + namespace = "gitlab_workhorse" + httpSubsystem = "http" +) + +func secondsDurationBuckets() []float64 { + return []float64{ + 0.005, /* 5ms */ + 0.025, /* 25ms */ + 0.1, /* 100ms */ + 0.5, /* 500ms */ + 1.0, /* 1s */ + 10.0, /* 10s */ + 30.0, /* 30s */ + 60.0, /* 1m */ + 300.0, /* 10m */ + } +} + +func byteSizeBuckets() []float64 { + return []float64{ + 10, + 64, + 256, + 1024, /* 1kB */ + 64 * 1024, /* 64kB */ + 256 * 1024, /* 256kB */ + 1024 * 1024, /* 1mB */ + 64 * 1024 * 1024, /* 64mB */ + } +} + +var ( + httpInFlightRequests = prometheus.NewGauge(prometheus.GaugeOpts{ + Namespace: namespace, + Subsystem: httpSubsystem, + Name: "in_flight_requests", + Help: "A gauge of requests currently being served by workhorse.", + }) + + httpRequestsTotal = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: namespace, + Subsystem: httpSubsystem, + Name: "requests_total", + Help: "A counter for requests to workhorse.", + }, + []string{"code", "method", "route"}, + ) + + httpRequestDurationSeconds = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: namespace, + Subsystem: httpSubsystem, + Name: "request_duration_seconds", + Help: "A histogram of latencies for requests to workhorse.", + Buckets: secondsDurationBuckets(), + }, + []string{"code", "method", "route"}, + ) + + httpRequestSizeBytes = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: namespace, + Subsystem: httpSubsystem, + Name: "request_size_bytes", + Help: "A histogram of sizes of requests to workhorse.", + Buckets: byteSizeBuckets(), + }, + []string{"code", "method", "route"}, + ) + + httpResponseSizeBytes = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: namespace, + Subsystem: httpSubsystem, + Name: "response_size_bytes", + Help: "A histogram of response sizes for requests to workhorse.", + Buckets: byteSizeBuckets(), + }, + []string{"code", "method", "route"}, + ) + + httpTimeToWriteHeaderSeconds = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: namespace, + Subsystem: httpSubsystem, + Name: "time_to_write_header_seconds", + Help: "A histogram of request durations until the response headers are written.", + Buckets: secondsDurationBuckets(), + }, + []string{"code", "method", "route"}, + ) +) + +func init() { + prometheus.MustRegister(httpInFlightRequests) + prometheus.MustRegister(httpRequestsTotal) + prometheus.MustRegister(httpRequestDurationSeconds) + prometheus.MustRegister(httpRequestSizeBytes) + prometheus.MustRegister(httpTimeToWriteHeaderSeconds) +} + +func instrumentRoute(next http.Handler, method string, regexpStr string) http.Handler { + handler := next + + handler = promhttp.InstrumentHandlerCounter(httpRequestsTotal.MustCurryWith(map[string]string{"route": regexpStr}), handler) + handler = promhttp.InstrumentHandlerDuration(httpRequestDurationSeconds.MustCurryWith(map[string]string{"route": regexpStr}), handler) + handler = promhttp.InstrumentHandlerInFlight(httpInFlightRequests, handler) + handler = promhttp.InstrumentHandlerRequestSize(httpRequestSizeBytes.MustCurryWith(map[string]string{"route": regexpStr}), handler) + handler = promhttp.InstrumentHandlerResponseSize(httpResponseSizeBytes.MustCurryWith(map[string]string{"route": regexpStr}), handler) + handler = promhttp.InstrumentHandlerTimeToWriteHeader(httpTimeToWriteHeaderSeconds.MustCurryWith(map[string]string{"route": regexpStr}), handler) + + return handler +} diff --git a/workhorse/internal/upstream/notfoundunless.go b/workhorse/internal/upstream/notfoundunless.go new file mode 100644 index 00000000000..3bbe3e873a4 --- /dev/null +++ b/workhorse/internal/upstream/notfoundunless.go @@ -0,0 +1,11 @@ +package upstream + +import "net/http" + +func NotFoundUnless(pass bool, handler http.Handler) http.Handler { + if pass { + return handler + } + + return http.HandlerFunc(http.NotFound) +} diff --git a/workhorse/internal/upstream/roundtripper/roundtripper.go b/workhorse/internal/upstream/roundtripper/roundtripper.go new file mode 100644 index 00000000000..84f1983b471 --- /dev/null +++ b/workhorse/internal/upstream/roundtripper/roundtripper.go @@ -0,0 +1,61 @@ +package roundtripper + +import ( + "context" + "fmt" + "net" + "net/http" + "net/url" + "time" + + "gitlab.com/gitlab-org/labkit/correlation" + "gitlab.com/gitlab-org/labkit/tracing" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/badgateway" +) + +func mustParseAddress(address, scheme string) string { + if scheme == "https" { + panic("TLS is not supported for backend connections") + } + + for _, suffix := range []string{"", ":" + scheme} { + address += suffix + if host, port, err := net.SplitHostPort(address); err == nil && host != "" && port != "" { + return host + ":" + port + } + } + + panic(fmt.Errorf("could not parse host:port from address %q and scheme %q", address, scheme)) +} + +// NewBackendRoundTripper returns a new RoundTripper instance using the provided values +func NewBackendRoundTripper(backend *url.URL, socket string, proxyHeadersTimeout time.Duration, developmentMode bool) http.RoundTripper { + // Copied from the definition of http.DefaultTransport. We can't literally copy http.DefaultTransport because of its hidden internal state. + transport, dialer := newBackendTransport() + transport.ResponseHeaderTimeout = proxyHeadersTimeout + + if backend != nil && socket == "" { + address := mustParseAddress(backend.Host, backend.Scheme) + transport.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) { + return dialer.DialContext(ctx, "tcp", address) + } + } else if socket != "" { + transport.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) { + return dialer.DialContext(ctx, "unix", socket) + } + } else { + panic("backend is nil and socket is empty") + } + + return tracing.NewRoundTripper( + correlation.NewInstrumentedRoundTripper( + badgateway.NewRoundTripper(developmentMode, transport), + ), + ) +} + +// NewTestBackendRoundTripper sets up a RoundTripper for testing purposes +func NewTestBackendRoundTripper(backend *url.URL) http.RoundTripper { + return NewBackendRoundTripper(backend, "", 0, true) +} diff --git a/workhorse/internal/upstream/roundtripper/roundtripper_test.go b/workhorse/internal/upstream/roundtripper/roundtripper_test.go new file mode 100644 index 00000000000..79ffa244918 --- /dev/null +++ b/workhorse/internal/upstream/roundtripper/roundtripper_test.go @@ -0,0 +1,39 @@ +package roundtripper + +import ( + "strconv" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestMustParseAddress(t *testing.T) { + successExamples := []struct{ address, scheme, expected string }{ + {"1.2.3.4:56", "http", "1.2.3.4:56"}, + {"[::1]:23", "http", "::1:23"}, + {"4.5.6.7", "http", "4.5.6.7:http"}, + } + for i, example := range successExamples { + t.Run(strconv.Itoa(i), func(t *testing.T) { + require.Equal(t, example.expected, mustParseAddress(example.address, example.scheme)) + }) + } +} + +func TestMustParseAddressPanic(t *testing.T) { + panicExamples := []struct{ address, scheme string }{ + {"1.2.3.4", ""}, + {"1.2.3.4", "https"}, + } + + for i, panicExample := range panicExamples { + t.Run(strconv.Itoa(i), func(t *testing.T) { + defer func() { + if r := recover(); r == nil { + t.Fatal("expected panic") + } + }() + mustParseAddress(panicExample.address, panicExample.scheme) + }) + } +} diff --git a/workhorse/internal/upstream/roundtripper/transport.go b/workhorse/internal/upstream/roundtripper/transport.go new file mode 100644 index 00000000000..84d9623b129 --- /dev/null +++ b/workhorse/internal/upstream/roundtripper/transport.go @@ -0,0 +1,27 @@ +package roundtripper + +import ( + "net" + "net/http" + "time" +) + +// newBackendTransport setups the default HTTP transport which Workhorse uses +// to communicate with the upstream +func newBackendTransport() (*http.Transport, *net.Dialer) { + dialler := &net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + } + + transport := &http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: dialler.DialContext, + MaxIdleConns: 100, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + } + + return transport, dialler +} diff --git a/workhorse/internal/upstream/routes.go b/workhorse/internal/upstream/routes.go new file mode 100644 index 00000000000..40a8a52f59b --- /dev/null +++ b/workhorse/internal/upstream/routes.go @@ -0,0 +1,335 @@ +package upstream + +import ( + "net/http" + "net/url" + "path" + "regexp" + + "github.com/gorilla/websocket" + + "gitlab.com/gitlab-org/labkit/log" + "gitlab.com/gitlab-org/labkit/tracing" + + apipkg "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/artifacts" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/builds" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/channel" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/git" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/imageresizer" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/lfs" + proxypkg "gitlab.com/gitlab-org/gitlab-workhorse/internal/proxy" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/queueing" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/redis" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/secret" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/senddata" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/sendfile" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/sendurl" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/staticpages" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upload" +) + +type matcherFunc func(*http.Request) bool + +type routeEntry struct { + method string + regex *regexp.Regexp + handler http.Handler + matchers []matcherFunc +} + +type routeOptions struct { + tracing bool + matchers []matcherFunc +} + +type uploadPreparers struct { + artifacts upload.Preparer + lfs upload.Preparer + packages upload.Preparer + uploads upload.Preparer +} + +const ( + apiPattern = `^/api/` + ciAPIPattern = `^/ci/api/` + gitProjectPattern = `^/([^/]+/){1,}[^/]+\.git/` + projectPattern = `^/([^/]+/){1,}[^/]+/` + snippetUploadPattern = `^/uploads/personal_snippet` + userUploadPattern = `^/uploads/user` + importPattern = `^/import/` +) + +func compileRegexp(regexpStr string) *regexp.Regexp { + if len(regexpStr) == 0 { + return nil + } + + return regexp.MustCompile(regexpStr) +} + +func withMatcher(f matcherFunc) func(*routeOptions) { + return func(options *routeOptions) { + options.matchers = append(options.matchers, f) + } +} + +func withoutTracing() func(*routeOptions) { + return func(options *routeOptions) { + options.tracing = false + } +} + +func (u *upstream) observabilityMiddlewares(handler http.Handler, method string, regexpStr string) http.Handler { + handler = log.AccessLogger( + handler, + log.WithAccessLogger(u.accessLogger), + log.WithExtraFields(func(r *http.Request) log.Fields { + return log.Fields{ + "route": regexpStr, // This field matches the `route` label in Prometheus metrics + } + }), + ) + + handler = instrumentRoute(handler, method, regexpStr) // Add prometheus metrics + return handler +} + +func (u *upstream) route(method, regexpStr string, handler http.Handler, opts ...func(*routeOptions)) routeEntry { + // Instantiate a route with the defaults + options := routeOptions{ + tracing: true, + } + + for _, f := range opts { + f(&options) + } + + handler = u.observabilityMiddlewares(handler, method, regexpStr) + handler = denyWebsocket(handler) // Disallow websockets + if options.tracing { + // Add distributed tracing + handler = tracing.Handler(handler, tracing.WithRouteIdentifier(regexpStr)) + } + + return routeEntry{ + method: method, + regex: compileRegexp(regexpStr), + handler: handler, + matchers: options.matchers, + } +} + +func (u *upstream) wsRoute(regexpStr string, handler http.Handler, matchers ...matcherFunc) routeEntry { + method := "GET" + handler = u.observabilityMiddlewares(handler, method, regexpStr) + + return routeEntry{ + method: method, + regex: compileRegexp(regexpStr), + handler: handler, + matchers: append(matchers, websocket.IsWebSocketUpgrade), + } +} + +// Creates matcherFuncs for a particular content type. +func isContentType(contentType string) func(*http.Request) bool { + return func(r *http.Request) bool { + return helper.IsContentType(contentType, r.Header.Get("Content-Type")) + } +} + +func (ro *routeEntry) isMatch(cleanedPath string, req *http.Request) bool { + if ro.method != "" && req.Method != ro.method { + return false + } + + if ro.regex != nil && !ro.regex.MatchString(cleanedPath) { + return false + } + + ok := true + for _, matcher := range ro.matchers { + ok = matcher(req) + if !ok { + break + } + } + + return ok +} + +func buildProxy(backend *url.URL, version string, rt http.RoundTripper, cfg config.Config) http.Handler { + proxier := proxypkg.NewProxy(backend, version, rt) + + return senddata.SendData( + sendfile.SendFile(apipkg.Block(proxier)), + git.SendArchive, + git.SendBlob, + git.SendDiff, + git.SendPatch, + git.SendSnapshot, + artifacts.SendEntry, + sendurl.SendURL, + imageresizer.NewResizer(cfg), + ) +} + +// Routing table +// We match against URI not containing the relativeUrlRoot: +// see upstream.ServeHTTP + +func (u *upstream) configureRoutes() { + api := apipkg.NewAPI( + u.Backend, + u.Version, + u.RoundTripper, + ) + + static := &staticpages.Static{DocumentRoot: u.DocumentRoot} + proxy := buildProxy(u.Backend, u.Version, u.RoundTripper, u.Config) + cableProxy := proxypkg.NewProxy(u.CableBackend, u.Version, u.CableRoundTripper) + + signingTripper := secret.NewRoundTripper(u.RoundTripper, u.Version) + signingProxy := buildProxy(u.Backend, u.Version, signingTripper, u.Config) + + preparers := createUploadPreparers(u.Config) + uploadPath := path.Join(u.DocumentRoot, "uploads/tmp") + uploadAccelerateProxy := upload.Accelerate(&upload.SkipRailsAuthorizer{TempPath: uploadPath}, proxy, preparers.uploads) + ciAPIProxyQueue := queueing.QueueRequests("ci_api_job_requests", uploadAccelerateProxy, u.APILimit, u.APIQueueLimit, u.APIQueueTimeout) + ciAPILongPolling := builds.RegisterHandler(ciAPIProxyQueue, redis.WatchKey, u.APICILongPollingDuration) + + // Serve static files or forward the requests + defaultUpstream := static.ServeExisting( + u.URLPrefix, + staticpages.CacheDisabled, + static.DeployPage(static.ErrorPagesUnless(u.DevelopmentMode, staticpages.ErrorFormatHTML, uploadAccelerateProxy)), + ) + probeUpstream := static.ErrorPagesUnless(u.DevelopmentMode, staticpages.ErrorFormatJSON, proxy) + healthUpstream := static.ErrorPagesUnless(u.DevelopmentMode, staticpages.ErrorFormatText, proxy) + + u.Routes = []routeEntry{ + // Git Clone + u.route("GET", gitProjectPattern+`info/refs\z`, git.GetInfoRefsHandler(api)), + u.route("POST", gitProjectPattern+`git-upload-pack\z`, contentEncodingHandler(git.UploadPack(api)), withMatcher(isContentType("application/x-git-upload-pack-request"))), + u.route("POST", gitProjectPattern+`git-receive-pack\z`, contentEncodingHandler(git.ReceivePack(api)), withMatcher(isContentType("application/x-git-receive-pack-request"))), + u.route("PUT", gitProjectPattern+`gitlab-lfs/objects/([0-9a-f]{64})/([0-9]+)\z`, lfs.PutStore(api, signingProxy, preparers.lfs), withMatcher(isContentType("application/octet-stream"))), + + // CI Artifacts + u.route("POST", apiPattern+`v4/jobs/[0-9]+/artifacts\z`, contentEncodingHandler(artifacts.UploadArtifacts(api, signingProxy, preparers.artifacts))), + u.route("POST", ciAPIPattern+`v1/builds/[0-9]+/artifacts\z`, contentEncodingHandler(artifacts.UploadArtifacts(api, signingProxy, preparers.artifacts))), + + // ActionCable websocket + u.wsRoute(`^/-/cable\z`, cableProxy), + + // Terminal websocket + u.wsRoute(projectPattern+`-/environments/[0-9]+/terminal.ws\z`, channel.Handler(api)), + u.wsRoute(projectPattern+`-/jobs/[0-9]+/terminal.ws\z`, channel.Handler(api)), + + // Proxy Job Services + u.wsRoute(projectPattern+`-/jobs/[0-9]+/proxy.ws\z`, channel.Handler(api)), + + // Long poll and limit capacity given to jobs/request and builds/register.json + u.route("", apiPattern+`v4/jobs/request\z`, ciAPILongPolling), + u.route("", ciAPIPattern+`v1/builds/register.json\z`, ciAPILongPolling), + + // Maven Artifact Repository + u.route("PUT", apiPattern+`v4/projects/[0-9]+/packages/maven/`, upload.BodyUploader(api, signingProxy, preparers.packages)), + + // Conan Artifact Repository + u.route("PUT", apiPattern+`v4/packages/conan/`, upload.BodyUploader(api, signingProxy, preparers.packages)), + u.route("PUT", apiPattern+`v4/projects/[0-9]+/packages/conan/`, upload.BodyUploader(api, signingProxy, preparers.packages)), + + // Generic Packages Repository + u.route("PUT", apiPattern+`v4/projects/[0-9]+/packages/generic/`, upload.BodyUploader(api, signingProxy, preparers.packages)), + + // NuGet Artifact Repository + u.route("PUT", apiPattern+`v4/projects/[0-9]+/packages/nuget/`, upload.Accelerate(api, signingProxy, preparers.packages)), + + // PyPI Artifact Repository + u.route("POST", apiPattern+`v4/projects/[0-9]+/packages/pypi`, upload.Accelerate(api, signingProxy, preparers.packages)), + + // Debian Artifact Repository + u.route("PUT", apiPattern+`v4/projects/[0-9]+/-/packages/debian/incoming/`, upload.BodyUploader(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 + u.route("POST", apiPattern+`v4/projects/[0-9]+/wikis/attachments\z`, uploadAccelerateProxy), + u.route("POST", apiPattern+`graphql\z`, uploadAccelerateProxy), + u.route("POST", apiPattern+`v4/groups/import`, upload.Accelerate(api, signingProxy, preparers.uploads)), + u.route("POST", apiPattern+`v4/projects/import`, upload.Accelerate(api, signingProxy, preparers.uploads)), + + // Project Import via UI upload acceleration + u.route("POST", importPattern+`gitlab_project`, upload.Accelerate(api, signingProxy, preparers.uploads)), + // Group Import via UI upload acceleration + u.route("POST", importPattern+`gitlab_group`, upload.Accelerate(api, signingProxy, preparers.uploads)), + + // Metric image upload + u.route("POST", apiPattern+`v4/projects/[0-9]+/issues/[0-9]+/metric_images\z`, upload.Accelerate(api, signingProxy, preparers.uploads)), + + // Requirements Import via UI upload acceleration + u.route("POST", projectPattern+`requirements_management/requirements/import_csv`, upload.Accelerate(api, signingProxy, preparers.uploads)), + + // Explicitly proxy API requests + u.route("", apiPattern, proxy), + u.route("", ciAPIPattern, proxy), + + // Serve assets + u.route( + "", `^/assets/`, + static.ServeExisting( + u.URLPrefix, + staticpages.CacheExpireMax, + NotFoundUnless(u.DevelopmentMode, proxy), + ), + withoutTracing(), // Tracing on assets is very noisy + ), + + // Uploads + u.route("POST", projectPattern+`uploads\z`, upload.Accelerate(api, signingProxy, preparers.uploads)), + u.route("POST", snippetUploadPattern, upload.Accelerate(api, signingProxy, preparers.uploads)), + u.route("POST", userUploadPattern, upload.Accelerate(api, signingProxy, preparers.uploads)), + + // For legacy reasons, user uploads are stored under the document root. + // To prevent anybody who knows/guesses the URL of a user-uploaded file + // from downloading it we make sure requests to /uploads/ do _not_ pass + // through static.ServeExisting. + u.route("", `^/uploads/`, static.ErrorPagesUnless(u.DevelopmentMode, staticpages.ErrorFormatHTML, proxy)), + + // health checks don't intercept errors and go straight to rails + // TODO: We should probably not return a HTML deploy page? + // https://gitlab.com/gitlab-org/gitlab-workhorse/issues/230 + u.route("", "^/-/(readiness|liveness)$", static.DeployPage(probeUpstream)), + u.route("", "^/-/health$", static.DeployPage(healthUpstream)), + + // This route lets us filter out health checks from our metrics. + u.route("", "^/-/", defaultUpstream), + + u.route("", "", defaultUpstream), + } +} + +func createUploadPreparers(cfg config.Config) uploadPreparers { + defaultPreparer := upload.NewObjectStoragePreparer(cfg) + + return uploadPreparers{ + artifacts: defaultPreparer, + lfs: lfs.NewLfsUploadPreparer(cfg, defaultPreparer), + packages: defaultPreparer, + uploads: defaultPreparer, + } +} + +func denyWebsocket(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if websocket.IsWebSocketUpgrade(r) { + helper.HTTPError(w, r, "websocket upgrade not allowed", http.StatusBadRequest) + return + } + + next.ServeHTTP(w, r) + }) +} diff --git a/workhorse/internal/upstream/upstream.go b/workhorse/internal/upstream/upstream.go new file mode 100644 index 00000000000..fd3f6191a5a --- /dev/null +++ b/workhorse/internal/upstream/upstream.go @@ -0,0 +1,123 @@ +/* +The upstream type implements http.Handler. + +In this file we handle request routing and interaction with the authBackend. +*/ + +package upstream + +import ( + "fmt" + + "net/http" + "strings" + + "github.com/sirupsen/logrus" + "gitlab.com/gitlab-org/labkit/correlation" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upload" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upstream/roundtripper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/urlprefix" +) + +var ( + DefaultBackend = helper.URLMustParse("http://localhost:8080") + requestHeaderBlacklist = []string{ + upload.RewrittenFieldsHeader, + } +) + +type upstream struct { + config.Config + URLPrefix urlprefix.Prefix + Routes []routeEntry + RoundTripper http.RoundTripper + CableRoundTripper http.RoundTripper + accessLogger *logrus.Logger +} + +func NewUpstream(cfg config.Config, accessLogger *logrus.Logger) http.Handler { + up := upstream{ + Config: cfg, + accessLogger: accessLogger, + } + if up.Backend == nil { + up.Backend = DefaultBackend + } + if up.CableBackend == nil { + up.CableBackend = up.Backend + } + if up.CableSocket == "" { + up.CableSocket = up.Socket + } + up.RoundTripper = roundtripper.NewBackendRoundTripper(up.Backend, up.Socket, up.ProxyHeadersTimeout, cfg.DevelopmentMode) + up.CableRoundTripper = roundtripper.NewBackendRoundTripper(up.CableBackend, up.CableSocket, up.ProxyHeadersTimeout, cfg.DevelopmentMode) + up.configureURLPrefix() + up.configureRoutes() + + var correlationOpts []correlation.InboundHandlerOption + if cfg.PropagateCorrelationID { + correlationOpts = append(correlationOpts, correlation.WithPropagation()) + } + + handler := correlation.InjectCorrelationID(&up, correlationOpts...) + return handler +} + +func (u *upstream) configureURLPrefix() { + relativeURLRoot := u.Backend.Path + if !strings.HasSuffix(relativeURLRoot, "/") { + relativeURLRoot += "/" + } + u.URLPrefix = urlprefix.Prefix(relativeURLRoot) +} + +func (u *upstream) ServeHTTP(w http.ResponseWriter, r *http.Request) { + helper.FixRemoteAddr(r) + + helper.DisableResponseBuffering(w) + + // Drop RequestURI == "*" (FIXME: why?) + if r.RequestURI == "*" { + helper.HTTPError(w, r, "Connection upgrade not allowed", http.StatusBadRequest) + return + } + + // Disallow connect + if r.Method == "CONNECT" { + helper.HTTPError(w, r, "CONNECT not allowed", http.StatusBadRequest) + return + } + + // Check URL Root + URIPath := urlprefix.CleanURIPath(r.URL.Path) + prefix := u.URLPrefix + if !prefix.Match(URIPath) { + helper.HTTPError(w, r, fmt.Sprintf("Not found %q", URIPath), http.StatusNotFound) + return + } + + // Look for a matching route + var route *routeEntry + for _, ro := range u.Routes { + if ro.isMatch(prefix.Strip(URIPath), r) { + route = &ro + break + } + } + + if route == nil { + // The protocol spec in git/Documentation/technical/http-protocol.txt + // says we must return 403 if no matching service is found. + helper.HTTPError(w, r, "Forbidden", http.StatusForbidden) + return + } + + for _, h := range requestHeaderBlacklist { + r.Header.Del(h) + } + + route.handler.ServeHTTP(w, r) +} diff --git a/workhorse/internal/urlprefix/urlprefix.go b/workhorse/internal/urlprefix/urlprefix.go new file mode 100644 index 00000000000..23eefe70c67 --- /dev/null +++ b/workhorse/internal/urlprefix/urlprefix.go @@ -0,0 +1,35 @@ +package urlprefix + +import ( + "path" + "strings" +) + +type Prefix string + +func (p Prefix) Strip(path string) string { + return CleanURIPath(strings.TrimPrefix(path, string(p))) +} + +func (p Prefix) Match(path string) bool { + pre := string(p) + return strings.HasPrefix(path, pre) || path+"/" == pre +} + +// Borrowed from: net/http/server.go +// Return the canonical path for p, eliminating . and .. elements. +func CleanURIPath(p string) string { + if p == "" { + return "/" + } + if p[0] != '/' { + p = "/" + p + } + np := path.Clean(p) + // path.Clean removes trailing slash except for root; + // put the trailing slash back if necessary. + if p[len(p)-1] == '/' && np != "/" { + np += "/" + } + return np +} diff --git a/workhorse/internal/utils/svg/LICENSE b/workhorse/internal/utils/svg/LICENSE new file mode 100644 index 00000000000..f67807d0070 --- /dev/null +++ b/workhorse/internal/utils/svg/LICENSE @@ -0,0 +1,24 @@ +The MIT License + +Copyright (c) 2016 Tomas Aparicio + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/workhorse/internal/utils/svg/README.md b/workhorse/internal/utils/svg/README.md new file mode 100644 index 00000000000..e5531f47473 --- /dev/null +++ b/workhorse/internal/utils/svg/README.md @@ -0,0 +1,45 @@ +# go-is-svg + +Tiny package to verify if a given file buffer is an SVG image in Go (golang). + +## Installation + +```bash +go get -u github.com/h2non/go-is-svg +``` + +## Example + +```go +package main + +import ( + "fmt" + "io/ioutil" + + svg "github.com/h2non/go-is-svg" +) + +func main() { + buf, err := ioutil.ReadFile("_example/example.svg") + if err != nil { + fmt.Printf("Error: %s\n", err) + return + } + + if svg.Is(buf) { + fmt.Println("File is an SVG") + } else { + fmt.Println("File is NOT an SVG") + } +} +``` + +Run example: +```bash +go run _example/example.go +``` + +## License + +MIT - Tomas Aparicio diff --git a/workhorse/internal/utils/svg/svg.go b/workhorse/internal/utils/svg/svg.go new file mode 100644 index 00000000000..b209cb5bf33 --- /dev/null +++ b/workhorse/internal/utils/svg/svg.go @@ -0,0 +1,42 @@ +// Copyright (c) 2016 Tomas Aparicio. All rights reserved. +// +// Use of this source code is governed by a MIT License +// license that can be found in the LICENSE file or at +// https://github.com/h2non/go-is-svg/blob/master/LICENSE. + +package svg + +import ( + "regexp" + "unicode/utf8" +) + +var ( + htmlCommentRegex = regexp.MustCompile(`(?i)`) + svgRegex = regexp.MustCompile(`(?i)^\s*(?:<\?xml[^>]*>\s*)?(?:]*>\s*)?]*>`) +) + +// isBinary checks if the given buffer is a binary file. +func isBinary(buf []byte) bool { + if len(buf) < 24 { + return false + } + for i := 0; i < 24; i++ { + charCode, _ := utf8.DecodeRuneInString(string(buf[i])) + if charCode == 65533 || charCode <= 8 { + return true + } + } + return false +} + +// Is returns true if the given buffer is a valid SVG image. +func Is(buf []byte) bool { + return !isBinary(buf) && svgRegex.Match(htmlCommentRegex.ReplaceAll(buf, []byte{})) +} + +// IsSVG returns true if the given buffer is a valid SVG image. +// Alias to: Is() +func IsSVG(buf []byte) bool { + return Is(buf) +} diff --git a/workhorse/internal/zipartifacts/.gitignore b/workhorse/internal/zipartifacts/.gitignore new file mode 100644 index 00000000000..ace1063ab02 --- /dev/null +++ b/workhorse/internal/zipartifacts/.gitignore @@ -0,0 +1 @@ +/testdata diff --git a/workhorse/internal/zipartifacts/entry.go b/workhorse/internal/zipartifacts/entry.go new file mode 100644 index 00000000000..527387ceaa1 --- /dev/null +++ b/workhorse/internal/zipartifacts/entry.go @@ -0,0 +1,13 @@ +package zipartifacts + +import ( + "encoding/base64" +) + +func DecodeFileEntry(entry string) (string, error) { + decoded, err := base64.StdEncoding.DecodeString(entry) + if err != nil { + return "", err + } + return string(decoded), nil +} diff --git a/workhorse/internal/zipartifacts/errors.go b/workhorse/internal/zipartifacts/errors.go new file mode 100644 index 00000000000..162816618f8 --- /dev/null +++ b/workhorse/internal/zipartifacts/errors.go @@ -0,0 +1,57 @@ +package zipartifacts + +import ( + "errors" +) + +// These are exit codes used by subprocesses in cmd/gitlab-zip-xxx. We also use +// them to map errors and error messages that we use as label in Prometheus. +const ( + CodeNotZip = 10 + iota + CodeEntryNotFound + CodeArchiveNotFound + CodeLimitsReached + CodeUnknownError +) + +var ( + ErrorCode = map[int]error{ + CodeNotZip: errors.New("zip archive format invalid"), + CodeEntryNotFound: errors.New("zip entry not found"), + CodeArchiveNotFound: errors.New("zip archive not found"), + CodeLimitsReached: errors.New("zip processing limits reached"), + CodeUnknownError: errors.New("zip processing unknown error"), + } + + ErrorLabel = map[int]string{ + CodeNotZip: "archive_invalid", + CodeEntryNotFound: "entry_not_found", + CodeArchiveNotFound: "archive_not_found", + CodeLimitsReached: "limits_reached", + CodeUnknownError: "unknown_error", + } + + ErrBadMetadata = errors.New("zip artifacts metadata invalid") +) + +// ExitCodeByError find an os.Exit code for a corresponding error. +// CodeUnkownError in case it can not be found. +func ExitCodeByError(err error) int { + for c, e := range ErrorCode { + if err == e { + return c + } + } + + return CodeUnknownError +} + +// ErrorLabelByCode returns a Prometheus counter label associated with an exit code. +func ErrorLabelByCode(code int) string { + label, ok := ErrorLabel[code] + if ok { + return label + } + + return ErrorLabel[CodeUnknownError] +} diff --git a/workhorse/internal/zipartifacts/errors_test.go b/workhorse/internal/zipartifacts/errors_test.go new file mode 100644 index 00000000000..6fce160b3bc --- /dev/null +++ b/workhorse/internal/zipartifacts/errors_test.go @@ -0,0 +1,32 @@ +package zipartifacts + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestExitCodeByError(t *testing.T) { + t.Run("when error has been recognized", func(t *testing.T) { + code := ExitCodeByError(ErrorCode[CodeLimitsReached]) + + require.Equal(t, code, CodeLimitsReached) + require.Greater(t, code, 10) + }) + + t.Run("when error is an unknown one", func(t *testing.T) { + code := ExitCodeByError(errors.New("unknown error")) + + require.Equal(t, code, CodeUnknownError) + require.Greater(t, code, 10) + }) +} + +func TestErrorLabels(t *testing.T) { + for code := range ErrorCode { + _, ok := ErrorLabel[code] + + require.True(t, ok) + } +} diff --git a/workhorse/internal/zipartifacts/metadata.go b/workhorse/internal/zipartifacts/metadata.go new file mode 100644 index 00000000000..1ecf52deafb --- /dev/null +++ b/workhorse/internal/zipartifacts/metadata.go @@ -0,0 +1,117 @@ +package zipartifacts + +import ( + "archive/zip" + "compress/gzip" + "encoding/binary" + "encoding/json" + "io" + "path" + "sort" + "strconv" +) + +type metadata struct { + Modified int64 `json:"modified,omitempty"` + Mode string `json:"mode,omitempty"` + CRC uint32 `json:"crc,omitempty"` + Size uint64 `json:"size,omitempty"` + Zipped uint64 `json:"zipped,omitempty"` + Comment string `json:"comment,omitempty"` +} + +const MetadataHeaderPrefix = "\x00\x00\x00&" // length of string below, encoded properly +const MetadataHeader = "GitLab Build Artifacts Metadata 0.0.2\n" + +func newMetadata(file *zip.File) metadata { + if file == nil { + return metadata{} + } + + return metadata{ + //lint:ignore SA1019 Remove this once the minimum supported version is go 1.10 (go 1.9 and down do not support an alternative) + Modified: file.ModTime().Unix(), + Mode: strconv.FormatUint(uint64(file.Mode().Perm()), 8), + CRC: file.CRC32, + Size: file.UncompressedSize64, + Zipped: file.CompressedSize64, + Comment: file.Comment, + } +} + +func (m metadata) writeEncoded(output io.Writer) error { + j, err := json.Marshal(m) + if err != nil { + return err + } + j = append(j, byte('\n')) + return writeBytes(output, j) +} + +func writeZipEntryMetadata(output io.Writer, path string, entry *zip.File) error { + if err := writeString(output, path); err != nil { + return err + } + + if err := newMetadata(entry).writeEncoded(output); err != nil { + return err + } + + return nil +} + +func GenerateZipMetadata(w io.Writer, archive *zip.Reader) error { + output := gzip.NewWriter(w) + defer output.Close() + + if err := writeString(output, MetadataHeader); err != nil { + return err + } + + // Write empty error header that we may need in the future + if err := writeString(output, "{}"); err != nil { + return err + } + + // Create map of files in zip archive + zipMap := make(map[string]*zip.File, len(archive.File)) + + // Add missing entries + for _, entry := range archive.File { + zipMap[entry.Name] = entry + + for d := path.Dir(entry.Name); d != "." && d != "/"; d = path.Dir(d) { + entryDir := d + "/" + if _, ok := zipMap[entryDir]; !ok { + zipMap[entryDir] = nil + } + } + } + + // Sort paths + sortedPaths := make([]string, 0, len(zipMap)) + for path := range zipMap { + sortedPaths = append(sortedPaths, path) + } + sort.Strings(sortedPaths) + + // Write all files + for _, path := range sortedPaths { + if err := writeZipEntryMetadata(output, path, zipMap[path]); err != nil { + return err + } + } + return nil +} + +func writeBytes(output io.Writer, data []byte) error { + err := binary.Write(output, binary.BigEndian, uint32(len(data))) + if err == nil { + _, err = output.Write(data) + } + return err +} + +func writeString(output io.Writer, str string) error { + return writeBytes(output, []byte(str)) +} diff --git a/workhorse/internal/zipartifacts/metadata_test.go b/workhorse/internal/zipartifacts/metadata_test.go new file mode 100644 index 00000000000..0f130ab4c15 --- /dev/null +++ b/workhorse/internal/zipartifacts/metadata_test.go @@ -0,0 +1,102 @@ +package zipartifacts_test + +import ( + "archive/zip" + "bytes" + "compress/gzip" + "context" + "fmt" + "io" + "io/ioutil" + "os" + "testing" + + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/zipartifacts" +) + +func generateTestArchive(w io.Writer) error { + archive := zip.NewWriter(w) + + // non-POSIX paths are here just to test if we never enter infinite loop + files := []string{"file1", "some/file/dir/", "some/file/dir/file2", "../../test12/test", + "/usr/bin/test", `c:\windows\win32.exe`, `c:/windows/win.dll`, "./f/asd", "/"} + + for _, file := range files { + archiveFile, err := archive.Create(file) + if err != nil { + return err + } + + fmt.Fprint(archiveFile, file) + } + + return archive.Close() +} + +func validateMetadata(r io.Reader) error { + gz, err := gzip.NewReader(r) + if err != nil { + return err + } + + meta, err := ioutil.ReadAll(gz) + if err != nil { + return err + } + + paths := []string{"file1", "some/", "some/file/", "some/file/dir/", "some/file/dir/file2"} + for _, path := range paths { + if !bytes.Contains(meta, []byte(path+"\x00")) { + return fmt.Errorf(fmt.Sprintf("zipartifacts: metadata for path %q not found", path)) + } + } + + return nil +} + +func TestGenerateZipMetadataFromFile(t *testing.T) { + var metaBuffer bytes.Buffer + + f, err := ioutil.TempFile("", "workhorse-metadata.zip-") + if f != nil { + defer os.Remove(f.Name()) + } + require.NoError(t, err) + defer f.Close() + + err = generateTestArchive(f) + require.NoError(t, err) + f.Close() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + archive, err := zipartifacts.OpenArchive(ctx, f.Name()) + require.NoError(t, err, "zipartifacts: OpenArchive failed") + + err = zipartifacts.GenerateZipMetadata(&metaBuffer, archive) + require.NoError(t, err, "zipartifacts: GenerateZipMetadata failed") + + err = validateMetadata(&metaBuffer) + require.NoError(t, err) +} + +func TestErrNotAZip(t *testing.T) { + f, err := ioutil.TempFile("", "workhorse-metadata.zip-") + if f != nil { + defer os.Remove(f.Name()) + } + require.NoError(t, err) + defer f.Close() + + _, err = fmt.Fprint(f, "Not a zip file") + require.NoError(t, err) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + _, err = zipartifacts.OpenArchive(ctx, f.Name()) + require.Equal(t, zipartifacts.ErrorCode[zipartifacts.CodeNotZip], err, "OpenArchive requires a zip file") +} diff --git a/workhorse/internal/zipartifacts/open_archive.go b/workhorse/internal/zipartifacts/open_archive.go new file mode 100644 index 00000000000..30b86b66c49 --- /dev/null +++ b/workhorse/internal/zipartifacts/open_archive.go @@ -0,0 +1,138 @@ +package zipartifacts + +import ( + "archive/zip" + "context" + "fmt" + "io" + "net" + "net/http" + "os" + "strings" + "time" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/httprs" + + "gitlab.com/gitlab-org/labkit/correlation" + "gitlab.com/gitlab-org/labkit/mask" + "gitlab.com/gitlab-org/labkit/tracing" +) + +var httpClient = &http.Client{ + Transport: tracing.NewRoundTripper(correlation.NewInstrumentedRoundTripper(&http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 10 * time.Second, + }).DialContext, + IdleConnTimeout: 30 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 10 * time.Second, + ResponseHeaderTimeout: 30 * time.Second, + DisableCompression: true, + })), +} + +type archive struct { + reader io.ReaderAt + size int64 +} + +// OpenArchive will open a zip.Reader from a local path or a remote object store URL +// in case of remote url it will make use of ranged requestes to support seeking. +// If the path do not exists error will be ErrArchiveNotFound, +// if the file isn't a zip archive error will be ErrNotAZip +func OpenArchive(ctx context.Context, archivePath string) (*zip.Reader, error) { + archive, err := openArchiveLocation(ctx, archivePath) + if err != nil { + return nil, err + } + + return openZipReader(archive.reader, archive.size) +} + +// OpenArchiveWithReaderFunc opens a zip.Reader from either local path or a +// remote object, similarly to OpenArchive function. The difference is that it +// allows passing a readerFunc that takes a io.ReaderAt that is either going to +// be os.File or a custom reader we use to read from object storage. The +// readerFunc can augment the archive reader and return a type that satisfies +// io.ReaderAt. +func OpenArchiveWithReaderFunc(ctx context.Context, location string, readerFunc func(io.ReaderAt, int64) io.ReaderAt) (*zip.Reader, error) { + archive, err := openArchiveLocation(ctx, location) + if err != nil { + return nil, err + } + + return openZipReader(readerFunc(archive.reader, archive.size), archive.size) +} + +func openArchiveLocation(ctx context.Context, location string) (*archive, error) { + if isURL(location) { + return openHTTPArchive(ctx, location) + } + + return openFileArchive(ctx, location) +} + +func isURL(path string) bool { + return strings.HasPrefix(path, "http://") || strings.HasPrefix(path, "https://") +} + +func openHTTPArchive(ctx context.Context, archivePath string) (*archive, error) { + scrubbedArchivePath := mask.URL(archivePath) + req, err := http.NewRequest(http.MethodGet, archivePath, nil) + if err != nil { + return nil, fmt.Errorf("can't create HTTP GET %q: %v", scrubbedArchivePath, err) + } + req = req.WithContext(ctx) + + resp, err := httpClient.Do(req.WithContext(ctx)) + if err != nil { + return nil, fmt.Errorf("HTTP GET %q: %v", scrubbedArchivePath, err) + } else if resp.StatusCode == http.StatusNotFound { + return nil, ErrorCode[CodeArchiveNotFound] + } else if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("HTTP GET %q: %d: %v", scrubbedArchivePath, resp.StatusCode, resp.Status) + } + + rs := httprs.NewHttpReadSeeker(resp, httpClient) + + go func() { + <-ctx.Done() + resp.Body.Close() + rs.Close() + }() + + return &archive{reader: rs, size: resp.ContentLength}, nil +} + +func openFileArchive(ctx context.Context, archivePath string) (*archive, error) { + file, err := os.Open(archivePath) + if err != nil { + if os.IsNotExist(err) { + return nil, ErrorCode[CodeArchiveNotFound] + } + } + + go func() { + <-ctx.Done() + // We close the archive from this goroutine so that we can safely return a *zip.Reader instead of a *zip.ReadCloser + file.Close() + }() + + stat, err := file.Stat() + if err != nil { + return nil, err + } + + return &archive{reader: file, size: stat.Size()}, nil +} + +func openZipReader(archive io.ReaderAt, size int64) (*zip.Reader, error) { + reader, err := zip.NewReader(archive, size) + if err != nil { + return nil, ErrorCode[CodeNotZip] + } + + return reader, nil +} diff --git a/workhorse/internal/zipartifacts/open_archive_test.go b/workhorse/internal/zipartifacts/open_archive_test.go new file mode 100644 index 00000000000..f7624d053d9 --- /dev/null +++ b/workhorse/internal/zipartifacts/open_archive_test.go @@ -0,0 +1,68 @@ +package zipartifacts + +import ( + "archive/zip" + "context" + "fmt" + "io/ioutil" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestOpenHTTPArchive(t *testing.T) { + const ( + zipFile = "test.zip" + entryName = "hello.txt" + contents = "world" + testRoot = "testdata/public" + ) + + require.NoError(t, os.MkdirAll(testRoot, 0755)) + f, err := os.Create(filepath.Join(testRoot, zipFile)) + require.NoError(t, err, "create file") + defer f.Close() + + zw := zip.NewWriter(f) + w, err := zw.Create(entryName) + require.NoError(t, err, "create zip entry") + _, err = fmt.Fprint(w, contents) + require.NoError(t, err, "write zip entry contents") + require.NoError(t, zw.Close(), "close zip writer") + require.NoError(t, f.Close(), "close file") + + srv := httptest.NewServer(http.FileServer(http.Dir(testRoot))) + defer srv.Close() + + zr, err := OpenArchive(context.Background(), srv.URL+"/"+zipFile) + require.NoError(t, err, "call OpenArchive") + require.Len(t, zr.File, 1) + + zf := zr.File[0] + require.Equal(t, entryName, zf.Name, "zip entry name") + + entry, err := zf.Open() + require.NoError(t, err, "get zip entry reader") + defer entry.Close() + + actualContents, err := ioutil.ReadAll(entry) + require.NoError(t, err, "read zip entry contents") + require.Equal(t, contents, string(actualContents), "compare zip entry contents") +} + +func TestOpenHTTPArchiveNotSendingAcceptEncodingHeader(t *testing.T) { + requestHandler := func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "GET", r.Method) + require.Nil(t, r.Header["Accept-Encoding"]) + w.WriteHeader(http.StatusOK) + } + + srv := httptest.NewServer(http.HandlerFunc(requestHandler)) + defer srv.Close() + + OpenArchive(context.Background(), srv.URL) +} diff --git a/workhorse/jobs_test.go b/workhorse/jobs_test.go new file mode 100644 index 00000000000..fe51fc58d6a --- /dev/null +++ b/workhorse/jobs_test.go @@ -0,0 +1,60 @@ +package main + +import ( + "io" + "net/http" + "net/http/httptest" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func startWorkhorseServerWithLongPolling(authBackend string, pollingDuration time.Duration) *httptest.Server { + uc := newUpstreamConfig(authBackend) + uc.APICILongPollingDuration = pollingDuration + return startWorkhorseServerWithConfig(uc) +} + +type requestJobFunction func(url string, body io.Reader) (*http.Response, error) + +func requestJobV1(url string, body io.Reader) (*http.Response, error) { + resource := `/ci/api/v1/builds/register.json` + return http.Post(url+resource, `application/json`, body) +} + +func requestJobV4(url string, body io.Reader) (*http.Response, error) { + resource := `/api/v4/jobs/request` + return http.Post(url+resource, `application/json`, body) +} + +func testJobsLongPolling(t *testing.T, pollingDuration time.Duration, requestJob requestJobFunction) *http.Response { + ws := startWorkhorseServerWithLongPolling("http://localhost/", pollingDuration) + defer ws.Close() + + resp, err := requestJob(ws.URL, nil) + require.NoError(t, err) + defer resp.Body.Close() + + return resp +} + +func testJobsLongPollingEndpointDisabled(t *testing.T, requestJob requestJobFunction) { + resp := testJobsLongPolling(t, 0, requestJob) + require.NotEqual(t, "yes", resp.Header.Get("Gitlab-Ci-Builds-Polling")) +} + +func testJobsLongPollingEndpoint(t *testing.T, requestJob requestJobFunction) { + resp := testJobsLongPolling(t, time.Minute, requestJob) + require.Equal(t, "yes", resp.Header.Get("Gitlab-Ci-Builds-Polling")) +} + +func TestJobsLongPollingEndpointDisabled(t *testing.T) { + testJobsLongPollingEndpointDisabled(t, requestJobV1) + testJobsLongPollingEndpointDisabled(t, requestJobV4) +} + +func TestJobsLongPollingEndpoint(t *testing.T) { + testJobsLongPollingEndpoint(t, requestJobV1) + testJobsLongPollingEndpoint(t, requestJobV4) +} diff --git a/workhorse/logging.go b/workhorse/logging.go new file mode 100644 index 00000000000..69718e6e834 --- /dev/null +++ b/workhorse/logging.go @@ -0,0 +1,72 @@ +package main + +import ( + "fmt" + "io" + "io/ioutil" + goLog "log" + "os" + + log "github.com/sirupsen/logrus" + logkit "gitlab.com/gitlab-org/labkit/log" +) + +const ( + jsonLogFormat = "json" + textLogFormat = "text" + structuredFormat = "structured" + noneLogType = "none" +) + +func startLogging(file string, format string) (io.Closer, error) { + // Golog always goes to stderr + goLog.SetOutput(os.Stderr) + + if file == "" { + file = "stderr" + } + + switch format { + case noneLogType: + return logkit.Initialize(logkit.WithWriter(ioutil.Discard)) + case jsonLogFormat: + return logkit.Initialize( + logkit.WithOutputName(file), + logkit.WithFormatter("json"), + ) + case textLogFormat: + // In this mode, default (non-access) logs will always go to stderr + return logkit.Initialize( + logkit.WithOutputName("stderr"), + logkit.WithFormatter("text"), + ) + case structuredFormat: + return logkit.Initialize( + logkit.WithOutputName(file), + logkit.WithFormatter("color"), + ) + } + + return nil, fmt.Errorf("unknown logFormat: %v", format) +} + +// In text format, we use a separate logger for access logs +func getAccessLogger(file string, format string) (*log.Logger, io.Closer, error) { + if format != "text" { + return log.StandardLogger(), ioutil.NopCloser(nil), nil + } + + if file == "" { + file = "stderr" + } + + accessLogger := log.New() + accessLogger.SetLevel(log.InfoLevel) + closer, err := logkit.Initialize( + logkit.WithLogger(accessLogger), // Configure `accessLogger` + logkit.WithFormatter("combined"), // Use the combined formatter + logkit.WithOutputName(file), + ) + + return accessLogger, closer, err +} diff --git a/workhorse/main.go b/workhorse/main.go new file mode 100644 index 00000000000..e50bb6c9634 --- /dev/null +++ b/workhorse/main.go @@ -0,0 +1,230 @@ +package main + +import ( + "flag" + "fmt" + "io/ioutil" + "net" + "net/http" + _ "net/http/pprof" + "os" + "syscall" + "time" + + "gitlab.com/gitlab-org/labkit/log" + "gitlab.com/gitlab-org/labkit/monitoring" + "gitlab.com/gitlab-org/labkit/tracing" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/queueing" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/redis" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/secret" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upstream" +) + +// Version is the current version of GitLab Workhorse +var Version = "(unknown version)" // Set at build time in the Makefile + +// BuildTime signifies the time the binary was build +var BuildTime = "19700101.000000" // Set at build time in the Makefile + +type bootConfig struct { + secretPath string + listenAddr string + listenNetwork string + listenUmask int + pprofListenAddr string + prometheusListenAddr string + logFile string + logFormat string + printVersion bool +} + +func main() { + boot, cfg, err := buildConfig(os.Args[0], os.Args[1:]) + if err == (alreadyPrintedError{flag.ErrHelp}) { + os.Exit(0) + } + if err != nil { + if _, alreadyPrinted := err.(alreadyPrintedError); !alreadyPrinted { + fmt.Fprintln(os.Stderr, err) + } + os.Exit(2) + } + + if boot.printVersion { + fmt.Printf("gitlab-workhorse %s-%s\n", Version, BuildTime) + os.Exit(0) + } + + log.WithError(run(*boot, *cfg)).Fatal("shutting down") +} + +type alreadyPrintedError struct{ error } + +// buildConfig may print messages to os.Stderr if err != nil. If err is +// of type alreadyPrintedError it has already been printed. +func buildConfig(arg0 string, args []string) (*bootConfig, *config.Config, error) { + boot := &bootConfig{} + cfg := &config.Config{Version: Version} + fset := flag.NewFlagSet(arg0, flag.ContinueOnError) + fset.Usage = func() { + fmt.Fprintf(fset.Output(), "Usage of %s:\n", arg0) + fmt.Fprintf(fset.Output(), "\n %s [OPTIONS]\n\nOptions:\n", arg0) + fset.PrintDefaults() + } + + configFile := fset.String("config", "", "TOML file to load config from") + + fset.StringVar(&boot.secretPath, "secretPath", "./.gitlab_workhorse_secret", "File with secret key to authenticate with authBackend") + fset.StringVar(&boot.listenAddr, "listenAddr", "localhost:8181", "Listen address for HTTP server") + fset.StringVar(&boot.listenNetwork, "listenNetwork", "tcp", "Listen 'network' (tcp, tcp4, tcp6, unix)") + fset.IntVar(&boot.listenUmask, "listenUmask", 0, "Umask for Unix socket") + fset.StringVar(&boot.pprofListenAddr, "pprofListenAddr", "", "pprof listening address, e.g. 'localhost:6060'") + fset.StringVar(&boot.prometheusListenAddr, "prometheusListenAddr", "", "Prometheus listening address, e.g. 'localhost:9229'") + + fset.StringVar(&boot.logFile, "logFile", "", "Log file location") + fset.StringVar(&boot.logFormat, "logFormat", "text", "Log format to use defaults to text (text, json, structured, none)") + + fset.BoolVar(&boot.printVersion, "version", false, "Print version and exit") + + // gitlab-rails backend + authBackend := fset.String("authBackend", upstream.DefaultBackend.String(), "Authentication/authorization backend") + fset.StringVar(&cfg.Socket, "authSocket", "", "Optional: Unix domain socket to dial authBackend at") + + // actioncable backend + cableBackend := fset.String("cableBackend", upstream.DefaultBackend.String(), "ActionCable backend") + fset.StringVar(&cfg.CableSocket, "cableSocket", "", "Optional: Unix domain socket to dial cableBackend at") + + fset.StringVar(&cfg.DocumentRoot, "documentRoot", "public", "Path to static files content") + fset.DurationVar(&cfg.ProxyHeadersTimeout, "proxyHeadersTimeout", 5*time.Minute, "How long to wait for response headers when proxying the request") + fset.BoolVar(&cfg.DevelopmentMode, "developmentMode", false, "Allow the assets to be served from Rails app") + fset.UintVar(&cfg.APILimit, "apiLimit", 0, "Number of API requests allowed at single time") + fset.UintVar(&cfg.APIQueueLimit, "apiQueueLimit", 0, "Number of API requests allowed to be queued") + fset.DurationVar(&cfg.APIQueueTimeout, "apiQueueDuration", queueing.DefaultTimeout, "Maximum queueing duration of requests") + fset.DurationVar(&cfg.APICILongPollingDuration, "apiCiLongPollingDuration", 50, "Long polling duration for job requesting for runners (default 50s - enabled)") + fset.BoolVar(&cfg.PropagateCorrelationID, "propagateCorrelationID", false, "Reuse existing Correlation-ID from the incoming request header `X-Request-ID` if present") + + if err := fset.Parse(args); err != nil { + return nil, nil, alreadyPrintedError{err} + } + if fset.NArg() > 0 { + err := alreadyPrintedError{fmt.Errorf("unexpected arguments: %v", fset.Args())} + fmt.Fprintln(fset.Output(), err) + fset.Usage() + return nil, nil, err + } + + var err error + cfg.Backend, err = parseAuthBackend(*authBackend) + if err != nil { + return nil, nil, fmt.Errorf("authBackend: %v", err) + } + + cfg.CableBackend, err = parseAuthBackend(*cableBackend) + if err != nil { + return nil, nil, fmt.Errorf("cableBackend: %v", err) + } + + tomlData := "" + if *configFile != "" { + buf, err := ioutil.ReadFile(*configFile) + if err != nil { + return nil, nil, fmt.Errorf("configFile: %v", err) + } + tomlData = string(buf) + } + + cfgFromFile, err := config.LoadConfig(tomlData) + if err != nil { + return nil, nil, fmt.Errorf("configFile: %v", err) + } + + cfg.Redis = cfgFromFile.Redis + cfg.ObjectStorageCredentials = cfgFromFile.ObjectStorageCredentials + cfg.ImageResizerConfig = cfgFromFile.ImageResizerConfig + + return boot, cfg, nil +} + +// run() lets us use normal Go error handling; there is no log.Fatal in run(). +func run(boot bootConfig, cfg config.Config) error { + closer, err := startLogging(boot.logFile, boot.logFormat) + if err != nil { + return err + } + defer closer.Close() + + tracing.Initialize(tracing.WithServiceName("gitlab-workhorse")) + log.WithField("version", Version).WithField("build_time", BuildTime).Print("Starting") + + // Good housekeeping for Unix sockets: unlink before binding + if boot.listenNetwork == "unix" { + if err := os.Remove(boot.listenAddr); err != nil && !os.IsNotExist(err) { + return err + } + } + + // Change the umask only around net.Listen() + oldUmask := syscall.Umask(boot.listenUmask) + listener, err := net.Listen(boot.listenNetwork, boot.listenAddr) + syscall.Umask(oldUmask) + if err != nil { + return fmt.Errorf("main listener: %v", err) + } + + finalErrors := make(chan error) + + // The profiler will only be activated by HTTP requests. HTTP + // requests can only reach the profiler if we start a listener. So by + // having no profiler HTTP listener by default, the profiler is + // effectively disabled by default. + if boot.pprofListenAddr != "" { + l, err := net.Listen("tcp", boot.pprofListenAddr) + if err != nil { + return fmt.Errorf("pprofListenAddr: %v", err) + } + + go func() { finalErrors <- http.Serve(l, nil) }() + } + + monitoringOpts := []monitoring.Option{monitoring.WithBuildInformation(Version, BuildTime)} + + if boot.prometheusListenAddr != "" { + l, err := net.Listen("tcp", boot.prometheusListenAddr) + if err != nil { + return fmt.Errorf("prometheusListenAddr: %v", err) + } + monitoringOpts = append(monitoringOpts, monitoring.WithListener(l)) + } + go func() { + // Unlike http.Serve, which always returns a non-nil error, + // monitoring.Start may return nil in which case we should not shut down. + if err := monitoring.Start(monitoringOpts...); err != nil { + finalErrors <- err + } + }() + + secret.SetPath(boot.secretPath) + + if cfg.Redis != nil { + redis.Configure(cfg.Redis, redis.DefaultDialFunc) + go redis.Process() + } + + if err := cfg.RegisterGoCloudURLOpeners(); err != nil { + return fmt.Errorf("register cloud credentials: %v", err) + } + + accessLogger, accessCloser, err := getAccessLogger(boot.logFile, boot.logFormat) + if err != nil { + return fmt.Errorf("configure access logger: %v", err) + } + defer accessCloser.Close() + + up := wrapRaven(upstream.NewUpstream(cfg, accessLogger)) + + go func() { finalErrors <- http.Serve(listener, up) }() + + return <-finalErrors +} diff --git a/workhorse/main_test.go b/workhorse/main_test.go new file mode 100644 index 00000000000..b2fce28d498 --- /dev/null +++ b/workhorse/main_test.go @@ -0,0 +1,785 @@ +package main + +import ( + "bytes" + "compress/gzip" + "encoding/base64" + "encoding/json" + "fmt" + "image/png" + "io" + "io/ioutil" + "net/http" + "net/http/httptest" + "net/url" + "os" + "os/exec" + "path" + "regexp" + "strconv" + "strings" + "testing" + "time" + + "github.com/sirupsen/logrus" + "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + "gitlab.com/gitlab-org/labkit/log" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/config" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/secret" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upstream" +) + +const scratchDir = "testdata/scratch" +const testRepoRoot = "testdata/data" +const testDocumentRoot = "testdata/public" + +var absDocumentRoot string + +const testRepo = "group/test.git" +const testProject = "group/test" + +var checkoutDir = path.Join(scratchDir, "test") +var cacheDir = path.Join(scratchDir, "cache") + +func TestMain(m *testing.M) { + if _, err := os.Stat(path.Join(testRepoRoot, testRepo)); os.IsNotExist(err) { + log.WithError(err).Fatal("cannot find test repository. Please run 'make prepare-tests'") + } + + if err := testhelper.BuildExecutables(); err != nil { + log.WithError(err).Fatal() + } + + defer gitaly.CloseConnections() + + os.Exit(m.Run()) +} + +func TestDeniedClone(t *testing.T) { + // Prepare clone directory + require.NoError(t, os.RemoveAll(scratchDir)) + + // Prepare test server and backend + ts := testAuthServer(t, nil, nil, 403, "Access denied") + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + // Do the git clone + cloneCmd := exec.Command("git", "clone", fmt.Sprintf("%s/%s", ws.URL, testRepo), checkoutDir) + out, err := cloneCmd.CombinedOutput() + t.Log(string(out)) + require.Error(t, err, "git clone should have failed") +} + +func TestDeniedPush(t *testing.T) { + // Prepare the test server and backend + ts := testAuthServer(t, nil, nil, 403, "Access denied") + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + // Perform the git push + pushCmd := exec.Command("git", "push", "-v", fmt.Sprintf("%s/%s", ws.URL, testRepo), fmt.Sprintf("master:%s", newBranch())) + pushCmd.Dir = checkoutDir + out, err := pushCmd.CombinedOutput() + t.Log(string(out)) + require.Error(t, err, "git push should have failed") +} + +func TestRegularProjectsAPI(t *testing.T) { + apiResponse := "API RESPONSE" + + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, _ *http.Request) { + _, err := w.Write([]byte(apiResponse)) + require.NoError(t, err) + }) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + for _, resource := range []string{ + "/api/v3/projects/123/repository/not/special", + "/api/v3/projects/foo%2Fbar/repository/not/special", + "/api/v3/projects/123/not/special", + "/api/v3/projects/foo%2Fbar/not/special", + "/api/v3/projects/foo%2Fbar%2Fbaz/repository/not/special", + "/api/v3/projects/foo%2Fbar%2Fbaz%2Fqux/repository/not/special", + } { + resp, body := httpGet(t, ws.URL+resource, nil) + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resource) + require.Equal(t, apiResponse, body, "GET %q: response body", resource) + requireNginxResponseBuffering(t, "", resp, "GET %q: nginx response buffering", resource) + } +} + +func TestAllowedXSendfileDownload(t *testing.T) { + contentFilename := "my-content" + prepareDownloadDir(t) + + allowedXSendfileDownload(t, contentFilename, "foo/uploads/bar") +} + +func TestDeniedXSendfileDownload(t *testing.T) { + contentFilename := "my-content" + prepareDownloadDir(t) + + deniedXSendfileDownload(t, contentFilename, "foo/uploads/bar") +} + +func TestAllowedStaticFile(t *testing.T) { + content := "PUBLIC" + require.NoError(t, setupStaticFile("static file.txt", content)) + + proxied := false + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, r *http.Request) { + proxied = true + w.WriteHeader(404) + }) + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + for _, resource := range []string{ + "/static%20file.txt", + "/static file.txt", + } { + resp, body := httpGet(t, ws.URL+resource, nil) + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resource) + require.Equal(t, content, body, "GET %q: response body", resource) + requireNginxResponseBuffering(t, "no", resp, "GET %q: nginx response buffering", resource) + require.False(t, proxied, "GET %q: should not have made it to backend", resource) + } +} + +func TestStaticFileRelativeURL(t *testing.T) { + content := "PUBLIC" + require.NoError(t, setupStaticFile("static.txt", content), "create public/static.txt") + + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), http.HandlerFunc(http.NotFound)) + defer ts.Close() + backendURLString := ts.URL + "/my-relative-url" + log.Info(backendURLString) + ws := startWorkhorseServer(backendURLString) + defer ws.Close() + + resource := "/my-relative-url/static.txt" + resp, body := httpGet(t, ws.URL+resource, nil) + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resource) + require.Equal(t, content, body, "GET %q: response body", resource) +} + +func TestAllowedPublicUploadsFile(t *testing.T) { + content := "PRIVATE but allowed" + require.NoError(t, setupStaticFile("uploads/static file.txt", content), "create public/uploads/static file.txt") + + proxied := false + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, r *http.Request) { + proxied = true + w.Header().Add("X-Sendfile", absDocumentRoot+r.URL.Path) + w.WriteHeader(200) + }) + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + for _, resource := range []string{ + "/uploads/static%20file.txt", + "/uploads/static file.txt", + } { + resp, body := httpGet(t, ws.URL+resource, nil) + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resource) + require.Equal(t, content, body, "GET %q: response body", resource) + require.True(t, proxied, "GET %q: never made it to backend", resource) + } +} + +func TestDeniedPublicUploadsFile(t *testing.T) { + content := "PRIVATE" + require.NoError(t, setupStaticFile("uploads/static.txt", content), "create public/uploads/static.txt") + + proxied := false + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, _ *http.Request) { + proxied = true + w.WriteHeader(404) + }) + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + for _, resource := range []string{ + "/uploads/static.txt", + "/uploads%2Fstatic.txt", + } { + resp, body := httpGet(t, ws.URL+resource, nil) + + require.Equal(t, 404, resp.StatusCode, "GET %q: status code", resource) + require.Equal(t, "", body, "GET %q: response body", resource) + require.True(t, proxied, "GET %q: never made it to backend", resource) + } +} + +func TestStaticErrorPage(t *testing.T) { + errorPageBody := ` + +This is a static error page for code 499 + + +` + require.NoError(t, setupStaticFile("499.html", errorPageBody)) + ts := testhelper.TestServerWithHandler(nil, func(w http.ResponseWriter, _ *http.Request) { + upstreamError := "499" + // This is the point of the test: the size of the upstream response body + // should be overridden. + require.NotEqual(t, len(upstreamError), len(errorPageBody)) + w.WriteHeader(499) + _, err := w.Write([]byte(upstreamError)) + require.NoError(t, err) + }) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + resourcePath := "/error-499" + resp, body := httpGet(t, ws.URL+resourcePath, nil) + + require.Equal(t, 499, resp.StatusCode, "GET %q: status code", resourcePath) + require.Equal(t, string(errorPageBody), body, "GET %q: response body", resourcePath) +} + +func TestGzipAssets(t *testing.T) { + path := "/assets/static.txt" + content := "asset" + require.NoError(t, setupStaticFile(path, content)) + + buf := &bytes.Buffer{} + gzipWriter := gzip.NewWriter(buf) + _, err := gzipWriter.Write([]byte(content)) + require.NoError(t, err) + require.NoError(t, gzipWriter.Close()) + contentGzip := buf.String() + require.NoError(t, setupStaticFile(path+".gz", contentGzip)) + + proxied := false + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, r *http.Request) { + proxied = true + w.WriteHeader(404) + }) + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + testCases := []struct { + content string + path string + acceptEncoding string + contentEncoding string + }{ + {content: content, path: path}, + {content: contentGzip, path: path, acceptEncoding: "gzip", contentEncoding: "gzip"}, + {content: contentGzip, path: path, acceptEncoding: "gzip, compress, br", contentEncoding: "gzip"}, + {content: contentGzip, path: path, acceptEncoding: "br;q=1.0, gzip;q=0.8, *;q=0.1", contentEncoding: "gzip"}, + } + + for _, tc := range testCases { + desc := fmt.Sprintf("accept-encoding: %q", tc.acceptEncoding) + req, err := http.NewRequest("GET", ws.URL+tc.path, nil) + require.NoError(t, err, desc) + req.Header.Set("Accept-Encoding", tc.acceptEncoding) + + resp, err := http.DefaultTransport.RoundTrip(req) + require.NoError(t, err, desc) + defer resp.Body.Close() + b, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err, desc) + + require.Equal(t, 200, resp.StatusCode, "%s: status code", desc) + require.Equal(t, tc.content, string(b), "%s: response body", desc) + require.Equal(t, tc.contentEncoding, resp.Header.Get("Content-Encoding"), "%s: response body", desc) + require.False(t, proxied, "%s: should not have made it to backend", desc) + } +} + +var sendDataHeader = "Gitlab-Workhorse-Send-Data" + +func sendDataResponder(command string, literalJSON string) *httptest.Server { + handler := func(w http.ResponseWriter, r *http.Request) { + data := base64.URLEncoding.EncodeToString([]byte(literalJSON)) + w.Header().Set(sendDataHeader, fmt.Sprintf("%s:%s", command, data)) + + // This should never be returned + if _, err := fmt.Fprintf(w, "gibberish"); err != nil { + panic(err) + } + } + + return testhelper.TestServerWithHandler(regexp.MustCompile(`.`), handler) +} + +func doSendDataRequest(path string, command, literalJSON string) (*http.Response, []byte, error) { + ts := sendDataResponder(command, literalJSON) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + resp, err := http.Get(ws.URL + path) + if err != nil { + return nil, nil, err + } + defer resp.Body.Close() + + bodyData, err := ioutil.ReadAll(resp.Body) + if err != nil { + return resp, nil, err + } + + headerValue := resp.Header.Get(sendDataHeader) + if headerValue != "" { + return resp, bodyData, fmt.Errorf("%s header should not be present, but has value %q", sendDataHeader, headerValue) + } + + return resp, bodyData, nil +} + +func TestArtifactsGetSingleFile(t *testing.T) { + // We manually created this zip file in the gitlab-workhorse Git repository + archivePath := `testdata/artifacts-archive.zip` + fileName := "myfile" + fileContents := "MY FILE" + resourcePath := `/namespace/project/builds/123/artifacts/file/` + fileName + encodedFilename := base64.StdEncoding.EncodeToString([]byte(fileName)) + jsonParams := fmt.Sprintf(`{"Archive":"%s","Entry":"%s"}`, archivePath, encodedFilename) + + resp, body, err := doSendDataRequest(resourcePath, "artifacts-entry", jsonParams) + require.NoError(t, err) + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resourcePath) + require.Equal(t, fileContents, string(body), "GET %q: response body", resourcePath) + requireNginxResponseBuffering(t, "no", resp, "GET %q: nginx response buffering", resourcePath) +} + +func TestImageResizing(t *testing.T) { + imageLocation := `testdata/image.png` + requestedWidth := 40 + imageFormat := "image/png" + jsonParams := fmt.Sprintf(`{"Location":"%s","Width":%d, "ContentType":"%s"}`, imageLocation, requestedWidth, imageFormat) + resourcePath := "/uploads/-/system/user/avatar/123/avatar.png?width=40" + + resp, body, err := doSendDataRequest(resourcePath, "send-scaled-img", jsonParams) + require.NoError(t, err, "send resize request") + require.Equal(t, 200, resp.StatusCode, "GET %q: body: %s", resourcePath, body) + + img, err := png.Decode(bytes.NewReader(body)) + require.NoError(t, err, "decode resized image") + + bounds := img.Bounds() + require.Equal(t, requestedWidth, bounds.Size().X, "wrong width after resizing") +} + +func TestSendURLForArtifacts(t *testing.T) { + expectedBody := strings.Repeat("CONTENT!", 1024) + + regularHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Length", strconv.Itoa(len(expectedBody))) + w.Write([]byte(expectedBody)) + }) + + chunkedHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Transfer-Encoding", "chunked") + w.Write([]byte(expectedBody)) + }) + + rawHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + hj, ok := w.(http.Hijacker) + require.Equal(t, true, ok) + + conn, buf, err := hj.Hijack() + require.NoError(t, err) + defer conn.Close() + defer buf.Flush() + + fmt.Fprint(buf, "HTTP/1.1 200 OK\r\nContent-Type: application/zip\r\n\r\n") + fmt.Fprint(buf, expectedBody) + }) + + for _, tc := range []struct { + name string + handler http.Handler + transferEncoding []string + contentLength int + }{ + {"No content-length, chunked TE", chunkedHandler, []string{"chunked"}, -1}, // Case 3 in https://tools.ietf.org/html/rfc7230#section-3.3.2 + {"Known content-length, identity TE", regularHandler, nil, len(expectedBody)}, // Case 5 in https://tools.ietf.org/html/rfc7230#section-3.3.2 + {"No content-length, identity TE", rawHandler, []string{"chunked"}, -1}, // Case 7 in https://tools.ietf.org/html/rfc7230#section-3.3.2 + } { + t.Run(tc.name, func(t *testing.T) { + server := httptest.NewServer(tc.handler) + defer server.Close() + + jsonParams := fmt.Sprintf(`{"URL":%q}`, server.URL) + + resourcePath := `/namespace/project/builds/123/artifacts/file/download` + resp, body, err := doSendDataRequest(resourcePath, "send-url", jsonParams) + require.NoError(t, err) + + require.Equal(t, http.StatusOK, resp.StatusCode, "GET %q: status code", resourcePath) + require.Equal(t, int64(tc.contentLength), resp.ContentLength, "GET %q: Content-Length", resourcePath) + require.Equal(t, tc.transferEncoding, resp.TransferEncoding, "GET %q: Transfer-Encoding", resourcePath) + require.Equal(t, expectedBody, string(body), "GET %q: response body", resourcePath) + requireNginxResponseBuffering(t, "no", resp, "GET %q: nginx response buffering", resourcePath) + }) + } +} + +func TestApiContentTypeBlock(t *testing.T) { + wrongResponse := `{"hello":"world"}` + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", api.ResponseContentType) + _, err := w.Write([]byte(wrongResponse)) + require.NoError(t, err, "write upstream response") + }) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + resourcePath := "/something" + resp, body := httpGet(t, ws.URL+resourcePath, nil) + + require.Equal(t, 500, resp.StatusCode, "GET %q: status code", resourcePath) + require.NotContains(t, wrongResponse, body, "GET %q: response body", resourcePath) +} + +func TestAPIFalsePositivesAreProxied(t *testing.T) { + goodResponse := []byte(``) + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, r *http.Request) { + if r.Header.Get(secret.RequestHeader) != "" && r.Method != "GET" { + w.WriteHeader(500) + w.Write([]byte("non-GET request went through PreAuthorize handler")) + } else { + w.Header().Set("Content-Type", "text/html") + _, err := w.Write(goodResponse) + require.NoError(t, err) + } + }) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + // Each of these cases is a specially-handled path in Workhorse that may + // actually be a request to be sent to gitlab-rails. + for _, tc := range []struct { + method string + path string + }{ + {"GET", "/nested/group/project/blob/master/foo.git/info/refs"}, + {"POST", "/nested/group/project/blob/master/foo.git/git-upload-pack"}, + {"POST", "/nested/group/project/blob/master/foo.git/git-receive-pack"}, + {"PUT", "/nested/group/project/blob/master/foo.git/gitlab-lfs/objects/0000000000000000000000000000000000000000000000000000000000000000/0"}, + {"GET", "/nested/group/project/blob/master/environments/1/terminal.ws"}, + } { + t.Run(tc.method+"_"+tc.path, func(t *testing.T) { + req, err := http.NewRequest(tc.method, ws.URL+tc.path, nil) + require.NoError(t, err, "Constructing %s %q", tc.method, tc.path) + resp, err := http.DefaultClient.Do(req) + require.NoError(t, err, "%s %q", tc.method, tc.path) + defer resp.Body.Close() + + respBody, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err, "%s %q: reading body", tc.method, tc.path) + + require.Equal(t, 200, resp.StatusCode, "%s %q: status code", tc.method, tc.path) + testhelper.RequireResponseHeader(t, resp, "Content-Type", "text/html") + require.Equal(t, string(goodResponse), string(respBody), "%s %q: response body", tc.method, tc.path) + }) + } +} + +func TestCorrelationIdHeader(t *testing.T) { + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, r *http.Request) { + w.Header().Add("X-Request-Id", "12345678") + w.WriteHeader(200) + }) + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + for _, resource := range []string{ + "/api/v3/projects/123/repository/not/special", + } { + resp, _ := httpGet(t, ws.URL+resource, nil) + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resource) + requestIds := resp.Header["X-Request-Id"] + require.Equal(t, 1, len(requestIds), "GET %q: One X-Request-Id present", resource) + } +} + +func TestPropagateCorrelationIdHeader(t *testing.T) { + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, r *http.Request) { + w.Header().Add("X-Request-Id", r.Header.Get("X-Request-Id")) + w.WriteHeader(200) + }) + defer ts.Close() + + testCases := []struct { + desc string + propagateCorrelationID bool + }{ + { + desc: "propagateCorrelatedId is true", + propagateCorrelationID: true, + }, + { + desc: "propagateCorrelatedId is false", + propagateCorrelationID: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.desc, func(t *testing.T) { + upstreamConfig := newUpstreamConfig(ts.URL) + upstreamConfig.PropagateCorrelationID = tc.propagateCorrelationID + + ws := startWorkhorseServerWithConfig(upstreamConfig) + defer ws.Close() + + resource := "/api/v3/projects/123/repository/not/special" + propagatedRequestId := "Propagated-RequestId-12345678" + resp, _ := httpGet(t, ws.URL+resource, map[string]string{"X-Request-Id": propagatedRequestId}) + requestIds := resp.Header["X-Request-Id"] + + require.Equal(t, 200, resp.StatusCode, "GET %q: status code", resource) + require.Equal(t, 1, len(requestIds), "GET %q: One X-Request-Id present", resource) + + if tc.propagateCorrelationID { + require.Contains(t, requestIds, propagatedRequestId, "GET %q: Has X-Request-Id %s present", resource, propagatedRequestId) + } else { + require.NotContains(t, requestIds, propagatedRequestId, "GET %q: X-Request-Id not propagated") + } + }) + } +} + +func setupStaticFile(fpath, content string) error { + cwd, err := os.Getwd() + if err != nil { + return err + } + absDocumentRoot = path.Join(cwd, testDocumentRoot) + if err := os.MkdirAll(path.Join(absDocumentRoot, path.Dir(fpath)), 0755); err != nil { + return err + } + staticFile := path.Join(absDocumentRoot, fpath) + return ioutil.WriteFile(staticFile, []byte(content), 0666) +} + +func prepareDownloadDir(t *testing.T) { + require.NoError(t, os.RemoveAll(scratchDir)) + require.NoError(t, os.MkdirAll(scratchDir, 0755)) +} + +func newBranch() string { + return fmt.Sprintf("branch-%d", time.Now().UnixNano()) +} + +func testAuthServer(t *testing.T, url *regexp.Regexp, params url.Values, code int, body interface{}) *httptest.Server { + return testhelper.TestServerWithHandler(url, func(w http.ResponseWriter, r *http.Request) { + require.NotEmpty(t, r.Header.Get("X-Request-Id")) + + w.Header().Set("Content-Type", api.ResponseContentType) + + logEntry := log.WithFields(log.Fields{ + "method": r.Method, + "url": r.URL, + }) + logEntryWithCode := logEntry.WithField("code", code) + + if params != nil { + currentParams := r.URL.Query() + for key := range params { + if currentParams.Get(key) != params.Get(key) { + logEntry.Info("UPSTREAM", "DENY", "invalid auth server params") + w.WriteHeader(http.StatusForbidden) + return + } + } + } + + // Write pure string + if data, ok := body.(string); ok { + logEntryWithCode.Info("UPSTREAM") + + w.WriteHeader(code) + fmt.Fprint(w, data) + return + } + + // Write json string + data, err := json.Marshal(body) + if err != nil { + logEntry.WithError(err).Error("UPSTREAM") + + w.WriteHeader(503) + fmt.Fprint(w, err) + return + } + + logEntryWithCode.Info("UPSTREAM") + + w.WriteHeader(code) + w.Write(data) + }) +} + +func newUpstreamConfig(authBackend string) *config.Config { + return &config.Config{ + Version: "123", + DocumentRoot: testDocumentRoot, + Backend: helper.URLMustParse(authBackend), + ImageResizerConfig: config.DefaultImageResizerConfig, + } +} + +func startWorkhorseServer(authBackend string) *httptest.Server { + return startWorkhorseServerWithConfig(newUpstreamConfig(authBackend)) +} + +func startWorkhorseServerWithConfig(cfg *config.Config) *httptest.Server { + testhelper.ConfigureSecret() + u := upstream.NewUpstream(*cfg, logrus.StandardLogger()) + + return httptest.NewServer(u) +} + +func runOrFail(t *testing.T, cmd *exec.Cmd) { + out, err := cmd.CombinedOutput() + t.Logf("%s", out) + require.NoError(t, err) +} + +func gitOkBody(t *testing.T) *api.Response { + return &api.Response{ + GL_ID: "user-123", + GL_USERNAME: "username", + Repository: gitalypb.Repository{ + StorageName: "default", + RelativePath: "foo/bar.git", + }, + } +} + +func httpGet(t *testing.T, url string, headers map[string]string) (*http.Response, string) { + req, err := http.NewRequest("GET", url, nil) + require.NoError(t, err) + + for k, v := range headers { + req.Header.Set(k, v) + } + + resp, err := http.DefaultClient.Do(req) + require.NoError(t, err) + defer resp.Body.Close() + + b, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + return resp, string(b) +} + +func httpPost(t *testing.T, url string, headers map[string]string, reqBody io.Reader) *http.Response { + req, err := http.NewRequest("POST", url, reqBody) + require.NoError(t, err) + + for k, v := range headers { + req.Header.Set(k, v) + } + + resp, err := http.DefaultClient.Do(req) + require.NoError(t, err) + + return resp +} + +func requireNginxResponseBuffering(t *testing.T, expected string, resp *http.Response, msgAndArgs ...interface{}) { + actual := resp.Header.Get(helper.NginxResponseBufferHeader) + require.Equal(t, expected, actual, msgAndArgs...) +} + +// TestHealthChecksNoStaticHTML verifies that health endpoints pass errors through and don't return the static html error pages +func TestHealthChecksNoStaticHTML(t *testing.T) { + apiResponse := "API RESPONSE" + errorPageBody := ` + +This is a static error page for code 503 + + +` + require.NoError(t, setupStaticFile("503.html", errorPageBody)) + + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("X-Gitlab-Custom-Error", "1") + w.WriteHeader(503) + _, err := w.Write([]byte(apiResponse)) + require.NoError(t, err) + }) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + for _, resource := range []string{ + "/-/health", + "/-/readiness", + "/-/liveness", + } { + t.Run(resource, func(t *testing.T) { + resp, body := httpGet(t, ws.URL+resource, nil) + + require.Equal(t, 503, resp.StatusCode, "status code") + require.Equal(t, apiResponse, body, "response body") + requireNginxResponseBuffering(t, "", resp, "nginx response buffering") + }) + } +} + +// TestHealthChecksUnreachable verifies that health endpoints return the correct content-type when the upstream is down +func TestHealthChecksUnreachable(t *testing.T) { + ws := startWorkhorseServer("http://127.0.0.1:99999") // This url should point to nothing for the test to be accurate (equivalent to upstream being down) + defer ws.Close() + + testCases := []struct { + path string + content string + responseType string + }{ + {path: "/-/health", content: "Bad Gateway\n", responseType: "text/plain; charset=utf-8"}, + {path: "/-/readiness", content: "{\"error\":\"Bad Gateway\",\"status\":502}\n", responseType: "application/json; charset=utf-8"}, + {path: "/-/liveness", content: "{\"error\":\"Bad Gateway\",\"status\":502}\n", responseType: "application/json; charset=utf-8"}, + } + + for _, tc := range testCases { + t.Run(tc.path, func(t *testing.T) { + resp, body := httpGet(t, ws.URL+tc.path, nil) + + require.Equal(t, 502, resp.StatusCode, "status code") + require.Equal(t, tc.responseType, resp.Header.Get("Content-Type"), "content-type") + require.Equal(t, tc.content, body, "response body") + requireNginxResponseBuffering(t, "", resp, "nginx response buffering") + }) + } +} diff --git a/workhorse/proxy_test.go b/workhorse/proxy_test.go new file mode 100644 index 00000000000..b5a7c9c6abf --- /dev/null +++ b/workhorse/proxy_test.go @@ -0,0 +1,117 @@ +package main + +import ( + "bytes" + "fmt" + "io/ioutil" + "net" + "net/http" + "net/http/httptest" + "regexp" + "testing" + "time" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/badgateway" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/proxy" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upstream/roundtripper" + + "github.com/stretchr/testify/require" +) + +const testVersion = "123" + +func newProxy(url string, rt http.RoundTripper) *proxy.Proxy { + parsedURL := helper.URLMustParse(url) + if rt == nil { + rt = roundtripper.NewTestBackendRoundTripper(parsedURL) + } + return proxy.NewProxy(parsedURL, testVersion, rt) +} + +func TestProxyRequest(t *testing.T) { + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`/url/path\z`), func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "POST", r.Method, "method") + require.Equal(t, "test", r.Header.Get("Custom-Header"), "custom header") + require.Equal(t, testVersion, r.Header.Get("Gitlab-Workhorse"), "version header") + + require.Regexp( + t, + regexp.MustCompile(`\A1`), + r.Header.Get("Gitlab-Workhorse-Proxy-Start"), + "expect Gitlab-Workhorse-Proxy-Start to start with 1", + ) + + body, err := ioutil.ReadAll(r.Body) + require.NoError(t, err, "read body") + require.Equal(t, "REQUEST", string(body), "body contents") + + w.Header().Set("Custom-Response-Header", "test") + w.WriteHeader(202) + fmt.Fprint(w, "RESPONSE") + }) + + httpRequest, err := http.NewRequest("POST", ts.URL+"/url/path", bytes.NewBufferString("REQUEST")) + require.NoError(t, err) + httpRequest.Header.Set("Custom-Header", "test") + + w := httptest.NewRecorder() + newProxy(ts.URL, nil).ServeHTTP(w, httpRequest) + require.Equal(t, 202, w.Code) + testhelper.RequireResponseBody(t, w, "RESPONSE") + + require.Equal(t, "test", w.Header().Get("Custom-Response-Header"), "custom response header") +} + +func TestProxyError(t *testing.T) { + httpRequest, err := http.NewRequest("POST", "/url/path", bytes.NewBufferString("REQUEST")) + require.NoError(t, err) + httpRequest.Header.Set("Custom-Header", "test") + + w := httptest.NewRecorder() + newProxy("http://localhost:655575/", nil).ServeHTTP(w, httpRequest) + require.Equal(t, 502, w.Code) + require.Regexp(t, regexp.MustCompile("dial tcp:.*invalid port.*"), w.Body.String(), "response body") +} + +func TestProxyReadTimeout(t *testing.T) { + ts := testhelper.TestServerWithHandler(nil, func(w http.ResponseWriter, r *http.Request) { + time.Sleep(time.Minute) + }) + + httpRequest, err := http.NewRequest("POST", "http://localhost/url/path", nil) + require.NoError(t, err) + + rt := badgateway.NewRoundTripper(false, &http.Transport{ + Proxy: http.ProxyFromEnvironment, + Dial: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).Dial, + TLSHandshakeTimeout: 10 * time.Second, + ResponseHeaderTimeout: time.Millisecond, + }) + + p := newProxy(ts.URL, rt) + w := httptest.NewRecorder() + p.ServeHTTP(w, httpRequest) + require.Equal(t, 502, w.Code) + testhelper.RequireResponseBody(t, w, "GitLab is not responding") +} + +func TestProxyHandlerTimeout(t *testing.T) { + ts := testhelper.TestServerWithHandler(nil, + http.TimeoutHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + time.Sleep(time.Second) + }), time.Millisecond, "Request took too long").ServeHTTP, + ) + + httpRequest, err := http.NewRequest("POST", "http://localhost/url/path", nil) + require.NoError(t, err) + + w := httptest.NewRecorder() + newProxy(ts.URL, nil).ServeHTTP(w, httpRequest) + require.Equal(t, 503, w.Code) + testhelper.RequireResponseBody(t, w, "Request took too long") +} diff --git a/workhorse/raven.go b/workhorse/raven.go new file mode 100644 index 00000000000..f641203f142 --- /dev/null +++ b/workhorse/raven.go @@ -0,0 +1,40 @@ +package main + +import ( + "net/http" + "os" + + raven "github.com/getsentry/raven-go" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" +) + +func wrapRaven(h http.Handler) http.Handler { + // Use a custom environment variable (not SENTRY_DSN) to prevent + // clashes with gitlab-rails. + sentryDSN := os.Getenv("GITLAB_WORKHORSE_SENTRY_DSN") + sentryEnvironment := os.Getenv("GITLAB_WORKHORSE_SENTRY_ENVIRONMENT") + raven.SetDSN(sentryDSN) // sentryDSN may be empty + + if sentryEnvironment != "" { + raven.SetEnvironment(sentryEnvironment) + } + + if sentryDSN == "" { + return h + } + + raven.DefaultClient.SetRelease(Version) + + return http.HandlerFunc(raven.RecoveryHandler( + func(w http.ResponseWriter, r *http.Request) { + defer func() { + if p := recover(); p != nil { + helper.CleanHeadersForRaven(r) + panic(p) + } + }() + + h.ServeHTTP(w, r) + })) +} diff --git a/workhorse/sendfile_test.go b/workhorse/sendfile_test.go new file mode 100644 index 00000000000..2408f4fde38 --- /dev/null +++ b/workhorse/sendfile_test.go @@ -0,0 +1,103 @@ +package main + +import ( + "fmt" + "io/ioutil" + "mime" + "net/http" + "net/http/httptest" + "os" + "path" + "testing" + + "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/labkit/log" +) + +func TestDeniedLfsDownload(t *testing.T) { + contentFilename := "b68143e6463773b1b6c6fd009a76c32aeec041faff32ba2ed42fd7f708a17f80" + url := fmt.Sprintf("gitlab-lfs/objects/%s", contentFilename) + + prepareDownloadDir(t) + deniedXSendfileDownload(t, contentFilename, url) +} + +func TestAllowedLfsDownload(t *testing.T) { + contentFilename := "b68143e6463773b1b6c6fd009a76c32aeec041faff32ba2ed42fd7f708a17f80" + url := fmt.Sprintf("gitlab-lfs/objects/%s", contentFilename) + + prepareDownloadDir(t) + allowedXSendfileDownload(t, contentFilename, url) +} + +func allowedXSendfileDownload(t *testing.T, contentFilename string, filePath string) { + contentPath := path.Join(cacheDir, contentFilename) + prepareDownloadDir(t) + + // Prepare test server and backend + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + log.WithFields(log.Fields{"method": r.Method, "url": r.URL}).Info("UPSTREAM") + + require.Equal(t, "X-Sendfile", r.Header.Get("X-Sendfile-Type")) + + w.Header().Set("X-Sendfile", contentPath) + w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, contentFilename)) + w.Header().Set("Content-Type", "application/octet-stream") + w.WriteHeader(200) + })) + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + require.NoError(t, os.MkdirAll(cacheDir, 0755)) + contentBytes := []byte("content") + require.NoError(t, ioutil.WriteFile(contentPath, contentBytes, 0644)) + + resp, err := http.Get(fmt.Sprintf("%s/%s", ws.URL, filePath)) + require.NoError(t, err) + + requireAttachmentName(t, resp, contentFilename) + + actual, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + require.NoError(t, resp.Body.Close()) + + require.Equal(t, actual, contentBytes, "response body") +} + +func deniedXSendfileDownload(t *testing.T, contentFilename string, filePath string) { + prepareDownloadDir(t) + + // Prepare test server and backend + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + log.WithFields(log.Fields{"method": r.Method, "url": r.URL}).Info("UPSTREAM") + + require.Equal(t, "X-Sendfile", r.Header.Get("X-Sendfile-Type")) + + w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, contentFilename)) + w.WriteHeader(200) + fmt.Fprint(w, "Denied") + })) + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + resp, err := http.Get(fmt.Sprintf("%s/%s", ws.URL, filePath)) + require.NoError(t, err) + + requireAttachmentName(t, resp, contentFilename) + + actual, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err, "read body") + require.NoError(t, resp.Body.Close()) + + require.Equal(t, []byte("Denied"), actual, "response body") +} + +func requireAttachmentName(t *testing.T, resp *http.Response, filename string) { + mediaType, params, err := mime.ParseMediaType(resp.Header.Get("Content-Disposition")) + require.NoError(t, err) + + require.Equal(t, "attachment", mediaType) + require.Equal(t, filename, params["filename"], "filename") +} diff --git a/workhorse/testdata/.gitkeep b/workhorse/testdata/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/workhorse/testdata/artifacts-archive.zip b/workhorse/testdata/artifacts-archive.zip new file mode 100644 index 0000000000000000000000000000000000000000..d5bd57a9f48960cf1ea7ac363b7ea4142aa4b813 GIT binary patch literal 119 zcmWIWW@Zs#U|`^2u$gS^;j(kzNlqY-9f;Y0IJYt_GbidgeE{*7c2_^tB4dU literal 0 HcmV?d00001 diff --git a/workhorse/testdata/audio.mp3 b/workhorse/testdata/audio.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4dfd0123fab4137e633f4491617dc471936492a2 GIT binary patch literal 279 zcmeZtF=k-^0w&&&h=>RvLx_QaIX5vYzbHPbC^0XE!Pmr5fdMKf2$IXp1Im@978Pga z=P?+-q!fTs$@#eji6xmyIjIo6#bC|31tvzB#re4~mGwZCnIWZl!M*`b3Em(egJTJo!FC^cr}Y`);ov6Xap1)Lrx@qNpgw-$}fFT6eUrjz7~ssU!r7@ z6vYowl95BE+e?80z3-vdUR(5B^x9LgmtujQi#_zvThU`5@W9UP?oER#v4QjgI61l{+`5h~owYd>yKqZL+Oqlb3qk{qsXs=II`v>CueHXZF#|H+3%4 zr)9QA%irJ>b(U$%^(HNkG7Wxoo?&EKVr%bIInT&^x24D||K0|U?$H^sB~^R;uy>wO zy1e{e9lF<(>x|OlyP4}+m6puct5VWq=9}wX&QKQ>Ugjkh)k;ELl;_!b=2q34EN&9L zwd1}*vh!P2&hihBPT4OHQZv^u*TK?8f0?{cqj0fXf3c@|f$d8t!w1Kwr>6(6(mUB* zKD&ocZ<+2w{|D$hgFid_^yu{4(+{PxYw-oPd-}{dK0f{W>w{N+vP+^@Q<{uK*TwEl z>62UO+{8aVrzX$Um1c5S&WKNrPOD#kD6^Z!Utl-o2d{+t$ERO?b?}|OOY+SDcvCpK zmExQ5dl}vwu3Km4dFCC!^UOP^+*_w_(&$Y)@18yTQ~TB#a~b zxxc{P6pz)z-AnM*n!o>>b_Yd>mzK+si=+Cq$G=rEEW(zfJ#h`rp!jm;TT1F+kV_1V8`;KmY_l00ck)1V8`;KmY_l;QIm-~!>ny)Ry=O*IHj|0+9KxM4-rlTQLLsvW4#Y?-&PYs~?{nzn}GDhG;vSB`RrR$Fu1amXg zr`eau{Qp7vzf$N13kZM!2!H?xfB*=900@8p2!H?xfWVJR;KAV+53a8??B@SZzDuDS zEFb^^AOHd&00JNY0w4eaAOHeCsK9To4vv*C{(SxyERL7TJYFt6r3x3!Q>;v&hr&hq zDbBM*nd3O7#Fh8+!_LexdmAsA9}dlRm|wZZGwt<6@iWbFY&21fW_t~^-C5}K$V2PS z!kA5Fron8o&)vwj&$Hn)ax_<+*>w(8ESK2|RVMML49n0@xe~=bEs({FUH=y}$LQ%z=s{8ca>p)dVGAp1=JK_QA|ICq9~T&R}TInd2?|&@?Lk!a@C^ z$ig>FG;@7Hpl-|0D7;7(DUu{8)W`yT8~!@amsk5SJip57Xky%7*l5$6a`ySJuCluk zB0h`QPZQ3t4QFjaR)PBXVNG<-xF`71R< zd7=K23=G7!o54rx;lj(leEDm%+x3CG$@6;s{gEUQqLgI4A8oP^z8lBt`kVh~9eY+l z?OxCS|1OpO-4A+_L*pO-0w4eaAOHd&00JNY0w4eaAOHgYp90VBDPKJJ_$x`f`Tyg8 zPoWzuAOHd&00JNY0zW2!zy9UHJ>_qlkD1@O%4)vq>eJl}%JpOunn&=>U=jKH^}Nc* z{BnWznK`PJ%xBE{OiPXnjjFYv(IRz~DX&pgwim*q{Zw&nB9nZPz@*0fSkt!dbpaT|GAU;E>_9rL{Dz3h6HC|A7EMqd_lH9dD>;99g5wp5P6J2}Five;pgV2Ni0INfKhQ9|)TRwx&tW}Nr|Z>lIyBs}SgY0QBpt1{%Zlmo{xmNQ7c9;- zU5=3Yx#=)&OxRLjH(B4Zo5ac^x$QKWWrdgxK05+d&|)MmV3?Zfm^J)na|lIGgPd zjXc*S;|eOf!8+<+l)Kg5SoLcxJEYVB-5Za$__*3ou{J9NVV@I3sbGto5Uj=}erZdC zHj~8Jup5j=1tDp(TBE6$)kLWy7^2S!x>cankh&Mozy}9JrIk#nmF!IhL+Ts z&bj_3>1$I(b(+p*Gpr8jFv(|(@@bTIb!cpj+6g!Hf|%qJ6TFM+pnQap8X3lP9*uf5 ztBq$0anT{*W+Lk)ljZQitVZGg18tAbaLG)*PN;}rK9fJb<~O# z#Or0xn+Id6dN~rC^^IELZ7+~*huPNA$ohh+@t$l2n_hiU*bIuK;^17o(4Cn~ja6PS zEPYdPtiCYf7%5;G&cP+8OvUE7-m7z)@vPwDwAdlH6@E^QdKy!lGu5@XaT~1Ir73sb z#70|}q2_jdDr!ryI~mn&7QNJ&{-98dMFrKCM%VFaV@pb0f1o7sDQ~UDOOc(7_>k_7 z>Wf{O_SlYIpUskXc(2}78{V!=Px&~$m(r!9rY$r;ZG zWYH`KLKx5`7wO}DuN73$zmO#5-bNBO){J0#j$Rm7)B%sj2Uv z`ANH9qHR3jS+7*Z2xdixB?8NL#sQtD%$&cr8WhV;8%8iH*<8#Ft&KrZlMY@M4XazS zN48SNw?wsXt;>wsjvG0bi&p{GXFH@|Z$(jeyYA#-qPNR6k#OeJgz=`<9A9c9PqU}t zxQO0V!^y0=#YSV+Sq+=$b(!bdWCin-_k>Zhjk3c^mFiID3TG4q2@2d?z zn#9$bwWu~tfvgbdyuMTy_^=&QI-_qcHw3Q@*xG2w3cb>>WHrm>QG3b+ZZOAiM>Cf- zLez7G345uvDaMP;7$bSis=h*{qq=0l5ftf;XNr?e_KYSYuhU{vgx zMPbAGMpdfe?XeM8S%M%hwvpMJcak5oj36r%@6QFxvcCOx|NZ~pr_#UwG5x{=V*vpW z009sH0T2KI5C8!X009sHfx98_kxI}c0`O^#Gz<&7;3{XZS11VUkZ^L_*ZG-nw0kwo!uYqt4MsX0HQHeG zT-ZX&q;He~dUft^++g6^?GWB_9A)@6*{9l48@h$K5G4<4^f`~D;xd5R{u&a**{Bre% zVF@sZ_#_B2Yp<(dRyh(0_dASRR!n&O!H&R2n7);`US|~f&Bmg literal 0 HcmV?d00001 diff --git a/workhorse/testdata/file.stl b/workhorse/testdata/file.stl new file mode 100644 index 0000000000000000000000000000000000000000..187df10717644ab6ddeefee8346757416a813589 GIT binary patch literal 697 zcmWG@c2}S#aCpCeF9QRRV5Gb>JpzG*3)o~JBO8d5Qh|is)z%6i1w>fYE7byJV5S^yH3srPW3Bxu928O(Rpadu+fXGg`S{lNFkdDP1GKc$vfE=801eC+#1_p*Z lvyy>Qi4b$_fYjw3Kq4g;NH~Htfb3x?01`+sgkl@2sQ~h{iY)*D literal 0 HcmV?d00001 diff --git a/workhorse/testdata/file.swf b/workhorse/testdata/file.swf new file mode 100644 index 0000000000000000000000000000000000000000..6f959e5c2bf4ce9dd78badf35c54c5fe4a2429b0 GIT binary patch literal 320 zcmZ<`4;FgAe=i3ELj{nk4FwX#KpY}ae|{2>Rsmul@`F&hLZ&% z6UfMfa8iMkB7_;NqvZ``febm>$zxmq5#>3&QXOQVFoes(?w2RYrOpO2SP6)2A;LgX z%{LLku7V3;GHhLdVjK{00VyDz0b$F7+yHWtzXXu5bO#dLKr9Z#a0HTOh4Zw4tZ?lV gBOv9be0K)OOF-nOW^Qc_VFF2G2+KqPLf3Ku06q82e*gdg literal 0 HcmV?d00001 diff --git a/workhorse/testdata/forgedfile.png b/workhorse/testdata/forgedfile.png new file mode 100644 index 0000000000000000000000000000000000000000..6f959e5c2bf4ce9dd78badf35c54c5fe4a2429b0 GIT binary patch literal 320 zcmZ<`4;FgAe=i3ELj{nk4FwX#KpY}ae|{2>Rsmul@`F&hLZ&% z6UfMfa8iMkB7_;NqvZ``febm>$zxmq5#>3&QXOQVFoes(?w2RYrOpO2SP6)2A;LgX z%{LLku7V3;GHhLdVjK{00VyDz0b$F7+yHWtzXXu5bO#dLKr9Z#a0HTOh4Zw4tZ?lV gBOv9be0K)OOF-nOW^Qc_VFF2G2+KqPLf3Ku06q82e*gdg literal 0 HcmV?d00001 diff --git a/workhorse/testdata/image.jpg b/workhorse/testdata/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0df472663ed86c0bfa147eea34ce4d07acc4c11 GIT binary patch literal 84616 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ⅅ~0nZSLsALTu?<%^>$`8C9iM^ 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 literal 0 HcmV?d00001 diff --git a/workhorse/testdata/image.png b/workhorse/testdata/image.png new file mode 100644 index 0000000000000000000000000000000000000000..a103b4e06fde7740279baa8c7b6cca796350cab8 GIT binary patch literal 10262 zcmXYX2RvKv_rDGlZMC+dY9vNb<5M+juh>D1n6-*V&2*wQ+S)Tz)o9Qfi7lz7W{cXR zXoR%2TN1lgsQ>l-{a>#up6A^2ob!Ia&w1{>xv#`qSr}bly~4`Cz;MCDSRcl~a2f*q zF`PRCSi%IR*MNU#eRa%r7#M0(*$zDzf%&OWn2|0+)u7-X28J^XR%W&aMnPuB#|-<$ z;Qb=t5c{bmwSQN1-dJ*0SL!%~;jbt7n1NwhPjTG={8LYAzgV39R{X>{@Wg-H4ZM#5 z9T$rpgn&a7$?5}7IYX7n%9^3r463b10TkK4zocAMPmEKpgmvk zVJhe_6Lgp_e)tA-jFq0zmD~>y0{|QsN*siUA3g&eV8FA0F%V1-7hgw!x1GWJ#bSp= zpkI2D$Hkz-9P#5)>BC~szQ5?49*F(`SPMSJfPMmF4Co(5d`4SlPFo6yaF_@_K#K4A zfabNq^F}9U4=^Ag-62MNR!{OU5_DW54v+PY=Dmt3&|&*@6d=|X@40jB`6 zz$qZ?iGV=-JD^`W68{4xeux1B2M`c&0AK?gfwlp(+V>aRyDK)MC$;Mfzykpq0(=1( z0Sg_FIzs#yBXLsS6FZ3Re-dQL41D+)@Dcy1Epc2ZJgWzUIw1u_Ub2+jHUxrEUJrv&tYJ>!8Dh0@R z7zi#8Dg6a(jKeUPg$={0y?^v0dXLrV_EU@<|Nj0u`ghp2&N|DwceK9#<@aZK;#sK)#-<8!g=s~5W)?S}Ka*uL|BJUT-h`#K{@<8wpg@&BerzJ8HtyC+b% z?TD<64Eso<$S-d%@0+ZMkdy|+VF@$WH{W%#|1l{0;bP$_D`M(R%UK*9x+%2c7lX-! z^o@}pjnscNkG2`#(Ouo#?0v2=833Oi1yc#r6Zglz)zHrUp6~cRJVEOm8Efks)+%3P zZy|rNiwOCg*(c@^$G~un!9-uj_5qpth8_wZ=YD?qB?x@>?DeAPQ~Cz+yjQIAew;3S zURLJ!U$SA=SzP&LvrbaiqjFwbW8F1vNaF>LQkbb{na=B3tAHZg+?38gVOFLlN^@Bw zqi*EEutJ_RQ{$Gc2ztwet8a5uTdw2Uqm~Gg(boAZUuJ%ptl|?6Dk=_AR-IQnLPFFa zD^54J@&ECr^GOgRQdP1F!c{-H=KaBHIn%HShwI%^QkNoNx1RIfU9&3hS+=1)9~@rd z{{~Jmk!pQ`E!`mb=TxyiDUchvzV)y>dz8{jF32calA>y*es$_Z;4_xtIxF`bSOn=o4h@47a!+(GJ> z0pjaB+i@T6k=t%uIqUBRY+hG5jaVc`h)is}OU^7r*O6hjsfj$UjfsficFQAB1Busj zX}wD5Nz%E4*-M{WE~!8K{yf)4=1%@(Fm-E5W$wRDJECa65>Y%QLgCqQK)r|4Yz4Qu z&S1S9>Z(E#0lC9^MF4?RRoF4$t)7xppR1(Ydd@??t$gezV>rp{h9emQ$>EzV7hui* znKuT!ti7JS-f>|xzltn0-aeq@qx(j`SeDLwA^f<*Q%&p|aI3kS#@fqDV=i-cCXP z8M_T~BP_RxTqJjqgUVL>dbcY54Lsf-Vsf+<5QX2Iy-^2!N3IZbq9(e!elqm;uHc?I z$D~%ecscRm*0R=TS=jglho{?ro6G2Wrz)~+`={87c_!((afolFbK`9#*_}9tA)@_& zE08|h+ih%pmAl>nPqrGQx=ub@ez>1do{m#aON{xCE_zSwo|~+9^h7R2QqyvHQ2He{ zry5_tN7qrWyf%8x4S9)|nQ=!C1%Fmz{&tE9c6>-KH2)M8ch|NYFZ=Y_vK^DOHv`uw z7KUq!3MRdJuQ-H#0@l724#ob*=~?JaV3mR$@G}JkTm5h1XJ4tzM$dK0Dpek4-8m0^ zZ;NxdzDs106N9>-);s=mE?;Z12v2U12MB>crPP^tY;& z+I9NFYV|Mt2035Vvx+ux-l*)9CelW|<1}M(>tF<@5?*HHPAAjOc^~7rz(!+l0-0J* zRknF2_q_@q14yV^c@0+PCfl1BbBc~Z2OH<@ABkc+vt zQ!$pPJkO36QipblNvTQWImQLUlXJA8n(;C+^!CZv9G+{JXo(8wY9aL*e|ZN7&|R4H zokYI2ALjY&9}r(VRM1YktBk|*PMUtripZvPy&Gw8@~WE}?*bH7mV2CB*$E<2{0E_D zY|<4I2P$R7x*{(DMIU=*pSV2h{_JE)$q!w^jV~l1Y%i8zEeoDR<|aRLK;=naP_8hT z=Wpn^)fZ^#Y3m^3#OqERqu4R4pB)>6p|s*GDGsl zMK5I`yxm>~g6EC9%xauyw@%cnFD@4E$&As$Hv(CmroIXnP8%`8^> zcyw=|z1m6NF?(YECYdvz2=Z7yPOgHYgyx}R5_I^z%Kqv<@KN^wVlih>=1R!>C;HK@ zdE$JX+q?)q(5bx|>V(4zf1ZUC)iV_S?C^Z0pdG>_DZ=YyTZY)lW>F`&fqXZI=^z-~jvNDj+0X0SaNY-erLm&X$;`S)S(nqJE=#V9ce2a;`A z?VJLN9Y>q$TWo@DHBr>zmzu84lHLI>)oQ#~b%%Y-NfR=geqh(TuFoGgJC{5j@vt&?E2UYlST4y_Y zRQXm`aYlu^;KdLX}o22<4kAFl{4t#~b0CaHwD#N9TE{yV) zFfT$g!}!N6%7kuB#`#H_&r5$7)?R}4`KQvQDdqm>Zo{@Cs(fnAojii4O2zM3l?x!)J=J;kIUiS zb+)hrP4)3tWuvs@&*$z}F?EPkpjITHq1xM^%qDR7?Xrp4P7&TS^i`m<9HZYlCGs+J zQNLwT9@&w*-beG%#eqHvwk2u+8yWMWh>F((#7eJOBLm`>KR%IwjegdfuvKGAY#;0t z`Tw(8+W?^GFMY1Q2Y}5tumVi3?&PZhSEBg$PLR5(H&->z{N?a0<*{sppIvxKdJiTt zT9LcDpHuN1oR9`DLZyNov9rVU94GyY7XhJQ7cevXG$G=4-IS~C_-i-8e_IN+`@8aL zejRqW{X+NV$mJ*n@0_B{OsgA@$uahPm=J@o;~eYcZ3ZFu4_!NI*6*9ou`-Dm%ePnl zz!b|go>qMKv)&fdgS#eTew&#oX+oc)`z|#ewEh`db=zi7wtDDu%!z4Nx@3N1`HD1_ zsynvaVRTXEAkPr{DfHLnk@9dPI>~R&+fb5Fyk86%Zb?Oy<(_Lulqidb(lW1bYzZmRQRY^Du+J4IY^L=M; z4(3_zm+K+|xiyyzl80IqgFfF6sNKxr!aA$uyXo?Tu%)ouh1%SGuqbt9>RmgaBag<+8h+D6O$iDb})8VotgN>NHtViuy?S!LtCqQ>z{|{9jCYt-}Kple3iMEk~Dd5Tge+9DY#qqo4Ry4=^&)7 zjO%B7QQMa1?qi}NgwTBp@;dQX@f^#k`c1ne;hB`h`9v=3rr+CpFARL!haOqNKVYYs z+e=bd9y11a@ERfVav~vUjg7ne#rk%Y+7P8aF<%{ zFE@}gdQ0}oK6v|+{X$%CFN?8OhtR+p+Mx;Z`5Q){ojLNRmF?#0v%o;-cMJcV;?e4g znsSd$Kbp-v?Y)pQ+&RGa#*dI`=S7&DQ>s%u(EF8s?_w7Boy;zNHpNxtj~36+QC^YG z+r6D_dOx|q5c^Z#Q3YQDtL@wuoZ^=ZLbce`x4m^Rn{x8fOTAdseDG+QAVGWa*>K_f zk45{mE~5`3u*#$7|3SVRgz$G?7g?A-?=)F1(TCh&AH^Q(XP|SH_CO`C^0WmI4_fDa zgfk*pB8)cUN4kfezB!bQWGr7u^DzKx<>)UEM=g^EnU4aFc{@B8kY8H{v)rhPCUD@b z$=Bb`ku2r&jKirxdJDS;;U@3`xckDFl~XT%c2-}D`=sUQQ9V*9j>bzrWP$Z_yz#wc z<)^-^Q`+3y6PP2VsdOMz^a}Lf(6y3LR07#)!HZB`uE{lu7JN1UjA4QrzGB>qWaX-&HQ@Am~&ayVN~9LlnJY)25iwy=uP3i{P#( z5eMv`OyDsjrpxAd=m(|6FgM?WK`XOFHx|heldcwAGVV1HSXTTt+Zays7fWQltdPYx zb%aUha;xEj7|!)Yr$<`d>|(Ffm(}GFfu0M~(dSAQ{?ce@kbK?l>_+JaC~hSOl)Xy! zzM+&GS{O>%RUPVY`u9{rX((d0$NAQl`YLw*jt61TchtjCU7gRq(Hr_~K32vE*mRrBNP8e94gU?CXW0<1 zPtM4Gn+KJX9xM_VMOhL%_33v?WI@~(*m=gwjt~puDUk^U8lg4OkPMss0!?8>t;9Cu z``#GxsGR~6g=t;TlrHdmY(q2L|K`xR{%CdQaTWy6}q!y!{)xBg2G!xI6UaaAv zPlk!!1<{i!teN<^qD-@A6#q2*Rr?UrPp*)bdN1x>@v4@HrImQWVQ1bkNh+ zDx<;WO=_WMtB9XzLJ68$tt4qewuo0s+CWnA`JOng<}{*d&S#!&8lnDOXwrr(6?L=k z22*0+!s<6Bx9`2?O^?@44e{OQ%fx4$bLwePi-|6wJ$NTo@X!<2An)S6u66t7GJNo! zj!%DrMU}w+c@?O|+%AzFPy;VCr~(47WljHx{bD?2y|!_o_FHsAsnGohhW|0{Io9w&z=a;erbD4iQ% zpM*XPPYKk?^PgniyF$c4X51i(@J(#$69h!Ggyzfg?^H`ypf9VlUr@uj{!LPSsi-db z3ZlD&S|^T_a{MV1H1%VkQ??B175USH5DGP@0);%uy+^{G^;5U=c>>ssVyi%#vX@%l zv`3xO2)^qnl)0$|d^z&R89Vf_eR6`FE_^(lUT zJRUyPqD3K72g=QjpEl%6s5D3BTJ|4X+F2lV4@+o`r`u=#ZakS3LxQ?5*6+nq>K;c= zOejdn8oxCX3r4+Kxc)g@^}hy!upR6=ZD9B%rw7fQHkj*i+?KrXxFbYWxCQ|q%N}6qfOIyuE-g==V$gR1*yBFs!%DJ}P0ci!d z*z%c7vE7i1Y|MMQ^!~~r0ptd{eWW`N5OGO3E{Ga_4rC{zpz=l>C^ zyuZP^=g#w;BrELK=ON_VfAI0<%fC##iE$Tvn%>|L!(6;kP6gPT* zV8uW}vB|{G=!1W`)DXt}WlX~YA?2sc-(3jQtCA;WuFu(nAXrdD%?x7BOvvt{XIxKh zhoa&rifQ=M6SaZm8SnfjMI0Kld^A&qQ?eG82K7dSKKqc;; z^~TPv*;HCre5iI>ht~;EcSN7yYle2^QuJYH~ zt6h!A;q_|g+4d)k)WW=Rb^XnpuxjqeCzIEsz^(A%5}LHa$}5M85{vuQ!IS0MHs>89whNx8qtzS|q#n|YVWoLO}#oDeR_IG7z9pHF&sV0*zYA(0hQjjc(3 zoT3{4!JeWYmB);X68D0l@w#zlIcDRhtLC!}AF*-Nr66uX!h90=a_L1;f{`HVdAVeF z7W-Di88MqicijASgB;fE2JYGvcATAzNrJ7c6~u9ZKQ;p|I0i6iwX!I^_-kb&oz2=08?`MTrVq456A)553H!LebaF)%2>ZCnXhR$?5*ah_Zi1ds&UXkIJ(pLtMxMdzropjd zNTZsZpugTw=}`41;o)fXf~lyaUyu@HqY)}^5~y_Ez9-&;uvHA}P{@`p|MvM)X@_)^ zgsv&0A=zRsBJjrX1DMJC6oS9h9`EmopGhR1uxGoW;QQsXCI01yr^B}5Y7kt0eE~vj zS<-S9JXvU&7z)N1F~K3X1~qGf@&=5bj&_tY@?&%AfB1{kLh1E(sN}iSU#D{$=N$LR z7QXV}VQxs?N|GJhS7>$+lR^pYoS~=6KbWdz-Luq}-3~nj(K!~y?4Xq^X!bwlUXNd- z&Gm`bAkO*qbz|p+tKpF)fxJ_B(>%%M=XA-Nj@^(#se2s6fzqBV(Uj{`SK?(~4ym=M z>+NU7(ahGi_}ZXX>8iU^ij`Dj=1+J*c zl+(tDsx#eha-_@ak4vi2f;UkCmgE%vfshqLVXK1Y<^HD}dOqc)Y5EZpy47|{fbQXz zu}f@5KS>YAIb`BB`k_53{tKZGDtH1QxxBHvU)KmZsdb6`iBd#ZV^Usb=|4;euL4qUd>@2jjPWL0cXKR0)l5 zPpf@bz;3Kg^x3~qWM)oYnvfr{;zl5cLrg^VyK$e$j^HCD_&s6jwRQJgzDQqrZ+*A=B#>7=q`bbkzm{2)5DCTcW4 zw-S@zINZ90#Clz&PDD2_3ag+nW(Jy%heYpveUxY^BuK(t@MDvmc|^41Ig4m?Xp<2; zB1aeX_hM+$>Zfr|{T|s`M`Q10?_60=|2FzuECqLU-<2Slsh4*+cWqHj@J2yJ?EEkZC$e}}J?L%`!W&sZ z*ZE>sIdk0cw03GgFc*!LvV$#Y{8sh)48530xfSNr;cZjifoObX7jjdR6s^si!hPL# zvQYV)iOu7IJ62ZIiI)wGLMo`errtRBitN~Qbkdi=WaBCOODi8F*-W_yE4+*2(Me%U zg|D#OFT_=0d<*7T_i5ykisJFeH{T~7%R&JpPEc|Ks zorz$JEa~#l&X4|Y?L!dxNS*80pU9LGQ$y#@Pp>+3Qb%A<3G!hwvV4@wrs+-H0=|&- zD_XFNza$fnp9o$GN3T5eD-X{|z5dyq;5CYZN!n4r-EnNRf~cNHnf^U1i<|2$sIj_a z*QdgqH@x(vdIoV-1z#yA!)ZJY+m2Sgc@||Vj`VdDQi0dh%VRHFjl-NR1g4E<5yQ;z zpzLy}Eypk(>lRK%7(!#Ul7*J+|mMUhDC z+~ARiM@j#wEq1o%lDWRS`8pha>b;m)bv`J%!LBc2j;NM@x}KyKBR)Fu#-_<* zzcN~daQC9Aj+m0KK*o&&`9vX9rRB+^Vc$e-coDkEw?9z69g1%cWGTUk)GMlHNt2rh zZ-^Q7ld;>H?dCqd4f*FwSwR#-x0GQ*2C@c$v|O*(m$VbFqm=pc<1W-|$h%6n9wm&c zS;WHP-sl!rctrT&n=ORw;L`e>?>@8;X6Wyfw?*sWHrEa|ig@5_I?0@`JKNVseXV|IVbtV%cx2{at3a$Mb+bLjg0tgGENQsh6Pn=K<3CrN8=q{$;%J1e_L%$K|ewJ zv57i$(@`%rqC-p0x%Tk86RwoVj;LKMP1vd^-MPq&s?;HmV&@)6+Bsy1+sVdXWTNh{ ze28T$Wkoznxx8590m`hM>Mx<;tt#|u{d=5ytn=Gjb#QYDTOLI}Y-RZ&s?w;u5l$-K zxl-tVmDx#fMQ-ANKA8hMXI1e4-sshk;g>hez=?oVhvFUEy+x)OFQ^B^IVNhuA_8z#)|3ap%|FxYB6f~dRaSut5! zZMD@N&W(FK>L{OztI3ce(In2Tr~vmv4kFIJ@jQFI22(oz^~46nszRm0iA?jzPJAW% zyOl;6Fy-=K=ni(|5n=!HF@Oz+ePDe_%Dgw>iHROND>ud%^I#)R+x}CDk zk}y51q>S}z`Y%WN+IxF7O01#R%7wBx;x<9>U2oJ*u5Upu%XIGk(Z5qO{K4BRR9_O- z^RqanHxO6-CO)JD)U>^OJjatY$Tf3?Ik*QE%q>$$Vih=MC&{84yc2@ZFQui8WtTe8 zo`nBKl@k^`_g_k%N^|0itaP?cp}>r%&NHoiXko~K3YB-hspcYeigh#MG zTZ}FhWgQ>x+?oq)c!f8OZsI{efbCdQw@te`z9$1U@ltP0G4m`lHKWm z#)Y~}!9*nzc&Zqs+6MeSsOaRk0BVM|)*k*n{Z>yYtm*hAflGE{AF8Y`LsVhPsK-lB zHC9wG0y!XU8&h`8#&gXrW`|%~i8YfCs`}_Q7qkn|V=i1o7qq8Po*IxttD?@Jlr{^3==&zDn1G2`5dSxj_7_VeZ^Q-O0fo^ z=x3T3biF>9-?omexg$pb`ccVP6iG<2YUw(MNdUvxHvW1yW!%%bI1?pJx;k_Ej(FoG z-2B6M;B7>QNW~q=#xz$qpLApL;bFbQ~=DKY)%ueSkAqaA_L z=f=?%H5bKw(|@tBI(Fv*W%$t|bLwA7nh>$E#!y9{yYW4bKr#9-ZJ$TnT`2WQw_oLx z`)>8^GDeQ~bi7s`oU=AKlXz@gCz7m`M3Oz`3Cr6PS^fl3xnoY1{WE!rep&!Uk8f8~ zZq>FOG4p?DP?y18uM)$~hn=gbSGj!wN4fTTzM%d=v}tUPA^Y~slSZ`Dl`mK?MbwHZ zd512x_BQphU09ma19(WCq@RFubQ$LR*y!w*bqc&=7g~3&K7`5Ipt!uW;Pt#Q2?@E; zVXoQ!c3Glvez?+9iCYr%xB4YRExOjC-6eTuBNC+XXxim zkQ}6GU<X2f1VymhU9}(4;EKlKjY3<#`!~9zOLXW15)RQi8j2+M03hJx>nW zc}b6~=A7!sw2Iw0&n^pn?*2?C|4;DE znw*9KlA)^8>tJm@U%$bz+r7K)gwI!3K78VNAG3dVc;B`!Z9JLs99#WD9XA)lt#T!) zl{Tgb{}4k_GeJnyE0W`4+Ruf)%gz#-{nMQiKArj0ru`-4Rj5->=Tye?#{1t=%A#51 zT0YB@6-Pr37*9Ec#^|_Ng{2&HVb(ieq jv%Qa9K8x(F2^U2T|LA$SbrJae5`&3>g?^Q;d-VSU1K4Qw literal 0 HcmV?d00001 diff --git a/workhorse/testdata/image.svg b/workhorse/testdata/image.svg new file mode 100644 index 00000000000..3706fdb7fde --- /dev/null +++ b/workhorse/testdata/image.svg @@ -0,0 +1,64 @@ + + SVG logo combined with the W3C logo, set horizontally + The logo combines three entities displayed horizontally: the W3C logo with the text 'W3C'; the drawing of a flower or star shape with eight arms; and the text 'SVG'. These three entities are set horizontally. + + + + + SVG logo combined with the W3C logo + image/svg+xml + + 2007-11-01 + + + + The logo combines three entities displayed horizontally: the W3C logo with the text 'W3C'; the drawing of a flower or star shape with eight arms; and the text 'SVG'. These three entities are set horizontally. + + + + + + W3C + SVG + + + + + + + + + + + + + + + + + diff --git a/workhorse/testdata/image_single_pixel.jpg b/workhorse/testdata/image_single_pixel.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cda9a53dc357ce07d3c67051b7615ebf7dc2f64 GIT binary patch literal 631 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<ECr+Na zbot8FYu9hwy!G(W<0ns_J%91?)yGetzkL1n{m0K=Ab&A3Fhjfr_ZgbM1cClyVqsxs zVF&q(k*OSrnFU!`6%E;h90S=C3x$=88aYIqCNA7~kW<+>=!0ld(M2vX6_bamA3L7B$%azX<@d&d)*s literal 0 HcmV?d00001 diff --git a/workhorse/testdata/lsif/invalid.lsif.zip b/workhorse/testdata/lsif/invalid.lsif.zip new file mode 100644 index 0000000000000000000000000000000000000000..d04175e56ba8eecaa4330508f24eeec3d0d073d9 GIT binary patch literal 2386 zcmZ{mc{CJi8^C7_V~iyeu5}QJ%g9n$GRl?=S+XzL4Q8@tjL^u^s7oQ5OomcY8IvLV znsq2NQueJPL-uPgA0PF7-@WI2=RVJQm-9aF`Mu{n=l$bnWd>r00uF*6^~#Fx#Bq)k z2mo*}gaHx&96Ai=Of?0sKOa*VA4Lp&P z=$S+xuYE`uUfQG!?08IsHxDMY$SYmiI7{@M9?{QQ+f%eWN{~kuS+H=;t>$X8XF(^* zMjM-2U#;zmpsGDQXE05KK^?*(N6jPdS-Hi3l?Vj=aU)7a<+X0+=}?{=$Rwv`hZLhs zgENxRG_fGpAD?|9pq+P_*~*g)x=~D`ATqrS9Xxu<6@Pp(bDCcae%m0$z^5|?Z=lXr zgv|}g6CWdWL)6Dg%1y`e9*Tl77My##b@thFD?^q!I^5F^EgwIrATu5ntv?VU&w2Wc z@?~uEL>j9SdKrF)R!cN{{IGb{4NwD+pbNGWsouWL>#0X|hN zaVZ$j2dWFR&8gD#7eKL!@fdKv<=AUbJ$qhQ!$mcW1fZ

      nW%KxcMOUC0r zJMDH4PZb#=!tyhQo>qGF)^^Pjc1+mLT{{nm*Q3fkSg?^Ovr^C8T&b zda9LXbeYlT@69~7Ugw^-GsR_?jX}Yb7XL<%3dl-6rU~Y*?8Jid^AMuP_2z{<%*HyQ z*r;o{QukiW*Y8MwJ7OdxQfldbcU+}PV1;yN%hA{1HfdSmA#5lGhKbRqNeq1vIf`53 z`En}=sl|+MttEJueNW{3?S3${(-wM5FHYA(_9IP2Bgf|T9kAY-W-~avjaQ~oAD}J4 zt$jD>%oLhaczJMORV+2w9z7cR;hb+a`SAoZBxg<~fZ3TdIR`v*Sh(R&!$SM%%mjg* z2xJQN`j9b;gD=T@Yb2?afQ)|Oya-=5r!=V&^l=2O#t zGb+GpmUNtpe%D<@LILbB?fb^AbP-Po*%me`_67-0rkQ}nR-`SL5sr98sDGgk_eZ^H zr&DEeX^~Mt8t0YA#`$oCNF=w`Qqj=4ih>`Be8~MamfH4$ME*pG;5*fCO^|%qW$GKL zkCn$^GqKpKHv!gwSiu<4tSd`L13$qwK$e~lOo3YFOF+rifq8ns_VXBbj#nSd9LGl4 zfS{Q)cKhyE^U<0L6;h-(Z`7(OZ4jbcXIkt7fh1g7Rlx#Cm-@}N>-v?YcGv^NW!d~< zP79w3VV^7kqbL+sE3OrpEn{RKVX_%-63oI!0dIq3{5yLQepj&21F=)nLmdFN)8}2dY=| z$hT!-Tze_EB_)2S)%nvRUR~Zxq)fOWyXg`RlmgbUfB8v<(h~ORIobBhJwolu$6CpIPMfw5U+z51QA}G^2d?ilhQYQo>SgJ87vt zp~WKg)M(v=#d#UjB{troGER1M1qF@WJRS~LlB*sIq@6aW6V&Uc7HNc@0FRW6S;xYG zGboNXme~F?Wb3cG0QsevzPU~9Vz-Rhw%QWkV~}`(hAu=O&H*?2q^z2aCs(~p9DXR= zp@S`iL;n2;f8?PH3IP`sY%g@UsvW8HHW<%~u*2UlpKM?oN8=XU&^`6>)EDyu^@>Zg zZYY9{-X?Ybl;phmmMkMUt?D;1QUWJ$+{eOUB}V{aO1Yx<@|2_nA-4kCl7uH=_CBtw z=4@K;&+CBYk*?}aKyxm6{HAfKa{bK_jEm};f^@9iX@HoblJ0a*=|~NBK+MLQ*v`;& zaX{af%nI*IDNM7UOYgC3I%AZ-86Hlu)3PaxeU%VCTjgDxPU#n_C1+O8KhLV19Dmwf zmupM)2z`Qg&3+LQ+H0+-L(b&W1uIqO>knhxPI}Pczi*sNNLjU}#5Faa@;h{^SIN$G z$@-f^+csRgq>tg>C`oyd^xx!*u{l#nNYn~|V-d{JYe+wtkS;>`+ zZ6k$VtL_MLa=G8bvq0I60Lbm#w6=dUMS_c0ScpZqt5jYh8k literal 0 HcmV?d00001 diff --git a/workhorse/testdata/lsif/valid.lsif.zip b/workhorse/testdata/lsif/valid.lsif.zip new file mode 100644 index 0000000000000000000000000000000000000000..92547037798a5fa074fbb4826084028f7ece1c40 GIT binary patch literal 2190 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 Z0a~MHzj}2!Sl)mb1**WpLZ=Sr{s+!siHQIJ literal 0 HcmV?d00001 diff --git a/workhorse/tools.go b/workhorse/tools.go new file mode 100644 index 00000000000..9df59be349e --- /dev/null +++ b/workhorse/tools.go @@ -0,0 +1,9 @@ +//+build tools + +package main + +import ( + _ "golang.org/x/lint/golint" + _ "golang.org/x/tools/cmd/goimports" + _ "honnef.co/go/tools/cmd/staticcheck" +) diff --git a/workhorse/upload_test.go b/workhorse/upload_test.go new file mode 100644 index 00000000000..1e5d9bd00e9 --- /dev/null +++ b/workhorse/upload_test.go @@ -0,0 +1,369 @@ +package main + +import ( + "bytes" + "fmt" + "io" + "io/ioutil" + "mime/multipart" + "net/http" + "net/http/httptest" + "os" + "regexp" + "strconv" + "strings" + "testing" + + "github.com/dgrijalva/jwt-go" + "github.com/stretchr/testify/require" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/api" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/secret" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/testhelper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/upload" +) + +type uploadArtifactsFunction func(url, contentType string, body io.Reader) (*http.Response, string, error) + +func uploadArtifactsV1(url, contentType string, body io.Reader) (*http.Response, string, error) { + resource := `/ci/api/v1/builds/123/artifacts` + resp, err := http.Post(url+resource, contentType, body) + return resp, resource, err +} + +func uploadArtifactsV4(url, contentType string, body io.Reader) (*http.Response, string, error) { + resource := `/api/v4/jobs/123/artifacts` + resp, err := http.Post(url+resource, contentType, body) + return resp, resource, err +} + +func testArtifactsUpload(t *testing.T, uploadArtifacts uploadArtifactsFunction) { + reqBody, contentType, err := multipartBodyWithFile() + require.NoError(t, err) + + ts := signedUploadTestServer(t, nil) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + resp, resource, err := uploadArtifacts(ws.URL, contentType, reqBody) + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode, "GET %q: expected 200, got %d", resource, resp.StatusCode) +} + +func TestArtifactsUpload(t *testing.T) { + testArtifactsUpload(t, uploadArtifactsV1) + testArtifactsUpload(t, uploadArtifactsV4) +} + +func expectSignedRequest(t *testing.T, r *http.Request) { + t.Helper() + + _, err := jwt.Parse(r.Header.Get(secret.RequestHeader), testhelper.ParseJWT) + require.NoError(t, err) +} + +func uploadTestServer(t *testing.T, extraTests func(r *http.Request)) *httptest.Server { + return testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, r *http.Request) { + if strings.HasSuffix(r.URL.Path, "/authorize") { + expectSignedRequest(t, r) + + w.Header().Set("Content-Type", api.ResponseContentType) + _, err := fmt.Fprintf(w, `{"TempPath":"%s"}`, scratchDir) + require.NoError(t, err) + return + } + + require.NoError(t, r.ParseMultipartForm(100000)) + + const nValues = 10 // file name, path, remote_url, remote_id, size, md5, sha1, sha256, sha512, gitlab-workhorse-upload for just the upload (no metadata because we are not POSTing a valid zip file) + require.Len(t, r.MultipartForm.Value, nValues) + + require.Empty(t, r.MultipartForm.File, "multipart form files") + + if extraTests != nil { + extraTests(r) + } + w.WriteHeader(200) + }) +} + +func signedUploadTestServer(t *testing.T, extraTests func(r *http.Request)) *httptest.Server { + t.Helper() + + return uploadTestServer(t, func(r *http.Request) { + expectSignedRequest(t, r) + + if extraTests != nil { + extraTests(r) + } + }) +} + +func TestAcceleratedUpload(t *testing.T) { + tests := []struct { + method string + resource string + signedFinalization bool + }{ + {"POST", `/example`, false}, + {"POST", `/uploads/personal_snippet`, true}, + {"POST", `/uploads/user`, true}, + {"POST", `/api/v4/projects/1/wikis/attachments`, false}, + {"POST", `/api/graphql`, false}, + {"PUT", "/api/v4/projects/9001/packages/nuget/v1/files", true}, + {"POST", `/api/v4/groups/import`, true}, + {"POST", `/api/v4/projects/import`, true}, + {"POST", `/import/gitlab_project`, true}, + {"POST", `/import/gitlab_group`, true}, + {"POST", `/api/v4/projects/9001/packages/pypi`, true}, + {"POST", `/api/v4/projects/9001/issues/30/metric_images`, true}, + {"POST", `/my/project/-/requirements_management/requirements/import_csv`, true}, + } + + for _, tt := range tests { + t.Run(tt.resource, func(t *testing.T) { + ts := uploadTestServer(t, + func(r *http.Request) { + if tt.signedFinalization { + expectSignedRequest(t, r) + } + + token, err := jwt.ParseWithClaims(r.Header.Get(upload.RewrittenFieldsHeader), &upload.MultipartClaims{}, testhelper.ParseJWT) + require.NoError(t, err) + + rewrittenFields := token.Claims.(*upload.MultipartClaims).RewrittenFields + if len(rewrittenFields) != 1 || len(rewrittenFields["file"]) == 0 { + t.Fatalf("Unexpected rewritten_fields value: %v", rewrittenFields) + } + + token, jwtErr := jwt.ParseWithClaims(r.PostFormValue("file.gitlab-workhorse-upload"), &testhelper.UploadClaims{}, testhelper.ParseJWT) + require.NoError(t, jwtErr) + + uploadFields := token.Claims.(*testhelper.UploadClaims).Upload + require.Contains(t, uploadFields, "name") + require.Contains(t, uploadFields, "path") + require.Contains(t, uploadFields, "remote_url") + require.Contains(t, uploadFields, "remote_id") + require.Contains(t, uploadFields, "size") + require.Contains(t, uploadFields, "md5") + require.Contains(t, uploadFields, "sha1") + require.Contains(t, uploadFields, "sha256") + require.Contains(t, uploadFields, "sha512") + }) + + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + reqBody, contentType, err := multipartBodyWithFile() + require.NoError(t, err) + + req, err := http.NewRequest(tt.method, ws.URL+tt.resource, reqBody) + require.NoError(t, err) + + req.Header.Set("Content-Type", contentType) + resp, err := http.DefaultClient.Do(req) + require.NoError(t, err) + require.Equal(t, 200, resp.StatusCode) + + resp.Body.Close() + }) + } +} + +func multipartBodyWithFile() (io.Reader, string, error) { + result := &bytes.Buffer{} + writer := multipart.NewWriter(result) + file, err := writer.CreateFormFile("file", "my.file") + if err != nil { + return nil, "", err + } + fmt.Fprint(file, "SHOULD BE ON DISK, NOT IN MULTIPART") + return result, writer.FormDataContentType(), writer.Close() +} + +func TestBlockingRewrittenFieldsHeader(t *testing.T) { + canary := "untrusted header passed by user" + testCases := []struct { + desc string + contentType string + body io.Reader + present bool + }{ + {"multipart with file", "", nil, true}, // placeholder + {"no multipart", "text/plain", nil, false}, + } + + var err error + testCases[0].body, testCases[0].contentType, err = multipartBodyWithFile() + require.NoError(t, err) + + for _, tc := range testCases { + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, r *http.Request) { + key := upload.RewrittenFieldsHeader + if tc.present { + require.Contains(t, r.Header, key) + } else { + require.NotContains(t, r.Header, key) + } + + require.NotEqual(t, canary, r.Header.Get(key), "Found canary %q in header %q", canary, key) + }) + defer ts.Close() + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + req, err := http.NewRequest("POST", ws.URL+"/something", tc.body) + require.NoError(t, err) + + req.Header.Set("Content-Type", tc.contentType) + req.Header.Set(upload.RewrittenFieldsHeader, canary) + resp, err := http.DefaultClient.Do(req) + require.NoError(t, err) + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode, "status code") + } +} + +func TestLfsUpload(t *testing.T) { + reqBody := "test data" + rspBody := "test success" + oid := "916f0027a575074ce72a331777c3478d6513f786a591bd892da1a577bf2335f9" + resource := fmt.Sprintf("/%s/gitlab-lfs/objects/%s/%d", testRepo, oid, len(reqBody)) + + lfsApiResponse := fmt.Sprintf( + `{"TempPath":%q, "LfsOid":%q, "LfsSize": %d}`, + scratchDir, oid, len(reqBody), + ) + + ts := testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, r.Method, "PUT") + switch r.RequestURI { + case resource + "/authorize": + expectSignedRequest(t, r) + + // Instruct workhorse to accept the upload + w.Header().Set("Content-Type", api.ResponseContentType) + _, err := fmt.Fprint(w, lfsApiResponse) + require.NoError(t, err) + + case resource: + expectSignedRequest(t, r) + + // Expect the request to point to a file on disk containing the data + require.NoError(t, r.ParseForm()) + require.Equal(t, oid, r.Form.Get("file.sha256"), "Invalid SHA256 populated") + require.Equal(t, strconv.Itoa(len(reqBody)), r.Form.Get("file.size"), "Invalid size populated") + + tempfile, err := ioutil.ReadFile(r.Form.Get("file.path")) + require.NoError(t, err) + require.Equal(t, reqBody, string(tempfile), "Temporary file has the wrong body") + + fmt.Fprint(w, rspBody) + default: + t.Fatalf("Unexpected request to upstream! %v %q", r.Method, r.RequestURI) + } + }) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + req, err := http.NewRequest("PUT", ws.URL+resource, strings.NewReader(reqBody)) + require.NoError(t, err) + + req.Header.Set("Content-Type", "application/octet-stream") + req.ContentLength = int64(len(reqBody)) + + resp, err := http.DefaultClient.Do(req) + require.NoError(t, err) + + defer resp.Body.Close() + rspData, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + + // Expect the (eventual) response to be proxied through, untouched + require.Equal(t, 200, resp.StatusCode) + require.Equal(t, rspBody, string(rspData)) +} + +func packageUploadTestServer(t *testing.T, resource string, reqBody string, rspBody string) *httptest.Server { + return testhelper.TestServerWithHandler(regexp.MustCompile(`.`), func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, r.Method, "PUT") + apiResponse := fmt.Sprintf( + `{"TempPath":%q, "Size": %d}`, scratchDir, len(reqBody), + ) + switch r.RequestURI { + case resource + "/authorize": + expectSignedRequest(t, r) + + // Instruct workhorse to accept the upload + w.Header().Set("Content-Type", api.ResponseContentType) + _, err := fmt.Fprint(w, apiResponse) + require.NoError(t, err) + + case resource: + expectSignedRequest(t, r) + + // Expect the request to point to a file on disk containing the data + require.NoError(t, r.ParseForm()) + + len := strconv.Itoa(len(reqBody)) + require.Equal(t, len, r.Form.Get("file.size"), "Invalid size populated") + + tmpFilePath := r.Form.Get("file.path") + fileData, err := ioutil.ReadFile(tmpFilePath) + defer os.Remove(tmpFilePath) + + require.NoError(t, err) + require.Equal(t, reqBody, string(fileData), "Temporary file has the wrong body") + + fmt.Fprint(w, rspBody) + default: + t.Fatalf("Unexpected request to upstream! %v %q", r.Method, r.RequestURI) + } + }) +} + +func testPackageFileUpload(t *testing.T, resource string) { + reqBody := "test data" + rspBody := "test success" + + ts := packageUploadTestServer(t, resource, reqBody, rspBody) + defer ts.Close() + + ws := startWorkhorseServer(ts.URL) + defer ws.Close() + + req, err := http.NewRequest("PUT", ws.URL+resource, strings.NewReader(reqBody)) + require.NoError(t, err) + + resp, err := http.DefaultClient.Do(req) + require.NoError(t, err) + + respData, err := ioutil.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, rspBody, string(respData), "Temporary file has the wrong body") + defer resp.Body.Close() + + require.Equal(t, 200, resp.StatusCode) +} + +func TestPackageFilesUpload(t *testing.T) { + routes := []string{ + "/api/v4/packages/conan/v1/files", + "/api/v4/projects/2412/packages/conan/v1/files", + "/api/v4/projects/2412/packages/maven/v1/files", + "/api/v4/projects/2412/packages/generic/mypackage/0.0.1/myfile.tar.gz", + "/api/v4/projects/2412/-/packages/debian/incoming/libsample0_1.2.3~alpha2-1_amd64.deb", + } + + for _, r := range routes { + testPackageFileUpload(t, r) + } +}

aXCD+!vFI{pEas7JXL8 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 z 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 NKhU7N++Ts3i-Rt&p0jf#;CY) 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

HL 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 z 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