2020-02-27 15:09:24 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Gitlab
|
|
|
|
module Checks
|
|
|
|
class SnippetCheck < BaseChecker
|
|
|
|
ERROR_MESSAGES = {
|
|
|
|
create_delete_branch: 'You can not create or delete branches.'
|
|
|
|
}.freeze
|
|
|
|
|
|
|
|
ATTRIBUTES = %i[oldrev newrev ref branch_name tag_name logger].freeze
|
|
|
|
attr_reader(*ATTRIBUTES)
|
|
|
|
|
2020-09-16 12:10:15 +00:00
|
|
|
def initialize(change, default_branch:, logger:)
|
2020-02-27 15:09:24 +00:00
|
|
|
@oldrev, @newrev, @ref = change.values_at(:oldrev, :newrev, :ref)
|
|
|
|
@branch_name = Gitlab::Git.branch_name(@ref)
|
|
|
|
@tag_name = Gitlab::Git.tag_name(@ref)
|
|
|
|
|
2020-09-16 12:10:15 +00:00
|
|
|
@default_branch = default_branch
|
2020-02-27 15:09:24 +00:00
|
|
|
@logger = logger
|
|
|
|
@logger.append_message("Running checks for ref: #{@branch_name || @tag_name}")
|
|
|
|
end
|
|
|
|
|
2020-03-17 06:09:21 +00:00
|
|
|
def validate!
|
2020-09-16 12:10:15 +00:00
|
|
|
if !@default_branch || creation? || deletion?
|
2020-02-27 18:09:21 +00:00
|
|
|
raise GitAccess::ForbiddenError, ERROR_MESSAGES[:create_delete_branch]
|
2020-02-27 15:09:24 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
true
|
2020-12-01 15:09:28 +00:00
|
|
|
rescue GitAccess::ForbiddenError => e
|
|
|
|
Gitlab::ErrorTracking.log_exception(e, default_branch: @default_branch, branch_name: @branch_name, creation: creation?, deletion: deletion?)
|
|
|
|
|
|
|
|
raise e
|
2020-02-27 15:09:24 +00:00
|
|
|
end
|
2020-03-03 15:08:08 +00:00
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def creation?
|
2020-09-16 12:10:15 +00:00
|
|
|
@branch_name != @default_branch && super
|
2020-03-03 15:08:08 +00:00
|
|
|
end
|
2020-02-27 15:09:24 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|