summaryrefslogtreecommitdiff
path: root/app/services
diff options
context:
space:
mode:
Diffstat (limited to 'app/services')
-rw-r--r--app/services/ci/create_pipeline_service.rb30
-rw-r--r--app/services/ci/create_trigger_request_service.rb3
2 files changed, 28 insertions, 5 deletions
diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb
index 942145c4a8c..db12116b3ae 100644
--- a/app/services/ci/create_pipeline_service.rb
+++ b/app/services/ci/create_pipeline_service.rb
@@ -27,6 +27,10 @@ module Ci
return error('Reference not found')
end
+ unless triggering_user_allowed_for_ref?(trigger_request, ref)
+ return error("Insufficient permissions for protected #{ref}")
+ end
+
unless commit
return error('Commit not found')
end
@@ -47,6 +51,20 @@ module Ci
return error('No stages / jobs for this pipeline.')
end
+ process!
+ end
+
+ private
+
+ def triggering_user_allowed_for_ref?(trigger_request, ref)
+ triggering_user = current_user || trigger_request.trigger.owner
+
+ (triggering_user &&
+ Ci::Pipeline.allowed_to_create?(triggering_user, project, ref)) ||
+ !project.protected_for?(ref)
+ end
+
+ def process!
Ci::Pipeline.transaction do
update_merge_requests_head_pipeline if pipeline.save
@@ -62,8 +80,6 @@ module Ci
pipeline.tap(&:process!)
end
- private
-
def update_merge_requests_head_pipeline
return unless pipeline.latest?
@@ -113,11 +129,17 @@ module Ci
end
def branch?
- project.repository.ref_exists?(Gitlab::Git::BRANCH_REF_PREFIX + ref)
+ return @is_branch if defined?(@is_branch)
+
+ @is_branch =
+ project.repository.ref_exists?(Gitlab::Git::BRANCH_REF_PREFIX + ref)
end
def tag?
- project.repository.ref_exists?(Gitlab::Git::TAG_REF_PREFIX + ref)
+ return @is_tag if defined?(@is_tag)
+
+ @is_tag =
+ project.repository.ref_exists?(Gitlab::Git::TAG_REF_PREFIX + ref)
end
def ref
diff --git a/app/services/ci/create_trigger_request_service.rb b/app/services/ci/create_trigger_request_service.rb
index cf3d4aee2bc..90f75606ddf 100644
--- a/app/services/ci/create_trigger_request_service.rb
+++ b/app/services/ci/create_trigger_request_service.rb
@@ -6,7 +6,8 @@ module Ci
pipeline = Ci::CreatePipelineService.new(project, trigger.owner, ref: ref)
.execute(:trigger, ignore_skip_ci: true, trigger_request: trigger_request)
- trigger_request if pipeline.persisted?
+ trigger_request.pipeline = pipeline
+ trigger_request
end
end
end