sqreen 1.18.6-java → 1.20.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 (190) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -0
  3. data/lib/sqreen/actions.rb +2 -0
  4. data/lib/sqreen/actions/actions_index.rb +16 -0
  5. data/lib/sqreen/actions/base.rb +4 -10
  6. data/lib/sqreen/actions/block_ip.rb +2 -0
  7. data/lib/sqreen/actions/block_user.rb +2 -0
  8. data/lib/sqreen/actions/ip_range_indexed_action_class.rb +4 -24
  9. data/lib/sqreen/actions/ip_ranges_index.rb +32 -11
  10. data/lib/sqreen/actions/redirect_ip.rb +2 -0
  11. data/lib/sqreen/actions/redirect_user.rb +2 -0
  12. data/lib/sqreen/actions/repository.rb +27 -8
  13. data/lib/sqreen/actions/unknown_action_type.rb +4 -0
  14. data/lib/sqreen/actions/user_action_class.rb +5 -30
  15. data/lib/sqreen/actions/users_index.rb +35 -0
  16. data/lib/sqreen/agent.rb +2 -1
  17. data/lib/sqreen/aggregated_metric.rb +25 -0
  18. data/lib/sqreen/attack_blocked.rb +2 -0
  19. data/lib/sqreen/binding_accessor.rb +2 -0
  20. data/lib/sqreen/binding_accessor/path_elem.rb +2 -0
  21. data/lib/sqreen/binding_accessor/transforms.rb +8 -1
  22. data/lib/sqreen/call_countable.rb +2 -0
  23. data/lib/sqreen/capped_queue.rb +2 -0
  24. data/lib/sqreen/cb.rb +2 -0
  25. data/lib/sqreen/cb_tree.rb +2 -0
  26. data/lib/sqreen/condition_evaluator.rb +2 -0
  27. data/lib/sqreen/conditionable.rb +2 -0
  28. data/lib/sqreen/configuration.rb +19 -1
  29. data/lib/sqreen/context.rb +2 -0
  30. data/lib/sqreen/default_cb.rb +2 -0
  31. data/lib/sqreen/deferred_logger.rb +2 -0
  32. data/lib/sqreen/deliveries.rb +2 -0
  33. data/lib/sqreen/deliveries/batch.rb +6 -1
  34. data/lib/sqreen/deliveries/simple.rb +6 -0
  35. data/lib/sqreen/dependency.rb +3 -1
  36. data/lib/sqreen/dependency/detector.rb +22 -14
  37. data/lib/sqreen/dependency/libsqreen.rb +4 -0
  38. data/lib/sqreen/dependency/new_relic.rb +2 -0
  39. data/lib/sqreen/dependency/rack.rb +10 -5
  40. data/lib/sqreen/dependency/rails.rb +4 -0
  41. data/lib/sqreen/dependency/sentry.rb +2 -0
  42. data/lib/sqreen/dependency/sinatra.rb +12 -1
  43. data/lib/sqreen/encoding_sanitizer.rb +2 -0
  44. data/lib/sqreen/error_handling_middleware.rb +2 -0
  45. data/lib/sqreen/event.rb +9 -5
  46. data/lib/sqreen/events/attack.rb +25 -18
  47. data/lib/sqreen/events/remote_exception.rb +2 -22
  48. data/lib/sqreen/events/request_record.rb +17 -70
  49. data/lib/sqreen/exception.rb +2 -0
  50. data/lib/sqreen/formatter_with_tid.rb +2 -0
  51. data/lib/sqreen/framework_cb.rb +2 -0
  52. data/lib/sqreen/frameworks.rb +2 -0
  53. data/lib/sqreen/frameworks/generic.rb +2 -0
  54. data/lib/sqreen/frameworks/rails.rb +1 -0
  55. data/lib/sqreen/frameworks/rails3.rb +2 -0
  56. data/lib/sqreen/frameworks/request_recorder.rb +15 -2
  57. data/lib/sqreen/frameworks/sinatra.rb +2 -0
  58. data/lib/sqreen/frameworks/sqreen_test.rb +2 -0
  59. data/lib/sqreen/graft.rb +12 -0
  60. data/lib/sqreen/graft/call.rb +150 -0
  61. data/lib/sqreen/{dependency → graft}/callback.rb +12 -4
  62. data/lib/sqreen/graft/hook.rb +316 -0
  63. data/lib/sqreen/{dependency → graft}/hook_point.rb +152 -33
  64. data/lib/sqreen/graft/hook_point_error.rb +10 -0
  65. data/lib/sqreen/invalid_signature_exception.rb +2 -0
  66. data/lib/sqreen/js.rb +2 -0
  67. data/lib/sqreen/js/call_context.rb +2 -0
  68. data/lib/sqreen/js/context_pool.rb +2 -0
  69. data/lib/sqreen/js/exec_js_runnable.rb +2 -0
  70. data/lib/sqreen/js/execjs_adapter.rb +2 -0
  71. data/lib/sqreen/js/executable_js.rb +2 -0
  72. data/lib/sqreen/js/js_service.rb +2 -0
  73. data/lib/sqreen/js/js_service_adapter.rb +2 -0
  74. data/lib/sqreen/js/mini_racer_adapter.rb +2 -0
  75. data/lib/sqreen/js/mini_racer_executable_js.rb +2 -0
  76. data/lib/sqreen/js/thread_local_exec_js_runnable.rb +2 -0
  77. data/lib/sqreen/kit/signals/specialized/aggregated_metric.rb +72 -0
  78. data/lib/sqreen/kit/signals/specialized/attack.rb +57 -0
  79. data/lib/sqreen/kit/signals/specialized/binning_metric.rb +76 -0
  80. data/lib/sqreen/kit/signals/specialized/http_trace.rb +26 -0
  81. data/lib/sqreen/kit/signals/specialized/sdk_track_call.rb +50 -0
  82. data/lib/sqreen/kit/signals/specialized/sqreen_exception.rb +57 -0
  83. data/lib/sqreen/{backport.rb → legacy.rb} +3 -2
  84. data/lib/sqreen/{instrumentation.rb → legacy/instrumentation.rb} +31 -2
  85. data/lib/sqreen/legacy/old_event_submission_strategy.rb +221 -0
  86. data/lib/sqreen/legacy/waf_redactions.rb +49 -0
  87. data/lib/sqreen/log.rb +2 -0
  88. data/lib/sqreen/log/loggable.rb +28 -0
  89. data/lib/sqreen/logger.rb +2 -0
  90. data/lib/sqreen/metrics.rb +2 -0
  91. data/lib/sqreen/metrics/average.rb +2 -0
  92. data/lib/sqreen/metrics/base.rb +5 -0
  93. data/lib/sqreen/metrics/binning.rb +2 -0
  94. data/lib/sqreen/metrics/collect.rb +2 -0
  95. data/lib/sqreen/metrics/sum.rb +2 -0
  96. data/lib/sqreen/metrics_store.rb +24 -12
  97. data/lib/sqreen/metrics_store/already_registered_metric.rb +2 -0
  98. data/lib/sqreen/metrics_store/unknown_metric.rb +2 -0
  99. data/lib/sqreen/metrics_store/unregistered_metric.rb +2 -0
  100. data/lib/sqreen/middleware.rb +2 -0
  101. data/lib/sqreen/mono_time.rb +2 -0
  102. data/lib/sqreen/node.rb +2 -0
  103. data/lib/sqreen/not_implemented_yet.rb +2 -0
  104. data/lib/sqreen/null_logger.rb +2 -0
  105. data/lib/sqreen/payload_creator.rb +2 -0
  106. data/lib/sqreen/payload_creator/header_section.rb +2 -0
  107. data/lib/sqreen/performance_notifications.rb +2 -0
  108. data/lib/sqreen/performance_notifications/binned_metrics.rb +10 -2
  109. data/lib/sqreen/performance_notifications/log.rb +2 -0
  110. data/lib/sqreen/performance_notifications/log_performance.rb +2 -0
  111. data/lib/sqreen/performance_notifications/metrics.rb +2 -0
  112. data/lib/sqreen/performance_notifications/newrelic.rb +2 -0
  113. data/lib/sqreen/prefix.rb +2 -0
  114. data/lib/sqreen/rails_middleware.rb +2 -0
  115. data/lib/sqreen/remote_command.rb +2 -0
  116. data/lib/sqreen/remote_command/failure_output.rb +5 -0
  117. data/lib/sqreen/rules.rb +6 -2
  118. data/lib/sqreen/rules/attrs.rb +2 -0
  119. data/lib/sqreen/rules/auth_track_cb.rb +2 -0
  120. data/lib/sqreen/rules/binding_accessor_matcher_cb.rb +2 -0
  121. data/lib/sqreen/rules/binding_accessor_metrics.rb +2 -0
  122. data/lib/sqreen/rules/blacklist_ips_cb.rb +2 -0
  123. data/lib/sqreen/rules/count_http_codes.rb +2 -0
  124. data/lib/sqreen/rules/crawler_user_agent_matches_cb.rb +2 -0
  125. data/lib/sqreen/rules/crawler_user_agent_matches_metrics_cb.rb +2 -0
  126. data/lib/sqreen/rules/custom_error_cb.rb +2 -0
  127. data/lib/sqreen/rules/devise_auth_track_cb.rb +2 -0
  128. data/lib/sqreen/rules/devise_signup_track_cb.rb +2 -0
  129. data/lib/sqreen/rules/execjs_cb.rb +2 -0
  130. data/lib/sqreen/rules/headers_insert_cb.rb +7 -0
  131. data/lib/sqreen/rules/matcher_rule.rb +2 -0
  132. data/lib/sqreen/rules/not_found_cb.rb +7 -0
  133. data/lib/sqreen/rules/rails_parameters_cb.rb +2 -0
  134. data/lib/sqreen/rules/record_request_context.rb +2 -0
  135. data/lib/sqreen/rules/regexp_rule_cb.rb +2 -0
  136. data/lib/sqreen/rules/rule_cb.rb +4 -0
  137. data/lib/sqreen/rules/run_req_start_actions.rb +3 -1
  138. data/lib/sqreen/rules/run_user_actions.rb +3 -1
  139. data/lib/sqreen/rules/shell_env_cb.rb +2 -0
  140. data/lib/sqreen/rules/signup_track_cb.rb +2 -0
  141. data/lib/sqreen/rules/update_request_context.rb +2 -0
  142. data/lib/sqreen/rules/url_matches_cb.rb +2 -0
  143. data/lib/sqreen/rules/user_agent_matches_cb.rb +2 -0
  144. data/lib/sqreen/rules/waf_cb.rb +41 -16
  145. data/lib/sqreen/rules/xss_cb.rb +2 -0
  146. data/lib/sqreen/run_when_called_cb.rb +2 -0
  147. data/lib/sqreen/runner.rb +68 -12
  148. data/lib/sqreen/runtime_infos.rb +2 -0
  149. data/lib/sqreen/safe_json.rb +2 -0
  150. data/lib/sqreen/sdk.rb +4 -0
  151. data/lib/sqreen/sensitive_data_redactor.rb +21 -31
  152. data/lib/sqreen/serializer.rb +2 -0
  153. data/lib/sqreen/session.rb +41 -37
  154. data/lib/sqreen/shared_storage.rb +2 -0
  155. data/lib/sqreen/shared_storage23.rb +2 -0
  156. data/lib/sqreen/shrink_wrap.rb +16 -0
  157. data/lib/sqreen/signals/conversions.rb +283 -0
  158. data/lib/sqreen/signals/http_trace_redaction.rb +111 -0
  159. data/lib/sqreen/signals/signals_submission_strategy.rb +78 -0
  160. data/lib/sqreen/signature_verifier.rb +2 -0
  161. data/lib/sqreen/sinatra_middleware.rb +2 -0
  162. data/lib/sqreen/sqreen_signed_verifier.rb +2 -0
  163. data/lib/sqreen/token_invalid_exception.rb +2 -0
  164. data/lib/sqreen/token_not_found_exception.rb +2 -0
  165. data/lib/sqreen/trie.rb +2 -0
  166. data/lib/sqreen/unauthorized.rb +2 -0
  167. data/lib/sqreen/util.rb +5 -0
  168. data/lib/sqreen/util/capped_array.rb +2 -0
  169. data/lib/sqreen/util/capped_hash.rb +2 -0
  170. data/lib/sqreen/util/capped_string.rb +2 -0
  171. data/lib/sqreen/util/capper.rb +2 -0
  172. data/lib/sqreen/version.rb +3 -1
  173. data/lib/sqreen/waf_error.rb +2 -0
  174. data/lib/sqreen/weave.rb +12 -0
  175. data/lib/sqreen/weave/hardcoded.rb +19 -0
  176. data/lib/sqreen/weave/instrumentor.rb +48 -0
  177. data/lib/sqreen/weave/legacy.rb +12 -0
  178. data/lib/sqreen/weave/legacy/instrumentation.rb +406 -0
  179. data/lib/sqreen/web_server.rb +2 -0
  180. data/lib/sqreen/web_server/generic.rb +2 -0
  181. data/lib/sqreen/web_server/passenger.rb +2 -0
  182. data/lib/sqreen/web_server/puma.rb +2 -0
  183. data/lib/sqreen/web_server/rainbows.rb +2 -0
  184. data/lib/sqreen/web_server/thin.rb +2 -0
  185. data/lib/sqreen/web_server/unicorn.rb +2 -0
  186. data/lib/sqreen/web_server/webrick.rb +2 -0
  187. data/lib/sqreen/worker.rb +2 -0
  188. metadata +65 -9
  189. data/lib/sqreen/backport/original_name.rb +0 -86
  190. 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: 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: 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
 
