sqreen 1.18.3-java → 1.19.1-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 (181) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -0
  3. data/lib/sqreen.rb +2 -0
  4. data/lib/sqreen/actions.rb +2 -0
  5. data/lib/sqreen/actions/actions_index.rb +16 -0
  6. data/lib/sqreen/actions/base.rb +4 -10
  7. data/lib/sqreen/actions/block_ip.rb +2 -0
  8. data/lib/sqreen/actions/block_user.rb +2 -0
  9. data/lib/sqreen/actions/ip_range_indexed_action_class.rb +4 -24
  10. data/lib/sqreen/actions/ip_ranges_index.rb +32 -11
  11. data/lib/sqreen/actions/redirect_ip.rb +2 -0
  12. data/lib/sqreen/actions/redirect_user.rb +2 -0
  13. data/lib/sqreen/actions/repository.rb +27 -8
  14. data/lib/sqreen/actions/unknown_action_type.rb +4 -0
  15. data/lib/sqreen/actions/user_action_class.rb +5 -30
  16. data/lib/sqreen/actions/users_index.rb +35 -0
  17. data/lib/sqreen/agent.rb +2 -1
  18. data/lib/sqreen/attack_blocked.rb +2 -0
  19. data/lib/sqreen/backport.rb +2 -0
  20. data/lib/sqreen/backport/clock_gettime.rb +74 -0
  21. data/lib/sqreen/backport/original_name.rb +2 -0
  22. data/lib/sqreen/binding_accessor.rb +2 -0
  23. data/lib/sqreen/binding_accessor/path_elem.rb +2 -0
  24. data/lib/sqreen/binding_accessor/transforms.rb +8 -1
  25. data/lib/sqreen/call_countable.rb +2 -0
  26. data/lib/sqreen/capped_queue.rb +2 -0
  27. data/lib/sqreen/cb.rb +2 -0
  28. data/lib/sqreen/cb_tree.rb +2 -0
  29. data/lib/sqreen/condition_evaluator.rb +2 -0
  30. data/lib/sqreen/conditionable.rb +2 -0
  31. data/lib/sqreen/configuration.rb +14 -0
  32. data/lib/sqreen/context.rb +2 -0
  33. data/lib/sqreen/default_cb.rb +2 -0
  34. data/lib/sqreen/deferred_logger.rb +2 -0
  35. data/lib/sqreen/deliveries.rb +2 -0
  36. data/lib/sqreen/deliveries/batch.rb +2 -0
  37. data/lib/sqreen/deliveries/simple.rb +2 -0
  38. data/lib/sqreen/dependency.rb +3 -1
  39. data/lib/sqreen/dependency/detector.rb +22 -14
  40. data/lib/sqreen/dependency/libsqreen.rb +4 -0
  41. data/lib/sqreen/dependency/new_relic.rb +2 -0
  42. data/lib/sqreen/dependency/rack.rb +10 -5
  43. data/lib/sqreen/dependency/rails.rb +4 -0
  44. data/lib/sqreen/dependency/sentry.rb +2 -0
  45. data/lib/sqreen/dependency/sinatra.rb +12 -1
  46. data/lib/sqreen/encoding_sanitizer.rb +2 -0
  47. data/lib/sqreen/error_handling_middleware.rb +2 -0
  48. data/lib/sqreen/event.rb +2 -0
  49. data/lib/sqreen/events/attack.rb +2 -0
  50. data/lib/sqreen/events/remote_exception.rb +2 -0
  51. data/lib/sqreen/events/request_record.rb +2 -0
  52. data/lib/sqreen/exception.rb +2 -0
  53. data/lib/sqreen/formatter_with_tid.rb +2 -0
  54. data/lib/sqreen/framework_cb.rb +2 -0
  55. data/lib/sqreen/frameworks.rb +2 -0
  56. data/lib/sqreen/frameworks/generic.rb +2 -0
  57. data/lib/sqreen/frameworks/rails.rb +1 -0
  58. data/lib/sqreen/frameworks/rails3.rb +2 -0
  59. data/lib/sqreen/frameworks/request_recorder.rb +2 -0
  60. data/lib/sqreen/frameworks/sinatra.rb +2 -0
  61. data/lib/sqreen/frameworks/sqreen_test.rb +2 -0
  62. data/lib/sqreen/graft.rb +12 -0
  63. data/lib/sqreen/graft/call.rb +150 -0
  64. data/lib/sqreen/{dependency → graft}/callback.rb +12 -4
  65. data/lib/sqreen/graft/hook.rb +316 -0
  66. data/lib/sqreen/{dependency → graft}/hook_point.rb +152 -33
  67. data/lib/sqreen/graft/hook_point_error.rb +10 -0
  68. data/lib/sqreen/invalid_signature_exception.rb +2 -0
  69. data/lib/sqreen/js.rb +2 -0
  70. data/lib/sqreen/js/call_context.rb +2 -0
  71. data/lib/sqreen/js/context_pool.rb +2 -0
  72. data/lib/sqreen/js/exec_js_runnable.rb +2 -0
  73. data/lib/sqreen/js/execjs_adapter.rb +2 -0
  74. data/lib/sqreen/js/executable_js.rb +2 -0
  75. data/lib/sqreen/js/js_service.rb +2 -0
  76. data/lib/sqreen/js/js_service_adapter.rb +2 -0
  77. data/lib/sqreen/js/mini_racer_adapter.rb +2 -0
  78. data/lib/sqreen/js/mini_racer_executable_js.rb +2 -0
  79. data/lib/sqreen/js/thread_local_exec_js_runnable.rb +2 -0
  80. data/lib/sqreen/legacy.rb +8 -0
  81. data/lib/sqreen/{instrumentation.rb → legacy/instrumentation.rb} +39 -10
  82. data/lib/sqreen/log.rb +2 -0
  83. data/lib/sqreen/log/loggable.rb +28 -0
  84. data/lib/sqreen/logger.rb +2 -0
  85. data/lib/sqreen/metrics.rb +2 -0
  86. data/lib/sqreen/metrics/average.rb +2 -0
  87. data/lib/sqreen/metrics/base.rb +2 -0
  88. data/lib/sqreen/metrics/binning.rb +2 -0
  89. data/lib/sqreen/metrics/collect.rb +2 -0
  90. data/lib/sqreen/metrics/sum.rb +2 -0
  91. data/lib/sqreen/metrics_store.rb +2 -0
  92. data/lib/sqreen/metrics_store/already_registered_metric.rb +2 -0
  93. data/lib/sqreen/metrics_store/unknown_metric.rb +2 -0
  94. data/lib/sqreen/metrics_store/unregistered_metric.rb +2 -0
  95. data/lib/sqreen/middleware.rb +2 -0
  96. data/lib/sqreen/mono_time.rb +2 -0
  97. data/lib/sqreen/node.rb +2 -0
  98. data/lib/sqreen/not_implemented_yet.rb +2 -0
  99. data/lib/sqreen/null_logger.rb +2 -0
  100. data/lib/sqreen/payload_creator.rb +2 -0
  101. data/lib/sqreen/payload_creator/header_section.rb +2 -0
  102. data/lib/sqreen/performance_notifications.rb +2 -0
  103. data/lib/sqreen/performance_notifications/binned_metrics.rb +2 -0
  104. data/lib/sqreen/performance_notifications/log.rb +2 -0
  105. data/lib/sqreen/performance_notifications/log_performance.rb +2 -0
  106. data/lib/sqreen/performance_notifications/metrics.rb +2 -0
  107. data/lib/sqreen/performance_notifications/newrelic.rb +2 -0
  108. data/lib/sqreen/prefix.rb +2 -0
  109. data/lib/sqreen/rails_middleware.rb +2 -0
  110. data/lib/sqreen/remote_command.rb +2 -0
  111. data/lib/sqreen/remote_command/failure_output.rb +5 -0
  112. data/lib/sqreen/rules.rb +2 -0
  113. data/lib/sqreen/rules/attrs.rb +2 -0
  114. data/lib/sqreen/rules/auth_track_cb.rb +2 -0
  115. data/lib/sqreen/rules/binding_accessor_matcher_cb.rb +2 -0
  116. data/lib/sqreen/rules/binding_accessor_metrics.rb +2 -0
  117. data/lib/sqreen/rules/blacklist_ips_cb.rb +2 -0
  118. data/lib/sqreen/rules/count_http_codes.rb +2 -0
  119. data/lib/sqreen/rules/crawler_user_agent_matches_cb.rb +2 -0
  120. data/lib/sqreen/rules/crawler_user_agent_matches_metrics_cb.rb +2 -0
  121. data/lib/sqreen/rules/custom_error_cb.rb +2 -0
  122. data/lib/sqreen/rules/devise_auth_track_cb.rb +2 -0
  123. data/lib/sqreen/rules/devise_signup_track_cb.rb +2 -0
  124. data/lib/sqreen/rules/execjs_cb.rb +2 -0
  125. data/lib/sqreen/rules/headers_insert_cb.rb +7 -0
  126. data/lib/sqreen/rules/matcher_rule.rb +2 -0
  127. data/lib/sqreen/rules/not_found_cb.rb +5 -0
  128. data/lib/sqreen/rules/rails_parameters_cb.rb +2 -0
  129. data/lib/sqreen/rules/record_request_context.rb +2 -0
  130. data/lib/sqreen/rules/regexp_rule_cb.rb +2 -0
  131. data/lib/sqreen/rules/rule_cb.rb +2 -0
  132. data/lib/sqreen/rules/run_req_start_actions.rb +3 -1
  133. data/lib/sqreen/rules/run_user_actions.rb +3 -1
  134. data/lib/sqreen/rules/shell_env_cb.rb +2 -0
  135. data/lib/sqreen/rules/signup_track_cb.rb +2 -0
  136. data/lib/sqreen/rules/update_request_context.rb +2 -0
  137. data/lib/sqreen/rules/url_matches_cb.rb +2 -0
  138. data/lib/sqreen/rules/user_agent_matches_cb.rb +2 -0
  139. data/lib/sqreen/rules/waf_cb.rb +31 -7
  140. data/lib/sqreen/rules/xss_cb.rb +2 -0
  141. data/lib/sqreen/run_when_called_cb.rb +2 -0
  142. data/lib/sqreen/runner.rb +25 -7
  143. data/lib/sqreen/runtime_infos.rb +2 -0
  144. data/lib/sqreen/safe_json.rb +2 -0
  145. data/lib/sqreen/sdk.rb +4 -0
  146. data/lib/sqreen/sensitive_data_redactor.rb +2 -0
  147. data/lib/sqreen/serializer.rb +2 -0
  148. data/lib/sqreen/session.rb +2 -0
  149. data/lib/sqreen/shared_storage.rb +2 -0
  150. data/lib/sqreen/shared_storage23.rb +2 -0
  151. data/lib/sqreen/shrink_wrap.rb +16 -0
  152. data/lib/sqreen/signature_verifier.rb +2 -0
  153. data/lib/sqreen/sinatra_middleware.rb +2 -0
  154. data/lib/sqreen/sqreen_signed_verifier.rb +2 -0
  155. data/lib/sqreen/token_invalid_exception.rb +2 -0
  156. data/lib/sqreen/token_not_found_exception.rb +2 -0
  157. data/lib/sqreen/trie.rb +2 -0
  158. data/lib/sqreen/unauthorized.rb +2 -0
  159. data/lib/sqreen/util.rb +5 -0
  160. data/lib/sqreen/util/capped_array.rb +2 -0
  161. data/lib/sqreen/util/capped_hash.rb +2 -0
  162. data/lib/sqreen/util/capped_string.rb +2 -0
  163. data/lib/sqreen/util/capper.rb +2 -0
  164. data/lib/sqreen/version.rb +3 -1
  165. data/lib/sqreen/waf_error.rb +2 -0
  166. data/lib/sqreen/weave.rb +12 -0
  167. data/lib/sqreen/weave/hardcoded.rb +19 -0
  168. data/lib/sqreen/weave/instrumentor.rb +48 -0
  169. data/lib/sqreen/weave/legacy.rb +12 -0
  170. data/lib/sqreen/weave/legacy/instrumentation.rb +406 -0
  171. data/lib/sqreen/web_server.rb +2 -0
  172. data/lib/sqreen/web_server/generic.rb +2 -0
  173. data/lib/sqreen/web_server/passenger.rb +2 -0
  174. data/lib/sqreen/web_server/puma.rb +2 -0
  175. data/lib/sqreen/web_server/rainbows.rb +2 -0
  176. data/lib/sqreen/web_server/thin.rb +2 -0
  177. data/lib/sqreen/web_server/unicorn.rb +2 -0
  178. data/lib/sqreen/web_server/webrick.rb +2 -0
  179. data/lib/sqreen/worker.rb +2 -0
  180. metadata +26 -7
  181. data/lib/sqreen/dependency/hook.rb +0 -102
