60 lines
1.6 KiB
Ruby
60 lines
1.6 KiB
Ruby
module Travis
|
|
module Enqueue
|
|
module Services
|
|
|
|
class CancelModel
|
|
|
|
attr_reader :current_user, :target
|
|
|
|
def initialize(current_user, params)
|
|
@current_user = current_user
|
|
@params = params
|
|
target
|
|
end
|
|
|
|
def messages
|
|
messages = []
|
|
messages << { :notice => "The #{type} was successfully cancelled." } if can_cancel?
|
|
messages << { :error => "You are not authorized to cancel this #{type}." } unless authorized?
|
|
messages << { :error => "The #{type} could not be cancelled." } unless build.cancelable?
|
|
messages
|
|
end
|
|
|
|
def push(event, payload)
|
|
# target may have been retrieved with a :join query, so we need to reset the readonly status
|
|
if can_cancel?
|
|
::Sidekiq::Client.push(
|
|
'queue' => 'hub',
|
|
'class' => 'Travis::Hub::Sidekiq::Worker',
|
|
#'args' => ["#{type}:cancel", @params]
|
|
'args' => [event, payload]
|
|
)
|
|
end
|
|
end
|
|
|
|
def type
|
|
@type ||= @params[:build_id] ? :build : :job
|
|
end
|
|
|
|
def target
|
|
if type == :build
|
|
@target = Build.find(@params[:build_id])
|
|
else
|
|
@target = Job.find(@params[:job_id])
|
|
end
|
|
end
|
|
|
|
def can_cancel?
|
|
authorized? && target.cancelable?
|
|
end
|
|
|
|
# check on web
|
|
def authorized?
|
|
current_user.permission?(:pull, :repository_id => target.repository_id)
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|