sentry-sanitizer 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce13accdd4d90cccb1820625ef2d167a765e077b3837cf2d8341d2e945c3f735
4
- data.tar.gz: 948e32dee0448aa61a1897328806fcacd1ac392179b502fb7ab09a0cf78cb21d
3
+ metadata.gz: aa6e89bd5636947019b12574187eb515d000a6d93bd48c3895bf3bf24e7564ca
4
+ data.tar.gz: 9a69894f2ed6903496162584c1ccb920d0e5a6ab3f75dc333c6c12dead8fc031
5
5
  SHA512:
6
- metadata.gz: e4863aeb41c575268039a9eda51a04aa78057fb41e3238ed1ba075be7020e395b9f526551fc0684cb39838101067c89441cd0d5a6eb5ef0ca3dfed3ed24320a0
7
- data.tar.gz: cb5ec02b1a3604da2c636226ced1db9bd590ecd767f7bf083582911a211a22f79fc2ae3c55a27e5d944cdcc86b65861eb94bc6c1c2ef1730905ef9ca4a01be3e
6
+ metadata.gz: 54510f582c6e9434700ce3db8735566bd4ef1af3b2fd2caaaeb1cb016503d2a84a22ad39d3637ba34fbb95ad86274508c72badb56a4b458278ef7afbd64f52f2
7
+ data.tar.gz: fdd38c2cce91b32436522520d318f7c0c7f54f87777c1bcdfc80e77109ff43518807adf560aed42c99a8b4bf4cc2abdcd806a56f6a9328836e6b159da0ae5deb
data/Gemfile.lock CHANGED
@@ -1,12 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sentry-sanitizer (0.1.0)
4
+ sentry-sanitizer (0.2.0)
5
5
  sentry-ruby (~> 4.2.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
+ byebug (11.1.3)
11
+ coderay (1.1.3)
10
12
  concurrent-ruby (1.1.8)
11
13
  diff-lcs (1.4.4)
12
14
  faraday (1.3.0)
@@ -14,7 +16,15 @@ GEM
14
16
  multipart-post (>= 1.2, < 3)
15
17
  ruby2_keywords
16
18
  faraday-net_http (1.0.1)
19
+ method_source (1.0.0)
17
20
  multipart-post (2.1.1)
21
+ pry (0.13.1)
22
+ coderay (~> 1.1)
23
+ method_source (~> 1.0)
24
+ pry-byebug (3.9.0)
25
+ byebug (~> 11.0)
26
+ pry (~> 0.13.0)
27
+ rack (2.2.3)
18
28
  rake (10.5.0)
19
29
  rspec (3.10.0)
20
30
  rspec-core (~> 3.10.0)
@@ -43,6 +53,8 @@ PLATFORMS
43
53
 
44
54
  DEPENDENCIES
45
55
  bundler (>= 1.17)
56
+ pry-byebug
57
+ rack
46
58
  rake (~> 10.0)
47
59
  rspec (~> 3.0)
48
60
  sentry-sanitizer!
data/Rakefile CHANGED
@@ -1,9 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
3
 
4
- require "bundler/gem_helper"
5
- Bundler::GemHelper.install_tasks(name: "sentry-sanitizer")
6
-
7
4
  RSpec::Core::RakeTask.new(:spec)
8
5
 
9
6
  task :default => :spec
@@ -11,44 +11,73 @@ module Sentry
11
11
 
12
12
  def initialize(config)
13
13
  @fields = config.fields || []
14
- @http_headers = config.http_headers || []
15
- @cookies = config.cookies || false
14
+ @http_headers = config.http_headers || false
15
+ @do_cookies = config.cookies || false
16
16
  end
17
17
 
18
18
  def call(event)
19
19
  if event.is_a?(Sentry::Event)
20
- sanitize_request(event.request) if event.request
21
- event.extra = sanitize_data(event.extra) if event.extra
20
+ sanitize_request(event, :object) if event.request
21
+ event.extra = sanitize_data(event.extra)
22
+ elsif event.is_a?(Hash)
23
+ sanitize_request(event, :stringified_hash) if event['request']
24
+ sanitize_request(event, :symbolized_hash) if event[:request]
25
+ event['extra'] = sanitize_data(event['extra']) if event['extra']
26
+ event[:extra] = sanitize_data(event[:extra]) if event[:extra]
22
27
  end
23
28
  end
24
29
 
25
- def sanitize_request(request)
26
- request.data = sanitize_data(request.data) unless fields.size.zero?
27
- request.headers = sanitize_headers(request.headers) unless http_headers.size.zero?
28
- request.cookies = sanitize_cookies(request.cookies) if cookies
30
+ def sanitize_request(event, type)
31
+ case type
32
+ when :object
33
+ event.request.data = sanitize_data(event.request.data)
34
+ event.request.headers = sanitize_headers(event.request.headers)
35
+ event.request.cookies = sanitize_cookies(event.request.cookies)
36
+ when :stringified_hash
37
+ event['request']['data'] = sanitize_data(event['request']['data'])
38
+ event['request']['headers'] = sanitize_headers(event['request']['headers'])
39
+ event['request']['cookies'] = sanitize_cookies(event['request']['cookies'])
40
+ when :symbolized_hash
41
+ event[:request][:data] = sanitize_data(event[:request][:data])
42
+ event[:request][:headers] = sanitize_headers(event[:request][:headers])
43
+ event[:request][:cookies] = sanitize_cookies(event[:request][:cookies])
44
+ end
29
45
  end
30
46
 
31
47
  def sanitize_data(hash)
32
- return unless hash.is_a? Hash
48
+ return hash unless hash.is_a? Hash
49
+ return hash unless fields.size.positive?
33
50
 
34
51
  sanitize_value(hash, nil)
35
52
  end
36
53
 
37
54
  private
38
55
 
39
- attr_reader :fields, :http_headers, :cookies
56
+ attr_reader :fields, :http_headers, :do_cookies
40
57
 
41
58
  # Sanitize specified headers
42
59
  def sanitize_headers(headers)
43
- headers.keys.select { |key| key.match?(sensitive_headers) }.each do |key|
44
- headers[key] = DEFAULT_MASK
45
- end
60
+ case headers
61
+ when TrueClass
62
+ headers.transform_values { DEFAULT_MASK }
63
+ when Hash
64
+ return headers unless http_headers.size.positive?
65
+
66
+ headers.keys.select { |key| key.match?(sensitive_headers) }.each do |key|
67
+ headers[key] = DEFAULT_MASK
68
+ end
46
69
 
47
- headers
70
+ headers
71
+ else
72
+ headers
73
+ end
48
74
  end
49
75
 
50
76
  # Sanitize all cookies
51
77
  def sanitize_cookies(cookies)
78
+ return cookies unless cookies.is_a? Hash
79
+ return cookies unless do_cookies
80
+
52
81
  cookies.transform_values { DEFAULT_MASK }
53
82
  end
54
83
 
@@ -5,9 +5,15 @@ require 'sentry/sanitizer/configuration_mixin'
5
5
  module Sentry
6
6
  # Monkey-patching Sentry::Configuration
7
7
  class Configuration
8
+ # Add sanitizing configuration
9
+ attr_reader :sanitize
10
+
11
+ # Patch before_send method so it could support more than one call
8
12
  prepend Sentry::Sanitizer::ConfigurationMixin
9
13
 
10
14
  add_post_initialization_callback do
15
+ @sanitize ||= Sentry::Sanitizer::Configuration.new
16
+
11
17
  self.before_send = ->(event, hint) do
12
18
  Sentry::Sanitizer::Cleaner.new(Sentry.configuration.sanitize).call(event)
13
19
 
@@ -23,6 +29,30 @@ module Sentry
23
29
  def configured?
24
30
  [fields, http_headers, cookies].any? { |setting| !setting.nil? }
25
31
  end
32
+
33
+ def fields=(fields)
34
+ unless fields.is_a? Array
35
+ raise ArgumentError, 'sanitize_fields must be array'
36
+ end
37
+
38
+ @fields = fields
39
+ end
40
+
41
+ def http_headers=(headers)
42
+ unless [Array, TrueClass, FalseClass].include?(headers.class)
43
+ raise ArgumentError, 'sanitize_http_headers must be array'
44
+ end
45
+
46
+ @http_headers = headers
47
+ end
48
+
49
+ def cookies=(cookies)
50
+ unless [TrueClass, FalseClass].include?(cookies.class)
51
+ raise ArgumentError, 'sanitize_cookies must be boolean'
52
+ end
53
+
54
+ @cookies = cookies
55
+ end
26
56
  end
27
57
  end
28
58
  end
@@ -20,34 +20,6 @@ module Sentry
20
20
  event
21
21
  }