@@ -1,3 +1,5 @@
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
 
@@ -1,3 +1,5 @@
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
 
@@ -9,11 +11,15 @@ require 'sqreen/safe_json'
9
11
  require 'sqreen/exception'
10
12
  require 'sqreen/util/capper'
11
13
  require 'sqreen/dependency/libsqreen'
14
+ require 'sqreen/encoding_sanitizer'
12
15
 
13
16
  module Sqreen
14
17
  module Rules
15
18
  class WAFCB < RuleCB
16
- BUDGET_MAX = 5000
19
+ # 2^30 -1 or 2^62 -1
20
+ MAX_FIXNUM = 1.size == 4 ? 1_073_741_823 : 4_611_686_018_427_387_903
21
+ # will be converted to a long, so better not to overflow
22
+ INFINITE_BUDGET_US = MAX_FIXNUM
17
23
 
18
24
  def self.libsqreen?
19
25
  Sqreen::Dependency::LibSqreen.required?
@@ -23,7 +29,7 @@ module Sqreen
23
29
  Sqreen::Dependency.const_exist?('LibSqreen::WAF')
24
30
  end
25
31
 
26
- attr_reader :binding_accessors, :budget, :waf_rule_name
32
+ attr_reader :binding_accessors, :max_run_budget_us, :waf_rule_name
27
33
 
