debian-mirror-gitlab/app/helpers/workhorse_helper.rb

60 lines
1.9 KiB
Ruby
Raw Normal View History

2018-12-05 23:21:45 +05:30
# frozen_string_literal: true
2016-08-24 12:49:21 +05:30
# Helpers to send Git blobs, diffs, patches or archives through Workhorse.
# Workhorse will also serve files when using `send_file`.
module WorkhorseHelper
# Send a Git blob through Workhorse
2018-11-18 11:00:15 +05:30
def send_git_blob(repository, blob, inline: true)
headers.store(*Gitlab::Workhorse.send_git_blob(repository, blob))
2019-02-15 15:39:39 +05:30
2021-04-17 20:07:23 +05:30
headers['Content-Disposition'] = inline ? 'inline' : content_disposition_attachment(repository.project, blob.name)
2019-02-15 15:39:39 +05:30
# If enabled, this will override the values set above
workhorse_set_content_type!
2018-11-08 19:23:39 +05:30
render plain: ""
end
# Send a Git diff through Workhorse
def send_git_diff(repository, diff_refs)
headers.store(*Gitlab::Workhorse.send_git_diff(repository, diff_refs))
headers['Content-Disposition'] = 'inline'
head :ok
end
2016-08-24 12:49:21 +05:30
# Send a Git patch through Workhorse
def send_git_patch(repository, diff_refs)
headers.store(*Gitlab::Workhorse.send_git_patch(repository, diff_refs))
headers['Content-Disposition'] = 'inline'
head :ok
end
# Archive a Git repository and send it through Workhorse
2018-05-09 12:01:36 +05:30
def send_git_archive(repository, **kwargs)
headers.store(*Gitlab::Workhorse.send_git_archive(repository, **kwargs))
head :ok
end
2016-08-24 12:49:21 +05:30
# Send an entry from artifacts through Workhorse
2020-05-24 23:13:21 +05:30
def send_artifacts_entry(file, entry)
headers.store(*Gitlab::Workhorse.send_artifacts_entry(file, entry))
2016-08-24 12:49:21 +05:30
head :ok
end
2016-09-29 09:46:39 +05:30
def set_workhorse_internal_api_content_type
headers['Content-Type'] = Gitlab::Workhorse::INTERNAL_API_CONTENT_TYPE
end
2019-02-15 15:39:39 +05:30
def workhorse_set_content_type!
headers[Gitlab::Workhorse::DETECT_HEADER] = "true"
end
2021-04-17 20:07:23 +05:30
def content_disposition_attachment(project, filename)
if Feature.enabled?(:attachment_with_filename, project, default_enabled: :yaml)
ActionDispatch::Http::ContentDisposition.format(disposition: 'attachment', filename: filename)
else
'attachment'
end
end
end