diff --git a/lib/travis/api/app/endpoint/builds.rb b/lib/travis/api/app/endpoint/builds.rb index b21a7cd6..fd4b890b 100644 --- a/lib/travis/api/app/endpoint/builds.rb +++ b/lib/travis/api/app/endpoint/builds.rb @@ -22,9 +22,10 @@ class Travis::Api::App post '/:id/cancel' do Metriks.meter("api.request.cancel_build").mark - if Travis::Features.owner_active?(:enqueue_to_hub, current_user) - service = Travis::Enqueue::Services::CancelModel.new(current_user, { build_id: params[:id] }) - else + service = Travis::Enqueue::Services::CancelModel.new(current_user, { build_id: params[:id] }) + repository_owner = service.target.repository.owner + + if !Travis::Features.owner_active?(:enqueue_to_hub, repository_owner) service = self.service(:cancel_build, params.merge(source: 'api')) end @@ -60,10 +61,11 @@ class Travis::Api::App post '/:id/restart' do Metriks.meter("api.request.restart_build").mark - service = if Travis::Features.owner_active?(:enqueue_to_hub, current_user) - Travis::Enqueue::Services::RestartModel.new(current_user, build_id: params[:id]) - else - self.service(:reset_model, build_id: params[:id]) + service = Travis::Enqueue::Services::RestartModel.new(current_user, build_id: params[:id]) + repository_owner = service.target.repository.owner + + if !Travis::Features.owner_active?(:enqueue_to_hub, repository_owner) + service = self.service(:reset_model, build_id: params[:id]) end result = if !service.accept? diff --git a/lib/travis/api/app/endpoint/jobs.rb b/lib/travis/api/app/endpoint/jobs.rb index 2f1fd0ed..410c76e4 100644 --- a/lib/travis/api/app/endpoint/jobs.rb +++ b/lib/travis/api/app/endpoint/jobs.rb @@ -29,9 +29,9 @@ class Travis::Api::App post '/:id/cancel' do Metriks.meter("api.request.cancel_job").mark - if Travis::Features.owner_active?(:enqueue_to_hub, current_user) - service = Travis::Enqueue::Services::CancelModel.new(current_user, { job_id: params[:id] }) - else + service = Travis::Enqueue::Services::CancelModel.new(current_user, { job_id: params[:id] }) + repository_owner = service.target.repository.owner + if !Travis::Features.owner_active?(:enqueue_to_hub, repository_owner) service = self.service(:cancel_job, params.merge(source: 'api')) end @@ -68,10 +68,10 @@ class Travis::Api::App post '/:id/restart' do Metriks.meter("api.request.restart_job").mark - service = if Travis::Features.owner_active?(:enqueue_to_hub, current_user) - Travis::Enqueue::Services::RestartModel.new(current_user, { job_id: params[:id] }) - else - self.service(:reset_model, job_id: params[:id]) + service = Travis::Enqueue::Services::RestartModel.new(current_user, { job_id: params[:id] }) + repository_owner = service.target.repository.owner + if !Travis::Features.owner_active?(:enqueue_to_hub, repository_owner) + service = self.service(:reset_model, job_id: params[:id]) end result = if !service.accept? diff --git a/lib/travis/api/v3/queries/build.rb b/lib/travis/api/v3/queries/build.rb index ca391e76..803392ce 100644 --- a/lib/travis/api/v3/queries/build.rb +++ b/lib/travis/api/v3/queries/build.rb @@ -13,7 +13,7 @@ module Travis::API::V3 def cancel(user) raise BuildNotCancelable if %w(passed failed canceled errored).include? find.state payload = { id: id, user_id: user.id, source: 'api' } - if Travis::Features.owner_active?(:enqueue_to_hub, user) + if Travis::Features.owner_active?(:enqueue_to_hub, find.repository.owner) service = Travis::Enqueue::Services::CancelModel.new(user, { build_id: id }) service.push("build:cancel", payload) else @@ -24,7 +24,7 @@ module Travis::API::V3 def restart(user) raise BuildAlreadyRunning if %w(received queued started).include? find.state - if Travis::Features.owner_active?(:enqueue_to_hub, user) + if Travis::Features.owner_active?(:enqueue_to_hub, find.repository.owner) service = Travis::Enqueue::Services::RestartModel.new(user, { build_id: id }) payload = { id: id, user_id: user.id } service.push("build:restart", payload) diff --git a/lib/travis/api/v3/queries/job.rb b/lib/travis/api/v3/queries/job.rb index 52ee29bd..fc7eb899 100644 --- a/lib/travis/api/v3/queries/job.rb +++ b/lib/travis/api/v3/queries/job.rb @@ -13,7 +13,8 @@ module Travis::API::V3 def cancel(user) raise JobNotCancelable if %w(passed failed canceled errored).include? find.state payload = { id: id, user_id: user.id, source: 'api' } - if Travis::Features.owner_active?(:enqueue_to_hub, user) + #look for repo.owner instead and look if the user belongs to the repo, instead of using user for the feature flag + if Travis::Features.owner_active?(:enqueue_to_hub, find.repository.owner) service = Travis::Enqueue::Services::CancelModel.new(user, { job_id: id }) service.push("job:cancel", payload) else @@ -25,7 +26,7 @@ module Travis::API::V3 def restart(user) raise JobAlreadyRunning if %w(received queued started).include? find.state - if Travis::Features.owner_active?(:enqueue_to_hub, user) + if Travis::Features.owner_active?(:enqueue_to_hub, find.repository.owner) service = Travis::Enqueue::Services::RestartModel.new(user, { job_id: id }) payload = { id: id, user_id: user.id } service.push("job:restart", payload) diff --git a/lib/travis/api/workers/job_cancellation.rb b/lib/travis/api/workers/job_cancellation.rb index dadf60d0..3210a556 100644 --- a/lib/travis/api/workers/job_cancellation.rb +++ b/lib/travis/api/workers/job_cancellation.rb @@ -13,7 +13,6 @@ module Travis user = User.find(data['user_id']) Travis.service(:cancel_job, user, { id: data['id'], source: data['source'] }).run end - end end end