diff --git a/config/initializers/action_cable.rb b/config/initializers/action_cable.rb index b2ac3e8c1ae0dcdb9104294d82f9374dcaefb85e..0e08f22d143ae465168e7ae538508cfb0374b7db 100644 --- a/config/initializers/action_cable.rb +++ b/config/initializers/action_cable.rb @@ -7,11 +7,13 @@ config.action_cable.url = Gitlab::Utils.append_path(Gitlab.config.gitlab.relative_url_root, '/-/cable') config.action_cable.worker_pool_size = Gitlab::ActionCable::Config.worker_pool_size - config.action_cable.allowed_request_origins = [Gitlab.config.gitlab.url] if Rails.env.development? || Rails.env.test? if Rails.env.development? || Rails.env.test? + config.action_cable.allowed_request_origins = [Gitlab.config.gitlab.url] config.action_cable.disable_request_forgery_protection = Gitlab::Utils.to_boolean( ENV.fetch('ACTION_CABLE_DISABLE_REQUEST_FORGERY_PROTECTION', false) ) + elsif Gitlab::Geo.enabled? + config.action_cable.allowed_request_origins = GeoNode.enabled.map { |node| node.internal_url.chomp('/') }.uniq end end diff --git a/spec/initializers/action_cable_spec.rb b/spec/initializers/action_cable_spec.rb index 0cdac970c4adfe57b120ab1fa2b1e6b625200d35..f7b40fea6f1a0f5596f9d7dbd0e461f9b8d60497 100644 --- a/spec/initializers/action_cable_spec.rb +++ b/spec/initializers/action_cable_spec.rb @@ -51,6 +51,11 @@ stub_rails_env(rails_env) if rails_env stub_config_setting(relative_url_root: '/gitlab/root', url: 'example.com', https: true) + if test_for_geo? + allow(Gitlab::Geo).to receive(:enabled?).and_return(true) + allow(GeoNode).to receive(:enabled).and_return([primary_node, secondary_node]) + end + load Rails.root.join('config/initializers/action_cable.rb') end @@ -64,6 +69,7 @@ let(:rails_env) { nil } let(:disable_request_forgery_protection) { false } + let(:test_for_geo?) { false } subject(:config) { Rails.application.config.action_cable } @@ -104,6 +110,14 @@ let(:rails_env) { 'production' } it { is_expected.to eq(nil) } + + context 'when Geo is enabled' do + let(:test_for_geo?) { true } + let(:primary_node) { instance_double(GeoNode, internal_url: 'http://0.0.1.0/') } + let(:secondary_node) { instance_double(GeoNode, internal_url: 'http://0.0.2.0/') } + + it { is_expected.to eq(%w[http://0.0.1.0 http://0.0.2.0]) } + end end end