@@ -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
 
@@ -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
 
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqreen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.18.6
4
+ version: 1.20.0
5
5
  platform: java
6
6
  authors:
7
7
  - Sqreen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-12 00:00:00.000000000 Z
11
+ date: 2020-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 0.1.0
19
+ name: sqreen-backport
20
+ prerelease: false
21
+ type: :runtime
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: 0.2.0
33
+ name: sqreen-kit
34
+ prerelease: false
35
+ type: :runtime
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.0
13
41
  - !ruby/object:Gem::Dependency
14
42
  requirement: !ruby/object:Gem::Requirement
15
43
  requirements:
@@ -52,6 +80,7 @@ files:
52
80
  - Rakefile
53
81
  - lib/sqreen.rb
54
82
  - lib/sqreen/actions.rb
83
+ - lib/sqreen/actions/actions_index.rb
55
84
  - lib/sqreen/actions/base.rb
56
85
  - lib/sqreen/actions/block_ip.rb
57
86
  - lib/sqreen/actions/block_user.rb
@@ -62,11 +91,11 @@ files:
62
91
  - lib/sqreen/actions/repository.rb
63
92
  - lib/sqreen/actions/unknown_action_type.rb
64
93
  - lib/sqreen/actions/user_action_class.rb
94
+ - lib/sqreen/actions/users_index.rb
65
95
  - lib/sqreen/agent.rb
