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.
Files changed (184) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +35 -0
  3. data/LICENSE +3 -0
  4. data/lib/sqreen.rb +2 -0
  5. data/lib/sqreen/actions.rb +13 -337
  6. data/lib/sqreen/actions/actions_index.rb +16 -0
  7. data/lib/sqreen/actions/base.rb +104 -0
  8. data/lib/sqreen/actions/block_ip.rb +34 -0
  9. data/lib/sqreen/actions/block_user.rb +46 -0
  10. data/lib/sqreen/actions/ip_range_indexed_action_class.rb +16 -0
  11. data/lib/sqreen/actions/ip_ranges_index.rb +57 -0
  12. data/lib/sqreen/actions/redirect_ip.rb +42 -0
  13. data/lib/sqreen/actions/redirect_user.rb +47 -0
  14. data/lib/sqreen/actions/repository.rb +43 -0
  15. data/lib/sqreen/actions/unknown_action_type.rb +20 -0
  16. data/lib/sqreen/actions/user_action_class.rb +16 -0
  17. data/lib/sqreen/actions/users_index.rb +35 -0
  18. data/lib/sqreen/agent.rb +6 -2
  19. data/lib/sqreen/attack_blocked.rb +19 -0
  20. data/lib/sqreen/backport.rb +2 -0
  21. data/lib/sqreen/backport/clock_gettime.rb +74 -0
  22. data/lib/sqreen/backport/original_name.rb +2 -0
  23. data/lib/sqreen/binding_accessor.rb +11 -102
  24. data/lib/sqreen/binding_accessor/path_elem.rb +10 -0
  25. data/lib/sqreen/binding_accessor/transforms.rb +114 -0
  26. data/lib/sqreen/call_countable.rb +2 -0
  27. data/lib/sqreen/capped_queue.rb +4 -0
  28. data/lib/sqreen/{callbacks.rb → cb.rb} +3 -53
  29. data/lib/sqreen/{callback_tree.rb → cb_tree.rb} +4 -2
  30. data/lib/sqreen/condition_evaluator.rb +24 -5
  31. data/lib/sqreen/conditionable.rb +2 -0
  32. data/lib/sqreen/configuration.rb +19 -0
  33. data/lib/sqreen/context.rb +2 -0
  34. data/lib/sqreen/default_cb.rb +22 -0
  35. data/lib/sqreen/deferred_logger.rb +65 -0
  36. data/lib/sqreen/deliveries.rb +12 -0
  37. data/lib/sqreen/deliveries/batch.rb +9 -1
  38. data/lib/sqreen/deliveries/simple.rb +7 -0
  39. data/lib/sqreen/dependency.rb +3 -1
  40. data/lib/sqreen/dependency/detector.rb +22 -14
  41. data/lib/sqreen/dependency/libsqreen.rb +32 -0
  42. data/lib/sqreen/dependency/new_relic.rb +2 -0
  43. data/lib/sqreen/dependency/rack.rb +10 -5
  44. data/lib/sqreen/dependency/rails.rb +8 -0
  45. data/lib/sqreen/dependency/sentry.rb +2 -0
  46. data/lib/sqreen/dependency/sinatra.rb +58 -14
  47. data/lib/sqreen/encoding_sanitizer.rb +2 -0
  48. data/lib/sqreen/error_handling_middleware.rb +32 -0
  49. data/lib/sqreen/event.rb +4 -0
  50. data/lib/sqreen/events/attack.rb +4 -0
  51. data/lib/sqreen/events/remote_exception.rb +2 -0
  52. data/lib/sqreen/events/request_record.rb +13 -56
  53. data/lib/sqreen/exception.rb +11 -40
  54. data/lib/sqreen/formatter_with_tid.rb +47 -0
  55. data/lib/sqreen/framework_cb.rb +30 -0
  56. data/lib/sqreen/frameworks.rb +9 -0
  57. data/lib/sqreen/frameworks/generic.rb +22 -2
  58. data/lib/sqreen/frameworks/rails.rb +3 -0
  59. data/lib/sqreen/frameworks/rails3.rb +2 -0
  60. data/lib/sqreen/frameworks/request_recorder.rb +5 -0
  61. data/lib/sqreen/frameworks/sinatra.rb +4 -0
  62. data/lib/sqreen/frameworks/sqreen_test.rb +4 -0
  63. data/lib/sqreen/graft.rb +12 -0
  64. data/lib/sqreen/graft/call.rb +150 -0
  65. data/lib/sqreen/{dependency → graft}/callback.rb +12 -4
  66. data/lib/sqreen/graft/hook.rb +316 -0
  67. data/lib/sqreen/{dependency → graft}/hook_point.rb +152 -33
  68. data/lib/sqreen/graft/hook_point_error.rb +10 -0
  69. data/lib/sqreen/invalid_signature_exception.rb +10 -0
  70. data/lib/sqreen/js.rb +11 -0
  71. data/lib/sqreen/js/call_context.rb +12 -0
  72. data/lib/sqreen/js/context_pool.rb +62 -0
  73. data/lib/sqreen/js/exec_js_runnable.rb +22 -0
  74. data/lib/sqreen/js/execjs_adapter.rb +8 -47
  75. data/lib/sqreen/js/executable_js.rb +14 -0
  76. data/lib/sqreen/js/js_service.rb +4 -22
  77. data/lib/sqreen/js/js_service_adapter.rb +20 -0
  78. data/lib/sqreen/js/mini_racer_adapter.rb +8 -180
  79. data/lib/sqreen/js/mini_racer_executable_js.rb +144 -0
  80. data/lib/sqreen/js/thread_local_exec_js_runnable.rb +49 -0
  81. data/lib/{sqreen-alt.rb → sqreen/legacy.rb} +5 -1
  82. data/lib/sqreen/{instrumentation.rb → legacy/instrumentation.rb} +44 -15
  83. data/lib/sqreen/log.rb +10 -188
  84. data/lib/sqreen/log/loggable.rb +28 -0
  85. data/lib/sqreen/logger.rb +85 -0
  86. data/lib/sqreen/metrics.rb +2 -0
  87. data/lib/sqreen/metrics/average.rb +2 -0
  88. data/lib/sqreen/metrics/base.rb +2 -0
  89. data/lib/sqreen/metrics/binning.rb +2 -0
  90. data/lib/sqreen/metrics/collect.rb +2 -0
  91. data/lib/sqreen/metrics/sum.rb +2 -0
  92. data/lib/sqreen/metrics_store.rb +5 -11
  93. data/lib/sqreen/metrics_store/already_registered_metric.rb +13 -0
  94. data/lib/sqreen/metrics_store/unknown_metric.rb +13 -0
  95. data/lib/sqreen/metrics_store/unregistered_metric.rb +13 -0
  96. data/lib/sqreen/middleware.rb +2 -34
  97. data/lib/sqreen/mono_time.rb +4 -0
  98. data/lib/sqreen/node.rb +46 -0
  99. data/lib/sqreen/not_implemented_yet.rb +10 -0
  100. data/lib/sqreen/null_logger.rb +26 -0
  101. data/lib/sqreen/payload_creator.rb +4 -19
  102. data/lib/sqreen/payload_creator/header_section.rb +30 -0
  103. data/lib/sqreen/performance_notifications.rb +2 -0
  104. data/lib/sqreen/performance_notifications/binned_metrics.rb +2 -0
  105. data/lib/sqreen/performance_notifications/log.rb +2 -0
  106. data/lib/sqreen/performance_notifications/log_performance.rb +2 -0
  107. data/lib/sqreen/performance_notifications/metrics.rb +2 -0
  108. data/lib/sqreen/performance_notifications/newrelic.rb +2 -0
  109. data/lib/sqreen/prefix.rb +35 -0
  110. data/lib/sqreen/rails_middleware.rb +16 -0
  111. data/lib/sqreen/remote_command.rb +3 -8
  112. data/lib/sqreen/remote_command/failure_output.rb +16 -0
  113. data/lib/sqreen/rules.rb +34 -2
  114. data/lib/sqreen/{rule_attributes.rb → rules/attrs.rb} +2 -0
  115. data/lib/sqreen/{rules_callbacks/sdk_auth_track.rb → rules/auth_track_cb.rb} +4 -2
  116. data/lib/sqreen/{rules_callbacks/binding_accessor_matcher.rb → rules/binding_accessor_matcher_cb.rb} +6 -8
  117. data/lib/sqreen/{rules_callbacks → rules}/binding_accessor_metrics.rb +3 -1
  118. data/lib/sqreen/{rules_callbacks/blacklist_ips.rb → rules/blacklist_ips_cb.rb} +5 -2
  119. data/lib/sqreen/{rules_callbacks → rules}/count_http_codes.rb +4 -2
  120. data/lib/sqreen/{rules_callbacks/crawler_user_agent_matches.rb → rules/crawler_user_agent_matches_cb.rb} +3 -1
  121. data/lib/sqreen/{rules_callbacks/crawler_user_agent_matches_metrics.rb → rules/crawler_user_agent_matches_metrics_cb.rb} +3 -1
  122. data/lib/sqreen/{rules_callbacks/custom_error.rb → rules/custom_error_cb.rb} +3 -1
  123. data/lib/sqreen/{rules_callbacks/devise_auth_track.rb → rules/devise_auth_track_cb.rb} +4 -2
  124. data/lib/sqreen/{rules_callbacks/devise_signup_track.rb → rules/devise_signup_track_cb.rb} +4 -2
  125. data/lib/sqreen/{rules_callbacks/execjs.rb → rules/execjs_cb.rb} +51 -50
  126. data/lib/sqreen/{rules_callbacks/headers_insert.rb → rules/headers_insert_cb.rb} +8 -1
  127. data/lib/sqreen/{rules_callbacks → rules}/matcher_rule.rb +4 -2
  128. data/lib/sqreen/{rules_callbacks/not_found.rb → rules/not_found_cb.rb} +7 -2
  129. data/lib/sqreen/{rules_callbacks/rails_parameters.rb → rules/rails_parameters_cb.rb} +3 -1
  130. data/lib/sqreen/{rules_callbacks → rules}/record_request_context.rb +3 -1
  131. data/lib/sqreen/{rules_callbacks/regexp_rule.rb → rules/regexp_rule_cb.rb} +3 -1
  132. data/lib/sqreen/{rule_callback.rb → rules/rule_cb.rb} +4 -2
  133. data/lib/sqreen/{rules_callbacks → rules}/run_req_start_actions.rb +7 -3
  134. data/lib/sqreen/{rules_callbacks → rules}/run_user_actions.rb +4 -2
  135. data/lib/sqreen/{rules_callbacks/shell_env.rb → rules/shell_env_cb.rb} +3 -1
  136. data/lib/sqreen/{rules_callbacks/sdk_signup_track.rb → rules/signup_track_cb.rb} +4 -2
  137. data/lib/sqreen/rules/update_request_context.rb +22 -0
  138. data/lib/sqreen/{rules_callbacks/url_matches.rb → rules/url_matches_cb.rb} +3 -1
  139. data/lib/sqreen/{rules_callbacks/user_agent_matches.rb → rules/user_agent_matches_cb.rb} +3 -1
  140. data/lib/sqreen/{rules_callbacks/waf.rb → rules/waf_cb.rb} +41 -21
  141. data/lib/sqreen/{rules_callbacks/reflected_xss.rb → rules/xss_cb.rb} +12 -7
  142. data/lib/sqreen/run_when_called_cb.rb +23 -0
  143. data/lib/sqreen/runner.rb +25 -7
  144. data/lib/sqreen/runtime_infos.rb +4 -9
  145. data/lib/sqreen/safe_json.rb +2 -0
  146. data/lib/sqreen/sdk.rb +4 -0
  147. data/lib/sqreen/sensitive_data_redactor.rb +113 -0
  148. data/lib/sqreen/serializer.rb +2 -0
  149. data/lib/sqreen/session.rb +2 -0
  150. data/lib/sqreen/shared_storage.rb +2 -0
  151. data/lib/sqreen/shared_storage23.rb +2 -0
  152. data/lib/sqreen/shrink_wrap.rb +16 -0
  153. data/lib/sqreen/signature_verifier.rb +22 -0
  154. data/lib/sqreen/sinatra_middleware.rb +16 -0
  155. data/lib/sqreen/{rules_signature.rb → sqreen_signed_verifier.rb} +7 -17
  156. data/lib/sqreen/token_invalid_exception.rb +10 -0
  157. data/lib/sqreen/token_not_found_exception.rb +11 -0
  158. data/lib/sqreen/trie.rb +5 -64
  159. data/lib/sqreen/unauthorized.rb +10 -0
  160. data/lib/sqreen/util.rb +7 -0
  161. data/lib/sqreen/util/capped_array.rb +35 -0
  162. data/lib/sqreen/util/capped_hash.rb +41 -0
  163. data/lib/sqreen/util/capped_string.rb +26 -0
  164. data/lib/sqreen/util/capper.rb +67 -0
  165. data/lib/sqreen/version.rb +3 -1
  166. data/lib/sqreen/waf_error.rb +20 -0
  167. data/lib/sqreen/weave.rb +12 -0
  168. data/lib/sqreen/weave/hardcoded.rb +19 -0
  169. data/lib/sqreen/weave/instrumentor.rb +48 -0
  170. data/lib/sqreen/weave/legacy.rb +12 -0
  171. data/lib/sqreen/weave/legacy/instrumentation.rb +406 -0
  172. data/lib/sqreen/web_server.rb +2 -0
  173. data/lib/sqreen/web_server/generic.rb +2 -0
  174. data/lib/sqreen/web_server/passenger.rb +2 -0
  175. data/lib/sqreen/web_server/puma.rb +2 -0
  176. data/lib/sqreen/web_server/rainbows.rb +2 -0
  177. data/lib/sqreen/web_server/thin.rb +2 -0
  178. data/lib/sqreen/web_server/unicorn.rb +2 -0
  179. data/lib/sqreen/web_server/webrick.rb +2 -0
  180. data/lib/sqreen/worker.rb +2 -0
  181. metadata +105 -39
  182. data/lib/sqreen/dependency/hook.rb +0 -102
  183. data/lib/sqreen/rules_callbacks.rb +0 -35
  184. 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
@@ -1,3 +1,5 @@
1
+ # typed: strong
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
 
@@ -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
 
@@ -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
 
@@ -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
 
@@ -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
 
@@ -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
 
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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