sqreen 1.21.1 → 1.22.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/CHANGELOG.md +7 -0
- data/lib/sqreen/frameworks/generic.rb +12 -0
- data/lib/sqreen/version.rb +1 -1
- data/lib/sqreen/weave/legacy/instrumentation.rb +63 -11
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72fc8c4943ce7cb8cd45a80553ae02ae8c28086ca1895a89f2ec5840b2e6a883
|
4
|
+
data.tar.gz: ca46dc3483df4a16fca77e0226ca7c9a3d832c5a837155b86f0ee70c5fc12226
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 112a455abff8baca0c586f1479351e8e900e73d7f89b31e83fcbdc07ae99dbfa86f7439541a2f1688d56b481ce9094e16cd6bf860cb9959c7edd7be80ed66f92
|
7
|
+
data.tar.gz: 3f867ee75cf103c8817007540151e189c10116e0da8fa0bdad324de3bfa611d2bb4f888fdccf1074248f7976f26eb68fc81f987fcae0db5208ee9c00569f9797
|
data/CHANGELOG.md
CHANGED
@@ -400,6 +400,18 @@ module Sqreen
|
|
400
400
|
r
|
401
401
|
end
|
402
402
|
|
403
|
+
def body
|
404
|
+
return nil unless request.respond_to?(:body)
|
405
|
+
return nil unless request.body.respond_to?(:read)
|
406
|
+
return nil unless request.body.respond_to?(:rewind)
|
407
|
+
|
408
|
+
body_io = request.body
|
409
|
+
body = body_io.read(4096)
|
410
|
+
body_io.rewind
|
411
|
+
|
412
|
+
body
|
413
|
+
end
|
414
|
+
|
403
415
|
# Expose current working directory
|
404
416
|
def cwd
|
405
417
|
Dir.getwd
|
data/lib/sqreen/version.rb
CHANGED
@@ -96,25 +96,77 @@ class Sqreen::Weave::Legacy::Instrumentation
|
|
96
96
|
def instrument!(rules, framework)
|
97
97
|
Sqreen::Weave.logger.debug { "#{rules.count} rules, #{framework}" }
|
98
98
|
|
99
|
+
# TODO: make config able to see if value was user-set or default
|
99
100
|
strategy = Sqreen.config_get(:weave_strategy)
|
101
|
+
# TODO: factor generic hint system out
|
102
|
+
# TODO: factor those hint definitions to dependency
|
103
|
+
strategy_hints = []
|
100
104
|
if strategy == :prepend && !Module.respond_to?(:prepend)
|
101
|
-
Sqreen::Weave.logger.
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
strategy
|
105
|
+
Sqreen::Weave.logger.debug { "strategy: #{strategy.inspect} unavailable, falling back to :chain" }
|
106
|
+
strategy_hints << [:chain, 'Module.respond_to?(:prepend)', 'false']
|
107
|
+
end
|
108
|
+
if Gem::Specification.select { |s| s.name == 'scout_apm' && Gem::Requirement.new('< 2.5.2').satisfied_by?(Gem::Version.new(s.version)) }.any?
|
109
|
+
Sqreen::Weave.logger.debug { "strategy: :prepend unavailable with scout_apm < 2.5.2, switching to :chain" }
|
110
|
+
strategy_hints << [:chain, 'scout_apm', '< 2.5.2']
|
111
|
+
end
|
112
|
+
if Gem::Specification.select { |s| s.name == 'scout_apm' && Gem::Requirement.new('>= 2.5.2').satisfied_by?(Gem::Version.new(s.version)) }.any?
|
113
|
+
Sqreen::Weave.logger.debug { "strategy: :chain unavailable with scout_apm >= 2.5.2, switching to :prepend" }
|
114
|
+
strategy_hints << [:prepend, 'scout_apm', '>= 2.5.2']
|
115
|
+
end
|
116
|
+
if Gem::Specification.select { |s| s.name == 'ddtrace' && Gem::Requirement.new('< 0.27').satisfied_by?(Gem::Version.new(s.version)) }.any?
|
117
|
+
Sqreen::Weave.logger.debug { "strategy: :prepend unavailable with ddtrace < 0.27, switching to :chain" }
|
118
|
+
strategy_hints << [:chain, 'ddtrace', '< 0.27']
|
119
|
+
end
|
120
|
+
if Gem::Specification.select { |s| s.name == 'ddtrace' && Gem::Requirement.new('>= 0.27').satisfied_by?(Gem::Version.new(s.version)) }.any?
|
121
|
+
Sqreen::Weave.logger.debug { "strategy: :chain unavailable with ddtrace >= 0.27, switching to :prepend" }
|
122
|
+
strategy_hints << [:prepend, 'ddtrace', '>= 0.27']
|
123
|
+
end
|
124
|
+
if Gem::Specification.select { |s| s.name == 'skylight' && Gem::Requirement.new('< 5.0.0.beta').satisfied_by?(Gem::Version.new(s.version)) }.any?
|
125
|
+
Sqreen::Weave.logger.debug { "strategy: :prepend unavailable with skylight < 5.0.0.beta, switching to :chain" }
|
126
|
+
strategy_hints << [:chain, 'skylight', '< 5.0.0.beta']
|
127
|
+
end
|
128
|
+
if Gem::Specification.select { |s| s.name == 'skylight' && Gem::Requirement.new('>= 5.0.0.beta').satisfied_by?(Gem::Version.new(s.version)) }.any?
|
129
|
+
Sqreen::Weave.logger.debug { "strategy: :chain unavailable with skylight >= 5.0.0.beta, switching to :prepend" }
|
130
|
+
strategy_hints << [:prepend, 'skylight', '>= 5.0.0.beta']
|
131
|
+
end
|
132
|
+
if strategy_hints.map(&:first).uniq.count > 1
|
133
|
+
raise Sqreen::Exception, "conflicting instrumentation strategies: #{strategy_hints.inspect}"
|
134
|
+
end
|
135
|
+
if strategy_hints.map(&:first).uniq.count == 1 && strategy != strategy_hints.first.first
|
136
|
+
was = strategy
|
137
|
+
strategy = strategy_hints.first.first
|
138
|
+
Sqreen::Weave.logger.warn { "strategy: #{strategy.inspect} was: #{was.inspect} hints: #{strategy_hints.inspect}" }
|
139
|
+
else
|
140
|
+
Sqreen::Weave.logger.info { "strategy: #{strategy.inspect}" }
|
106
141
|
end
|
107
|
-
Sqreen::Weave.logger.debug { "strategy: #{strategy.inspect}" }
|
108
142
|
|
109
143
|
### set up rule signature verifier
|
110
144
|
verifier = nil
|
111
|
-
|
112
|
-
|
113
|
-
|
145
|
+
# TODO: check for JRuby via dependency
|
146
|
+
# TODO: reinstate signatures for JRuby
|
147
|
+
if Sqreen.config_get(:rules_verify_signature) == true && !defined?(::JRUBY_VERSION)
|
114
148
|
verifier = Sqreen::SqreenSignedVerifier.new
|
115
|
-
Sqreen::Weave.logger.debug('
|
149
|
+
Sqreen::Weave.logger.debug('rules: signature status: enabled')
|
116
150
|
else
|
117
|
-
Sqreen::Weave.logger.debug('
|
151
|
+
Sqreen::Weave.logger.debug('rules: signature status: disabled')
|
152
|
+
end
|
153
|
+
|
154
|
+
if verifier
|
155
|
+
invalid_rules = rules.reject do |rule|
|
156
|
+
valid = verifier.verify(rule)
|
157
|
+
|
158
|
+
if valid
|
159
|
+
Sqreen::Weave.logger.debug { "rule: #{rule['name']} signed: true result: ok" }
|
160
|
+
else
|
161
|
+
Sqreen::Weave.logger.error { "rule: #{rule['name']} singed: true result: fail" }
|
162
|
+
end
|
163
|
+
end
|
164
|
+
if invalid_rules.any?
|
165
|
+
Sqreen::Weave.logger.error { "weave: instrument status: abort reason: signature result: fail" }
|
166
|
+
raise Sqreen::Exception, "Signature error: rules: #{invalid_rules.map { |r| r['name'] }.inspect}"
|
167
|
+
else
|
168
|
+
Sqreen::Weave.logger.info { "weave: instrument rules: signed result: ok" }
|
169
|
+
end
|
118
170
|
end
|
119
171
|
|
120
172
|
### force clean instrumentation callback list
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sqreen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.22.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sqreen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sqreen-backport
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: '1.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: '1.0'
|
69
69
|
description: Sqreen is a SaaS based Application protection and monitoring platform
|
70
70
|
that integrates directly into your Ruby applications. Learn more at https://sqreen.com.
|
71
71
|
email: contact@sqreen.com
|
@@ -342,7 +342,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
342
342
|
- !ruby/object:Gem::Version
|
343
343
|
version: '0'
|
344
344
|
requirements: []
|
345
|
-
rubygems_version: 3.1.
|
345
|
+
rubygems_version: 3.1.2
|
346
346
|
signing_key:
|
347
347
|
specification_version: 4
|
348
348
|
summary: Sqreen Ruby agent
|