53 lines
1.2 KiB
Ruby
53 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Ci
|
|
class AuthorizeJobArtifactService
|
|
include Gitlab::Utils::StrongMemoize
|
|
|
|
# Max size of the zipped LSIF artifact
|
|
LSIF_ARTIFACT_MAX_SIZE = 20.megabytes
|
|
LSIF_ARTIFACT_TYPE = 'lsif'
|
|
|
|
def initialize(job, params, max_size:)
|
|
@job = job
|
|
@max_size = max_size
|
|
@size = params[:filesize]
|
|
@type = params[:artifact_type].to_s
|
|
end
|
|
|
|
def forbidden?
|
|
lsif? && !code_navigation_enabled?
|
|
end
|
|
|
|
def too_large?
|
|
size && max_size <= size.to_i
|
|
end
|
|
|
|
def headers
|
|
default_headers = JobArtifactUploader.workhorse_authorize(has_length: false, maximum_size: max_size)
|
|
default_headers.tap do |h|
|
|
h[:ProcessLsif] = true if lsif? && code_navigation_enabled?
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :job, :size, :type
|
|
|
|
def code_navigation_enabled?
|
|
strong_memoize(:code_navigation_enabled) do
|
|
Feature.enabled?(:code_navigation, job.project, default_enabled: true)
|
|
end
|
|
end
|
|
|
|
def lsif?
|
|
strong_memoize(:lsif) do
|
|
type == LSIF_ARTIFACT_TYPE
|
|
end
|
|
end
|
|
|
|
def max_size
|
|
lsif? ? LSIF_ARTIFACT_MAX_SIZE : @max_size.to_i
|
|
end
|
|
end
|
|
end
|