28
34
  def initialize(*args)
29
35
  super(*args)
@@ -52,12 +58,17 @@ module Sqreen
52
58
  @binding_accessors = @data['values'].fetch('binding_accessors', []).each_with_object({}) do |e, h|
53
59
  h[e] = BindingAccessor.new(e)
54
60
  end
55
- @budget = @data['values'].fetch('budget', BUDGET_MAX)
61
+
62
+ # 0 for using defaults (PW_RUN_TIMEOUT)
63
+ @max_run_budget_us = (@data['values'].fetch('budget_in_ms', 0) * 1000).to_i
64
+ @max_run_budget_us = INFINITE_BUDGET_US if @max_run_budget_us >= INFINITE_BUDGET_US
65
+
66
+ Sqreen.log.debug { "Max WAF run budget for #{@waf_rule_name} set to #{@max_run_budget_us} us" }
56
67
 
57
68
  ObjectSpace.define_finalizer(self, WAFCB.finalizer(@waf_rule_name.dup))
58
69
  end
59
70
 
60
- def pre(instance, args, _budget)
71
+ def pre(instance, args, budget)
61
72
  return unless WAFCB.libsqreen? && WAFCB.waf?
62
73
 
63
74
  request = framework.request
@@ -65,12 +76,25 @@ module Sqreen
65
76
 