96
+ - lib/sqreen/aggregated_metric.rb
66
97
  - lib/sqreen/attack_blocked.rb
67
98
  - lib/sqreen/attack_detected.html
68
- - lib/sqreen/backport.rb
69
- - lib/sqreen/backport/original_name.rb
70
99
  - lib/sqreen/binding_accessor.rb
71
100
  - lib/sqreen/binding_accessor/path_elem.rb
72
101
  - lib/sqreen/binding_accessor/transforms.rb
@@ -85,10 +114,7 @@ files:
85
114
  - lib/sqreen/deliveries/batch.rb
86
115
  - lib/sqreen/deliveries/simple.rb
87
116
  - lib/sqreen/dependency.rb
88
- - lib/sqreen/dependency/callback.rb
89
117
  - lib/sqreen/dependency/detector.rb
90
- - lib/sqreen/dependency/hook.rb
91
- - lib/sqreen/dependency/hook_point.rb
92
118
  - lib/sqreen/dependency/libsqreen.rb
93
119
  - lib/sqreen/dependency/new_relic.rb
94
120
  - lib/sqreen/dependency/rack.rb
@@ -111,7 +137,12 @@ files:
111
137
  - lib/sqreen/frameworks/request_recorder.rb
112
138
  - lib/sqreen/frameworks/sinatra.rb
