rollbar 2.9.1 → 2.10.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 [![Build Status](https://api.travis-ci.org/rollbar/rollbar-gem.svg?branch=v2.
|
1
|
+
# Rollbar notifier for Ruby [![Build Status](https://api.travis-ci.org/rollbar/rollbar-gem.svg?branch=v2.10.0)](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
|