66
77
  env = [binding, framework, instance, args]
67
78
 
79
+ start = Sqreen.time if budget
80
+
68
81
  capper = Sqreen::Util::Capper.new(string_size_cap: 4096, size_cap: 150, depth_cap: 10)
69
82
  waf_args = binding_accessors.each_with_object({}) do |(e, b), h|
70
83
  h[e] = capper.call(b.resolve(*env))
71
84
  end
72
85
  waf_args = Sqreen::EncodingSanitizer.sanitize(waf_args)
73
- action, data = ::LibSqreen::WAF.run(waf_rule_name, waf_args, budget)
86
+
87
+ if budget
88
+ rem_budget_s = budget - (Sqreen.time - start)
89
+ return advise_action(nil) if rem_budget_s <= 0.0
90
+
91
+ waf_gen_budget_us = [(rem_budget_s * 1_000_000).to_i, MAX_FIXNUM].min
92
+ else # no budget
93
+ waf_gen_budget_us = INFINITE_BUDGET_US
94
+ end
95
+
96
+ action, data = ::LibSqreen::WAF.run(waf_rule_name, waf_args,
97
+ waf_gen_budget_us, @max_run_budget_us)
74
98
 
75
99
  case action
76
100
  when :monitor
@@ -102,13 +126,13 @@ module Sqreen
102
126
  lambda do |object_id|
103
127
  return unless WAFCB.libsqreen?
104
128
 