113
139
  - lib/sqreen/frameworks/sqreen_test.rb
114
- - lib/sqreen/instrumentation.rb
140
+ - lib/sqreen/graft.rb
141
+ - lib/sqreen/graft/call.rb
142
+ - lib/sqreen/graft/callback.rb
143
+ - lib/sqreen/graft/hook.rb
144
+ - lib/sqreen/graft/hook_point.rb
145
+ - lib/sqreen/graft/hook_point_error.rb
115
146
  - lib/sqreen/invalid_signature_exception.rb
116
147
  - lib/sqreen/js.rb
117
148
  - lib/sqreen/js/call_context.rb
@@ -124,7 +155,18 @@ files:
124
155
  - lib/sqreen/js/mini_racer_adapter.rb
125
156
  - lib/sqreen/js/mini_racer_executable_js.rb
126
157
  - lib/sqreen/js/thread_local_exec_js_runnable.rb
158
+ - lib/sqreen/kit/signals/specialized/aggregated_metric.rb
159
+ - lib/sqreen/kit/signals/specialized/attack.rb
160
+ - lib/sqreen/kit/signals/specialized/binning_metric.rb
161
+ - lib/sqreen/kit/signals/specialized/http_trace.rb
162
+ - lib/sqreen/kit/signals/specialized/sdk_track_call.rb
163
+ - lib/sqreen/kit/signals/specialized/sqreen_exception.rb
164
+ - lib/sqreen/legacy.rb
165
+ - lib/sqreen/legacy/instrumentation.rb
166
+ - lib/sqreen/legacy/old_event_submission_strategy.rb
167
+ - lib/sqreen/legacy/waf_redactions.rb
127
168
  - lib/sqreen/log.rb
