summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-12-08 14:28:49 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-12-12 12:59:01 +0100
commit5059d0b834eeea22ada4b6ac98cfddc2123691e9 (patch)
tree921c5d1807941d93031ce986adbadbd2b461d5e5
parente0ce97fb7d7d995fa76df57bfaac6d3601800190 (diff)
downloadgitlab-ce-5059d0b834eeea22ada4b6ac98cfddc2123691e9.tar.gz
Incorporate permission checks into new CI statuses
[ci skip]
-rw-r--r--lib/gitlab/ci/status/build/cancelable.rb12
-rw-r--r--lib/gitlab/ci/status/build/common.rb10
-rw-r--r--lib/gitlab/ci/status/build/play.rb12
-rw-r--r--lib/gitlab/ci/status/build/retryable.rb12
-rw-r--r--lib/gitlab/ci/status/build/stop.rb12
-rw-r--r--lib/gitlab/ci/status/core.rb13
-rw-r--r--lib/gitlab/ci/status/extended.rb8
-rw-r--r--lib/gitlab/ci/status/factory.rb4
-rw-r--r--lib/gitlab/ci/status/pipeline/common.rb10
-rw-r--r--lib/gitlab/ci/status/pipeline/success_with_warnings.rb4
-rw-r--r--lib/gitlab/ci/status/stage/common.rb12
11 files changed, 60 insertions, 49 deletions
diff --git a/lib/gitlab/ci/status/build/cancelable.rb b/lib/gitlab/ci/status/build/cancelable.rb
index bff0464ef0c..a8830b04715 100644
--- a/lib/gitlab/ci/status/build/cancelable.rb
+++ b/lib/gitlab/ci/status/build/cancelable.rb
@@ -3,10 +3,10 @@ module Gitlab
module Status
module Status
class Cancelable < SimpleDelegator
- extend Status::Extended
+ include Status::Extended
- def has_action?(current_user)
- can?(current_user, :update_build, subject)
+ def has_action?
+ can?(user, :update_build, subject)
end
def action_icon
@@ -14,14 +14,16 @@ module Gitlab
end
def action_path
- cancel_namespace_project_build_path(subject.project.namespace, subject.project, subject)
+ cancel_namespace_project_build_path(subject.project.namespace,
+ subject.project,
+ subject)
end
def action_method
:post
end
- def self.matches?(build)
+ def self.matches?(build, user)
build.cancelable?
end
end
diff --git a/lib/gitlab/ci/status/build/common.rb b/lib/gitlab/ci/status/build/common.rb
index 2fb79afa3d3..2b602f1e247 100644
--- a/lib/gitlab/ci/status/build/common.rb
+++ b/lib/gitlab/ci/status/build/common.rb
@@ -3,14 +3,14 @@ module Gitlab
module Status
module Build
module Common
- def has_details?(current_user)
- can?(current_user, :read_build, subject)
+ def has_details?
+ can?(user, :read_build, subject)
end
def details_path
- namespace_project_build_path(@subject.project.namespace,
- @subject.project,
- @subject.pipeline)
+ namespace_project_build_path(subject.project.namespace,
+ subject.project,
+ subject.pipeline)
end
end
end
diff --git a/lib/gitlab/ci/status/build/play.rb b/lib/gitlab/ci/status/build/play.rb
index d295850137b..70c08197ea1 100644
--- a/lib/gitlab/ci/status/build/play.rb
+++ b/lib/gitlab/ci/status/build/play.rb
@@ -3,7 +3,7 @@ module Gitlab
module Status
module Status
class Play < SimpleDelegator
- extend Status::Extended
+ include Status::Extended
def text
'play'
@@ -13,8 +13,8 @@ module Gitlab
'play'
end
- def has_action?(current_user)
- can?(current_user, :update_build, subject)
+ def has_action?
+ can?(user, :update_build, subject)
end
def action_icon
@@ -22,14 +22,16 @@ module Gitlab
end
def action_path
- play_namespace_project_build_path(subject.project.namespace, subject.project, subject)
+ play_namespace_project_build_path(subject.project.namespace,
+ subject.project,
+ subject)
end
def action_method
:post
end
- def self.matches?(build)
+ def self.matches?(build, user)
build.playable? && !build.stops_environment?
end
end
diff --git a/lib/gitlab/ci/status/build/retryable.rb b/lib/gitlab/ci/status/build/retryable.rb
index b3c0eedadf8..3309e8808e1 100644
--- a/lib/gitlab/ci/status/build/retryable.rb
+++ b/lib/gitlab/ci/status/build/retryable.rb
@@ -3,10 +3,10 @@ module Gitlab
module Status
module Status
class Retryable < SimpleDelegator
- extend Status::Extended
+ include Status::Extended
- def has_action?(current_user)
- can?(current_user, :update_build, subject)
+ def has_action?
+ can?(user, :update_build, subject)
end
def action_icon
@@ -14,14 +14,16 @@ module Gitlab
end
def action_path
- retry_namespace_project_build_path(subject.project.namespace, subject.project, subject)
+ retry_namespace_project_build_path(subject.project.namespace,
+ subject.project,
+ subject)
end
def action_method
:post
end
- def self.matches?(build)
+ def self.matches?(build, user)
build.retryable?
end
end
diff --git a/lib/gitlab/ci/status/build/stop.rb b/lib/gitlab/ci/status/build/stop.rb
index 261de9695c5..6fb51890bec 100644
--- a/lib/gitlab/ci/status/build/stop.rb
+++ b/lib/gitlab/ci/status/build/stop.rb
@@ -3,7 +3,7 @@ module Gitlab
module Status
module Status
class Play < SimpleDelegator
- extend Status::Extended
+ include Status::Extended
def text
'stop'
@@ -21,8 +21,8 @@ module Gitlab
'stop'
end
- def has_action?(current_user)
- can?(current_user, :update_build, subject)
+ def has_action?
+ can?(user, :update_build, subject)
end
def action_icon
@@ -30,14 +30,16 @@ module Gitlab
end
def action_path
- play_namespace_project_build_path(subject.project.namespace, subject.project, subject)
+ play_namespace_project_build_path(subject.project.namespace,
+ subject.project,
+ subject)
end
def action_method
:post
end
- def self.matches?(build)
+ def self.matches?(build, user)
build.playable? && build.stops_environment?
end
end
diff --git a/lib/gitlab/ci/status/core.rb b/lib/gitlab/ci/status/core.rb
index 6b47096f811..df371363736 100644
--- a/lib/gitlab/ci/status/core.rb
+++ b/lib/gitlab/ci/status/core.rb
@@ -6,8 +6,11 @@ module Gitlab
class Core
include Gitlab::Routing.url_helpers
- def initialize(subject)
+ attr_reader :subject, :user
+
+ def initialize(subject, user)
@subject = subject
+ @user = user
end
def icon
@@ -18,10 +21,6 @@ module Gitlab
raise NotImplementedError
end
- def title
- "#{@subject.class.name.demodulize}: #{label}"
- end
-
# Deprecation warning: this method is here because we need to maintain
# backwards compatibility with legacy statuses. We often do something
# like "ci-status ci-status-#{status}" to set CSS class.
@@ -33,7 +32,7 @@ module Gitlab
self.class.name.demodulize.downcase.underscore
end
- def has_details?(_user = nil)
+ def has_details?
false
end
@@ -41,7 +40,7 @@ module Gitlab
raise NotImplementedError
end
- def has_action?(_user = nil)
+ def has_action?
false
end
diff --git a/lib/gitlab/ci/status/extended.rb b/lib/gitlab/ci/status/extended.rb
index 93e6eff1c94..d367c9bda69 100644
--- a/lib/gitlab/ci/status/extended.rb
+++ b/lib/gitlab/ci/status/extended.rb
@@ -2,8 +2,12 @@ module Gitlab
module Ci
module Status
module Extended
- def matches?(_subject, _user)
- raise NotImplementedError
+ extend ActiveSupport::Concern
+
+ class_methods do
+ def matches?(_subject, _user)
+ raise NotImplementedError
+ end
end
end
end
diff --git a/lib/gitlab/ci/status/factory.rb b/lib/gitlab/ci/status/factory.rb
index 944e0fdde2d..ae9ef895df4 100644
--- a/lib/gitlab/ci/status/factory.rb
+++ b/lib/gitlab/ci/status/factory.rb
@@ -2,7 +2,7 @@ module Gitlab
module Ci
module Status
class Factory
- def initialize(subject, user = nil)
+ def initialize(subject, user)
@subject = subject
@user = user
end
@@ -32,7 +32,7 @@ module Gitlab
def core_status
Gitlab::Ci::Status
.const_get(simple_status.capitalize)
- .new(@subject)
+ .new(@subject, @user)
.extend(self.class.common_helpers)
end
diff --git a/lib/gitlab/ci/status/pipeline/common.rb b/lib/gitlab/ci/status/pipeline/common.rb
index 5f79044a496..76bfd18bf40 100644
--- a/lib/gitlab/ci/status/pipeline/common.rb
+++ b/lib/gitlab/ci/status/pipeline/common.rb
@@ -3,14 +3,14 @@ module Gitlab
module Status
module Pipeline
module Common
- def has_details?(current_user)
- can?(current_user, :read_pipeline, subject)
+ def has_details?
+ can?(user, :read_pipeline, subject)
end
def details_path
- namespace_project_pipeline_path(@subject.project.namespace,
- @subject.project,
- @subject)
+ namespace_project_pipeline_path(subject.project.namespace,
+ subject.project,
+ subject)
end
def has_action?
diff --git a/lib/gitlab/ci/status/pipeline/success_with_warnings.rb b/lib/gitlab/ci/status/pipeline/success_with_warnings.rb
index 4b040d60df8..a7c98f9e909 100644
--- a/lib/gitlab/ci/status/pipeline/success_with_warnings.rb
+++ b/lib/gitlab/ci/status/pipeline/success_with_warnings.rb
@@ -3,7 +3,7 @@ module Gitlab
module Status
module Pipeline
class SuccessWithWarnings < SimpleDelegator
- extend Status::Extended
+ include Status::Extended
def text
'passed'
@@ -21,7 +21,7 @@ module Gitlab
'success_with_warnings'
end
- def self.matches?(pipeline)
+ def self.matches?(pipeline, user)
pipeline.success? && pipeline.has_warnings?
end
end
diff --git a/lib/gitlab/ci/status/stage/common.rb b/lib/gitlab/ci/status/stage/common.rb
index e6ee2f92341..6851ceda317 100644
--- a/lib/gitlab/ci/status/stage/common.rb
+++ b/lib/gitlab/ci/status/stage/common.rb
@@ -3,15 +3,15 @@ module Gitlab
module Status
module Stage
module Common
- def has_details?(current_user)
- can?(current_user, :read_pipeline, subject)
+ def has_details?
+ can?(user, :read_pipeline, subject)
end
def details_path
- namespace_project_pipeline_path(@subject.project.namespace,
- @subject.project,
- @subject.pipeline,
- anchor: @subject.name)
+ namespace_project_pipeline_path(subject.project.namespace,
+ subject.project,
+ subject.pipeline,
+ anchor: subject.name)
end
def has_action?