Skip to content

Commit ce1fd06

Browse files
Merge pull request #1175 from travis-ci/ta-authorize-group-account-build
Authorize build if owner belongs to a group
2 parents 808d549 + d088f36 commit ce1fd06

File tree

6 files changed

+39
-2
lines changed

6 files changed

+39
-2
lines changed

lib/travis/api/enqueue/services/restart_model.rb

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ def billing?
4545
@cause_of_denial = e.message
4646
false
4747
rescue Travis::API::V3::NotFound
48-
# Owner is on a legacy plan
49-
if subscription&.active?
48+
if subscription&.active? || owner_group_subscription?
49+
# Owner is on a legacy plan or belongs to a group
5050
true
5151
else
5252
@cause_of_denial = 'You do not seem to have active subscription.'
@@ -86,6 +86,18 @@ def subscription
8686
Subscription.where(owner: repository.owner)&.first
8787
end
8888

89+
def owner_group
90+
repository&.owner&.owner_group
91+
end
92+
93+
def owner_group_subscription?
94+
return false if owner_group.blank?
95+
96+
group_owners = OwnerGroup.where(uuid: owner_group.uuid).map(&:owner)
97+
active_subscriptions = Subscription.where(owner: group_owners).select(&:active?)
98+
active_subscriptions.present?
99+
end
100+
89101
def permission?
90102
current_user && current_user.permission?(required_role, repository_id: target.repository_id) && !abusive? && build_permission?
91103
end

lib/travis/model.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class Model < ActiveRecord::Base
1818
require 'travis/model/job'
1919
require 'travis/model/membership'
2020
require 'travis/model/organization'
21+
require 'travis/model/owner_group'
2122
require 'travis/model/permission'
2223
require 'travis/model/pull_request'
2324
require 'travis/model/repository'

lib/travis/model/organization.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ class Organization < Travis::Model
55
has_many :memberships
66
has_many :users, :through => :memberships
77
has_many :repositories, :as => :owner
8+
has_one :owner_group, as: :owner
89

910
def education?
1011
Travis::Features.owner_active?(:educational_org, self)

lib/travis/model/owner_group.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
require 'gh'
2+
require 'travis/model'
3+
4+
class OwnerGroup < Travis::Model
5+
belongs_to :owner, polymorphic: true
6+
end

lib/travis/model/user.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class User < Travis::Model
1212
has_many :permissions, dependent: :destroy
1313
has_many :repositories, through: :permissions
1414
has_many :emails, dependent: :destroy
15+
has_one :owner_group, as: :owner
1516

1617
before_create :set_as_recent
1718
after_create :create_a_token

spec/lib/travis/api/enqueue/services/restart_model_spec.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,22 @@
118118
include_examples 'does not restart the job'
119119
end
120120

121+
context 'when customer belongs to a group' do
122+
let(:uuid) { SecureRandom.uuid }
123+
let!(:travis) { FactoryBot.create(:org, login: 'travis') }
124+
let!(:john) { FactoryBot.create(:user, login: 'john') }
125+
let!(:doe) { FactoryBot.create(:user, login: 'doe') }
126+
before do
127+
repository.permissions.create(user: user, build: true)
128+
FactoryBot.create(:valid_stripe_subs, owner: john)
129+
OwnerGroup.create(uuid: uuid, owner: owner)
130+
OwnerGroup.create(uuid: uuid, owner: john)
131+
OwnerGroup.create(uuid: uuid, owner: doe)
132+
end
133+
134+
include_examples 'restarts the job'
135+
end
136+
121137
end
122138
end
123139
end

0 commit comments

Comments
 (0)