169
+ - lib/sqreen/log/loggable.rb
128
170
  - lib/sqreen/logger.rb
129
171
  - lib/sqreen/metrics.rb
130
172
  - lib/sqreen/metrics/average.rb
@@ -192,6 +234,10 @@ files:
192
234
  - lib/sqreen/session.rb
193
235
  - lib/sqreen/shared_storage.rb
194
236
  - lib/sqreen/shared_storage23.rb
237
+ - lib/sqreen/shrink_wrap.rb
238
+ - lib/sqreen/signals/conversions.rb
239
+ - lib/sqreen/signals/http_trace_redaction.rb
240
+ - lib/sqreen/signals/signals_submission_strategy.rb
195
241
  - lib/sqreen/signature_verifier.rb
196
242
  - lib/sqreen/sinatra_middleware.rb
197
243
  - lib/sqreen/sqreen_signed_verifier.rb
@@ -206,6 +252,11 @@ files:
206
252
  - lib/sqreen/util/capper.rb
207
253
  - lib/sqreen/version.rb
208
254
  - lib/sqreen/waf_error.rb
255
+ - lib/sqreen/weave.rb
256
+ - lib/sqreen/weave/hardcoded.rb
257
+ - lib/sqreen/weave/instrumentor.rb
258
+ - lib/sqreen/weave/legacy.rb
259
+ - lib/sqreen/weave/legacy/instrumentation.rb
209
260
  - lib/sqreen/web_server.rb
210
261
  - lib/sqreen/web_server/generic.rb
211
262
  - lib/sqreen/web_server/passenger.rb
@@ -218,7 +269,12 @@ files:
218
269
  homepage: https://www.sqreen.com/
219
270
  licenses:
220
271
  - Sqreen
221
- metadata: {}
272
+ metadata:
273
+ homepage_uri: https://sqreen.com
274
+ documentation_uri: https://docs.sqreen.com/
275
+ changelog_uri: https://docs.sqreen.com/ruby/release-notes/
276
+ source_code_uri: https://github.com/sqreen/ruby-agent
277
+ bug_tracker_uri: https://github.com/sqreen/ruby-agent/issues
222
278
  post_install_message:
223
279
  rdoc_options: []
224
280
  require_paths:
