Skip to content

Commit 70cacc9

Browse files
authored
Merge pull request #106 from launchdarkly/eb/ch32176-ch31956/bad-user
warn & don't send event if identify or track has no valid user
2 parents 0d0086b + 12f541a commit 70cacc9

File tree

4 files changed

+55
-25
lines changed

4 files changed

+55
-25
lines changed

lib/ldclient-rb/ldclient.rb

+8
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,10 @@ def variation_detail(key, user, default)
211211
# @return [void]
212212
#
213213
def identify(user)
214+
if !user || user[:key].nil?
215+
@config.logger.warn("Identify called with nil user or nil user key!")
216+
return
217+
end
214218
sanitize_user(user)
215219
@event_processor.add_event(kind: "identify", key: user[:key], user: user)
216220
end
@@ -229,6 +233,10 @@ def identify(user)
229233
# @return [void]
230234
#
231235
def track(event_name, user, data)
236+
if !user || user[:key].nil?
237+
@config.logger.warn("Track called with nil user or nil user key!")
238+
return
239+
end
232240
sanitize_user(user)
233241
@event_processor.add_event(kind: "custom", key: event_name, user: user, data: data)
234242
end

spec/fixtures/numeric_key_user.json

-9
This file was deleted.

spec/fixtures/sanitized_numeric_key_user.json

-9
This file was deleted.

spec/ldclient_spec.rb

+47-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
subject.new("secret", offline_config)
99
end
1010
let(:null_data) { LaunchDarkly::NullUpdateProcessor.new }
11-
let(:config) { LaunchDarkly::Config.new({send_events: false, data_source: null_data}) }
11+
let(:logger) { double().as_null_object }
12+
let(:config) { LaunchDarkly::Config.new({ send_events: false, data_source: null_data, logger: logger }) }
1213
let(:client) do
1314
subject.new("secret", config)
1415
end
@@ -17,16 +18,31 @@
1718
JSON.parse(data, symbolize_names: true)
1819
end
1920
let(:user) do
20-
data = File.read(File.join("spec", "fixtures", "user.json"))
21-
JSON.parse(data, symbolize_names: true)
21+
{
22+
key: "user@test.com",
23+
custom: {
24+
groups: [ "microsoft", "google" ]
25+
}
26+
}
2227
end
2328
let(:numeric_key_user) do
24-
data = File.read(File.join("spec", "fixtures", "numeric_key_user.json"))
25-
JSON.parse(data, symbolize_names: true)
29+
{
30+
key: 33,
31+
custom: {
32+
groups: [ "microsoft", "google" ]
33+
}
34+
}
2635
end
2736
let(:sanitized_numeric_key_user) do
28-
data = File.read(File.join("spec", "fixtures", "sanitized_numeric_key_user.json"))
29-
JSON.parse(data, symbolize_names: true)
37+
{
38+
key: "33",
39+
custom: {
40+
groups: [ "microsoft", "google" ]
41+
}
42+
}
43+
end
44+
let(:user_without_key) do
45+
{ name: "Keyless Joe" }
3046
end
3147

3248
def event_processor
@@ -342,6 +358,18 @@ def event_processor
342358
expect(event_processor).to receive(:add_event).with(hash_including(user: sanitized_numeric_key_user))
343359
client.track("custom_event_name", numeric_key_user, nil)
344360
end
361+
362+
it "does not send an event, and logs a warning, if user is nil" do
363+
expect(event_processor).not_to receive(:add_event)
364+
expect(logger).to receive(:warn)
365+
client.track("custom_event_name", nil, nil)
366+
end
367+
368+
it "does not send an event, and logs a warning, if user key is nil" do
369+
expect(event_processor).not_to receive(:add_event)
370+
expect(logger).to receive(:warn)
371+
client.track("custom_event_name", user_without_key, nil)
372+
end
345373
end
346374

347375
describe '#identify' do
@@ -354,6 +382,18 @@ def event_processor
354382
expect(event_processor).to receive(:add_event).with(hash_including(user: sanitized_numeric_key_user))
355383
client.identify(numeric_key_user)
356384
end
385+
386+
it "does not send an event, and logs a warning, if user is nil" do
387+
expect(event_processor).not_to receive(:add_event)
388+
expect(logger).to receive(:warn)
389+
client.identify(nil)
390+
end
391+
392+
it "does not send an event, and logs a warning, if user key is nil" do
393+
expect(event_processor).not_to receive(:add_event)
394+
expect(logger).to receive(:warn)
395+
client.identify(user_without_key)
396+
end
357397
end
358398

359399
describe 'with send_events: false' do

0 commit comments

Comments
 (0)