22
22
  end
23
-
24
- def sanitize
25
- @sanitize ||= Sentry::Sanitizer::Configuration.new
26
- end
27
-
28
- def sanitize_fields=(fields)
29
- unless fields.is_a? Array
30
- raise ArgumentError, 'sanitize_fields must be array'
31
- end
32
-
33
- sanitize.fields = fields
34
- end
35
-
36
- def sanitize_http_headers=(headers)
37
- unless headers.is_a? Array
38
- raise ArgumentError, 'sanitize_http_headers must be array'
39
- end
40
-
41
- sanitize.http_headers = headers
42
- end
43
-
44
- def sanitize_cookies=(cookies)
45
- unless [TrueClass, FalseClass].include?(cookies.class)
46
- raise ArgumentError, 'sanitize_cookies must be boolean'
47
- end
48
-
49
- sanitize.cookies = cookies
50
- end
51
23
  end
52
24
  end
53
25
  end
@@ -1,5 +1,5 @@
1
1
  module Sentry
2
2
  module Sanitizer
3
- VERSION = '0.1.4'
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -30,6 +30,8 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency 'bundler', '>= 1.17'
31
31
  spec.add_development_dependency 'rake', '~> 10.0'
32
32
  spec.add_development_dependency 'rspec', '~> 3.0'
33
+ spec.add_development_dependency 'rack'
34
+ spec.add_development_dependency 'pry-byebug'
33
35
 
34
36
  spec.add_runtime_dependency 'sentry-ruby', '~> 4.2.0'
35
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentry-sanitizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Valentine Kiselev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-05 00:00:00.000000000 Z
11
+ date: 2021-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rack
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: sentry-ruby
57
85
  requirement: !ruby/object:Gem::Requirement