105
- ::LibSqreen::WAF.delete(waf_rule_name, waf_args, budget)
129
+ ::LibSqreen::WAF.delete(waf_rule_name)
106
130
  Sqreen.log.debug("WAF rule #{rule_name} deleted, from #<#{name}:0x#{object_id.to_s(16).rjust(16, '0')}>")
107
131
  end
108
132
  end
109
133
 
110
134
  def record_exception(exception, infos = {}, at = Time.now.utc)
111
- infos.merge!(exception_to_infos(exception))
135
+ infos.merge!(exception_to_infos(exception)) if exception.is_a?(Sqreen::WAFError)
112
136
  super(exception, infos, at)
113
137
  end
114
138
 
@@ -1,3 +1,5 @@
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
 
@@ -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: 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
 
@@ -18,8 +20,9 @@ require 'sqreen/deliveries/simple'
18
20
  require 'sqreen/deliveries/batch'
19
21
  require 'sqreen/performance_notifications/metrics'
20
22
  require 'sqreen/performance_notifications/binned_metrics'
21
- require 'sqreen/instrumentation'
23
+ require 'sqreen/legacy/instrumentation'
22
24
  require 'sqreen/call_countable'
25
+ require 'sqreen/weave/legacy/instrumentation'
23
26
 
24
27
  module Sqreen
25
28
  @features = {}
@@ -117,7 +120,16 @@ module Sqreen
117
120
  register_exit_cb if set_at_exit
118
121
 
119
122
  self.metrics_engine = MetricsStore.new
120
- @instrumenter = Instrumentation.new(metrics_engine)
123
+
124
+ needs_weave = proc do
125
+ Gem::Specification.select { |s| s.name == 'scout_apm' && Gem::Requirement.new('>= 2.5.2').satisfied_by?(Gem::Version.new(s.version)) }.any?
126
+ end
127
+
128
+ if @configuration.get(:weave) || needs_weave.call
129
+ @instrumenter = Sqreen::Weave::Legacy::Instrumentation.new(metrics_engine)
130
+ else
131
+ @instrumenter = Sqreen::Legacy::Instrumentation.new(metrics_engine)
132
+ end
121
133
 
122
134
  Sqreen.log.debug "Using token #{@token}"
123
135
  response = create_session(session_class)
@@ -235,7 +247,7 @@ module Sqreen
235
247
  def remove_instrumentation(_context_infos = {})
236
248
  Sqreen.log.debug 'Removing instrumentation'
237
249
  instrumenter.remove_all_callbacks
238
- Sqreen::Actions::Repository.instance.clear
250
+ Sqreen::Actions::Repository.clear
239
251
  Sqreen.log.debug 'Instrumentation removed'
240
252
  true
241
253
  end
@@ -244,7 +256,6 @@ module Sqreen
244
256
  Sqreen.log.debug 'Reloading rules'
245
257
  rulespack_id, rules = load_rules
246
258
  instrumenter.remove_all_callbacks
247
- Sqreen::Actions::Repository.instance.clear
248
259
 
249
260
  @framework.instrument_when_ready!(instrumenter, rules)
250
261
  Sqreen.log.debug 'Rules reloaded'
@@ -304,12 +315,18 @@ module Sqreen
304
315
  Sqreen.update_features(features)
305
316
  session.request_compression = features['request_compression'] if session
306
317
  self.performance_metrics_period = features['performance_metrics_period']
