Skip to content

Commit db85187

Browse files
committed
bug: Fixed tracking api key leaking in logs
1 parent f5b98f5 commit db85187

7 files changed

Lines changed: 30 additions & 7 deletions

File tree

lib/vero/http_client.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def log_request(params, body)
4545
log_params = params.dup
4646

4747
if log_params.key?(:payload)
48-
log_params[:payload] = body.merge(tracking_api_key: "[FILTERED]").to_json
48+
log_params[:payload] = Vero::App.sanitize_log_payload(body).to_json
4949
end
5050

5151
@logger.info("Request: #{log_params.inspect}")

lib/vero/sender.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def self.call(api_class, sender_strategy, domain, options)
1010
sender = senders[sender_strategy].new
1111
sender.call(api_class, domain, options)
1212
rescue => e
13-
Vero::App.log(new, "method: #{api_class.name}, options: #{JSON.dump(options)}, error: #{e.message}")
13+
Vero::App.log_api_call(api_class.name, options, e.message)
1414
raise e
1515
end
1616

lib/vero/senders/base.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ def call(api_class, domain, options)
55
api_class = get_api_class(api_class)
66

77
resp = enqueue_work(api_class, domain, options)
8-
Vero::App.log(self, "method: #{api_class.name}, options: #{JSON.dump(options)}, response: #{log_message}")
8+
Vero::App.log_api_call(api_class.name, options, log_message)
99

1010
resp
1111
end

lib/vero/utility/logger.rb

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# frozen_string_literal: true
22

33
module Vero::Utility::Logger
4+
FILTER_STRING = "[FILTERED]"
5+
46
def self.included(base)
57
base.extend(ClassMethods)
68
end
@@ -9,7 +11,14 @@ module ClassMethods
911
def log(object, message)
1012
return unless Vero::App.default_context.config.logging && !defined?(RSpec)
1113

12-
message = "#{object.class.name}: #{message}"
14+
prefix = case object
15+
when String
16+
object
17+
else
18+
object.class.name
19+
end
20+
21+
message = "#{prefix}: #{message}"
1322

1423
if (logger = self.logger)
1524
logger.info(message)
@@ -18,6 +27,20 @@ def log(object, message)
1827
end
1928
end
2029

30+
def log_api_call(api_class, options, msg)
31+
log(api_class, "params: #{sanitize_log_payload(options).to_json}, response: #{msg}")
32+
end
33+
34+
def sanitize_log_payload(payload)
35+
if payload.key?(:tracking_api_key)
36+
payload.merge(tracking_api_key: FILTER_STRING)
37+
elsif payload.key?("tracking_api_key")
38+
payload.merge("tracking_api_key" => FILTER_STRING)
39+
else
40+
payload
41+
end
42+
end
43+
2144
def logger
2245
Rails.logger if defined?(Rails)
2346
end

lib/vero/workers/resque_worker.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ class Vero::ResqueWorker
88
def self.perform(api_class, domain, options)
99
Vero::Senders::Base.new.call(api_class, domain, options)
1010
rescue => e
11-
Vero::App.log(self, "method: #{api_class}, options: #{options.to_json}, response: #{e.message}")
11+
Vero::App.log_api_call(api_class, options, e.message)
1212
end
1313
end

lib/vero/workers/sidekiq_worker.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ class Vero::SidekiqWorker
88
def perform(api_class, domain, options)
99
Vero::Senders::Base.new.call(api_class, domain, options)
1010
rescue => e
11-
Vero::App.log(self, "method: #{api_class}, options: #{options.to_json}, response: #{e.message}")
11+
Vero::App.log_api_call(api_class, options, e.message)
1212
end
1313
end

lib/vero/workers/sucker_punch_worker.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ class Vero::SuckerPunchWorker
88
def perform(api_class, domain, options)
99
Vero::Senders::Base.new.call(api_class, domain, options)
1010
rescue => e
11-
Vero::App.log(self, "method: #{api_class}, options: #{options.to_json}, response: #{e.message}")
11+
Vero::App.log_api_call(api_class, options, e.message)
1212
end
1313
end

0 commit comments

Comments
 (0)