sqreen 1.18.2-java → 1.19.0-java
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 +35 -0
- data/LICENSE +3 -0
- data/lib/sqreen.rb +2 -0
- data/lib/sqreen/actions.rb +13 -337
- data/lib/sqreen/actions/actions_index.rb +16 -0
- data/lib/sqreen/actions/base.rb +104 -0
- data/lib/sqreen/actions/block_ip.rb +34 -0
- data/lib/sqreen/actions/block_user.rb +46 -0
- data/lib/sqreen/actions/ip_range_indexed_action_class.rb +16 -0
- data/lib/sqreen/actions/ip_ranges_index.rb +57 -0
- data/lib/sqreen/actions/redirect_ip.rb +42 -0
- data/lib/sqreen/actions/redirect_user.rb +47 -0
- data/lib/sqreen/actions/repository.rb +43 -0
- data/lib/sqreen/actions/unknown_action_type.rb +20 -0
- data/lib/sqreen/actions/user_action_class.rb +16 -0
- data/lib/sqreen/actions/users_index.rb +35 -0
- data/lib/sqreen/agent.rb +6 -2
- data/lib/sqreen/attack_blocked.rb +19 -0
- data/lib/sqreen/backport.rb +2 -0
- data/lib/sqreen/backport/clock_gettime.rb +74 -0
- data/lib/sqreen/backport/original_name.rb +2 -0
- data/lib/sqreen/binding_accessor.rb +11 -102
- data/lib/sqreen/binding_accessor/path_elem.rb +10 -0
- data/lib/sqreen/binding_accessor/transforms.rb +114 -0
- data/lib/sqreen/call_countable.rb +2 -0
- data/lib/sqreen/capped_queue.rb +4 -0
- data/lib/sqreen/{callbacks.rb → cb.rb} +3 -53
- data/lib/sqreen/{callback_tree.rb → cb_tree.rb} +4 -2
- data/lib/sqreen/condition_evaluator.rb +24 -5
- data/lib/sqreen/conditionable.rb +2 -0
- data/lib/sqreen/configuration.rb +19 -0
- data/lib/sqreen/context.rb +2 -0
- data/lib/sqreen/default_cb.rb +22 -0
- data/lib/sqreen/deferred_logger.rb +65 -0
- data/lib/sqreen/deliveries.rb +12 -0
- data/lib/sqreen/deliveries/batch.rb +9 -1
- data/lib/sqreen/deliveries/simple.rb +7 -0
- data/lib/sqreen/dependency.rb +3 -1
- data/lib/sqreen/dependency/detector.rb +22 -14
- data/lib/sqreen/dependency/libsqreen.rb +32 -0
- data/lib/sqreen/dependency/new_relic.rb +2 -0
- data/lib/sqreen/dependency/rack.rb +10 -5
- data/lib/sqreen/dependency/rails.rb +8 -0
- data/lib/sqreen/dependency/sentry.rb +2 -0
- data/lib/sqreen/dependency/sinatra.rb +58 -14
- data/lib/sqreen/encoding_sanitizer.rb +2 -0
- data/lib/sqreen/error_handling_middleware.rb +32 -0
- data/lib/sqreen/event.rb +4 -0
- data/lib/sqreen/events/attack.rb +4 -0
- data/lib/sqreen/events/remote_exception.rb +2 -0
- data/lib/sqreen/events/request_record.rb +13 -56
- data/lib/sqreen/exception.rb +11 -40
- data/lib/sqreen/formatter_with_tid.rb +47 -0
- data/lib/sqreen/framework_cb.rb +30 -0
- data/lib/sqreen/frameworks.rb +9 -0
- data/lib/sqreen/frameworks/generic.rb +22 -2
- data/lib/sqreen/frameworks/rails.rb +3 -0
- data/lib/sqreen/frameworks/rails3.rb +2 -0
- data/lib/sqreen/frameworks/request_recorder.rb +5 -0
- data/lib/sqreen/frameworks/sinatra.rb +4 -0
- data/lib/sqreen/frameworks/sqreen_test.rb +4 -0
- data/lib/sqreen/graft.rb +12 -0
- data/lib/sqreen/graft/call.rb +150 -0
- data/lib/sqreen/{dependency → graft}/callback.rb +12 -4
- data/lib/sqreen/graft/hook.rb +316 -0
- data/lib/sqreen/{dependency → graft}/hook_point.rb +152 -33
- data/lib/sqreen/graft/hook_point_error.rb +10 -0
- data/lib/sqreen/invalid_signature_exception.rb +10 -0
- data/lib/sqreen/js.rb +11 -0
- data/lib/sqreen/js/call_context.rb +12 -0
- data/lib/sqreen/js/context_pool.rb +62 -0
- data/lib/sqreen/js/exec_js_runnable.rb +22 -0
- data/lib/sqreen/js/execjs_adapter.rb +8 -47
- data/lib/sqreen/js/executable_js.rb +14 -0
- data/lib/sqreen/js/js_service.rb +4 -22
- data/lib/sqreen/js/js_service_adapter.rb +20 -0
- data/lib/sqreen/js/mini_racer_adapter.rb +8 -180
- data/lib/sqreen/js/mini_racer_executable_js.rb +144 -0
- data/lib/sqreen/js/thread_local_exec_js_runnable.rb +49 -0
- data/lib/{sqreen-alt.rb → sqreen/legacy.rb} +5 -1
- data/lib/sqreen/{instrumentation.rb → legacy/instrumentation.rb} +44 -15
- data/lib/sqreen/log.rb +10 -188
- data/lib/sqreen/log/loggable.rb +28 -0
- data/lib/sqreen/logger.rb +85 -0
- data/lib/sqreen/metrics.rb +2 -0
- data/lib/sqreen/metrics/average.rb +2 -0
- data/lib/sqreen/metrics/base.rb +2 -0
- data/lib/sqreen/metrics/binning.rb +2 -0
- data/lib/sqreen/metrics/collect.rb +2 -0
- data/lib/sqreen/metrics/sum.rb +2 -0
- data/lib/sqreen/metrics_store.rb +5 -11
- data/lib/sqreen/metrics_store/already_registered_metric.rb +13 -0
- data/lib/sqreen/metrics_store/unknown_metric.rb +13 -0
- data/lib/sqreen/metrics_store/unregistered_metric.rb +13 -0
- data/lib/sqreen/middleware.rb +2 -34
- data/lib/sqreen/mono_time.rb +4 -0
- data/lib/sqreen/node.rb +46 -0
- data/lib/sqreen/not_implemented_yet.rb +10 -0
- data/lib/sqreen/null_logger.rb +26 -0
- data/lib/sqreen/payload_creator.rb +4 -19
- data/lib/sqreen/payload_creator/header_section.rb +30 -0
- data/lib/sqreen/performance_notifications.rb +2 -0
- data/lib/sqreen/performance_notifications/binned_metrics.rb +2 -0
- data/lib/sqreen/performance_notifications/log.rb +2 -0
- data/lib/sqreen/performance_notifications/log_performance.rb +2 -0
- data/lib/sqreen/performance_notifications/metrics.rb +2 -0
- data/lib/sqreen/performance_notifications/newrelic.rb +2 -0
- data/lib/sqreen/prefix.rb +35 -0
- data/lib/sqreen/rails_middleware.rb +16 -0
- data/lib/sqreen/remote_command.rb +3 -8
- data/lib/sqreen/remote_command/failure_output.rb +16 -0
- data/lib/sqreen/rules.rb +34 -2
- data/lib/sqreen/{rule_attributes.rb → rules/attrs.rb} +2 -0
- data/lib/sqreen/{rules_callbacks/sdk_auth_track.rb → rules/auth_track_cb.rb} +4 -2
- data/lib/sqreen/{rules_callbacks/binding_accessor_matcher.rb → rules/binding_accessor_matcher_cb.rb} +6 -8
- data/lib/sqreen/{rules_callbacks → rules}/binding_accessor_metrics.rb +3 -1
- data/lib/sqreen/{rules_callbacks/blacklist_ips.rb → rules/blacklist_ips_cb.rb} +5 -2
- data/lib/sqreen/{rules_callbacks → rules}/count_http_codes.rb +4 -2
- data/lib/sqreen/{rules_callbacks/crawler_user_agent_matches.rb → rules/crawler_user_agent_matches_cb.rb} +3 -1
- data/lib/sqreen/{rules_callbacks/crawler_user_agent_matches_metrics.rb → rules/crawler_user_agent_matches_metrics_cb.rb} +3 -1
- data/lib/sqreen/{rules_callbacks/custom_error.rb → rules/custom_error_cb.rb} +3 -1
- data/lib/sqreen/{rules_callbacks/devise_auth_track.rb → rules/devise_auth_track_cb.rb} +4 -2
- data/lib/sqreen/{rules_callbacks/devise_signup_track.rb → rules/devise_signup_track_cb.rb} +4 -2
- data/lib/sqreen/{rules_callbacks/execjs.rb → rules/execjs_cb.rb} +51 -50
- data/lib/sqreen/{rules_callbacks/headers_insert.rb → rules/headers_insert_cb.rb} +8 -1
- data/lib/sqreen/{rules_callbacks → rules}/matcher_rule.rb +4 -2
- data/lib/sqreen/{rules_callbacks/not_found.rb → rules/not_found_cb.rb} +7 -2
- data/lib/sqreen/{rules_callbacks/rails_parameters.rb → rules/rails_parameters_cb.rb} +3 -1
- data/lib/sqreen/{rules_callbacks → rules}/record_request_context.rb +3 -1
- data/lib/sqreen/{rules_callbacks/regexp_rule.rb → rules/regexp_rule_cb.rb} +3 -1
- data/lib/sqreen/{rule_callback.rb → rules/rule_cb.rb} +4 -2
- data/lib/sqreen/{rules_callbacks → rules}/run_req_start_actions.rb +7 -3
- data/lib/sqreen/{rules_callbacks → rules}/run_user_actions.rb +4 -2
- data/lib/sqreen/{rules_callbacks/shell_env.rb → rules/shell_env_cb.rb} +3 -1
- data/lib/sqreen/{rules_callbacks/sdk_signup_track.rb → rules/signup_track_cb.rb} +4 -2
- data/lib/sqreen/rules/update_request_context.rb +22 -0
- data/lib/sqreen/{rules_callbacks/url_matches.rb → rules/url_matches_cb.rb} +3 -1
- data/lib/sqreen/{rules_callbacks/user_agent_matches.rb → rules/user_agent_matches_cb.rb} +3 -1
- data/lib/sqreen/{rules_callbacks/waf.rb → rules/waf_cb.rb} +41 -21
- data/lib/sqreen/{rules_callbacks/reflected_xss.rb → rules/xss_cb.rb} +12 -7
- data/lib/sqreen/run_when_called_cb.rb +23 -0
- data/lib/sqreen/runner.rb +25 -7
- data/lib/sqreen/runtime_infos.rb +4 -9
- data/lib/sqreen/safe_json.rb +2 -0
- data/lib/sqreen/sdk.rb +4 -0
- data/lib/sqreen/sensitive_data_redactor.rb +113 -0
- data/lib/sqreen/serializer.rb +2 -0
- data/lib/sqreen/session.rb +2 -0
- data/lib/sqreen/shared_storage.rb +2 -0
- data/lib/sqreen/shared_storage23.rb +2 -0
- data/lib/sqreen/shrink_wrap.rb +16 -0
- data/lib/sqreen/signature_verifier.rb +22 -0
- data/lib/sqreen/sinatra_middleware.rb +16 -0
- data/lib/sqreen/{rules_signature.rb → sqreen_signed_verifier.rb} +7 -17
- data/lib/sqreen/token_invalid_exception.rb +10 -0
- data/lib/sqreen/token_not_found_exception.rb +11 -0
- data/lib/sqreen/trie.rb +5 -64
- data/lib/sqreen/unauthorized.rb +10 -0
- data/lib/sqreen/util.rb +7 -0
- data/lib/sqreen/util/capped_array.rb +35 -0
- data/lib/sqreen/util/capped_hash.rb +41 -0
- data/lib/sqreen/util/capped_string.rb +26 -0
- data/lib/sqreen/util/capper.rb +67 -0
- data/lib/sqreen/version.rb +3 -1
- data/lib/sqreen/waf_error.rb +20 -0
- data/lib/sqreen/weave.rb +12 -0
- data/lib/sqreen/weave/hardcoded.rb +19 -0
- data/lib/sqreen/weave/instrumentor.rb +48 -0
- data/lib/sqreen/weave/legacy.rb +12 -0
- data/lib/sqreen/weave/legacy/instrumentation.rb +406 -0
- data/lib/sqreen/web_server.rb +2 -0
- data/lib/sqreen/web_server/generic.rb +2 -0
- data/lib/sqreen/web_server/passenger.rb +2 -0
- data/lib/sqreen/web_server/puma.rb +2 -0
- data/lib/sqreen/web_server/rainbows.rb +2 -0
- data/lib/sqreen/web_server/thin.rb +2 -0
- data/lib/sqreen/web_server/unicorn.rb +2 -0
- data/lib/sqreen/web_server/webrick.rb +2 -0
- data/lib/sqreen/worker.rb +2 -0
- metadata +105 -39
- data/lib/sqreen/dependency/hook.rb +0 -102
- data/lib/sqreen/rules_callbacks.rb +0 -35
- data/lib/sqreen/rules_callbacks/inspect_rule.rb +0 -25
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
require 'logger'
|
|
7
|
+
|
|
8
|
+
module Sqreen; end
|
|
9
|
+
module Sqreen::Log; end
|
|
10
|
+
|
|
11
|
+
module Sqreen::Log::Loggable
|
|
12
|
+
def self.included(klass)
|
|
13
|
+
klass.extend(ClassMethods)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
module ClassMethods
|
|
17
|
+
def logger
|
|
18
|
+
# TODO: use progname for qualified log messages
|
|
19
|
+
# TODO: qualified logger proxies for selectable levels per component
|
|
20
|
+
# @logger ||= ::Logger.new(STDOUT, progname: name, level: Logger::DEBUG)
|
|
21
|
+
Sqreen.log
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def logger
|
|
26
|
+
@logger || self.class.logger
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
require 'logger'
|
|
7
|
+
require 'sqreen/log'
|
|
8
|
+
require 'sqreen/formatter_with_tid'
|
|
9
|
+
require 'sqreen/null_logger'
|
|
10
|
+
|
|
11
|
+
# TODO: inherit from ::Logger
|
|
12
|
+
|
|
13
|
+
module Sqreen
|
|
14
|
+
# Wrapper class for sqreen logging
|
|
15
|
+
class Logger
|
|
16
|
+
SEVERITY_TO_METHOD = ::Logger::Severity.constants.each_with_object({}) do |s, h|
|
|
17
|
+
h[::Logger::Severity.const_get(s)] = s.downcase
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def initialize(desired_level, log_location, force_logger = nil)
|
|
21
|
+
if force_logger
|
|
22
|
+
@logger = force_logger
|
|
23
|
+
else
|
|
24
|
+
init_logger_output(log_location)
|
|
25
|
+
end
|
|
26
|
+
init_log_level(desired_level)
|
|
27
|
+
enforce_log_format(@logger)
|
|
28
|
+
create_error_logger
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def debug(msg = nil, &block)
|
|
32
|
+
@logger.debug(msg, &block)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def info(msg = nil, &block)
|
|
36
|
+
@logger.info(msg, &block)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def warn(msg = nil, &block)
|
|
40
|
+
@logger.warn(msg, &block)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def error(msg = nil, &block)
|
|
44
|
+
@error_logger.error(msg, &block)
|
|
45
|
+
@logger.error(msg, &block)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def add(severity, msg = nil, &block)
|
|
49
|
+
send(SEVERITY_TO_METHOD[severity], msg, &block)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
protected
|
|
53
|
+
|
|
54
|
+
def init_logger_output(path)
|
|
55
|
+
path = File.expand_path(path)
|
|
56
|
+
if File.writable?(path) || File.writable?(File.dirname(path))
|
|
57
|
+
@logger = ::Logger.new(path)
|
|
58
|
+
else
|
|
59
|
+
@logger = ::Logger.new(STDOUT)
|
|
60
|
+
@logger.info("Cannot access #{path} for writing. Defaulting to stdout")
|
|
61
|
+
end
|
|
62
|
+
rescue StandardError => e
|
|
63
|
+
@logger = ::Logger.new(STDOUT)
|
|
64
|
+
@logger.error('Got error while trying to setting logger up, '\
|
|
65
|
+
"falling back to stdout #{e.inspect}")
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def init_log_level(level)
|
|
69
|
+
log_level = ::Logger.const_get(level)
|
|
70
|
+
@logger.level = log_level
|
|
71
|
+
Sqreen::PerformanceNotifications::Log.enable if level == 'DEBUG'
|
|
72
|
+
return if level != 'DEBUG' && !Sqreen.config_get(:report_perf)
|
|
73
|
+
Sqreen::PerformanceNotifications::LogPerformance.enable
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def create_error_logger
|
|
77
|
+
@error_logger = Kernel.const_defined?('MiniTest') ? NullLogger.instance : ::Logger.new(STDERR)
|
|
78
|
+
enforce_log_format(@error_logger)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def enforce_log_format(logger)
|
|
82
|
+
logger.formatter = Sqreen::FormatterWithTid.new
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
data/lib/sqreen/metrics.rb
CHANGED
data/lib/sqreen/metrics/base.rb
CHANGED
data/lib/sqreen/metrics/sum.rb
CHANGED
data/lib/sqreen/metrics_store.rb
CHANGED
|
@@ -1,23 +1,17 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
|
|
1
3
|
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
2
4
|
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
3
5
|
|
|
4
|
-
require 'sqreen/exception'
|
|
5
6
|
require 'sqreen/metrics'
|
|
6
7
|
require 'sqreen/mono_time'
|
|
8
|
+
require 'sqreen/metrics_store/unknown_metric'
|
|
9
|
+
require 'sqreen/metrics_store/unregistered_metric'
|
|
10
|
+
require 'sqreen/metrics_store/already_registered_metric'
|
|
7
11
|
|
|
8
12
|
module Sqreen
|
|
9
13
|
# This store and register metrics
|
|
10
14
|
class MetricsStore
|
|
11
|
-
# When a metric is not yet created
|
|
12
|
-
class UnregisteredMetric < Sqreen::Exception
|
|
13
|
-
end
|
|
14
|
-
# When the metric is unknown
|
|
15
|
-
class UnknownMetric < Sqreen::Exception
|
|
16
|
-
end
|
|
17
|
-
# When this name as already been declared with another kind
|
|
18
|
-
class AlreadyRegisteredMetric < Sqreen::Exception
|
|
19
|
-
end
|
|
20
|
-
|
|
21
15
|
# definition keys
|
|
22
16
|
NAME_KEY = 'name'.freeze
|
|
23
17
|
KIND_KEY = 'kind'.freeze
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
require 'sqreen/exception'
|
|
7
|
+
|
|
8
|
+
module Sqreen
|
|
9
|
+
class MetricsStore
|
|
10
|
+
class AlreadyRegisteredMetric < Sqreen::Exception
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
require 'sqreen/exception'
|
|
7
|
+
|
|
8
|
+
module Sqreen
|
|
9
|
+
class MetricsStore
|
|
10
|
+
class UnknownMetric < Sqreen::Exception
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
require 'sqreen/exception'
|
|
7
|
+
|
|
8
|
+
module Sqreen
|
|
9
|
+
class MetricsStore
|
|
10
|
+
class UnregisteredMetric < Sqreen::Exception
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
data/lib/sqreen/middleware.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
|
|
1
3
|
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
2
4
|
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
3
5
|
|
|
@@ -11,38 +13,4 @@ module Sqreen
|
|
|
11
13
|
@app.call(env)
|
|
12
14
|
end
|
|
13
15
|
end
|
|
14
|
-
|
|
15
|
-
class ErrorHandlingMiddleware
|
|
16
|
-
def initialize(app)
|
|
17
|
-
@app = app
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def call(env)
|
|
21
|
-
@app.call(env)
|
|
22
|
-
rescue => e
|
|
23
|
-
sqreen_attack = nil
|
|
24
|
-
if e.is_a?(Sqreen::AttackBlocked)
|
|
25
|
-
sqreen_attack = e
|
|
26
|
-
elsif e.respond_to?(:original_exception) &&
|
|
27
|
-
e.original_exception.is_a?(Sqreen::AttackBlocked)
|
|
28
|
-
sqreen_attack = e.original_exception
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
if sqreen_attack && sqreen_attack.redirect_url
|
|
32
|
-
return [303, { 'Location' => sqreen_attack.redirect_url }, ['']]
|
|
33
|
-
else
|
|
34
|
-
raise
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
class RailsMiddleware
|
|
40
|
-
def initialize(app)
|
|
41
|
-
@app = app
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def call(env)
|
|
45
|
-
@app.call(env)
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
16
|
end
|
data/lib/sqreen/mono_time.rb
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
# typed: ignore
|
|
2
|
+
|
|
1
3
|
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
2
4
|
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
3
5
|
|
|
6
|
+
# TODO: move to Sqreen::Time
|
|
7
|
+
|
|
4
8
|
module Sqreen
|
|
5
9
|
has_mono_time = begin
|
|
6
10
|
Process.clock_gettime Process::CLOCK_MONOTONIC
|
data/lib/sqreen/node.rb
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
# TODO: move to Sqreen::IP::Trie
|
|
7
|
+
|
|
8
|
+
module Sqreen
|
|
9
|
+
# bit starts at 0 (most significant)
|
|
10
|
+
Node = Struct.new(:bit, :prefix, :l, :r, :parent) do
|
|
11
|
+
def initialize(*args)
|
|
12
|
+
super
|
|
13
|
+
raise ArgumentError, 'no bit given' if bit.nil?
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def empty?
|
|
17
|
+
prefix.nil?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# cover the whole tree
|
|
21
|
+
def walk(max_bits, empty_nodes = false)
|
|
22
|
+
xstack = Array.new(max_bits + 1)
|
|
23
|
+
sidx = 0 # stack index
|
|
24
|
+
xhead = self
|
|
25
|
+
xcur = xhead
|
|
26
|
+
until xcur.nil?
|
|
27
|
+
yield xcur unless xcur.empty? && !empty_nodes
|
|
28
|
+
|
|
29
|
+
if xcur.l
|
|
30
|
+
if xcur.r
|
|
31
|
+
xstack[sidx] = xcur.r
|
|
32
|
+
sidx += 1
|
|
33
|
+
end
|
|
34
|
+
xcur = xcur.l
|
|
35
|
+
elsif xcur.r
|
|
36
|
+
xcur = xcur.r
|
|
37
|
+
elsif sidx.nonzero?
|
|
38
|
+
sidx -= 1
|
|
39
|
+
xcur = xstack[sidx]
|
|
40
|
+
else
|
|
41
|
+
xcur = nil
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
require 'sqreen/exception'
|
|
7
|
+
|
|
8
|
+
module Sqreen
|
|
9
|
+
class NotImplementedYet < Sqreen::Exception; end
|
|
10
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
require 'singleton'
|
|
7
|
+
|
|
8
|
+
module Sqreen
|
|
9
|
+
class NullLogger
|
|
10
|
+
include Singleton
|
|
11
|
+
|
|
12
|
+
def debug(_msg = nil); end
|
|
13
|
+
|
|
14
|
+
def info(_msg = nil); end
|
|
15
|
+
|
|
16
|
+
def warn(_msg = nil); end
|
|
17
|
+
|
|
18
|
+
def error(_msg = nil); end
|
|
19
|
+
|
|
20
|
+
def fatal(_msg = nil); end
|
|
21
|
+
|
|
22
|
+
def add(_severity, _msg = nil); end
|
|
23
|
+
|
|
24
|
+
def formatter=(_); end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
# typed: ignore
|
|
2
|
+
|
|
1
3
|
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
2
4
|
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
3
5
|
|
|
4
6
|
require 'sqreen/runtime_infos'
|
|
5
7
|
require 'sqreen/events/remote_exception'
|
|
8
|
+
require 'sqreen/payload_creator/header_section'
|
|
6
9
|
|
|
7
10
|
module Sqreen
|
|
8
11
|
# Create a payload from a given query
|
|
@@ -116,26 +119,8 @@ module Sqreen
|
|
|
116
119
|
Sqreen::RemoteException.record(e)
|
|
117
120
|
end
|
|
118
121
|
|
|
119
|
-
# object that default to call on framework header
|
|
120
|
-
class HeaderSection
|
|
121
|
-
def initialize(framework)
|
|
122
|
-
@framework = framework
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
def [](value)
|
|
126
|
-
if %w[rack_client_ip rails_client_ip ip_headers].include?(value)
|
|
127
|
-
return @framework.send(value)
|
|
128
|
-
end
|
|
129
|
-
@framework.header(value)
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def ip_headers
|
|
133
|
-
@framework.ip_headers
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
|
|
137
122
|
def section_headers(framework)
|
|
138
|
-
HeaderSection.new(framework)
|
|
123
|
+
Sqreen::PayloadCreator::HeaderSection.new(framework)
|
|
139
124
|
end
|
|
140
125
|
end
|
|
141
126
|
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2015 Sqreen. All Rights Reserved.
|
|
4
|
+
# Please refer to our terms for more information: https://www.sqreen.com/terms.html
|
|
5
|
+
|
|
6
|
+
require 'sqreen/runtime_infos'
|
|
7
|
+
require 'sqreen/events/remote_exception'
|
|
8
|
+
require 'sqreen/payload_creator/header_section'
|
|
9
|
+
|
|
10
|
+
module Sqreen
|
|
11
|
+
class PayloadCreator
|
|
12
|
+
# object that default to call on framework header
|
|
13
|
+
class HeaderSection
|
|
14
|
+
def initialize(framework)
|
|
15
|
+
@framework = framework
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def [](value)
|
|
19
|
+
if %w[rack_client_ip rails_client_ip ip_headers].include?(value)
|
|
20
|
+
return @framework.send(value)
|
|
21
|
+
end
|
|
22
|
+
@framework.header(value)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def ip_headers
|
|
26
|
+
@framework.ip_headers
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|