Skip to content

Commit d6668f6

Browse files
committed
Align named Cloud webhook behavior
1 parent 610fd50 commit d6668f6

5 files changed

Lines changed: 43 additions & 5 deletions

File tree

‎lib/flipper/cloud/routes.rb‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
next unless named.cloud? && named.cloud_path
1919

2020
cloud_options = named.resolve_cloud_credentials
21-
next unless cloud_options[:sync_secret]
21+
next if !cloud_options[:sync_secret] || cloud_options[:sync_secret].empty?
2222

2323
require "flipper/cloud"
2424
cloud_app = Flipper::Cloud.app(Flipper.named(name),

‎lib/flipper/engine.rb‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,12 @@ def self.default_strict_value
131131

132132
named_paths = Flipper.configuration.named_instance_names.map do |name|
133133
named = Flipper.configuration.named_configuration(name)
134-
named.cloud_path if named.cloud? && named.cloud_path && named.resolve_cloud_credentials[:sync_secret]
134+
next unless named.cloud? && named.cloud_path
135+
136+
sync_secret = named.resolve_cloud_credentials[:sync_secret]
137+
named.cloud_path if sync_secret && !sync_secret.empty?
135138
end.compact
136-
default_paths = if cloud? && ENV["FLIPPER_CLOUD_SYNC_SECRET"]
139+
default_paths = if cloud? && !ENV.fetch("FLIPPER_CLOUD_SYNC_SECRET", "").empty?
137140
[app.config.flipper.cloud_path]
138141
else
139142
[]

‎lib/flipper/test_help.rb‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ def flipper_reset
2828

2929
if Flipper.configuration.respond_to?(:named_instance_names)
3030
Flipper.configuration.named_instance_names.each do |name|
31+
named = Flipper.configuration.named_configuration(name)
32+
if named.cloud?
33+
named_adapter = Flipper::Adapters::Memory.new
34+
named.adapter { named_adapter }
35+
named.default { Flipper.new(named.adapter) }
36+
end
3137
Flipper.named(name).features.each(&:remove) rescue nil
3238
end
3339
end

‎spec/flipper/engine_spec.rb‎

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ def get_all
318318
context "with named Cloud" do
319319
let(:app) { application.routes }
320320
let(:named_cloud_path) { "_cross_app" }
321+
let(:named_sync_secret) { "named-secret" }
321322
let(:request_body) do
322323
JSON.generate({
323324
"environment_id" => 1,
@@ -331,12 +332,12 @@ def get_all
331332
Flipper::Cloud::MessageVerifier.new(secret: "named-secret").generate(request_body, timestamp)
332333
end
333334
let(:signature_header_value) do
334-
Flipper::Cloud::MessageVerifier.new(secret: "").header(signature, timestamp)
335+
Flipper::Cloud::MessageVerifier.new(secret: "header-secret").header(signature, timestamp)
335336
end
336337

337338
before do
338339
ENV["FLIPPER_CLOUD_CROSS_APP_TOKEN"] = "named-token"
339-
ENV["FLIPPER_CLOUD_CROSS_APP_SYNC_SECRET"] = "named-secret"
340+
ENV["FLIPPER_CLOUD_CROSS_APP_SYNC_SECRET"] = named_sync_secret
340341
initializer do
341342
Flipper.configure do |flipper_config|
342343
flipper_config.named(:cross_app) do |named|
@@ -385,6 +386,20 @@ def get_all
385386
ENV.delete("FLIPPER_CLOUD_SYNC_SECRET")
386387
end
387388
end
389+
390+
context "with an empty sync secret" do
391+
let(:named_sync_secret) { "" }
392+
393+
it "does not mount a webhook" do
394+
silence { application.initialize! }
395+
396+
post "/_cross_app", request_body, {
397+
"HTTP_FLIPPER_CLOUD_SIGNATURE" => signature_header_value,
398+
}
399+
400+
expect(last_response.status).to eq(404)
401+
end
402+
end
388403
end
389404

390405
it "loads named Cloud credentials from the matching Rails credential scope" do

‎spec/flipper/test_help_spec.rb‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,20 @@
2626
expect(a_request(:any, /flippercloud/)).not_to have_been_made
2727
end
2828

29+
it "replaces a named polling Cloud instance added after test setup" do
30+
described_class.flipper_configure
31+
Flipper.configure do |config|
32+
config.named(:cross_app) do |named|
33+
named.cloud(token: "cloud-token", sync_secret: "")
34+
end
35+
end
36+
37+
described_class.flipper_reset
38+
39+
expect(Flipper.cross_app.instance.class).to be(Flipper::DSL)
40+
expect(a_request(:any, /flippercloud/)).not_to have_been_made
41+
end
42+
2943
it "clears named features while preserving registered groups" do
3044
Flipper.configure do |config|
3145
config.named(:cross_app)

0 commit comments

Comments
 (0)