sentry-sanitizer 0.1.0 → 0.2.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/.gitignore +1 -0
- data/Gemfile.lock +63 -0
- data/Rakefile +0 -3
- data/lib/sentry/sanitizer/cleaner.rb +45 -22
- data/lib/sentry/sanitizer/configuration.rb +34 -40
- data/lib/sentry/sanitizer/configuration_mixin.rb +25 -0
- data/lib/sentry/sanitizer/version.rb +1 -1
- data/sentry-sanitizer.gemspec +2 -0
- metadata +32 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa6e89bd5636947019b12574187eb515d000a6d93bd48c3895bf3bf24e7564ca
|
4
|
+
data.tar.gz: 9a69894f2ed6903496162584c1ccb920d0e5a6ab3f75dc333c6c12dead8fc031
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54510f582c6e9434700ce3db8735566bd4ef1af3b2fd2caaaeb1cb016503d2a84a22ad39d3637ba34fbb95ad86274508c72badb56a4b458278ef7afbd64f52f2
|
7
|
+
data.tar.gz: fdd38c2cce91b32436522520d318f7c0c7f54f87777c1bcdfc80e77109ff43518807adf560aed42c99a8b4bf4cc2abdcd806a56f6a9328836e6b159da0ae5deb
|
data/.gitignore
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
sentry-sanitizer (0.2.0)
|
5
|
+
sentry-ruby (~> 4.2.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
byebug (11.1.3)
|
11
|
+
coderay (1.1.3)
|
12
|
+
concurrent-ruby (1.1.8)
|
13
|
+
diff-lcs (1.4.4)
|
14
|
+
faraday (1.3.0)
|
15
|
+
faraday-net_http (~> 1.0)
|
16
|
+
multipart-post (>= 1.2, < 3)
|
17
|
+
ruby2_keywords
|
18
|
+
faraday-net_http (1.0.1)
|
19
|
+
method_source (1.0.0)
|
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)
|
28
|
+
rake (10.5.0)
|
29
|
+
rspec (3.10.0)
|
30
|
+
rspec-core (~> 3.10.0)
|
31
|
+
rspec-expectations (~> 3.10.0)
|
32
|
+
rspec-mocks (~> 3.10.0)
|
33
|
+
rspec-core (3.10.1)
|
34
|
+
rspec-support (~> 3.10.0)
|
35
|
+
rspec-expectations (3.10.1)
|
36
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
37
|
+
rspec-support (~> 3.10.0)
|
38
|
+
rspec-mocks (3.10.2)
|
39
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
40
|
+
rspec-support (~> 3.10.0)
|
41
|
+
rspec-support (3.10.2)
|
42
|
+
ruby2_keywords (0.0.4)
|
43
|
+
sentry-ruby (4.2.0)
|
44
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
45
|
+
faraday (>= 1.0)
|
46
|
+
sentry-ruby-core (= 4.2.0)
|
47
|
+
sentry-ruby-core (4.2.0)
|
48
|
+
concurrent-ruby
|
49
|
+
faraday
|
50
|
+
|
51
|
+
PLATFORMS
|
52
|
+
ruby
|
53
|
+
|
54
|
+
DEPENDENCIES
|
55
|
+
bundler (>= 1.17)
|
56
|
+
pry-byebug
|
57
|
+
rack
|
58
|
+
rake (~> 10.0)
|
59
|
+
rspec (~> 3.0)
|
60
|
+
sentry-sanitizer!
|
61
|
+
|
62
|
+
BUNDLED WITH
|
63
|
+
2.1.4
|
data/Rakefile
CHANGED
@@ -1,60 +1,83 @@
|
|
1
1
|
module Sentry
|
2
2
|
module Sanitizer
|
3
3
|
class Cleaner
|
4
|
-
HOOK = ->(event, hint) do
|
5
|
-
Sentry::Sanitizer::Cleaner.new(Sentry.configuration.sanitize).call(event)
|
6
|
-
|
7
|
-
event
|
8
|
-
end.freeze
|
9
|
-
|
10
4
|
DEFAULT_MASK = '[FILTERED]'.freeze
|
11
5
|
DEFAULT_SENSITIVE_HEADERS = %w[
|
12
6
|
Authorization
|
13
7
|
X-Xsrf-Token
|
14
8
|
].freeze
|
15
9
|
|
16
|
-
private_constant :
|
10
|
+
private_constant :DEFAULT_SENSITIVE_HEADERS
|
17
11
|
|
18
12
|
def initialize(config)
|
19
13
|
@fields = config.fields || []
|
20
|
-
@http_headers = config.http_headers ||
|
21
|
-
@
|
14
|
+
@http_headers = config.http_headers || false
|
15
|
+
@do_cookies = config.cookies || false
|
22
16
|
end
|
23
17
|
|
24
18
|
def call(event)
|
25
19
|
if event.is_a?(Sentry::Event)
|
26
|
-
|
27
|
-
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]
|
28
27
|
end
|
29
28
|
end
|
30
29
|
|
31
|
-
def sanitize_request(
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
35
45
|
end
|
36
46
|
|
37
|
-
def
|
38
|
-
return
|
47
|
+
def sanitize_data(hash)
|
48
|
+
return hash unless hash.is_a? Hash
|
49
|
+
return hash unless fields.size.positive?
|
39
50
|
|
40
51
|
sanitize_value(hash, nil)
|
41
52
|
end
|
42
53
|
|
43
54
|
private
|
44
55
|
|
45
|
-
attr_reader :fields, :http_headers, :
|
56
|
+
attr_reader :fields, :http_headers, :do_cookies
|
46
57
|
|
47
58
|
# Sanitize specified headers
|
48
59
|
def sanitize_headers(headers)
|
49
|
-
headers
|
50
|
-
|
51
|
-
|
60
|
+
case headers
|
61
|
+
when TrueClass
|
62
|
+
headers.transform_values { DEFAULT_MASK }
|
63
|
+
when Hash
|
64
|
+
return headers unless http_headers.size.positive?
|
52
65
|
|
53
|
-
|
66
|
+
headers.keys.select { |key| key.match?(sensitive_headers) }.each do |key|
|
67
|
+
headers[key] = DEFAULT_MASK
|
68
|
+
end
|
69
|
+
|
70
|
+
headers
|
71
|
+
else
|
72
|
+
headers
|
73
|
+
end
|
54
74
|
end
|
55
75
|
|
56
76
|
# Sanitize all cookies
|
57
77
|
def sanitize_cookies(cookies)
|
78
|
+
return cookies unless cookies.is_a? Hash
|
79
|
+
return cookies unless do_cookies
|
80
|
+
|
58
81
|
cookies.transform_values { DEFAULT_MASK }
|
59
82
|
end
|
60
83
|
|
@@ -1,54 +1,24 @@
|
|
1
|
+
require 'sentry/configuration'
|
1
2
|
require 'sentry/sanitizer/cleaner'
|
3
|
+
require 'sentry/sanitizer/configuration_mixin'
|
2
4
|
|
3
5
|
module Sentry
|
4
6
|
# Monkey-patching Sentry::Configuration
|
5
7
|
class Configuration
|
6
|
-
#
|
7
|
-
|
8
|
-
super
|
8
|
+
# Add sanitizing configuration
|
9
|
+
attr_reader :sanitize
|
9
10
|
|
10
|
-
|
11
|
+
# Patch before_send method so it could support more than one call
|
12
|
+
prepend Sentry::Sanitizer::ConfigurationMixin
|
11
13
|
|
12
|
-
|
13
|
-
@before_send_hook_list << value
|
14
|
-
|
15
|
-
@before_send = ->(event, hint) {
|
16
|
-
@before_send_hook_list.each do |hook|
|
17
|
-
event = hook.call(event, hint)
|
18
|
-
end
|
19
|
-
}
|
20
|
-
end
|
21
|
-
|
22
|
-
def sanitize
|
14
|
+
add_post_initialization_callback do
|
23
15
|
@sanitize ||= Sentry::Sanitizer::Configuration.new
|
24
|
-
end
|
25
16
|
|
26
|
-
|
27
|
-
|
28
|
-
raise ArgumentError, 'sanitize_fields must be array'
|
29
|
-
end
|
17
|
+
self.before_send = ->(event, hint) do
|
18
|
+
Sentry::Sanitizer::Cleaner.new(Sentry.configuration.sanitize).call(event)
|
30
19
|
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
def sanitize_http_headers(headers)
|
35
|
-
unless headers.is_a? Array
|
36
|
-
raise ArgumentError, 'sanitize_http_headers must be array'
|
20
|
+
event
|
37
21
|
end
|
38
|
-
|
39
|
-
sanitize.http_headers = headers
|
40
|
-
end
|
41
|
-
|
42
|
-
def sanitize_cookies(cookies)
|
43
|
-
unless [TrueClass, FalseClass].include?(cookies.class)
|
44
|
-
raise ArgumentError, 'sanitize_cookies must be boolean'
|
45
|
-
end
|
46
|
-
|
47
|
-
sanitize.cookies = cookies
|
48
|
-
end
|
49
|
-
|
50
|
-
add_post_initialization_callback do
|
51
|
-
self.before_send = Sentry::Sanitizer::Cleaner::HOOK if sanitize.configured?
|
52
22
|
end
|
53
23
|
end
|
54
24
|
|
@@ -59,6 +29,30 @@ module Sentry
|
|
59
29
|
def configured?
|
60
30
|
[fields, http_headers, cookies].any? { |setting| !setting.nil? }
|
61
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
|
62
56
|
end
|
63
57
|
end
|
64
58
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Sentry
|
2
|
+
module Sanitizer
|
3
|
+
module ConfigurationMixin
|
4
|
+
# Allow adding multiple hooks for this extension
|
5
|
+
def before_send=(value)
|
6
|
+
unless value == false || value.respond_to?(:call)
|
7
|
+
raise ArgumentError, "before_send must be callable (or false to disable)"
|
8
|
+
end
|
9
|
+
|
10
|
+
return value if value == false
|
11
|
+
|
12
|
+
@before_send_hook_list ||= []
|
13
|
+
@before_send_hook_list << value
|
14
|
+
|
15
|
+
@before_send = ->(event, hint) {
|
16
|
+
@before_send_hook_list.each do |hook|
|
17
|
+
event = hook.call(event, hint)
|
18
|
+
end
|
19
|
+
|
20
|
+
event
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/sentry-sanitizer.gemspec
CHANGED
@@ -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.
|
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-
|
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
|
@@ -77,6 +105,7 @@ files:
|
|
77
105
|
- ".rspec"
|
78
106
|
- ".travis.yml"
|
79
107
|
- Gemfile
|
108
|
+
- Gemfile.lock
|
80
109
|
- LICENSE.txt
|
81
110
|
- README.md
|
82
111
|
- Rakefile
|
@@ -86,6 +115,7 @@ files:
|
|
86
115
|
- lib/sentry/sanitizer.rb
|
87
116
|
- lib/sentry/sanitizer/cleaner.rb
|
88
117
|
- lib/sentry/sanitizer/configuration.rb
|
118
|
+
- lib/sentry/sanitizer/configuration_mixin.rb
|
89
119
|
- lib/sentry/sanitizer/version.rb
|
90
120
|
- sentry-sanitizer.gemspec
|
91
121
|
homepage: https://github.com/mrexox/sentry-sanitizer
|