Commit 8b35b208 authored by Steven Thonus's avatar Steven Thonus

first setup to protect protected branched to force updates

parent 7f67e066
...@@ -10,6 +10,7 @@ module API ...@@ -10,6 +10,7 @@ module API
# project - project path with namespace # project - project path with namespace
# action - git action (git-upload-pack or git-receive-pack) # action - git action (git-upload-pack or git-receive-pack)
# ref - branch name # ref - branch name
# forced_push - forced_push
# #
get "/allowed" do get "/allowed" do
# Check for *.wiki repositories. # Check for *.wiki repositories.
...@@ -35,7 +36,8 @@ module API ...@@ -35,7 +36,8 @@ module API
project, project,
params[:ref], params[:ref],
params[:oldrev], params[:oldrev],
params[:newrev] params[:newrev],
params[:forced_push]
) )
end end
......
...@@ -5,7 +5,7 @@ module Gitlab ...@@ -5,7 +5,7 @@ module Gitlab
attr_reader :params, :project, :git_cmd, :user attr_reader :params, :project, :git_cmd, :user
def allowed?(actor, cmd, project, ref = nil, oldrev = nil, newrev = nil) def allowed?(actor, cmd, project, ref = nil, oldrev = nil, newrev = nil, forced_push = false)
case cmd case cmd
when *DOWNLOAD_COMMANDS when *DOWNLOAD_COMMANDS
if actor.is_a? User if actor.is_a? User
...@@ -19,12 +19,12 @@ module Gitlab ...@@ -19,12 +19,12 @@ module Gitlab
end end
when *PUSH_COMMANDS when *PUSH_COMMANDS
if actor.is_a? User if actor.is_a? User
push_allowed?(actor, project, ref, oldrev, newrev) push_allowed?(actor, project, ref, oldrev, newrev, forced_push)
elsif actor.is_a? DeployKey elsif actor.is_a? DeployKey
# Deploy key not allowed to push # Deploy key not allowed to push
return false return false
elsif actor.is_a? Key elsif actor.is_a? Key
push_allowed?(actor.user, project, ref, oldrev, newrev) push_allowed?(actor.user, project, ref, oldrev, newrev, forced_push)
else else
raise 'Wrong actor' raise 'Wrong actor'
end end
...@@ -41,13 +41,18 @@ module Gitlab ...@@ -41,13 +41,18 @@ module Gitlab
end end
end end
def push_allowed?(user, project, ref, oldrev, newrev) def push_allowed?(user, project, ref, oldrev, newrev, forced_push)
if user && user_allowed?(user) if user && user_allowed?(user)
action = if project.protected_branch?(ref) action = if project.protected_branch?(ref)
:push_code_to_protected_branches if forced_push
else :force_push_code_to_protected_branches
:push_code else
end :push_code_to_protected_branches
end
else
:push_code
end
user.can?(action, project) user.can?(action, project)
else else
false false
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment