sqreen 1.18.3.beta1 → 1.18.3.beta2
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 +0 -5
- data/lib/sqreen/actions.rb +11 -337
- data/lib/sqreen/actions/base.rb +110 -0
- data/lib/sqreen/actions/block_ip.rb +32 -0
- data/lib/sqreen/actions/block_user.rb +44 -0
- data/lib/sqreen/actions/ip_range_indexed_action_class.rb +36 -0
- data/lib/sqreen/actions/ip_ranges_index.rb +36 -0
- data/lib/sqreen/actions/redirect_ip.rb +40 -0
- data/lib/sqreen/actions/redirect_user.rb +45 -0
- data/lib/sqreen/actions/repository.rb +24 -0
- data/lib/sqreen/actions/unknown_action_type.rb +16 -0
- data/lib/sqreen/actions/user_action_class.rb +41 -0
- data/lib/sqreen/agent.rb +4 -1
- data/lib/sqreen/attack_blocked.rb +17 -0
- data/lib/sqreen/binding_accessor.rb +9 -102
- data/lib/sqreen/binding_accessor/path_elem.rb +8 -0
- data/lib/sqreen/binding_accessor/transforms.rb +107 -0
- data/lib/sqreen/capped_queue.rb +2 -0
- data/lib/sqreen/{callbacks.rb → cb.rb} +1 -53
- data/lib/sqreen/{callback_tree.rb → cb_tree.rb} +2 -2
- data/lib/sqreen/condition_evaluator.rb +22 -5
- data/lib/sqreen/configuration.rb +3 -0
- data/lib/sqreen/default_cb.rb +20 -0
- data/lib/sqreen/deferred_logger.rb +63 -0
- data/lib/sqreen/deliveries.rb +10 -0
- data/lib/sqreen/deliveries/batch.rb +7 -1
- data/lib/sqreen/deliveries/simple.rb +5 -0
- data/lib/sqreen/dependency/rails.rb +4 -0
- data/lib/sqreen/dependency/sinatra.rb +4 -0
- data/lib/sqreen/error_handling_middleware.rb +30 -0
- data/lib/sqreen/event.rb +2 -0
- data/lib/sqreen/events/attack.rb +2 -0
- data/lib/sqreen/events/request_record.rb +11 -56
- data/lib/sqreen/exception.rb +9 -40
- data/lib/sqreen/formatter_with_tid.rb +45 -0
- data/lib/sqreen/framework_cb.rb +28 -0
- data/lib/sqreen/frameworks.rb +7 -0
- data/lib/sqreen/frameworks/generic.rb +5 -1
- data/lib/sqreen/frameworks/rails.rb +2 -0
- data/lib/sqreen/frameworks/request_recorder.rb +3 -0
- data/lib/sqreen/frameworks/sinatra.rb +2 -0
- data/lib/sqreen/frameworks/sqreen_test.rb +2 -0
- data/lib/sqreen/instrumentation.rb +5 -5
- data/lib/sqreen/invalid_signature_exception.rb +8 -0
- data/lib/{sqreen-alt.rb → sqreen/js.rb} +6 -1
- data/lib/sqreen/js/call_context.rb +10 -0
- data/lib/sqreen/js/context_pool.rb +60 -0
- data/lib/sqreen/js/exec_js_runnable.rb +20 -0
- data/lib/sqreen/js/execjs_adapter.rb +6 -47
- data/lib/sqreen/js/executable_js.rb +12 -0
- data/lib/sqreen/js/js_service.rb +2 -22
- data/lib/sqreen/js/js_service_adapter.rb +18 -0
- data/lib/sqreen/js/mini_racer_adapter.rb +6 -180
- data/lib/sqreen/js/mini_racer_executable_js.rb +142 -0
- data/lib/sqreen/js/thread_local_exec_js_runnable.rb +47 -0
- data/lib/sqreen/log.rb +8 -188
- data/lib/sqreen/logger.rb +83 -0
- data/lib/sqreen/metrics_store.rb +3 -11
- data/lib/sqreen/metrics_store/already_registered_metric.rb +11 -0
- data/lib/sqreen/metrics_store/unknown_metric.rb +11 -0
- data/lib/sqreen/metrics_store/unregistered_metric.rb +11 -0
- data/lib/sqreen/middleware.rb +0 -44
- data/lib/sqreen/mono_time.rb +2 -0
- data/lib/sqreen/node.rb +44 -0
- data/lib/sqreen/not_implemented_yet.rb +8 -0
- data/lib/sqreen/null_logger.rb +24 -0
- data/lib/sqreen/payload_creator.rb +2 -19
- data/lib/sqreen/payload_creator/header_section.rb +28 -0
- data/lib/sqreen/prefix.rb +33 -0
- data/lib/sqreen/rails_middleware.rb +14 -0
- data/lib/sqreen/remote_command.rb +1 -8
- data/lib/sqreen/remote_command/failure_output.rb +11 -0
- data/lib/sqreen/rules.rb +32 -2
- data/lib/sqreen/{rule_attributes.rb → rules/attrs.rb} +0 -0
- data/lib/sqreen/{rules_callbacks/sdk_auth_track.rb → rules/auth_track_cb.rb} +2 -2
- data/lib/sqreen/{rules_callbacks/binding_accessor_matcher.rb → rules/binding_accessor_matcher_cb.rb} +4 -8
- data/lib/sqreen/{rules_callbacks → rules}/binding_accessor_metrics.rb +1 -1
- data/lib/sqreen/{rules_callbacks/blacklist_ips.rb → rules/blacklist_ips_cb.rb} +3 -2
- data/lib/sqreen/{rules_callbacks → rules}/count_http_codes.rb +2 -2
- data/lib/sqreen/{rules_callbacks/crawler_user_agent_matches.rb → rules/crawler_user_agent_matches_cb.rb} +1 -1
- data/lib/sqreen/{rules_callbacks/crawler_user_agent_matches_metrics.rb → rules/crawler_user_agent_matches_metrics_cb.rb} +1 -1
- data/lib/sqreen/{rules_callbacks/custom_error.rb → rules/custom_error_cb.rb} +1 -1
- data/lib/sqreen/{rules_callbacks/devise_auth_track.rb → rules/devise_auth_track_cb.rb} +2 -2
- data/lib/sqreen/{rules_callbacks/devise_signup_track.rb → rules/devise_signup_track_cb.rb} +2 -2
- data/lib/sqreen/{rules_callbacks/execjs.rb → rules/execjs_cb.rb} +49 -50
- data/lib/sqreen/{rules_callbacks/headers_insert.rb → rules/headers_insert_cb.rb} +1 -1
- data/lib/sqreen/{rules_callbacks → rules}/matcher_rule.rb +2 -2
- data/lib/sqreen/{rules_callbacks/not_found.rb → rules/not_found_cb.rb} +2 -2
- data/lib/sqreen/{rules_callbacks/rails_parameters.rb → rules/rails_parameters_cb.rb} +1 -1
- data/lib/sqreen/{rules_callbacks → rules}/record_request_context.rb +1 -1
- data/lib/sqreen/{rules_callbacks/regexp_rule.rb → rules/regexp_rule_cb.rb} +1 -1
- data/lib/sqreen/{rule_callback.rb → rules/rule_cb.rb} +2 -2
- data/lib/sqreen/{rules_callbacks → rules}/run_req_start_actions.rb +4 -2
- data/lib/sqreen/{rules_callbacks → rules}/run_user_actions.rb +1 -1
- data/lib/sqreen/{rules_callbacks/shell_env.rb → rules/shell_env_cb.rb} +1 -1
- data/lib/sqreen/{rules_callbacks/sdk_signup_track.rb → rules/signup_track_cb.rb} +2 -2
- data/lib/sqreen/{rules_callbacks → rules}/update_request_context.rb +1 -1
- data/lib/sqreen/{rules_callbacks/url_matches.rb → rules/url_matches_cb.rb} +1 -1
- data/lib/sqreen/{rules_callbacks/user_agent_matches.rb → rules/user_agent_matches_cb.rb} +1 -1
- data/lib/sqreen/{rules_callbacks/waf.rb → rules/waf_cb.rb} +7 -3
- data/lib/sqreen/{rules_callbacks/reflected_xss.rb → rules/xss_cb.rb} +10 -7
- data/lib/sqreen/run_when_called_cb.rb +21 -0
- data/lib/sqreen/sensitive_data_redactor.rb +111 -0
- data/lib/sqreen/signature_verifier.rb +20 -0
- data/lib/sqreen/sinatra_middleware.rb +14 -0
- data/lib/sqreen/{rules_signature.rb → sqreen_signed_verifier.rb} +5 -17
- data/lib/sqreen/token_invalid_exception.rb +8 -0
- data/lib/sqreen/token_not_found_exception.rb +9 -0
- data/lib/sqreen/trie.rb +3 -64
- data/lib/sqreen/unauthorized.rb +8 -0
- data/lib/sqreen/util.rb +2 -0
- data/lib/sqreen/util/capped_array.rb +30 -0
- data/lib/sqreen/util/capped_hash.rb +36 -0
- data/lib/sqreen/util/capped_string.rb +22 -0
- data/lib/sqreen/util/capper.rb +57 -0
- data/lib/sqreen/version.rb +1 -1
- data/lib/sqreen/waf_error.rb +18 -0
- metadata +85 -36
- data/lib/sqreen/rules_callbacks.rb +0 -36
- data/lib/sqreen/rules_callbacks/inspect_rule.rb +0 -25
@@ -0,0 +1,107 @@
|
|
1
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
2
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
3
|
+
|
4
|
+
require 'set'
|
5
|
+
|
6
|
+
module Sqreen
|
7
|
+
class BindingAccessor
|
8
|
+
# Available final transformations
|
9
|
+
module Transforms
|
10
|
+
def flat_keys(value, max_iter = 1000)
|
11
|
+
return nil if value.nil?
|
12
|
+
seen = Set.new
|
13
|
+
look_into = [value]
|
14
|
+
keys = []
|
15
|
+
idx = 0
|
16
|
+
until look_into.empty? || max_iter <= idx
|
17
|
+
idx += 1
|
18
|
+
val = look_into.pop
|
19
|
+
next unless seen.add?(val.object_id)
|
20
|
+
case val
|
21
|
+
when Hash
|
22
|
+
keys.concat(val.keys)
|
23
|
+
look_into.concat(val.values)
|
24
|
+
when Array
|
25
|
+
look_into.concat(val)
|
26
|
+
else
|
27
|
+
next if val.respond_to?(:seek)
|
28
|
+
val.each { |v| look_into << v } if val.respond_to?(:each)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
keys
|
32
|
+
end
|
33
|
+
|
34
|
+
def flat_values(value, max_iter = 1000)
|
35
|
+
return nil if value.nil?
|
36
|
+
seen = Set.new
|
37
|
+
look_into = [value]
|
38
|
+
values = []
|
39
|
+
idx = 0
|
40
|
+
until look_into.empty? || max_iter <= idx
|
41
|
+
idx += 1
|
42
|
+
val = look_into.shift
|
43
|
+
next unless seen.add?(val.object_id)
|
44
|
+
case val
|
45
|
+
when Hash
|
46
|
+
look_into.concat(val.values)
|
47
|
+
when Array
|
48
|
+
look_into.concat(val)
|
49
|
+
else
|
50
|
+
next if val.respond_to?(:seek)
|
51
|
+
if val.respond_to?(:each)
|
52
|
+
val.each { |v| look_into << v }
|
53
|
+
else
|
54
|
+
values << val
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
values
|
59
|
+
end
|
60
|
+
|
61
|
+
def concat_keys_and_values(value, max_size = nil)
|
62
|
+
return nil if value.nil?
|
63
|
+
values = Set.new
|
64
|
+
max_size = max_size.to_i if max_size
|
65
|
+
res = ''
|
66
|
+
descend(value) do |x|
|
67
|
+
next unless values.add?(x)
|
68
|
+
x = x.to_s
|
69
|
+
return res if max_size && res.size + x.size + 1 > max_size
|
70
|
+
res << "\n" unless res.empty?
|
71
|
+
res << x
|
72
|
+
end
|
73
|
+
res
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def descend(value, max_iter = 1000)
|
79
|
+
seen = Set.new
|
80
|
+
look_into = [value]
|
81
|
+
idx = 0
|
82
|
+
until look_into.empty? || max_iter <= idx
|
83
|
+
idx += 1
|
84
|
+
val = look_into.pop
|
85
|
+
|
86
|
+
case val
|
87
|
+
when Hash
|
88
|
+
next unless seen.add?(val.object_id)
|
89
|
+
look_into.concat(val.keys)
|
90
|
+
look_into.concat(val.values)
|
91
|
+
when Array
|
92
|
+
next unless seen.add?(val.object_id)
|
93
|
+
look_into.concat(val)
|
94
|
+
else
|
95
|
+
next if val.respond_to?(:seek)
|
96
|
+
if val.respond_to?(:each)
|
97
|
+
next unless seen.add?(val.object_id)
|
98
|
+
val.each { |v| look_into << v }
|
99
|
+
else
|
100
|
+
yield val
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
data/lib/sqreen/capped_queue.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
2
2
|
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
3
3
|
|
4
|
-
require '
|
5
|
-
require 'sqreen/shared_storage'
|
4
|
+
require 'sqreen/exception'
|
6
5
|
require 'sqreen/log'
|
7
6
|
|
8
7
|
module Sqreen
|
9
|
-
|
10
8
|
class CB
|
11
9
|
# Callback class.
|
12
10
|
#
|
@@ -87,54 +85,4 @@ module Sqreen
|
|
87
85
|
nil
|
88
86
|
end
|
89
87
|
end
|
90
|
-
# target_method, position, callback, callback class
|
91
|
-
|
92
|
-
class DefaultCB < CB
|
93
|
-
def pre(_inst, args, _budget = nil, &_block)
|
94
|
-
Sqreen.log.debug "<< #{@klass} #{@method} #{Thread.current}"
|
95
|
-
Sqreen.log.debug args.join ' '
|
96
|
-
# log params
|
97
|
-
end
|
98
|
-
|
99
|
-
def post(_rv, _inst, _args, _budget = nil, &_block)
|
100
|
-
# log "#{rv}"
|
101
|
-
Sqreen.log.debug ">> #{@klass} #{@method} #{Thread.current}"
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
class RunWhenCalledCB < CB
|
106
|
-
def initialize(klass, method, &block)
|
107
|
-
super(klass, method)
|
108
|
-
|
109
|
-
raise 'missing block' unless block_given?
|
110
|
-
@block = block
|
111
|
-
end
|
112
|
-
|
113
|
-
def pre(_inst, _args, _budget = nil, &_block)
|
114
|
-
# FIXME: implement this removal
|
115
|
-
@remove_me = true
|
116
|
-
@block.call
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
# Framework-aware callback
|
121
|
-
class FrameworkCB < CB
|
122
|
-
attr_accessor :framework
|
123
|
-
|
124
|
-
def whitelisted?
|
125
|
-
whitelisted = SharedStorage.get(:whitelisted)
|
126
|
-
return whitelisted unless whitelisted.nil?
|
127
|
-
framework && !framework.whitelisted_match.nil?
|
128
|
-
end
|
129
|
-
|
130
|
-
# Record a metric observation
|
131
|
-
# @param category [String] Name of the metric observed
|
132
|
-
# @param key [String] aggregation key
|
133
|
-
# @param observation [Object] data observed
|
134
|
-
# @param at [Time] time when observation was made
|
135
|
-
def record_observation(category, key, observation, at = Time.now.utc)
|
136
|
-
return unless framework
|
137
|
-
framework.observe(:observations, [category, key, observation, at], [], false)
|
138
|
-
end
|
139
|
-
end
|
140
88
|
end
|
@@ -31,7 +31,7 @@ module Sqreen
|
|
31
31
|
methods[1] ||= []
|
32
32
|
add_to_array(methods[1], cb)
|
33
33
|
end
|
34
|
-
if cb.failing?
|
34
|
+
if cb.failing? # rubocop:disable Style/GuardClause
|
35
35
|
methods[2] ||= []
|
36
36
|
add_to_array(methods[2], cb)
|
37
37
|
end
|
@@ -50,7 +50,7 @@ module Sqreen
|
|
50
50
|
types[1].delete(cb)
|
51
51
|
types[1] = nil if types[1].empty?
|
52
52
|
end
|
53
|
-
if cb.failing? && types[2]
|
53
|
+
if cb.failing? && types[2] # rubocop:disable Style/GuardClause
|
54
54
|
types[2].delete(cb)
|
55
55
|
types[2] = nil if types[2].empty?
|
56
56
|
end
|
@@ -179,7 +179,7 @@ module Sqreen
|
|
179
179
|
return true if exp.empty?
|
180
180
|
raise(Sqreen::Exception, 'too deep call detected') if rem <= 0
|
181
181
|
exp.all? do |op, values|
|
182
|
-
|
182
|
+
val_to_res = lambda do |v|
|
183
183
|
case v
|
184
184
|
when Hash
|
185
185
|
evaluate_expr(v, rem - 1, *args)
|
@@ -191,27 +191,42 @@ module Sqreen
|
|
191
191
|
end
|
192
192
|
|
193
193
|
arity = OPERATORS_ARITY[op]
|
194
|
-
if !arity.nil? &&
|
195
|
-
raise(Sqreen::Exception, "bad
|
194
|
+
if !arity.nil? && values.size != arity
|
195
|
+
raise(Sqreen::Exception, "bad arg count #{values.inspect} (op #{op} wanted #{arity})")
|
196
196
|
end
|
197
197
|
bool = case op
|
198
198
|
when OR_OPERATOR
|
199
|
-
|
199
|
+
values.reduce(false) do |_, v|
|
200
|
+
r = val_to_res.call(v)
|
201
|
+
break r if r
|
202
|
+
r
|
203
|
+
end
|
200
204
|
when AND_OPERATOR
|
201
|
-
|
205
|
+
values.reduce(true) do |_, v|
|
206
|
+
r = val_to_res.call(v)
|
207
|
+
break r unless r
|
208
|
+
r
|
209
|
+
end
|
202
210
|
when EQ_OPERATOR
|
211
|
+
res = values.map(&val_to_res)
|
203
212
|
res[0] == res[1]
|
204
213
|
when NEQ_OPERATOR
|
214
|
+
res = values.map(&val_to_res)
|
205
215
|
res[0] != res[1]
|
206
216
|
when GT_OPERATOR
|
217
|
+
res = values.map(&val_to_res)
|
207
218
|
res[0] > res[1]
|
208
219
|
when GTE_OPERATOR
|
220
|
+
res = values.map(&val_to_res)
|
209
221
|
res[0] >= res[1]
|
210
222
|
when LT_OPERATOR
|
223
|
+
res = values.map(&val_to_res)
|
211
224
|
res[0] < res[1]
|
212
225
|
when LTE_OPERATOR
|
226
|
+
res = values.map(&val_to_res)
|
213
227
|
res[0] <= res[1]
|
214
228
|
when INC_OPERATOR
|
229
|
+
res = values.map(&val_to_res)
|
215
230
|
unless res[0].respond_to?(:include?)
|
216
231
|
raise(Sqreen::Exception, "no include on res #{res[0].inspect}")
|
217
232
|
end
|
@@ -221,8 +236,10 @@ module Sqreen
|
|
221
236
|
res[0].include?(res[1])
|
222
237
|
end
|
223
238
|
when HASH_INC_OPERATOR
|
239
|
+
res = values.map(&val_to_res)
|
224
240
|
ConditionEvaluator.hash_val_include?(res[0], res[1], res[2])
|
225
241
|
when HASH_KEY_OPERATOR
|
242
|
+
res = values.map(&val_to_res)
|
226
243
|
ConditionEvaluator.hash_key_include?(res[0], res[1], res[2])
|
227
244
|
else
|
228
245
|
# FIXME: this should be check in compile
|
data/lib/sqreen/configuration.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
2
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
3
|
+
|
4
|
+
require 'sqreen/cb'
|
5
|
+
require 'sqreen/log'
|
6
|
+
|
7
|
+
module Sqreen
|
8
|
+
class DefaultCB < CB
|
9
|
+
def pre(_inst, args, _budget = nil, &_block)
|
10
|
+
Sqreen.log.debug "<< #{@klass} #{@method} #{Thread.current}"
|
11
|
+
Sqreen.log.debug args.join ' '
|
12
|
+
# log params
|
13
|
+
end
|
14
|
+
|
15
|
+
def post(_rv, _inst, _args, _budget = nil, &_block)
|
16
|
+
# log "#{rv}"
|
17
|
+
Sqreen.log.debug ">> #{@klass} #{@method} #{Thread.current}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
2
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
3
|
+
|
4
|
+
require 'singleton'
|
5
|
+
require 'logger'
|
6
|
+
require 'sqreen/logger'
|
7
|
+
|
8
|
+
module Sqreen
|
9
|
+
class DeferredLogger
|
10
|
+
include Singleton
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@buffer = StringIO.new
|
14
|
+
@logger = ::Logger.new(@buffer)
|
15
|
+
end
|
16
|
+
|
17
|
+
def debug(msg = nil, &block)
|
18
|
+
@logger.debug(msg, &block)
|
19
|
+
end
|
20
|
+
|
21
|
+
def info(msg = nil, &block)
|
22
|
+
@logger.info(msg, &block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def warn(msg = nil, &block)
|
26
|
+
@logger.warn(msg, &block)
|
27
|
+
end
|
28
|
+
|
29
|
+
def error(msg = nil, &block)
|
30
|
+
@logger.error(msg, &block)
|
31
|
+
end
|
32
|
+
|
33
|
+
def fatal(msg = nil, &block)
|
34
|
+
@logger.error(msg, &block)
|
35
|
+
end
|
36
|
+
|
37
|
+
def add(severity, msg = nil, &block)
|
38
|
+
send(Sqreen::Logger::SEVERITY_TO_METHOD[severity], msg, &block)
|
39
|
+
end
|
40
|
+
|
41
|
+
def formatter=(value)
|
42
|
+
@logger.formatter = value
|
43
|
+
end
|
44
|
+
|
45
|
+
def flush_to(logger)
|
46
|
+
logger.instance_eval { @logdev }.write(read).tap { reset }
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def read
|
52
|
+
@buffer.rewind
|
53
|
+
@buffer.read
|
54
|
+
end
|
55
|
+
|
56
|
+
def reset
|
57
|
+
buffer = StringIO.new
|
58
|
+
logger = ::Logger.new(buffer)
|
59
|
+
logger.formatter = @logger.formatter
|
60
|
+
@buffer, @logger = buffer, logger
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
2
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
3
|
+
|
4
|
+
require 'sqreen/deliveries/simple'
|
5
|
+
require 'sqreen/deliveries/batch'
|
6
|
+
|
7
|
+
module Sqreen
|
8
|
+
module Deliveries
|
9
|
+
end
|
10
|
+
end
|
@@ -1,9 +1,15 @@
|
|
1
1
|
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
2
2
|
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
3
3
|
|
4
|
-
|
4
|
+
# TODO: Sqreen::Attack => sqreen/events
|
5
|
+
# TODO: Sqreen::RemoteException => sqreen/events
|
6
|
+
# TODO: Sqreen::RequestRecord => sqreen/events
|
7
|
+
# TODO: Sqreen.time
|
8
|
+
|
9
|
+
require 'sqreen/events/attack'
|
5
10
|
require 'sqreen/events/remote_exception'
|
6
11
|
require 'sqreen/mono_time'
|
12
|
+
require 'sqreen/deliveries/simple'
|
7
13
|
|
8
14
|
module Sqreen
|
9
15
|
module Deliveries
|
@@ -1,6 +1,11 @@
|
|
1
1
|
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
2
2
|
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
3
3
|
|
4
|
+
# TODO: Sqreen::Attack => sqreen/events
|
5
|
+
# TODO: Sqreen::RemoteException => sqreen/events
|
6
|
+
# TODO: Sqreen::RequestRecord => sqreen/events
|
7
|
+
|
8
|
+
require 'sqreen/events/attack'
|
4
9
|
require 'sqreen/events/remote_exception'
|
5
10
|
require 'sqreen/events/request_record'
|
6
11
|
|
@@ -1,6 +1,10 @@
|
|
1
1
|
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
2
2
|
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
3
3
|
|
4
|
+
require 'sqreen/middleware'
|
5
|
+
require 'sqreen/error_handling_middleware'
|
6
|
+
require 'sqreen/rails_middleware'
|
7
|
+
|
4
8
|
module Sqreen
|
5
9
|
module Dependency
|
6
10
|
module Rails
|
@@ -1,6 +1,10 @@
|
|
1
1
|
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
2
2
|
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
3
3
|
|
4
|
+
require 'sqreen/middleware'
|
5
|
+
require 'sqreen/error_handling_middleware'
|
6
|
+
require 'sqreen/sinatra_middleware'
|
7
|
+
|
4
8
|
module Sqreen
|
5
9
|
module Dependency
|
6
10
|
module Sinatra
|