sentry-sanitizer 0.6.0 → 0.7.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/.github/workflows/{ci.yml → ci-linux.yml} +7 -5
- data/.github/workflows/ci-macos.yml +39 -0
- data/.github/workflows/coveralls-report.yml +38 -0
- data/.rubocop.yml +36 -0
- data/CHANGELOG.md +3 -1
- data/Gemfile +11 -1
- data/Gemfile.lock +27 -7
- data/README.md +4 -1
- data/Rakefile +3 -1
- data/bin/console +1 -0
- data/lefthook.yml +6 -0
- data/lib/sentry/sanitizer/cleaner.rb +51 -35
- data/lib/sentry/sanitizer/configuration.rb +28 -19
- data/lib/sentry/sanitizer/configuration_mixin.rb +8 -5
- data/lib/sentry/sanitizer/version.rb +3 -1
- data/lib/sentry/sanitizer.rb +6 -4
- data/lib/sentry-sanitizer.rb +4 -2
- data/sentry-sanitizer.gemspec +16 -24
- data/tea.yml +6 -0
- metadata +10 -88
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 17e8a5a1dcd6a12efae12b9f326fe9c1df140f02428782a6f6ecb6c102bda038
|
|
4
|
+
data.tar.gz: 342037b0b4f1bd0e45e4ae5b9fe3698914275320bc45162bcd69d03236a3b8cf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 39b42429f3b7ee5783a29ebf796220167370d4038a48bd19c1a6809d23aace59dddf3c2498e4777edccf0badb1784f0250196e413347cea77817923fa79b5ed2
|
|
7
|
+
data.tar.gz: cb70a216f92b749b68acdb158277277d4d9d0e0b19966b1aff8275c5456794025291b3730b64c91e6b31df89d5f2af077b3aa057d84ac67bdbb89168cf1555f9
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
name: CI
|
|
1
|
+
name: CI linux
|
|
2
2
|
on:
|
|
3
3
|
push:
|
|
4
|
-
branches:
|
|
5
|
-
- master
|
|
6
4
|
pull_request:
|
|
7
5
|
|
|
8
6
|
jobs:
|
|
@@ -16,6 +14,7 @@ jobs:
|
|
|
16
14
|
- { ruby_version: 2.7 }
|
|
17
15
|
- { ruby_version: 3.0 }
|
|
18
16
|
- { ruby_version: 3.1 }
|
|
17
|
+
- { ruby_version: 3.2 }
|
|
19
18
|
- { ruby_version: jruby }
|
|
20
19
|
steps:
|
|
21
20
|
- uses: actions/checkout@v1
|
|
@@ -31,6 +30,9 @@ jobs:
|
|
|
31
30
|
bundle install --jobs 4 --retry 3 --no-cache
|
|
32
31
|
bundle exec rspec
|
|
33
32
|
|
|
34
|
-
- uses:
|
|
33
|
+
- uses: coverallsapp/github-action@v2
|
|
34
|
+
env:
|
|
35
|
+
COVERALLS_SERVICE_NUMBER: ${{ github.sha }}
|
|
35
36
|
with:
|
|
36
|
-
|
|
37
|
+
flag-name: ruby-${{ join(matrix.*, '-') }}
|
|
38
|
+
parallel: true
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: CI macos
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
pull_request:
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
rspec:
|
|
8
|
+
name: Unit tests
|
|
9
|
+
runs-on: macos-13
|
|
10
|
+
strategy:
|
|
11
|
+
matrix:
|
|
12
|
+
include:
|
|
13
|
+
- { ruby_version: 2.5 }
|
|
14
|
+
- { ruby_version: 2.7 }
|
|
15
|
+
- { ruby_version: 3.0 }
|
|
16
|
+
- { ruby_version: 3.1 }
|
|
17
|
+
- { ruby_version: 3.2 }
|
|
18
|
+
- { ruby_version: jruby }
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v1
|
|
21
|
+
|
|
22
|
+
- name: Set up Ruby ${{ matrix.ruby_version }}
|
|
23
|
+
uses: ruby/setup-ruby@v1
|
|
24
|
+
with:
|
|
25
|
+
bundler: 2
|
|
26
|
+
ruby-version: ${{ matrix.ruby_version }}
|
|
27
|
+
|
|
28
|
+
- name: Run specs
|
|
29
|
+
run: |
|
|
30
|
+
bundle install --jobs 4 --retry 3 --no-cache
|
|
31
|
+
bundle exec rspec
|
|
32
|
+
|
|
33
|
+
- uses: coverallsapp/github-action@v2
|
|
34
|
+
env:
|
|
35
|
+
COVERALLS_SERVICE_NUMBER: ${{ github.sha }}
|
|
36
|
+
with:
|
|
37
|
+
flag-name: ruby-${{ join(matrix.*, '-') }}
|
|
38
|
+
parallel: true
|
|
39
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: Coveralls
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
pull_request:
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
coveralls:
|
|
8
|
+
name: Coveralls Report
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
if: ${{ always() }}
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v3
|
|
13
|
+
|
|
14
|
+
- name: Wait on tests (PR)
|
|
15
|
+
uses: lewagon/wait-on-check-action@v1.3.1
|
|
16
|
+
if: github.event_name == 'pull_request'
|
|
17
|
+
with:
|
|
18
|
+
ref: ${{ github.event.pull_request.head.sha }}
|
|
19
|
+
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
20
|
+
wait-interval: 10 # seconds
|
|
21
|
+
running-workflow-name: Coveralls Report
|
|
22
|
+
allowed-conclusions: success,skipped,cancelled,failure
|
|
23
|
+
|
|
24
|
+
- name: Wait on tests
|
|
25
|
+
uses: lewagon/wait-on-check-action@v1.3.1
|
|
26
|
+
with:
|
|
27
|
+
ref: ${{ github.sha }}
|
|
28
|
+
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
|
29
|
+
wait-interval: 10 # seconds
|
|
30
|
+
running-workflow-name: Coveralls Report
|
|
31
|
+
allowed-conclusions: success,skipped,cancelled,failure
|
|
32
|
+
|
|
33
|
+
- uses: coverallsapp/github-action@v2
|
|
34
|
+
env:
|
|
35
|
+
COVERALLS_SERVICE_NUMBER: ${{ github.sha }}
|
|
36
|
+
with:
|
|
37
|
+
carryforward: "ruby-2.5,ruby-2.6,ruby-2.7,ruby-3.0,ruby-3.1,ruby-jruby"
|
|
38
|
+
parallel-finished: true
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
NewCops: enable
|
|
3
|
+
SuggestExtensions: false
|
|
4
|
+
|
|
5
|
+
Style/StringLiterals:
|
|
6
|
+
EnforcedStyle: double_quotes
|
|
7
|
+
|
|
8
|
+
Metrics/BlockLength:
|
|
9
|
+
Enabled: false
|
|
10
|
+
|
|
11
|
+
Style/Documentation:
|
|
12
|
+
Enabled: false
|
|
13
|
+
|
|
14
|
+
Layout/LineLength:
|
|
15
|
+
Enabled: false
|
|
16
|
+
|
|
17
|
+
Naming/FileName:
|
|
18
|
+
Enabled: false
|
|
19
|
+
|
|
20
|
+
Metrics/MethodLength:
|
|
21
|
+
Enabled: false
|
|
22
|
+
|
|
23
|
+
Metrics/ClassLength:
|
|
24
|
+
Enabled: false
|
|
25
|
+
|
|
26
|
+
Metrics/AbcSize:
|
|
27
|
+
Enabled: false
|
|
28
|
+
|
|
29
|
+
Gemspec/RequiredRubyVersion:
|
|
30
|
+
Enabled: false
|
|
31
|
+
|
|
32
|
+
Style/SelectByRegexp:
|
|
33
|
+
Enabled: false
|
|
34
|
+
|
|
35
|
+
Style/CaseLikeIf:
|
|
36
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
source "https://rubygems.org"
|
|
2
4
|
|
|
3
|
-
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
|
5
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
|
4
6
|
|
|
5
7
|
# Specify your gem's dependencies in sentry-sanitizer.gemspec
|
|
6
8
|
gemspec
|
|
9
|
+
|
|
10
|
+
gem "rubocop", "~> 1.28.2"
|
|
11
|
+
gem "simplecov", require: false, group: :test
|
|
12
|
+
|
|
13
|
+
gem "bundler", ">= 1.17"
|
|
14
|
+
gem "rack"
|
|
15
|
+
gem "rake", "~> 10.0"
|
|
16
|
+
gem "rspec", "~> 3.0"
|
data/Gemfile.lock
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
sentry-sanitizer (0.
|
|
4
|
+
sentry-sanitizer (0.7.0)
|
|
5
5
|
sentry-ruby (~> 5.3)
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
concurrent-ruby (1.
|
|
10
|
+
ast (2.4.2)
|
|
11
|
+
bigdecimal (3.1.9)
|
|
12
|
+
concurrent-ruby (1.3.5)
|
|
13
13
|
diff-lcs (1.5.0)
|
|
14
14
|
docile (1.4.0)
|
|
15
|
+
parallel (1.23.0)
|
|
16
|
+
parser (3.2.2.1)
|
|
17
|
+
ast (~> 2.4.1)
|
|
15
18
|
rack (2.2.3.1)
|
|
19
|
+
rainbow (3.1.1)
|
|
16
20
|
rake (10.5.0)
|
|
21
|
+
regexp_parser (2.8.0)
|
|
22
|
+
rexml (3.2.5)
|
|
17
23
|
rspec (3.11.0)
|
|
18
24
|
rspec-core (~> 3.11.0)
|
|
19
25
|
rspec-expectations (~> 3.11.0)
|
|
@@ -27,24 +33,38 @@ GEM
|
|
|
27
33
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
28
34
|
rspec-support (~> 3.11.0)
|
|
29
35
|
rspec-support (3.11.0)
|
|
30
|
-
|
|
36
|
+
rubocop (1.28.2)
|
|
37
|
+
parallel (~> 1.10)
|
|
38
|
+
parser (>= 3.1.0.0)
|
|
39
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
40
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
41
|
+
rexml
|
|
42
|
+
rubocop-ast (>= 1.17.0, < 2.0)
|
|
43
|
+
ruby-progressbar (~> 1.7)
|
|
44
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
|
45
|
+
rubocop-ast (1.29.0)
|
|
46
|
+
parser (>= 3.2.1.0)
|
|
47
|
+
ruby-progressbar (1.13.0)
|
|
48
|
+
sentry-ruby (5.22.2)
|
|
49
|
+
bigdecimal
|
|
31
50
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
32
51
|
simplecov (0.18.5)
|
|
33
52
|
docile (~> 1.1)
|
|
34
53
|
simplecov-html (~> 0.11)
|
|
35
54
|
simplecov-html (0.12.3)
|
|
55
|
+
unicode-display_width (2.4.2)
|
|
36
56
|
|
|
37
57
|
PLATFORMS
|
|
38
58
|
ruby
|
|
39
59
|
|
|
40
60
|
DEPENDENCIES
|
|
41
61
|
bundler (>= 1.17)
|
|
42
|
-
codecov
|
|
43
62
|
rack
|
|
44
63
|
rake (~> 10.0)
|
|
45
64
|
rspec (~> 3.0)
|
|
65
|
+
rubocop (~> 1.28.2)
|
|
46
66
|
sentry-sanitizer!
|
|
47
|
-
simplecov
|
|
67
|
+
simplecov
|
|
48
68
|
|
|
49
69
|
BUNDLED WITH
|
|
50
70
|
2.3.16
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|

|
|
2
2
|
[](https://badge.fury.io/rb/sentry-sanitizer)
|
|
3
|
-
[](https://coveralls.io/github/mrexox/sentry-sanitizer?branch=master)
|
|
4
4
|
|
|
5
5
|
# sentry-sanitizer: sanitizing extension for sentry-ruby
|
|
6
6
|
|
|
@@ -56,6 +56,9 @@ Sentry.init do |config|
|
|
|
56
56
|
# You can sanitize all cookies with this setting
|
|
57
57
|
config.sanitize.cookies = true
|
|
58
58
|
|
|
59
|
+
# You can sanitize query string params for GET requests
|
|
60
|
+
config.sanitize.query_string = true
|
|
61
|
+
|
|
59
62
|
# ...
|
|
60
63
|
end
|
|
61
64
|
```
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
data/lefthook.yml
ADDED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Sentry
|
|
2
4
|
module Sanitizer
|
|
3
5
|
class Cleaner
|
|
4
|
-
DEFAULT_MASK =
|
|
6
|
+
DEFAULT_MASK = "[FILTERED]"
|
|
5
7
|
DEFAULT_SENSITIVE_HEADERS = %w[
|
|
6
8
|
Authorization
|
|
7
9
|
X-Xsrf-Token
|
|
@@ -14,37 +16,46 @@ module Sentry
|
|
|
14
16
|
@http_headers = config.http_headers || DEFAULT_SENSITIVE_HEADERS
|
|
15
17
|
@do_cookies = config.cookies || false
|
|
16
18
|
@do_query_string = config.query_string || false
|
|
19
|
+
@mask = config.mask || DEFAULT_MASK
|
|
17
20
|
end
|
|
18
21
|
|
|
19
22
|
def call(event)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
event
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
sanitize_request(event, :symbolized_hash) if event[:request]
|
|
26
|
-
event['extra'] = sanitize_data(event['extra']) if event['extra']
|
|
27
|
-
event[:extra] = sanitize_data(event[:extra]) if event[:extra]
|
|
23
|
+
case event
|
|
24
|
+
when Sentry::Event
|
|
25
|
+
sanitize(event, :event)
|
|
26
|
+
when Hash
|
|
27
|
+
sanitize(event, :hash)
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
def
|
|
31
|
+
def sanitize(event, type) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
32
32
|
case type
|
|
33
|
-
when :
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
event
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
33
|
+
when :event
|
|
34
|
+
if event.request
|
|
35
|
+
event.request.data = sanitize_data(event.request.data)
|
|
36
|
+
event.request.headers = sanitize_headers(event.request.headers)
|
|
37
|
+
event.request.cookies = sanitize_cookies(event.request.cookies)
|
|
38
|
+
event.request.query_string = sanitize_query_string(event.request.query_string)
|
|
39
|
+
end
|
|
40
|
+
event.extra = sanitize_data(event.extra)
|
|
41
|
+
when :hash
|
|
42
|
+
if event["request"]
|
|
43
|
+
event["request"]["data"] = sanitize_data(event["request"]["data"])
|
|
44
|
+
event["request"]["headers"] = sanitize_headers(event["request"]["headers"])
|
|
45
|
+
event["request"]["cookies"] = sanitize_cookies(event["request"]["cookies"])
|
|
46
|
+
event["request"]["query_string"] = sanitize_query_string(event["request"]["query_string"])
|
|
47
|
+
elsif event[:request]
|
|
48
|
+
event[:request][:data] = sanitize_data(event[:request][:data])
|
|
49
|
+
event[:request][:headers] = sanitize_headers(event[:request][:headers])
|
|
50
|
+
event[:request][:cookies] = sanitize_cookies(event[:request][:cookies])
|
|
51
|
+
event[:request][:query_string] = sanitize_query_string(event[:request][:query_string])
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
if event["extra"]
|
|
55
|
+
event["extra"] = sanitize_data(event["extra"])
|
|
56
|
+
elsif event[:extra]
|
|
57
|
+
event[:extra] = sanitize_data(event[:extra])
|
|
58
|
+
end
|
|
48
59
|
end
|
|
49
60
|
end
|
|
50
61
|
|
|
@@ -57,19 +68,24 @@ module Sentry
|
|
|
57
68
|
|
|
58
69
|
private
|
|
59
70
|
|
|
60
|
-
attr_reader :fields,
|
|
71
|
+
attr_reader :fields,
|
|
72
|
+
:http_headers,
|
|
73
|
+
:do_cookies,
|
|
74
|
+
:do_query_string,
|
|
75
|
+
:mask
|
|
61
76
|
|
|
62
77
|
# Sanitize specified headers
|
|
63
78
|
def sanitize_headers(headers)
|
|
64
79
|
case http_headers
|
|
65
80
|
when TrueClass
|
|
66
|
-
headers.transform_values {
|
|
81
|
+
headers.transform_values { mask }
|
|
67
82
|
when Array
|
|
68
83
|
return headers unless http_headers.size.positive?
|
|
84
|
+
|
|
69
85
|
http_headers_regex = sensitive_regexp(http_headers)
|
|
70
86
|
|
|
71
87
|
headers.keys.select { |key| key.match?(http_headers_regex) }.each do |key|
|
|
72
|
-
headers[key] =
|
|
88
|
+
headers[key] = mask
|
|
73
89
|
end
|
|
74
90
|
|
|
75
91
|
headers
|
|
@@ -83,21 +99,21 @@ module Sentry
|
|
|
83
99
|
return cookies unless do_cookies
|
|
84
100
|
return cookies unless cookies.is_a? Hash
|
|
85
101
|
|
|
86
|
-
cookies.transform_values {
|
|
102
|
+
cookies.transform_values { mask }
|
|
87
103
|
end
|
|
88
104
|
|
|
89
105
|
def sanitize_query_string(query_string)
|
|
90
106
|
return query_string unless do_query_string
|
|
91
107
|
return query_string unless query_string.is_a? String
|
|
92
108
|
|
|
93
|
-
sanitized_array = query_string.split(
|
|
94
|
-
k, v = kv_pair.split(
|
|
109
|
+
sanitized_array = query_string.split("&").map do |kv_pair|
|
|
110
|
+
k, v = kv_pair.split("=")
|
|
95
111
|
new_v = sanitize_string(k, v)
|
|
96
112
|
|
|
97
113
|
"#{k}=#{new_v}"
|
|
98
114
|
end
|
|
99
115
|
|
|
100
|
-
sanitized_array.join(
|
|
116
|
+
sanitized_array.join("&")
|
|
101
117
|
end
|
|
102
118
|
|
|
103
119
|
def sanitize_value(value, key)
|
|
@@ -115,7 +131,7 @@ module Sentry
|
|
|
115
131
|
|
|
116
132
|
def sanitize_hash(key, value)
|
|
117
133
|
if key&.match?(sensitive_fields)
|
|
118
|
-
|
|
134
|
+
mask
|
|
119
135
|
elsif value.frozen?
|
|
120
136
|
value.merge(value) { |k, v| sanitize_value(v, k) }
|
|
121
137
|
else
|
|
@@ -132,7 +148,7 @@ module Sentry
|
|
|
132
148
|
end
|
|
133
149
|
|
|
134
150
|
def sanitize_string(key, value)
|
|
135
|
-
key&.match?(sensitive_fields) ?
|
|
151
|
+
key&.match?(sensitive_fields) ? mask : value
|
|
136
152
|
end
|
|
137
153
|
|
|
138
154
|
def sensitive_fields
|
|
@@ -140,7 +156,7 @@ module Sentry
|
|
|
140
156
|
end
|
|
141
157
|
|
|
142
158
|
def sensitive_regexp(fields)
|
|
143
|
-
Regexp.new(fields.map { |field| "\\b#{field}\\b" }.join(
|
|
159
|
+
Regexp.new(fields.map { |field| "\\b#{field}\\b" }.join("|"), "i")
|
|
144
160
|
end
|
|
145
161
|
end
|
|
146
162
|
end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "sentry/configuration"
|
|
4
|
+
require "sentry/sanitizer/cleaner"
|
|
5
|
+
require "sentry/sanitizer/configuration_mixin"
|
|
4
6
|
|
|
5
7
|
module Sentry
|
|
6
8
|
# Monkey-patching Sentry::Configuration
|
|
@@ -14,53 +16,60 @@ module Sentry
|
|
|
14
16
|
add_post_initialization_callback do
|
|
15
17
|
@sanitize ||= Sentry::Sanitizer::Configuration.new
|
|
16
18
|
|
|
17
|
-
self.before_send =
|
|
19
|
+
self.before_send = lambda { |event, _hint|
|
|
18
20
|
Sentry::Sanitizer::Cleaner.new(Sentry.configuration.sanitize).call(event)
|
|
19
21
|
|
|
20
22
|
event
|
|
21
|
-
|
|
23
|
+
}
|
|
22
24
|
end
|
|
23
25
|
end
|
|
24
26
|
|
|
25
27
|
module Sanitizer
|
|
26
28
|
class Configuration
|
|
27
|
-
|
|
29
|
+
attr_reader :fields,
|
|
30
|
+
:http_headers,
|
|
31
|
+
:cookies,
|
|
32
|
+
:query_string,
|
|
33
|
+
:mask
|
|
28
34
|
|
|
29
35
|
def configured?
|
|
30
|
-
[
|
|
36
|
+
[
|
|
37
|
+
fields,
|
|
38
|
+
http_headers,
|
|
39
|
+
cookies,
|
|
40
|
+
query_string
|
|
41
|
+
].any? { |setting| !setting.nil? }
|
|
31
42
|
end
|
|
32
43
|
|
|
33
44
|
def fields=(fields)
|
|
34
|
-
unless fields.is_a? Array
|
|
35
|
-
raise ArgumentError, 'sanitize_fields must be array'
|
|
36
|
-
end
|
|
45
|
+
raise ArgumentError, "sanitize_fields must be array" unless fields.is_a? Array
|
|
37
46
|
|
|
38
47
|
@fields = fields
|
|
39
48
|
end
|
|
40
49
|
|
|
41
50
|
def http_headers=(headers)
|
|
42
|
-
unless [Array, TrueClass, FalseClass].include?(headers.class)
|
|
43
|
-
raise ArgumentError, 'sanitize_http_headers must be array'
|
|
44
|
-
end
|
|
51
|
+
raise ArgumentError, "sanitize_http_headers must be array" unless [Array, TrueClass, FalseClass].include?(headers.class)
|
|
45
52
|
|
|
46
53
|
@http_headers = headers
|
|
47
54
|
end
|
|
48
55
|
|
|
49
56
|
def cookies=(cookies)
|
|
50
|
-
unless [TrueClass, FalseClass].include?(cookies.class)
|
|
51
|
-
raise ArgumentError, 'cookies must be boolean'
|
|
52
|
-
end
|
|
57
|
+
raise ArgumentError, "cookies must be boolean" unless [TrueClass, FalseClass].include?(cookies.class)
|
|
53
58
|
|
|
54
59
|
@cookies = cookies
|
|
55
60
|
end
|
|
56
61
|
|
|
57
62
|
def query_string=(query_string)
|
|
58
|
-
unless [TrueClass, FalseClass].include?(query_string.class)
|
|
59
|
-
raise ArgumentError, 'query_string must be boolean'
|
|
60
|
-
end
|
|
63
|
+
raise ArgumentError, "query_string must be boolean" unless [TrueClass, FalseClass].include?(query_string.class)
|
|
61
64
|
|
|
62
65
|
@query_string = query_string
|
|
63
66
|
end
|
|
67
|
+
|
|
68
|
+
def mask=(mask)
|
|
69
|
+
raise ArgumentError, "mask must be string" unless mask.is_a?(String)
|
|
70
|
+
|
|
71
|
+
@mask = mask
|
|
72
|
+
end
|
|
64
73
|
end
|
|
65
74
|
end
|
|
66
75
|
end
|
|
@@ -1,18 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Sentry
|
|
2
4
|
module Sanitizer
|
|
3
5
|
module ConfigurationMixin
|
|
4
6
|
# Allow adding multiple hooks for this extension
|
|
7
|
+
#
|
|
8
|
+
# @param [nil, false, #call] value
|
|
9
|
+
#
|
|
5
10
|
def before_send=(value)
|
|
6
|
-
unless value ==
|
|
7
|
-
raise ArgumentError, "before_send must be callable (or false to disable)"
|
|
8
|
-
end
|
|
11
|
+
raise ArgumentError, "before_send must be callable (or false to disable)" unless value.nil? || value == false || value.respond_to?(:call)
|
|
9
12
|
|
|
10
|
-
return
|
|
13
|
+
return unless value
|
|
11
14
|
|
|
12
15
|
@before_send_hook_list ||= []
|
|
13
16
|
@before_send_hook_list << value
|
|
14
17
|
|
|
15
|
-
@before_send =
|
|
18
|
+
@before_send = lambda { |event, hint|
|
|
16
19
|
@before_send_hook_list.each do |hook|
|
|
17
20
|
event = hook.call(event, hint)
|
|
18
21
|
end
|
data/lib/sentry/sanitizer.rb
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "sentry-ruby"
|
|
4
|
+
require "sentry/integrable"
|
|
5
|
+
require "sentry/sanitizer/configuration"
|
|
4
6
|
|
|
5
7
|
module Sentry
|
|
6
8
|
module Sanitizer
|
|
7
9
|
extend Integrable
|
|
8
10
|
|
|
9
|
-
register_integration name:
|
|
11
|
+
register_integration name: "sanitizer", version: Sentry::Sanitizer::VERSION
|
|
10
12
|
end
|
|
11
13
|
end
|
data/lib/sentry-sanitizer.rb
CHANGED
data/sentry-sanitizer.gemspec
CHANGED
|
@@ -1,40 +1,32 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
lib = File.expand_path(
|
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
-
require
|
|
5
|
+
require "sentry/sanitizer/version"
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |spec|
|
|
8
|
-
spec.name =
|
|
8
|
+
spec.name = "sentry-sanitizer"
|
|
9
9
|
spec.version = Sentry::Sanitizer::VERSION
|
|
10
|
-
spec.authors = [
|
|
11
|
-
spec.email = [
|
|
10
|
+
spec.authors = ["Valentine Kiselev"]
|
|
11
|
+
spec.email = ["mrexox@outlook.com"]
|
|
12
12
|
|
|
13
|
-
spec.summary =
|
|
14
|
-
spec.description =
|
|
15
|
-
spec.homepage =
|
|
16
|
-
spec.license =
|
|
13
|
+
spec.summary = "Sanitizing middleware for sentry-ruby gem"
|
|
14
|
+
spec.description = "Add missing sanitizing support for sentry-ruby (previous sentry-raven)"
|
|
15
|
+
spec.homepage = "https://github.com/mrexox/sentry-sanitizer"
|
|
16
|
+
spec.license = "BSD"
|
|
17
17
|
|
|
18
|
-
spec.metadata[
|
|
19
|
-
spec.metadata[
|
|
20
|
-
spec.metadata[
|
|
18
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
|
19
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
|
20
|
+
spec.metadata["changelog_uri"] = spec.homepage
|
|
21
21
|
|
|
22
22
|
# Specify which files should be added to the gem when it is released.
|
|
23
23
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
24
|
-
spec.files
|
|
24
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
25
25
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
spec.require_paths = [
|
|
28
|
+
spec.require_paths = ["lib"]
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
spec.
|
|
32
|
-
spec.add_development_dependency 'simplecov', '~> 0.18.5'
|
|
33
|
-
|
|
34
|
-
spec.add_development_dependency 'bundler', '>= 1.17'
|
|
35
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
|
36
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
37
|
-
spec.add_development_dependency 'rack'
|
|
38
|
-
|
|
39
|
-
spec.add_runtime_dependency 'sentry-ruby', '~> 5.3'
|
|
30
|
+
spec.add_runtime_dependency "sentry-ruby", "~> 5.3"
|
|
31
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
|
40
32
|
end
|
data/tea.yml
ADDED
metadata
CHANGED
|
@@ -1,99 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sentry-sanitizer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.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:
|
|
11
|
+
date: 2025-01-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: codecov
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0'
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: simplecov
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.18.5
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - "~>"
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.18.5
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: bundler
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - ">="
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '1.17'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - ">="
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '1.17'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: rake
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '10.0'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '10.0'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: rspec
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '3.0'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '3.0'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: rack
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - ">="
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '0'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - ">="
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '0'
|
|
97
13
|
- !ruby/object:Gem::Dependency
|
|
98
14
|
name: sentry-ruby
|
|
99
15
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -115,9 +31,12 @@ executables: []
|
|
|
115
31
|
extensions: []
|
|
116
32
|
extra_rdoc_files: []
|
|
117
33
|
files:
|
|
118
|
-
- ".github/workflows/ci.yml"
|
|
34
|
+
- ".github/workflows/ci-linux.yml"
|
|
35
|
+
- ".github/workflows/ci-macos.yml"
|
|
36
|
+
- ".github/workflows/coveralls-report.yml"
|
|
119
37
|
- ".gitignore"
|
|
120
38
|
- ".rspec"
|
|
39
|
+
- ".rubocop.yml"
|
|
121
40
|
- ".travis.yml"
|
|
122
41
|
- CHANGELOG.md
|
|
123
42
|
- Gemfile
|
|
@@ -127,6 +46,7 @@ files:
|
|
|
127
46
|
- Rakefile
|
|
128
47
|
- bin/console
|
|
129
48
|
- bin/setup
|
|
49
|
+
- lefthook.yml
|
|
130
50
|
- lib/sentry-sanitizer.rb
|
|
131
51
|
- lib/sentry/sanitizer.rb
|
|
132
52
|
- lib/sentry/sanitizer/cleaner.rb
|
|
@@ -134,6 +54,7 @@ files:
|
|
|
134
54
|
- lib/sentry/sanitizer/configuration_mixin.rb
|
|
135
55
|
- lib/sentry/sanitizer/version.rb
|
|
136
56
|
- sentry-sanitizer.gemspec
|
|
57
|
+
- tea.yml
|
|
137
58
|
homepage: https://github.com/mrexox/sentry-sanitizer
|
|
138
59
|
licenses:
|
|
139
60
|
- BSD
|
|
@@ -141,6 +62,7 @@ metadata:
|
|
|
141
62
|
homepage_uri: https://github.com/mrexox/sentry-sanitizer
|
|
142
63
|
source_code_uri: https://github.com/mrexox/sentry-sanitizer
|
|
143
64
|
changelog_uri: https://github.com/mrexox/sentry-sanitizer
|
|
65
|
+
rubygems_mfa_required: 'true'
|
|
144
66
|
post_install_message:
|
|
145
67
|
rdoc_options: []
|
|
146
68
|
require_paths:
|
|
@@ -156,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
156
78
|
- !ruby/object:Gem::Version
|
|
157
79
|
version: '0'
|
|
158
80
|
requirements: []
|
|
159
|
-
rubygems_version: 3.
|
|
81
|
+
rubygems_version: 3.4.19
|
|
160
82
|
signing_key:
|
|
161
83
|
specification_version: 4
|
|
162
84
|
summary: Sanitizing middleware for sentry-ruby gem
|