rollbar 2.9.1 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +23 -7
- data/CHANGELOG.md +16 -0
- data/README.md +11 -4
- data/gemfiles/rails50.gemfile +47 -0
- data/lib/rollbar.rb +0 -4
- data/lib/rollbar/configuration.rb +6 -0
- data/lib/rollbar/delay/delayed_job.rb +17 -0
- data/lib/rollbar/js/frameworks/rails.rb +21 -1
- data/lib/rollbar/js/middleware.rb +19 -12
- data/lib/rollbar/logger_proxy.rb +2 -0
- data/lib/rollbar/rake.rb +3 -1
- data/lib/rollbar/request_data_extractor.rb +12 -64
- data/lib/rollbar/scrubbers.rb +13 -0
- data/lib/rollbar/scrubbers/params.rb +98 -0
- data/lib/rollbar/sidekiq.rb +8 -1
- data/lib/rollbar/version.rb +1 -1
- data/spec/controllers/home_controller_spec.rb +12 -11
- data/spec/dummyapp/config/secrets.yml +2 -0
- data/spec/requests/home_spec.rb +1 -1
- data/spec/rollbar/delay/delayed_job_spec.rb +22 -0
- data/spec/rollbar/delay/thread_spec.rb +1 -1
- data/spec/rollbar/js/middleware_spec.rb +49 -0
- data/spec/rollbar/logger_proxy_spec.rb +13 -1
- data/spec/rollbar/request_data_extractor_spec.rb +0 -26
- data/spec/rollbar/scrubbers/params_spec.rb +268 -0
- data/spec/rollbar/scrubbers_spec.rb +31 -0
- data/spec/rollbar/sidekiq_spec.rb +23 -2
- data/spec/rollbar_spec.rb +5 -3
- data/spec/spec_helper.rb +7 -0
- data/spec/support/matchers.rb +23 -0
- metadata +15 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a45a6459fbc4fdc48b10d24d8f789ac3dc6c712a
|
4
|
+
data.tar.gz: a6391231fe97e651db01a382a214c3f9cf002310
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75910ee630569144378fdc9bbb3039e514273e335b4b1fca19be9f02ad60158414e396a75e3ee01b05bc3053dd5efed95bb1a3a111357a03ee22c42a41539d69
|
7
|
+
data.tar.gz: 45fe74d97b172e168127fac6478d9eeca7e155018a95cc4df7c01aa6823868156297fddedef3da6df93404532604f64d174c2ce28cf2a551dafccf977f3e1873
|
data/.travis.yml
CHANGED
@@ -29,6 +29,8 @@ gemfile:
|
|
29
29
|
- gemfiles/rails32.gemfile
|
30
30
|
- gemfiles/rails40.gemfile
|
31
31
|
- gemfiles/rails41.gemfile
|
32
|
+
- gemfiles/rails42.gemfile
|
33
|
+
- gemfiles/rails50.gemfile
|
32
34
|
matrix:
|
33
35
|
allow_failures:
|
34
36
|
- rvm: ruby-head
|
@@ -72,6 +74,13 @@ matrix:
|
|
72
74
|
jdk: oraclejdk7
|
73
75
|
- rvm: 2.1.0
|
74
76
|
jdk: oraclejdk8
|
77
|
+
- rvm: 2.2.2
|
78
|
+
jdk: openjdk6
|
79
|
+
- rvm: 2.2.2
|
80
|
+
jdk: oraclejdk7
|
81
|
+
- rvm: 2.2.2
|
82
|
+
jdk: oraclejdk8
|
83
|
+
|
75
84
|
- rvm: ruby-head
|
76
85
|
jdk: openjdk6
|
77
86
|
- rvm: ruby-head
|
@@ -96,6 +105,8 @@ matrix:
|
|
96
105
|
gemfile: gemfiles/rails41.gemfile
|
97
106
|
- rvm: 1.8.7
|
98
107
|
gemfile: gemfiles/rails42.gemfile
|
108
|
+
- rvm: 1.8.7
|
109
|
+
gemfile: gemfiles/rails50.gemfile
|
99
110
|
- rvm: 1.9.2
|
100
111
|
gemfile: gemfiles/rails31.gemfile
|
101
112
|
- rvm: 1.9.2
|
@@ -106,6 +117,14 @@ matrix:
|
|
106
117
|
gemfile: gemfiles/rails41.gemfile
|
107
118
|
- rvm: 1.9.2
|
108
119
|
gemfile: gemfiles/rails42.gemfile
|
120
|
+
- rvm: 1.9.2
|
121
|
+
gemfile: gemfiles/rails50.gemfile
|
122
|
+
- rvm: 1.9.3
|
123
|
+
gemfile: gemfiles/rails50.gemfile
|
124
|
+
- rvm: 2.0.0
|
125
|
+
gemfile: gemfiles/rails50.gemfile
|
126
|
+
- rvm: 2.1.0
|
127
|
+
gemfile: gemfiles/rails50.gemfile
|
109
128
|
- rvm: 2.2.2
|
110
129
|
gemfile: gemfiles/rails30.gemfile
|
111
130
|
- rvm: 2.2.2
|
@@ -134,6 +153,8 @@ matrix:
|
|
134
153
|
gemfile: gemfiles/rails41.gemfile
|
135
154
|
- rvm: jruby-19mode
|
136
155
|
gemfile: gemfiles/rails42.gemfile
|
156
|
+
- rvm: jruby-19mode
|
157
|
+
gemfile: gemfiles/rails50.gemfile
|
137
158
|
- rvm: rbx
|
138
159
|
gemfile: gemfiles/rails30.gemfile
|
139
160
|
- rvm: rbx
|
@@ -146,10 +167,5 @@ matrix:
|
|
146
167
|
gemfile: gemfiles/rails41.gemfile
|
147
168
|
- rvm: rbx
|
148
169
|
gemfile: gemfiles/rails42.gemfile
|
149
|
-
|
150
|
-
|
151
|
-
- gemfiles/rails31.gemfile
|
152
|
-
- gemfiles/rails32.gemfile
|
153
|
-
- gemfiles/rails40.gemfile
|
154
|
-
- gemfiles/rails41.gemfile
|
155
|
-
- gemfiles/rails42.gemfile
|
170
|
+
- rvm: rbx
|
171
|
+
gemfile: gemfiles/rails50.gemfile
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 2.10.0
|
4
|
+
|
5
|
+
New features:
|
6
|
+
|
7
|
+
- Set the Sidekiq error context to the worker class name. See [#440](https://github.com/rollbar/rollbar-gem/pull/440).
|
8
|
+
- Secure headers support for rollbar.js integration. See [#437](https://github.com/rollbar/rollbar-gem/pull/437).
|
9
|
+
- Rails 5 support. See [#433](https://github.com/rollbar/rollbar-gem/pull/433).
|
10
|
+
- Add scrub all parameters option. See [#431](https://github.com/rollbar/rollbar-gem/pull/431).
|
11
|
+
- Add delayed_job async handler. See [#430](https://github.com/rollbar/rollbar-gem/pull/430).
|
12
|
+
- Disable logging if Rollbar is disabled. See [#425](https://github.com/rollbar/rollbar-gem/pull/425).
|
13
|
+
|
14
|
+
Bug fixes:
|
15
|
+
|
16
|
+
- Add nil check for rake.patch! for future robustness. See [#434](https://github.com/rollbar/rollbar-gem/pull/434).
|
17
|
+
- Fix two doc bugs. See [#401](https://github.com/rollbar/rollbar-gem/pull/401).
|
18
|
+
|
3
19
|
## 2.9.1
|
4
20
|
|
5
21
|
Bug fixes:
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Rollbar notifier for Ruby [](https://travis-ci.org/rollbar/rollbar-gem/branches)
|
2
2
|
|
3
3
|
<!-- RemoveNext -->
|
4
4
|
[Rollbar](https://rollbar.com) is an error tracking service for Ruby and other languages. The Rollbar service will alert you of problems with your code and help you understand them in a ways never possible before. We love it and we hope you will too.
|
@@ -377,7 +377,6 @@ By default, the notifier will "scrub" the following fields from payloads before
|
|
377
377
|
- ```:password_confirmation```
|
378
378
|
- ```:secret```
|
379
379
|
- ```:confirm_password```
|
380
|
-
- ```:password_confirmation```
|
381
380
|
- ```:secret_token```
|
382
381
|
|
383
382
|
And the following http header
|
@@ -434,7 +433,7 @@ If you'd like to customize this list, modify the example code in ```config/initi
|
|
434
433
|
|
435
434
|
```ruby
|
436
435
|
config.exception_level_filters.merge!({
|
437
|
-
'
|
436
|
+
'ActionController::RoutingError' => 'ignore',
|
438
437
|
'NoMethodError' => 'critical'
|
439
438
|
})
|
440
439
|
```
|
@@ -589,7 +588,7 @@ Only versions >= 3.0 of delayed_job are supported.
|
|
589
588
|
|
590
589
|
## Asynchronous reporting
|
591
590
|
|
592
|
-
By default, all messages are reported synchronously. You can enable asynchronous reporting with [girl_friday](https://github.com/mperham/girl_friday), [sucker_punch](https://github.com/brandonhilkert/sucker_punch), [Sidekiq](https://github.com/mperham/sidekiq), [Resque](https://github.com/resque/resque) or using threading.
|
591
|
+
By default, all messages are reported synchronously. You can enable asynchronous reporting with [girl_friday](https://github.com/mperham/girl_friday), [sucker_punch](https://github.com/brandonhilkert/sucker_punch), [Sidekiq](https://github.com/mperham/sidekiq), [Resque](https://github.com/resque/resque), [DelayedJob](https://github.com/collectiveidea/delayed_job) or using threading.
|
593
592
|
|
594
593
|
### Using girl_friday
|
595
594
|
|
@@ -662,6 +661,14 @@ Now you can just start a new Resque worker processing jobs in that queue:
|
|
662
661
|
$ QUEUE=my_queue bundle exec resque:work
|
663
662
|
```
|
664
663
|
|
664
|
+
### Using DelayedJob
|
665
|
+
|
666
|
+
Add the following in ```config/initializers/rollbar.rb```:
|
667
|
+
|
668
|
+
```ruby
|
669
|
+
config.use_delayed_job
|
670
|
+
```
|
671
|
+
|
665
672
|
### Using threading
|
666
673
|
|
667
674
|
Add the following in ```config/initializers/rollbar.rb```:
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'rubygems/version'
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
is_jruby = defined?(JRUBY_VERSION) || (defined?(RUBY_ENGINE) && 'jruby' == RUBY_ENGINE)
|
6
|
+
|
7
|
+
gem 'sqlite3', :platform => [:ruby, :mswin, :mingw]
|
8
|
+
gem 'jruby-openssl', :platform => :jruby
|
9
|
+
gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
|
10
|
+
gem 'appraisal'
|
11
|
+
gem 'rubysl', '~> 2.0', :platform => :rbx
|
12
|
+
gem 'racc', :platform => :rbx
|
13
|
+
gem 'minitest', :platform => :rbx
|
14
|
+
gem 'rubinius-developer_tools', :platform => :rbx
|
15
|
+
gem 'rails', '~> 5.0.0.beta1'
|
16
|
+
|
17
|
+
gem 'rspec-core', '~> 3.5.0.beta3'
|
18
|
+
gem 'rspec-rails', '~> 3.5.0.beta3'
|
19
|
+
gem 'rspec-support', '~> 3.5.0.beta3'
|
20
|
+
gem 'rspec-expectations', '~> 3.5.0.beta3'
|
21
|
+
gem 'rspec-mocks', '~> 3.5.0.beta3'
|
22
|
+
gem 'rake'
|
23
|
+
|
24
|
+
gem 'oj', '~> 2.12.14' unless is_jruby
|
25
|
+
gem 'sidekiq', '>= 2.13.0' if RUBY_VERSION != '1.8.7'
|
26
|
+
|
27
|
+
if RUBY_VERSION.start_with?('1.9')
|
28
|
+
gem 'sucker_punch', '~> 1.0'
|
29
|
+
elsif RUBY_VERSION.start_with?('2')
|
30
|
+
gem 'sucker_punch', '~> 2.0'
|
31
|
+
end
|
32
|
+
|
33
|
+
# We need last sinatra that uses rack 2.x
|
34
|
+
gem 'sinatra', :git => 'https://github.com/sinatra/sinatra'
|
35
|
+
gem 'resque'
|
36
|
+
gem 'delayed_job', :require => false
|
37
|
+
gem 'redis'
|
38
|
+
gem 'database_cleaner', '~> 1.x'
|
39
|
+
gem 'girl_friday', '>= 0.11.1'
|
40
|
+
gem 'generator_spec'
|
41
|
+
gem 'codeclimate-test-reporter', :group => :test, :require => nil
|
42
|
+
|
43
|
+
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0')
|
44
|
+
gem 'mime-types', '< 3.0'
|
45
|
+
end
|
46
|
+
|
47
|
+
gemspec :path => '../'
|
data/lib/rollbar.rb
CHANGED
@@ -25,10 +25,6 @@ require 'rollbar/exceptions'
|
|
25
25
|
require 'rollbar/lazy_store'
|
26
26
|
|
27
27
|
module Rollbar
|
28
|
-
ATTACHMENT_CLASSES = %w[
|
29
|
-
ActionDispatch::Http::UploadedFile
|
30
|
-
Rack::Multipart::UploadedFile
|
31
|
-
].freeze
|
32
28
|
PUBLIC_NOTIFIER_METHODS = %w(debug info warn warning error critical log logger
|
33
29
|
process_payload process_from_async_handler scope send_failsafe log_info log_debug
|
34
30
|
log_warning log_error silenced)
|
@@ -118,6 +118,12 @@ module Rollbar
|
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
|
+
def use_delayed_job
|
122
|
+
require 'rollbar/delay/delayed_job'
|
123
|
+
@use_async = true
|
124
|
+
@async_handler = Rollbar::Delay::DelayedJob
|
125
|
+
end
|
126
|
+
|
121
127
|
def use_sidekiq(options = {})
|
122
128
|
require 'rollbar/delay/sidekiq' if defined?(Sidekiq)
|
123
129
|
@use_async = true
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Rollbar
|
2
|
+
module Delay
|
3
|
+
# This class provides the DelayedJob async handler. Users can
|
4
|
+
# use DelayedJob in order to send the reports to the Rollbar API
|
5
|
+
class DelayedJob
|
6
|
+
class << self
|
7
|
+
def call(payload)
|
8
|
+
new.delay.call(payload)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(payload)
|
13
|
+
Rollbar.process_from_async_handler(payload)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -9,6 +9,24 @@ module Rollbar
|
|
9
9
|
def prepare
|
10
10
|
return if prepared?
|
11
11
|
|
12
|
+
if secure_headers?
|
13
|
+
insert_middleware_after_secure_headers
|
14
|
+
else
|
15
|
+
insert_middleware
|
16
|
+
end
|
17
|
+
|
18
|
+
self.prepared = true
|
19
|
+
end
|
20
|
+
|
21
|
+
def insert_middleware_after_secure_headers
|
22
|
+
instance = self
|
23
|
+
|
24
|
+
Rollbar::Railtie.initializer 'rollbar.js.frameworks.rails', :after => 'secure_headers.middleware' do |_app|
|
25
|
+
instance.insert_middleware
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def insert_middleware
|
12
30
|
require 'rollbar/js/middleware'
|
13
31
|
|
14
32
|
config = {
|
@@ -16,8 +34,10 @@ module Rollbar
|
|
16
34
|
:enabled => Rollbar.configuration.js_enabled
|
17
35
|
}
|
18
36
|
rails_config.middleware.use(::Rollbar::Js::Middleware, config)
|
37
|
+
end
|
19
38
|
|
20
|
-
|
39
|
+
def secure_headers?
|
40
|
+
defined?(::SecureHeaders)
|
21
41
|
end
|
22
42
|
|
23
43
|
def rails_config
|
@@ -27,7 +27,7 @@ module Rollbar
|
|
27
27
|
def _call(env, result)
|
28
28
|
return result unless should_add_js?(env, result[0], result[1])
|
29
29
|
|
30
|
-
if response_string = add_js(result[2])
|
30
|
+
if response_string = add_js(env, result[2])
|
31
31
|
env[JS_IS_INJECTED_KEY] = true
|
32
32
|
response = ::Rack::Response.new(response_string, result[0], result[1])
|
33
33
|
|
@@ -67,7 +67,7 @@ module Rollbar
|
|
67
67
|
env['action_controller.instance'].class.included_modules.include?(ActionController::Live)
|
68
68
|
end
|
69
69
|
|
70
|
-
def add_js(response)
|
70
|
+
def add_js(env, response)
|
71
71
|
body = join_body(response)
|
72
72
|
close_old_response(response)
|
73
73
|
|
@@ -78,9 +78,9 @@ module Rollbar
|
|
78
78
|
|
79
79
|
if head_open_end
|
80
80
|
body = body[0..head_open_end] <<
|
81
|
-
config_js_tag <<
|
82
|
-
snippet_js_tag <<
|
83
|
-
body[head_open_end..-1]
|
81
|
+
config_js_tag(env) <<
|
82
|
+
snippet_js_tag(env) <<
|
83
|
+
body[head_open_end + 1..-1]
|
84
84
|
end
|
85
85
|
|
86
86
|
body
|
@@ -91,7 +91,7 @@ module Rollbar
|
|
91
91
|
|
92
92
|
def find_end_of_head_open(body)
|
93
93
|
head_open = body.index(/<head\W/)
|
94
|
-
body.index('>', head_open)
|
94
|
+
body.index('>', head_open) if head_open
|
95
95
|
end
|
96
96
|
|
97
97
|
def join_body(response)
|
@@ -104,20 +104,27 @@ module Rollbar
|
|
104
104
|
response.close if response.respond_to?(:close)
|
105
105
|
end
|
106
106
|
|
107
|
-
def config_js_tag
|
108
|
-
script_tag("var _rollbarConfig = #{config[:options].to_json};")
|
107
|
+
def config_js_tag(env)
|
108
|
+
script_tag("var _rollbarConfig = #{config[:options].to_json};", env)
|
109
109
|
end
|
110
110
|
|
111
|
-
def snippet_js_tag
|
112
|
-
script_tag(js_snippet)
|
111
|
+
def snippet_js_tag(env)
|
112
|
+
script_tag(js_snippet, env)
|
113
113
|
end
|
114
114
|
|
115
115
|
def js_snippet
|
116
116
|
SNIPPET
|
117
117
|
end
|
118
118
|
|
119
|
-
def script_tag(content)
|
120
|
-
|
119
|
+
def script_tag(content, env)
|
120
|
+
if defined?(::SecureHeaders)
|
121
|
+
nonce = ::SecureHeaders.content_security_policy_script_nonce(::Rack::Request.new(env))
|
122
|
+
script_tag_content = "\n<script type=\"text/javascript\" nonce=\"#{nonce}\">#{content}</script>"
|
123
|
+
else
|
124
|
+
script_tag_content = "\n<script type=\"text/javascript\">#{content}</script>"
|
125
|
+
end
|
126
|
+
|
127
|
+
html_safe_if_needed(script_tag_content)
|
121
128
|
end
|
122
129
|
|
123
130
|
def html_safe_if_needed(string)
|
data/lib/rollbar/logger_proxy.rb
CHANGED
data/lib/rollbar/rake.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
require 'rack'
|
2
2
|
require 'tempfile'
|
3
3
|
|
4
|
+
require 'rollbar/scrubbers'
|
4
5
|
require 'rollbar/scrubbers/url'
|
6
|
+
require 'rollbar/scrubbers/params'
|
5
7
|
require 'rollbar/util/ip_obfuscator'
|
6
8
|
|
7
9
|
module Rollbar
|
8
10
|
module RequestDataExtractor
|
9
|
-
SKIPPED_CLASSES = [Tempfile]
|
10
|
-
|
11
11
|
def extract_person_data_from_controller(env)
|
12
|
-
if env.has_key?
|
12
|
+
if env.has_key?('rollbar.person_data')
|
13
13
|
person_data = env['rollbar.person_data'] || {}
|
14
14
|
else
|
15
15
|
controller = env['action_controller.instance']
|
@@ -47,24 +47,16 @@ module Rollbar
|
|
47
47
|
:cookies => cookies,
|
48
48
|
:session => session,
|
49
49
|
:method => rollbar_request_method(env),
|
50
|
-
:route => route_params
|
50
|
+
:route => route_params
|
51
51
|
}
|
52
52
|
|
53
|
-
if env[
|
54
|
-
data[:request_id] = env[
|
53
|
+
if env['action_dispatch.request_id']
|
54
|
+
data[:request_id] = env['action_dispatch.request_id']
|
55
55
|
end
|
56
56
|
|
57
57
|
data
|
58
58
|
end
|
59
59
|
|
60
|
-
def rollbar_scrubbed(value)
|
61
|
-
if Rollbar.configuration.randomize_scrub_length
|
62
|
-
random_filtered_value
|
63
|
-
else
|
64
|
-
'*' * (value.length rescue 8)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
60
|
private
|
69
61
|
|
70
62
|
def mergeable_raw_body_params(rack_req)
|
@@ -89,7 +81,7 @@ module Rollbar
|
|
89
81
|
if name == 'Cookie'
|
90
82
|
{}
|
91
83
|
elsif sensitive_headers_list.include?(name)
|
92
|
-
{ name =>
|
84
|
+
{ name => Rollbar::Scrubbers.scrub_value(env[header]) }
|
93
85
|
else
|
94
86
|
{ name => env[header] }
|
95
87
|
end
|
@@ -108,8 +100,8 @@ module Rollbar
|
|
108
100
|
|
109
101
|
port = env['HTTP_X_FORWARDED_PORT']
|
110
102
|
if port && !(scheme.downcase == 'http' && port.to_i == 80) && \
|
111
|
-
|
112
|
-
|
103
|
+
!(scheme.downcase == 'https' && port.to_i == 443) && \
|
104
|
+
!(host.include? ':')
|
113
105
|
host = host + ':' + port
|
114
106
|
end
|
115
107
|
|
@@ -151,7 +143,7 @@ module Rollbar
|
|
151
143
|
|
152
144
|
def json_request?(rack_req)
|
153
145
|
!!(rack_req.env['CONTENT_TYPE'] =~ %r{application/json} ||
|
154
|
-
rack_req.env['ACCEPT']
|
146
|
+
rack_req.env['ACCEPT'] =~ /\bjson\b/)
|
155
147
|
end
|
156
148
|
|
157
149
|
def rollbar_request_params(env)
|
@@ -189,59 +181,15 @@ module Rollbar
|
|
189
181
|
end
|
190
182
|
|
191
183
|
def rollbar_filtered_params(sensitive_params, params)
|
192
|
-
|
193
|
-
|
194
|
-
return {} unless params
|
195
|
-
|
196
|
-
params.to_hash.inject({}) do |result, (key, value)|
|
197
|
-
if sensitive_params_regexp =~ Rollbar::Encoding.encode(key).to_s
|
198
|
-
result[key] = rollbar_scrubbed(value)
|
199
|
-
elsif value.is_a?(Hash)
|
200
|
-
result[key] = rollbar_filtered_params(sensitive_params, value)
|
201
|
-
elsif value.is_a?(Array)
|
202
|
-
result[key] = value.map do |v|
|
203
|
-
v.is_a?(Hash) ? rollbar_filtered_params(sensitive_params, v) : rollbar_filtered_param_value(v)
|
204
|
-
end
|
205
|
-
elsif skip_value?(value)
|
206
|
-
result[key] = "Skipped value of class '#{value.class.name}'"
|
207
|
-
else
|
208
|
-
result[key] = rollbar_filtered_param_value(value)
|
209
|
-
end
|
210
|
-
|
211
|
-
result
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
def rollbar_filtered_param_value(value)
|
216
|
-
if ATTACHMENT_CLASSES.include?(value.class.name)
|
217
|
-
begin
|
218
|
-
{
|
219
|
-
:content_type => value.content_type,
|
220
|
-
:original_filename => value.original_filename,
|
221
|
-
:size => value.tempfile.size
|
222
|
-
}
|
223
|
-
rescue
|
224
|
-
'Uploaded file'
|
225
|
-
end
|
226
|
-
else
|
227
|
-
value
|
228
|
-
end
|
184
|
+
Rollbar::Scrubbers::Params.call(params, sensitive_params)
|
229
185
|
end
|
230
186
|
|
231
187
|
def sensitive_params_list(env)
|
232
|
-
Array(
|
188
|
+
Array(env['action_dispatch.parameter_filter'])
|
233
189
|
end
|
234
190
|
|
235
191
|
def sensitive_headers_list
|
236
192
|
Rollbar.configuration.scrub_headers || []
|
237
193
|
end
|
238
|
-
|
239
|
-
def random_filtered_value
|
240
|
-
'*' * (rand(5) + 3)
|
241
|
-
end
|
242
|
-
|
243
|
-
def skip_value?(value)
|
244
|
-
SKIPPED_CLASSES.any? { |klass| value.is_a?(klass) }
|
245
|
-
end
|
246
194
|
end
|
247
195
|
end
|