Skip to content

Commit 8ef6200

Browse files
committed
Prevent enforce_route_policies on internal and router_group domains
Internal domains bypass GoRouter entirely (using container-to-container networking), so GoRouter cannot enforce route policies. Similarly, TCP router groups do not support mTLS policy enforcement. Add validation to DomainCreateMessage#mutually_exclusive_fields to reject these invalid combinations at domain creation time.
1 parent b62a643 commit 8ef6200

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

app/messages/domain_create_message.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ def alpha_numeric
9090
def mutually_exclusive_fields
9191
errors.add(:base, 'Cannot associate an internal domain with an organization') if requested?(:internal) && internal == true && requested?(:relationships)
9292
errors.add(:base, 'Internal domains cannot be associated to a router group.') if requested?(:internal) && internal == true && requested?(:router_group)
93+
errors.add(:base, 'Internal domains cannot have route policy enforcement. Internal routes bypass GoRouter.') if requested?(:internal) && internal == true &&
94+
requested?(:enforce_route_policies) && enforce_route_policies == true
95+
errors.add(:base, 'Domains with a router group cannot have route policy enforcement. TCP routes do not support mTLS policy enforcement.') if requested?(:router_group) &&
96+
requested?(:enforce_route_policies) && enforce_route_policies == true
9397
return unless requested?(:relationships) && requested?(:router_group)
9498

9599
errors.add(:base, 'Domains scoped to an organization cannot be associated to a router group.')

spec/unit/messages/domain_create_message_spec.rb

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,44 @@ module VCAP::CloudController
490490
end
491491
end
492492
end
493+
494+
context 'enforce_route_policies with internal' do
495+
context 'when both internal and enforce_route_policies are true' do
496+
let(:params) { { name: 'name.com', internal: true, enforce_route_policies: true, route_policies_scope: 'any' } }
497+
498+
it 'is not valid' do
499+
expect(subject).not_to be_valid
500+
expect(subject.errors[:base]).to include('Internal domains cannot have route policy enforcement. Internal routes bypass GoRouter.')
501+
end
502+
end
503+
504+
context 'when internal is true and enforce_route_policies is false' do
505+
let(:params) { { name: 'name.com', internal: true, enforce_route_policies: false } }
506+
507+
it 'is valid' do
508+
expect(subject).to be_valid
509+
end
510+
end
511+
end
512+
513+
context 'enforce_route_policies with router_group' do
514+
context 'when both router_group and enforce_route_policies are set' do
515+
let(:params) { { name: 'name.com', router_group: { guid: 'some-guid' }, enforce_route_policies: true, route_policies_scope: 'any' } }
516+
517+
it 'is not valid' do
518+
expect(subject).not_to be_valid
519+
expect(subject.errors[:base]).to include('Domains with a router group cannot have route policy enforcement. TCP routes do not support mTLS policy enforcement.')
520+
end
521+
end
522+
523+
context 'when router_group is set and enforce_route_policies is false' do
524+
let(:params) { { name: 'name.com', router_group: { guid: 'some-guid' }, enforce_route_policies: false } }
525+
526+
it 'is valid' do
527+
expect(subject).to be_valid
528+
end
529+
end
530+
end
493531
end
494532

495533
describe 'accessor methods' do

0 commit comments

Comments
 (0)