Backport changes to Gitlab::Checks::ChangeAccess from EE
This commit is contained in:
parent
68cc9ea22d
commit
4ca358891d
1 changed files with 21 additions and 17 deletions
|
@ -16,7 +16,7 @@ module Gitlab
|
||||||
lfs_objects_missing: 'LFS objects are missing. Ensure LFS is properly set up or try a manual "git lfs push --all".'
|
lfs_objects_missing: 'LFS objects are missing. Ensure LFS is properly set up or try a manual "git lfs push --all".'
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
attr_reader :user_access, :project, :skip_authorization, :protocol
|
attr_reader :user_access, :project, :skip_authorization, :protocol, :oldrev, :newrev, :ref, :branch_name, :tag_name
|
||||||
|
|
||||||
def initialize(
|
def initialize(
|
||||||
change, user_access:, project:, skip_authorization: false,
|
change, user_access:, project:, skip_authorization: false,
|
||||||
|
@ -51,9 +51,9 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def branch_checks
|
def branch_checks
|
||||||
return unless @branch_name
|
return unless branch_name
|
||||||
|
|
||||||
if deletion? && @branch_name == project.default_branch
|
if deletion? && branch_name == project.default_branch
|
||||||
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:delete_default_branch]
|
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:delete_default_branch]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def protected_branch_checks
|
def protected_branch_checks
|
||||||
return unless ProtectedBranch.protected?(project, @branch_name)
|
return unless ProtectedBranch.protected?(project, branch_name)
|
||||||
|
|
||||||
if forced_push?
|
if forced_push?
|
||||||
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:force_push_protected_branch]
|
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:force_push_protected_branch]
|
||||||
|
@ -75,29 +75,29 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def protected_branch_deletion_checks
|
def protected_branch_deletion_checks
|
||||||
unless user_access.can_delete_branch?(@branch_name)
|
unless user_access.can_delete_branch?(branch_name)
|
||||||
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:non_master_delete_protected_branch]
|
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:non_master_delete_protected_branch]
|
||||||
end
|
end
|
||||||
|
|
||||||
unless protocol == 'web'
|
unless updated_from_web?
|
||||||
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:non_web_delete_protected_branch]
|
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:non_web_delete_protected_branch]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def protected_branch_push_checks
|
def protected_branch_push_checks
|
||||||
if matching_merge_request?
|
if matching_merge_request?
|
||||||
unless user_access.can_merge_to_branch?(@branch_name) || user_access.can_push_to_branch?(@branch_name)
|
unless user_access.can_merge_to_branch?(branch_name) || user_access.can_push_to_branch?(branch_name)
|
||||||
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:merge_protected_branch]
|
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:merge_protected_branch]
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
unless user_access.can_push_to_branch?(@branch_name)
|
unless user_access.can_push_to_branch?(branch_name)
|
||||||
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:push_protected_branch]
|
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:push_protected_branch]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def tag_checks
|
def tag_checks
|
||||||
return unless @tag_name
|
return unless tag_name
|
||||||
|
|
||||||
if tag_exists? && user_access.cannot_do_action?(:admin_project)
|
if tag_exists? && user_access.cannot_do_action?(:admin_project)
|
||||||
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:change_existing_tags]
|
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:change_existing_tags]
|
||||||
|
@ -107,40 +107,44 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def protected_tag_checks
|
def protected_tag_checks
|
||||||
return unless ProtectedTag.protected?(project, @tag_name)
|
return unless ProtectedTag.protected?(project, tag_name)
|
||||||
|
|
||||||
raise(GitAccess::UnauthorizedError, ERROR_MESSAGES[:update_protected_tag]) if update?
|
raise(GitAccess::UnauthorizedError, ERROR_MESSAGES[:update_protected_tag]) if update?
|
||||||
raise(GitAccess::UnauthorizedError, ERROR_MESSAGES[:delete_protected_tag]) if deletion?
|
raise(GitAccess::UnauthorizedError, ERROR_MESSAGES[:delete_protected_tag]) if deletion?
|
||||||
|
|
||||||
unless user_access.can_create_tag?(@tag_name)
|
unless user_access.can_create_tag?(tag_name)
|
||||||
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:create_protected_tag]
|
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:create_protected_tag]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def updated_from_web?
|
||||||
|
protocol == 'web'
|
||||||
|
end
|
||||||
|
|
||||||
def tag_exists?
|
def tag_exists?
|
||||||
project.repository.tag_exists?(@tag_name)
|
project.repository.tag_exists?(tag_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
def forced_push?
|
def forced_push?
|
||||||
Gitlab::Checks::ForcePush.force_push?(@project, @oldrev, @newrev)
|
Gitlab::Checks::ForcePush.force_push?(project, oldrev, newrev)
|
||||||
end
|
end
|
||||||
|
|
||||||
def update?
|
def update?
|
||||||
!Gitlab::Git.blank_ref?(@oldrev) && !deletion?
|
!Gitlab::Git.blank_ref?(oldrev) && !deletion?
|
||||||
end
|
end
|
||||||
|
|
||||||
def deletion?
|
def deletion?
|
||||||
Gitlab::Git.blank_ref?(@newrev)
|
Gitlab::Git.blank_ref?(newrev)
|
||||||
end
|
end
|
||||||
|
|
||||||
def matching_merge_request?
|
def matching_merge_request?
|
||||||
Checks::MatchingMergeRequest.new(@newrev, @branch_name, @project).match?
|
Checks::MatchingMergeRequest.new(newrev, branch_name, project).match?
|
||||||
end
|
end
|
||||||
|
|
||||||
def lfs_objects_exist_check
|
def lfs_objects_exist_check
|
||||||
lfs_check = Checks::LfsIntegrity.new(project, @newrev)
|
lfs_check = Checks::LfsIntegrity.new(project, newrev)
|
||||||
|
|
||||||
if lfs_check.objects_missing?
|
if lfs_check.objects_missing?
|
||||||
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:lfs_objects_missing]
|
raise GitAccess::UnauthorizedError, ERROR_MESSAGES[:lfs_objects_missing]
|
||||||
|
|
Loading…
Reference in a new issue