318
+
319
+ unless @configuration.get(:weave)
320
+
307
321
  config_binned_metrics(features['perf_level'] || DEFAULT_PERF_LEVEL,
308
322
  features['perf_base'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_BASE,
309
323
  features['perf_unit'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_UNIT,
310
324
  features['perf_pct_base'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_PCT_BASE,
311
325
  features['perf_pct_unit'] || PerformanceNotifications::BinnedMetrics::DEFAULT_PERF_PCT_UNIT,
312
326
  )
327
+
328
+ end
329
+
313
330
  self.call_counts_metrics_period = features['call_counts_metrics_period']
314
331
  hd = features['heartbeat_delay'].to_i
315
332
  self.heartbeat_delay = hd if hd > 0
@@ -456,13 +473,12 @@ module Sqreen
456
473
  def load_actions(hashes)
457
474
  unsupported = Set.new
458
475
 
459
- repos = Sqreen::Actions::Repository.instance
460
- repos.clear
476
+ new_repos = Sqreen::Actions::Repository.new
461
477
 
462
478
  actions = hashes.map do |h|
463
479
  begin
464
480
  act = Sqreen::Actions.deserialize_action(h)
465
- repos.add h['parameters'], act
481
+ new_repos.add h['parameters'], act
466
482
  act
467
483
  rescue Sqreen::Actions::UnknownActionType => e
468
484
  Sqreen.log.warn("Unsupported action type: #{e.action_type}")
@@ -476,6 +492,8 @@ module Sqreen
476
492
  actions = actions.reject(&:nil?)
477
493
  Sqreen.log.debug("Added #{actions.size} valid actions")
478
494
 
495
+ Sqreen::Actions::Repository.current = new_repos
496
+
479
497
  unsupported
480
498
  end
481
499
  end
@@ -1,3 +1,5 @@
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
 
@@ -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,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
+ require 'sqreen/frameworks'
7
+
4
8
  # Sqreen Namespace
5
9
  module Sqreen
6
10
 
@@ -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: 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
 
@@ -1,3 +1,5 @@
1
+ # typed: false
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: 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
 
@@ -0,0 +1,16 @@
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
+ module Sqreen
7
+ class ShrinkWrap
8
+ def initialize(app)
9
+ @app = app
10
+ end
11
+
12
+ def call(env)
13
+ @app.call(env)
14
+ end
15
+ end
16
+ 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
 
@@ -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: false
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: 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: 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: false
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: 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,2 +1,7 @@
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
+
1
6
  module Sqreen; end
2
7
  module Sqreen::Util; end
@@ -1,3 +1,5 @@
1
+ # typed: false
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: false
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: false
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,6 +1,8 @@
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
6
  module Sqreen
5
- VERSION = '1.18.3'.freeze
7
+ VERSION = '1.19.1'.freeze
6
8
  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
 
@@ -0,0 +1,12 @@
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/log/loggable'
7
+
8
+ module Sqreen
9
+ module Weave
10
+ include Sqreen::Log::Loggable
11
+ end
12
+ end
@@ -0,0 +1,19 @@
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/weave'
7
+
8
+ class Sqreen::Weave::Hardcoded
9
+ # [
10
+ # ### callback for performing sec responses based on ip
11
+ # ### init redefined to implement smartass way to hook it upon the
12
+ # ### framework's middleware #call
13
+ # Sqreen::Rules::RunReqStartActions.new(framework),
14
+ # ### callback for performing sec responses based on user
15
+ # Sqreen::Rules::RunUserActions.new(Sqreen, :identify, 0),
16
+ # ### callback for performing sec responses based on user
17
+ # Sqreen::Rules::RunUserActions.new(Sqreen, :auth_track, 1),
18
+ # ]
19
+ end
@@ -0,0 +1,48 @@
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/weave'
7
+
8
+ # rule loader: decouple from runner
9
+ # remote rules from back
10
+ # local rules from local files
11
+ # => rule list (what is a rule?)
12
+ # => to callback (what is a callback?)
13
+ # => to instrumentation (== attach callbacks to their targets using graft)
14
+
15
+ # make shit like instrument framework independent (block passing?)
16
+ # => too much things assume only one framework
17
+ # possible to do run req actions without hardcoded cbs?
18
+ # (data comes from actions command, native cb merely binds to middleware)
19
+ # can cb be a form of abstraction?
20
+
21
+ # rule sig: decouple/split
22
+ # - data signer/checker
23
+ # apply this to rule data
24
+
25
+ # whitelist is mixed in
26
+
27
+ # metrics
28
+ # three dedicated metrics: abstract and isolate
29
+
30
+ class Sqreen::Weave::Instrumentor
31
+ def initialize(metrics_engine)
32
+ ### bail out if no metric engine
33
+ ### init metric to count calls to sqreen
34
+ ### init metric to count request whitelist matches (ip or path whitelist)
35
+ ### init metric to count over budget hits
36
+ end
37
+
38
+ def instrument!(rules, framework)
39
+ ### set up rule signature verifier
40
+ ### force clean instrumentation callback list
41
+ ### for each rule description, transform into format for adding callback
42
+ ### attach framework to callback
43
+ ### install callback, observing priority
44
+ ### for each hardcoded callback
45
+ ### install hardcoded callbacks, observing priority
46
+ ### globally declare instrumentation ready
47
+ end
48
+ end