rollbar 2.15.6 → 2.16.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 308597023c833b27f29c551f13eb92c9b4ae24c3
4
- data.tar.gz: f0b5bebb851e64c0f831c7fe4f0c8d05bb3dca80
3
+ metadata.gz: 11bd20d68ff24396b75b8518ea2ffbe641cfd8fc
4
+ data.tar.gz: c3838b31c21856ad31abe72f82b96edeff3a8eda
5
5
  SHA512:
6
- metadata.gz: 0a03bb676d4bff746f6c691c92bedf00e14d6b6a0ff8ca0afee5dc3b8c8ee8f96bdad2d912a037f7914c86424c1aae7b64fa8c6a338da0918dc553142c5835a7
7
- data.tar.gz: f9597a902bbba23e993f2bc2c8473e5b22a3e1a18337648ea5697e7a9762880e0cd6024c51b40e2d2c1c6f38a3bf3ffda80cee045c2c3acf3e79c6ee0f6e259b
6
+ metadata.gz: 9ea80cb9c0b5d102bdd16b784e531efbb7c74ba771da22a63d64d2b34c8ada1dec0ad95db2974267ec33c6cee4ad49c24450b39f4c1859391ab8483aa6dd7efd
7
+ data.tar.gz: ac2f51581aeca7f5af213f79651a1123e4e8a5810ac9bf8e6298b05cb57bf205de773246b717d554ace0b42d02b8a4aa3e0e14d78a9d9a6555d0351f3ec2104f
@@ -10,6 +10,7 @@
10
10
  - Add documentation note for usage of `Rollbar.scope!` to `README.md` [#653](https://github.com/rollbar/rollbar-gem/issues/653)
11
11
  - Add example of using `Grape` to deal with `500` responses status [#645](https://github.com/rollbar/rollbar-gem/issues/645)
12
12
  - Always report errors from `delayed_job` to deal with `dj_threshold > 0` edge case [#615](https://github.com/rollbar/rollbar-gem/issues/615)
13
+ - Fix "Empty message" items for exceptions reported from JRuby [#658]
13
14
 
14
15
  ## 2.15.5
15
16
 
data/README.md CHANGED
@@ -379,8 +379,8 @@ If the methods to extract the ```id```, ```username```, and ```email``` from the
379
379
  ```ruby
380
380
  Rollbar.configure do |config|
381
381
  config.person_id_method = "user_id" # default is "id"
382
- config.person_username_method = "user_name" # default is "username"
383
- config.person_email_method = "email_address" # default is "email"
382
+ config.person_username_method = "user_name" # default is `nil`
383
+ config.person_email_method = "email_address" # default is `nil`
384
384
  end
385
385
  ```
386
386
 
data/THANKS.md CHANGED
@@ -25,6 +25,7 @@ Huge thanks to the following contributors (by github username). For the most up-
25
25
  - [jeremyvdw](https://github.com/jeremyvdw)
26
26
  - [jjb](https://github.com/jjb)
27
27
  - [johnknott](https://github.com/johnknott)
28
+ - [johnsyweb](https://github.com/johnsyweb)
28
29
  - [jonah-williams](https://github.com/jonah-williams)
29
30
  - [jondeandres](https://github.com/jondeandres)
30
31
  - [JoshuaOSHickman](https://github.com/JoshuaOSHickman)
@@ -174,12 +174,16 @@ if `person_method` not present.
174
174
 
175
175
  ### person_username_method
176
176
 
177
+ **Default** `nil`
178
+
177
179
  A string or symbol giving the name of the method on the user instance that
178
180
  returns the person's username. Gets called on the result of `person_method`.
179
181
  Ignored if `person_method` not present.
180
182
 
181
183
  ### person_email_method
182
184
 
185
+ **Default** `nil`
186
+
183
187
  A string or symbol giving the name of the method on the user instance that
184
188
  returns the person's email. Gets called on the result of `person_method`.
185
189
  Ignored if `person_method` not present.
@@ -19,12 +19,14 @@ Rollbar.configure do |config|
19
19
  <%- end -%>
20
20
 
21
21
  # By default, Rollbar will try to call the `current_user` controller method
22
- # to fetch the logged-in user object, and then call that object's `id`,
23
- # `username`, and `email` methods to fetch those properties. To customize:
22
+ # to fetch the logged-in user object, and then call that object's `id`
23
+ # method to fetch this property. To customize:
24
24
  # config.person_method = "my_current_user"
25
25
  # config.person_id_method = "my_id"
26
- # config.person_username_method = "my_username"
27
- # config.person_email_method = "my_email"
26
+
27
+ # Additionally, you may specify the following:
28
+ # config.person_username_method = "username"
29
+ # config.person_email_method = "email"
28
30
 
29
31
  # If you want to attach custom data to all exception and message reports,
30
32
  # provide a lambda like the following. It should return a hash.
@@ -43,6 +43,8 @@ module Rollbar
43
43
  attr_accessor :scrub_fields
44
44
  attr_accessor :scrub_user
45
45
  attr_accessor :scrub_password
46
+ attr_accessor :collect_user_ip
47
+ attr_accessor :anonymize_user_ip
46
48
  attr_accessor :user_ip_obfuscator_secret
47
49
  attr_accessor :randomize_scrub_length
48
50
  attr_accessor :uncaught_exception_level
@@ -90,8 +92,8 @@ module Rollbar
90
92
  @payload_options = {}
91
93
  @person_method = 'current_user'
92
94
  @person_id_method = 'id'
93
- @person_username_method = 'username'
94
- @person_email_method = 'email'
95
+ @person_username_method = nil
96
+ @person_email_method = nil
95
97
  @project_gems = []
96
98
  @populate_empty_backtraces = false
97
99
  @report_dj_data = true
@@ -120,6 +122,8 @@ module Rollbar
120
122
  @project_gem_paths = []
121
123
  @use_exception_level_filters_default = false
122
124
  @proxy = nil
125
+ @collect_user_ip = true
126
+ @anonymize_user_ip = false
123
127
  end
124
128
 
125
129
  def initialize_copy(orig)
@@ -5,6 +5,7 @@ require 'rollbar/scrubbers'
5
5
  require 'rollbar/scrubbers/url'
6
6
  require 'rollbar/scrubbers/params'
7
7
  require 'rollbar/util/ip_obfuscator'
8
+ require 'rollbar/util/ip_anonymizer'
8
9
  require 'rollbar/json'
9
10
 
10
11
  module Rollbar
@@ -131,8 +132,11 @@ module Rollbar
131
132
  end
132
133
 
133
134
  def rollbar_user_ip(env)
135
+ return nil unless Rollbar.configuration.collect_user_ip
134
136
  user_ip_string = (env['action_dispatch.remote_ip'] || env['HTTP_X_REAL_IP'] || x_forwarded_for_client(env['HTTP_X_FORWARDED_FOR']) || env['REMOTE_ADDR']).to_s
135
137
 
138
+ user_ip_string = Rollbar::Util::IPAnonymizer.anonymize_ip(user_ip_string)
139
+
136
140
  Rollbar::Util::IPObfuscator.obfuscate_ip(user_ip_string)
137
141
  rescue
138
142
  nil
@@ -3,9 +3,9 @@ require 'rollbar/scrubbers'
3
3
 
4
4
  module Rollbar
5
5
  module Scrubbers
6
- # This class contains the logic to scrub the receive parameters. It will
6
+ # This class contains the logic to scrub the received parameters. It will
7
7
  # scrub the parameters matching Rollbar.configuration.scrub_fields Array.
8
- # Also, if that configuration option is se to :scrub_all, it will scrub all
8
+ # Also, if that configuration option is set to :scrub_all, it will scrub all
9
9
  # received parameters
10
10
  class Params
11
11
  SKIPPED_CLASSES = [::Tempfile]
@@ -32,7 +32,7 @@ namespace :rollbar do
32
32
  desc 'Upload sourcemaps to Rollbar.'
33
33
  task :sourcemap do
34
34
  on primary fetch(:rollbar_role) do
35
- info "Uploading source maps from #{fetch(:rollbar_sourcemaps_target_dir)}"
35
+ info "Uploading source maps"
36
36
  warn("You need to upgrade capistrano to '>= 3.1' version in order to correctly upload sourcemaps to Rollbar. (On 3.0, the reported revision will be incorrect.)") if Capistrano::VERSION =~ /^3\.0/
37
37
  url_base = fetch(:rollbar_sourcemaps_minified_url_base)
38
38
  unless url_base
@@ -42,11 +42,21 @@ namespace :rollbar do
42
42
  url_base = "http://#{url_base}" unless url_base.index(/https?:\/\//)
43
43
  within release_path do
44
44
  within 'public' do
45
- source_maps = capture(:find, '-name', "'*.js.map'").split("\n")
45
+ source_maps = capture(:find, '-L', '.', '-name', "'*.js.map'").split("\n")
46
46
  source_maps = source_maps.map { |file| file.gsub(/^\.\//, '') }
47
47
  source_maps.each do |source_map|
48
48
  minified_url = File.join(url_base, source_map)
49
- execute(:curl, *%W(https://api.rollbar.com/api/1/sourcemap -F access_token=#{fetch(:rollbar_token)} -F version=#{fetch(:rollbar_revision)} -F minified_url=#{minified_url} -F source_map=@./#{source_map}))
49
+ args = *%W(--silent https://api.rollbar.com/api/1/sourcemap -F access_token=#{fetch(:rollbar_token)} -F version=#{fetch(:rollbar_revision)} -F minified_url=#{minified_url} -F source_map=@./#{source_map})
50
+ info "curl #{args.join(' ')}" # log the command, since capture doesn't output anything
51
+ api_response_body = capture(:curl, args)
52
+ begin
53
+ api_response_json = JSON.parse(api_response_body)
54
+ if api_response_json["err"] != 0
55
+ warn "Error uploading sourcemaps: #{api_response_json["message"] || 'Unknown Error'}"
56
+ end
57
+ rescue JSON::ParserError => e
58
+ warn "Error parsing response: #{e.message}. Response body: #{api_response_body}"
59
+ end
50
60
  end
51
61
  end
52
62
  end
@@ -0,0 +1,32 @@
1
+ module Rollbar
2
+ module Util
3
+ module IPAnonymizer
4
+ require 'ipaddr'
5
+
6
+ def self.anonymize_ip(ip_string)
7
+ return ip_string unless Rollbar.configuration.anonymize_user_ip
8
+ ip = IPAddr.new(ip_string)
9
+ return anonymize_ipv6 ip if ip.ipv6?
10
+ return anonymize_ipv4 ip if ip.ipv4?
11
+ rescue
12
+ nil
13
+ end
14
+
15
+ def self.anonymize_ipv4(ip)
16
+ ip_parts = ip.to_s.split '.'
17
+
18
+ ip_parts[ip_parts.count - 1] = '0'
19
+
20
+ IPAddr.new(ip_parts.join('.')).to_s
21
+ end
22
+
23
+ def self.anonymize_ipv6(ip)
24
+ ip_parts = ip.to_s.split ':'
25
+
26
+ ip_string = ip_parts[0..2].join(':') + ':0000:0000:0000:0000:0000'
27
+
28
+ IPAddr.new(ip_string).to_s
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,3 @@
1
1
  module Rollbar
2
- VERSION = '2.15.6'
2
+ VERSION = '2.16.0'
3
3
  end
@@ -335,14 +335,40 @@ describe HomeController do
335
335
 
336
336
  before { cookies[:session_id] = user.id }
337
337
 
338
- it 'sends the current user data' do
339
- put '/report_exception', *wrap_process_args({ 'foo' => 'bar' })
338
+ subject(:person_data) do
339
+ put '/report_exception', *wrap_process_args('foo' => 'bar')
340
340
 
341
- person_data = Rollbar.last_report[:person]
341
+ Rollbar.last_report[:person]
342
+ end
342
343
 
343
- expect(person_data[:id]).to be_eql(user.id)
344
- expect(person_data[:email]).to be_eql(user.email)
345
- expect(person_data[:username]).to be_eql(user.username)
344
+ context 'default' do
345
+ it 'sends the current user data excluding personally identifiable information' do
346
+ expect(person_data).to eq(:id => user.id,
347
+ :email => nil,
348
+ :username => nil)
349
+ end
350
+ end
351
+
352
+ context 'without EU GDPR subjects' do
353
+ context 'configured to send email addresses' do
354
+ before { Rollbar.configure { |config| config.person_email_method = 'email' } }
355
+
356
+ it 'sends the current user data including email address' do
357
+ expect(person_data).to eq(:id => user.id,
358
+ :email => 'foo@bar.com',
359
+ :username => nil)
360
+ end
361
+
362
+ context 'configured to send email addresses and username' do
363
+ before { Rollbar.configure { |config| config.person_username_method = 'username' } }
364
+
365
+ it 'sends the current user data including email address and username' do
366
+ expect(person_data).to eq(:id => user.id,
367
+ :email => 'foo@bar.com',
368
+ :username => 'the_username')
369
+ end
370
+ end
371
+ end
346
372
  end
347
373
  end
348
374
  end
@@ -7,12 +7,14 @@ Rollbar.configure do |config|
7
7
  :foo => :bar
8
8
  }
9
9
  # By default, Rollbar will try to call the `current_user` controller method
10
- # to fetch the logged-in user object, and then call that object's `id`,
11
- # `username`, and `email` methods to fetch those properties. To customize:
10
+ # to fetch the logged-in user object, and then call that object's `id`
11
+ # method to fetch this property. To customize:
12
12
  # config.person_method = "my_current_user"
13
13
  # config.person_id_method = "my_id"
14
- # config.person_username_method = "my_username"
15
- # config.person_email_method = "my_email"
14
+
15
+ # Additionally, you may specify the following:
16
+ # config.person_username_method = "username"
17
+ # config.person_email_method = "email"
16
18
 
17
19
  # Add exception class names to the exception_level_filters hash to
18
20
  # change the level that exception is reported at. Note that if an exception
@@ -138,6 +138,30 @@ describe Rollbar::RequestDataExtractor do
138
138
 
139
139
  expect(result[:user_ip]).to be_eql('2.2.2.2')
140
140
  end
141
+
142
+ context 'with collect_user_ip configuration option disabled' do
143
+ before do
144
+ Rollbar.configuration.collect_user_ip = false
145
+ end
146
+
147
+ it 'does not extract user\'s IP' do
148
+ result = subject.extract_request_data_from_rack(env)
149
+
150
+ expect(result[:user_ip]).to be_nil
151
+ end
152
+ end
153
+
154
+ context 'with anonymize_user_ip configuration option enabled' do
155
+ before do
156
+ Rollbar.configuration.anonymize_user_ip = true
157
+ end
158
+
159
+ it 'it anonymizes the IPv4 address' do
160
+ result = subject.extract_request_data_from_rack(env)
161
+
162
+ expect(result[:user_ip]).to be_eql('2.2.2.0')
163
+ end
164
+ end
141
165
  end
142
166
 
143
167
  context 'with private first client IP' do
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+ require 'rollbar/util/ip_anonymizer'
3
+
4
+ describe Rollbar::Util::IPAnonymizer do
5
+
6
+ before do
7
+ Rollbar.configuration.anonymize_user_ip = true
8
+ end
9
+
10
+ context 'with IPv4 address' do
11
+ let(:ip) { '127.0.0.1' }
12
+
13
+ it 'anonymizes the IP by replacing the last octet with 0' do
14
+ anonymized_ip = described_class.anonymize_ip(ip)
15
+
16
+ expect(anonymized_ip).to be_eql(IPAddr.new('127.0.0.0').to_s)
17
+ end
18
+ end
19
+
20
+ context 'with IPv6 address' do
21
+ let(:ip) { '2001:0db8:85a3:0000:0000:8a2e:0370:7334' }
22
+
23
+ it 'anonymizes the IP by replacing the last 80 bits with 0' do
24
+
25
+ anonymized_ip = described_class.anonymize_ip(ip)
26
+
27
+ expect(anonymized_ip).to be_eql(IPAddr.new('2001:db8:85a3::').to_s)
28
+ end
29
+ end
30
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rollbar
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.15.6
4
+ version: 2.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rollbar, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-17 00:00:00.000000000 Z
11
+ date: 2018-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -133,6 +133,7 @@ files:
133
133
  - lib/rollbar/truncation/strings_strategy.rb
134
134
  - lib/rollbar/util.rb
135
135
  - lib/rollbar/util/hash.rb
136
+ - lib/rollbar/util/ip_anonymizer.rb
136
137
  - lib/rollbar/util/ip_obfuscator.rb
137
138
  - lib/rollbar/version.rb
138
139
  - lib/tasks/tasks.rake
@@ -248,6 +249,7 @@ files:
248
249
  - spec/rollbar/truncation/strings_strategy_spec.rb
249
250
  - spec/rollbar/truncation_spec.rb
250
251
  - spec/rollbar/util/hash_spec.rb
252
+ - spec/rollbar/util/ip_anonymizer_spec.rb
251
253
  - spec/rollbar/util_spec.rb
252
254
  - spec/rollbar_bc_spec.rb
253
255
  - spec/rollbar_spec.rb
@@ -282,7 +284,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
282
284
  version: '0'
283
285
  requirements: []
284
286
  rubyforge_project:
285
- rubygems_version: 2.6.10
287
+ rubygems_version: 2.5.1
286
288
  signing_key:
287
289
  specification_version: 4
288
290
  summary: Reports exceptions to Rollbar
@@ -398,6 +400,7 @@ test_files:
398
400
  - spec/rollbar/truncation/strings_strategy_spec.rb
399
401
  - spec/rollbar/truncation_spec.rb
400
402
  - spec/rollbar/util/hash_spec.rb
403
+ - spec/rollbar/util/ip_anonymizer_spec.rb
401
404
  - spec/rollbar/util_spec.rb
402
405
  - spec/rollbar_bc_spec.rb
403
406
  - spec/rollbar_spec.rb