@@ -1,86 +0,0 @@
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
- module Sqreen
5
- module Backport
6
- module OriginalName
7
- HAS_UNBOUND_METHOD_ORIGINAL_NAME = ::UnboundMethod.instance_methods(false).include?(:original_name)
8
- HAS_METHOD_ORIGINAL_NAME = ::Method.instance_methods(false).include?(:original_name)
9
-
10
- def original_name
11
- self.class.get_original_name(owner, original_name_key) || self.original_name = name
12
- end
13
-
14
- private
15
-
16
- def original_name=(name)
17
- self.class.set_original_name(owner, original_name_key, name)
18
- end
19
-
20
- def original_name_key
21
- return hash if is_a?(::UnboundMethod)
22
-
23
- owner.instance_method(name).hash
24
- end
25
-
26
- class << self
27
- def supported?
28
- !::Kernel.const_defined?(:JRUBY_VERSION) && HAS_UNBOUND_METHOD_ORIGINAL_NAME && HAS_METHOD_ORIGINAL_NAME
29
- end
30
-
31
- def included(klass)
32
- klass.extend(ClassMethods)
33
- end
34
-
35
- def prepended(klass)
36
- klass.extend(ClassMethods)
37
- end
38
- end
39
-
40
- class Store < ::Hash; end
41
-
42
- module ClassMethods
43
- def original_names(owner)
44
- owner.instance_eval { @__sqreen_backport_original_names ||= Store.new }
45
- end
46
-
47
- def get_original_name(owner, key)
48
- original_names(owner)[key]
49
- end
50
-
51
- def set_original_name(owner, key, name)
52
- original_names(owner)[key] ||= name
53
- end
54
- end
55
- end
56
- end
57
- end
58
-
59
- class UnboundMethod
60
- if Sqreen::Backport::OriginalName::HAS_UNBOUND_METHOD_ORIGINAL_NAME
61
- prepend Sqreen::Backport::OriginalName
62
- else
63
- include Sqreen::Backport::OriginalName
64
- end
65
- end unless Sqreen::Backport::OriginalName.supported?
66
-
67
- class Method
68
- if Sqreen::Backport::OriginalName::HAS_METHOD_ORIGINAL_NAME
69
- prepend Sqreen::Backport::OriginalName
70
- else
71
- include Sqreen::Backport::OriginalName
72
- end
73
- end unless Sqreen::Backport::OriginalName.supported?
74
-
75
- class Module
76
- alias_method(:alias_method_without_original_name, :alias_method)
77
-
78
- def alias_method_with_original_name(newname, oldname)
79
- alias_method_without_original_name(newname, oldname).tap do
80
- instance_method(newname).send(:original_name=, :"#{oldname}")
81
- end
82
- end
83
-
84
- alias_method_with_original_name(:alias_method_without_original_name, :alias_method)
85
- alias_method_with_original_name(:alias_method, :alias_method_with_original_name)
86
- end unless Sqreen::Backport::OriginalName.supported?
@@ -1,102 +0,0 @@
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/dependency/callback'
5
- require 'sqreen/dependency/hook_point'
6
-
7
- module Sqreen
8
- module Dependency
9
- class Hook
10
- @hooks = {}
11
-
12
- def self.[](hook_point)
13
- @hooks[hook_point] ||= new(hook_point)
14
- end
15
-
16
- def self.add(hook_point, &block)
17
- self[hook_point].add(&block)
18
- end
19
-
20
- attr_reader :point
21
-
22
- def initialize(hook_point, dependency_test = nil)
23
- @disabled = false
24
- @point = hook_point.is_a?(HookPoint) ? hook_point : HookPoint.new(hook_point)
25
- @before = []
26
- @after = []
27
- @raised = []
28
- @dependency_test = dependency_test || Proc.new { point.exist? }
29
- end
30
-
31
- def dependency?
32
- @dependency_test.call if @dependency_test
33
- end
34
-
35
- def add(&block)
36
- tap { instance_eval(&block) }
37
- end
38
-
39
- def callback_name(whence, tag = nil)
40
- "#{point}@#{whence}" << (tag ? ":#{tag}" : "")
41
- end
42
-
43
- def before(tag = nil, &block)
44
- return @before if block.nil?
45
-
46
- @before << Callback.new(callback_name(:before, tag), &block)
47
- end
48
-
49
- def after(tag = nil, &block)
50
- return @after if block.nil?
51
-
52
- @after << Callback.new(callback_name(:after, tag), &block)
53
- end
54
-
55
- def raised(tag = nil, &block)
56
- return @raised if block.nil?
57
-
58
- @raised << Callback.new(callback_name(:raised, tag), &block)
59
- end
60
-
61
- def depends_on(&block)
62
- @dependency_test = block
63
- end
64
-
65
- def enable
66
- @disabled = false
67
- end
68
-
69
- def disable
70
- @disabled = true
71
- end
72
-
73
- def disabled?
74
- @disabled
75
- end
76
-
77
- def install
78
- unless point.exist?
79
- Sqreen.log.debug "[#{Process.pid}] #{point} not found"
80
- return
81
- end
82
- Sqreen.log.debug "[#{Process.pid}] Hook #{point}: installing"
83
-
84
- point.install('sqreen_hook', &Sqreen::Dependency::Hook.wrapper(self))
85
- end
86
-
87
- def self.wrapper(hook)
88
- # pass self to cbs
89
- Proc.new do |*args, &block|
90
- Sqreen.log.debug "[#{Process.pid}] Hook #{hook.point} disabled:#{hook.disabled?} caller:#{Kernel.caller[1].inspect}"
91
- hook.before.each { |c| c.call(c, self, args) } unless hook.disabled?
92
- begin
93
- hook.point.apply(self, 'sqreen_hook', *args, &block)
94
- rescue ::Exception => e # rubocop:disable Lint/RescueException
95
- hook.raised.each { |c| c.call(c, self, e, args) } unless hook.disabled?
96
- raise
97
- end.tap { |v| hook.after.each { |c| c.call(c, self, v, args) } unless hook.disabled? }
98
- end
99
- end
100
- end
101
- end
102
- end