54 lines
1.2 KiB
Ruby
54 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
|