moesif_rack 1.4.16 → 1.4.18

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a4dc902308676d3b9bb9a23a61f9fc166024b0848d06e026f98a68be8de336b7
4
- data.tar.gz: 898963aa24db49d6772f4a037d2919650c93e989e9ba735db8ac5e0c6b65bc02
3
+ metadata.gz: 4332e59f946cefea8c61e0e7f40136ba2fd45c4c96de9f133651622c734d62b7
4
+ data.tar.gz: 5f7e29ac2f016a4c97d56a1276aafd42cabedf316cbe0a5a6f82069dcd813f18
5
5
  SHA512:
6
- metadata.gz: dfca38cca1df0bf26113b8c7198f478dd178f0cf925c2103972b4770e6bcfa032eaa9079801079224cc7127d6166d499e73bc826062835675efe3ff642ba8fd9
7
- data.tar.gz: 89d1b57bddaa065bc338aad7c92451405ad6a077bfc0e17635da7e42412681a922a22a2395b15f4a478969a4c63114fea582b693523504a87c3f1aec76862c50
6
+ metadata.gz: 25b4d5ea39d166c3aee2da057460c2fd9027bd4a7d1a1510e45ec0436890de5ea910b28353f00a034f735d99b7d5c840879e537b3022759216218d6cc351a1bf
7
+ data.tar.gz: d4e0e2014e5b78b1b1ca4be8cc8e10769ebe5d3ed3d6c91f96004587a6e474ac34470af7272da8922ccac5773206a8c44fe4f4d8657bdd90fa3f3fa444f09863
@@ -3,14 +3,14 @@ require 'json'
3
3
  require 'time'
4
4
  require 'zlib'
5
5
  require 'stringio'
6
- require_relative './helpers.rb'
6
+ require_relative './moesif_helpers.rb'
7
7
  require_relative './regex_config_helper.rb'
8
8
 
9
9
  class AppConfig
10
10
 
11
11
  def initialize debug
12
12
  @debug = debug
13
- @helpers = Helpers.new(debug)
13
+ @moesif_helpers = MoesifHelpers.new(debug)
14
14
  @regex_config_helper = RegexConfigHelper.new(debug)
15
15
  end
16
16
 
@@ -18,17 +18,17 @@ class AppConfig
18
18
  # Get Application Config
19
19
  begin
20
20
  config_api_response = api_controller.get_app_config()
21
- @helpers.log_debug("new config downloaded")
22
- @helpers.log_debug(config_api_response.to_s)
21
+ @moesif_helpers.log_debug("new config downloaded")
22
+ @moesif_helpers.log_debug(config_api_response.to_s)
23
23
  return config_api_response
24
24
  rescue MoesifApi::APIException => e
25
25
  if e.response_code.between?(401, 403)
26
- @helpers.log_debug 'Unauthorized access getting application configuration. Please check your Appplication Id.'
26
+ @moesif_helpers.log_debug 'Unauthorized access getting application configuration. Please check your Appplication Id.'
27
27
  end
28
- @helpers.log_debug 'Error getting application configuration, with status code:'
29
- @helpers.log_debug e.response_code
28
+ @moesif_helpers.log_debug 'Error getting application configuration, with status code:'
29
+ @moesif_helpers.log_debug e.response_code
30
30
  rescue => e
31
- @helpers.log_debug e.to_s
31
+ @moesif_helpers.log_debug e.to_s
32
32
  end
33
33
  rescue
34
34
  end
@@ -38,20 +38,20 @@ class AppConfig
38
38
  begin
39
39
  # Rails return gzipped compressed response body, so decompressing it and getting JSON response body
40
40
  response_body = decompress_gzip_body(config_api_response)
41
- @helpers.log_debug(response_body.to_s)
41
+ @moesif_helpers.log_debug(response_body.to_s)
42
42
 
43
43
  # Check if response body is not nil
44
44
  if !response_body.nil? then
45
45
  # Return Etag, sample rate and last updated time
46
46
  return response_body, config_api_response.headers[:x_moesif_config_etag], Time.now.utc
47
47
  else
48
- @helpers.log_debug 'Response body is nil, assuming default behavior'
48
+ @moesif_helpers.log_debug 'Response body is nil, assuming default behavior'
49
49
  # Response body is nil, so assuming default behavior
50
50
  return nil, nil, Time.now.utc
51
51
  end
52
52
  rescue => exception
53
- @helpers.log_debug 'Error while parsing the configuration object, assuming default behavior'
54
- @helpers.log_debug exception.to_s
53
+ @moesif_helpers.log_debug 'Error while parsing the configuration object, assuming default behavior'
54
+ @moesif_helpers.log_debug exception.to_s
55
55
  # Assuming default behavior
56
56
  return nil, nil, Time.now.utc
57
57
  end
@@ -62,8 +62,8 @@ class AppConfig
62
62
  begin
63
63
  # Check if response body is not nil
64
64
  if !config_api_response.nil? then
65
- @helpers.log_debug("Getting sample rate for user #{user_id} company #{company_id}")
66
- @helpers.log_debug(config_api_response.to_s)
65
+ @moesif_helpers.log_debug("Getting sample rate for user #{user_id} company #{company_id}")
66
+ @moesif_helpers.log_debug(config_api_response.to_s)
67
67
 
68
68
  # Get Regex Sampling rate
69
69
  regex_config = config_api_response.fetch('regex_config', nil)
@@ -95,12 +95,12 @@ class AppConfig
95
95
  # Return sample rate
96
96
  return config_api_response.fetch('sample_rate', 100)
97
97
  else
98
- @helpers.log_debug 'Assuming default behavior as response body is nil - '
98
+ @moesif_helpers.log_debug 'Assuming default behavior as response body is nil - '
99
99
  return 100
100
100
  end
101
101
  rescue => exception
102
- @helpers.log_debug 'Error while geting sampling percentage, assuming default behavior'
103
- @helpers.log_debug exception.to_s
102
+ @moesif_helpers.log_debug 'Error while geting sampling percentage, assuming default behavior'
103
+ @moesif_helpers.log_debug exception.to_s
104
104
  return 100
105
105
  end
106
106
  end
@@ -120,12 +120,12 @@ class AppConfig
120
120
  # Return the parsed body
121
121
  return JSON.parse( uncompressed_string )
122
122
  else
123
- @helpers.log_debug 'Content Encoding is of type other than gzip, returning nil'
123
+ @moesif_helpers.log_debug 'Content Encoding is of type other than gzip, returning nil'
124
124
  return nil
125
125
  end
126
126
  rescue => exception
127
- @helpers.log_debug 'Error while decompressing the response body'
128
- @helpers.log_debug exception.to_s
127
+ @moesif_helpers.log_debug 'Error while decompressing the response body'
128
+ @moesif_helpers.log_debug exception.to_s
129
129
  return nil
130
130
  end
131
131
  end
@@ -1,6 +1,6 @@
1
1
  require 'time'
2
2
 
3
- class Helpers
3
+ class MoesifHelpers
4
4
 
5
5
  def initialize debug
6
6
  @debug = debug
@@ -4,11 +4,12 @@ require 'time'
4
4
  require 'base64'
5
5
  require 'zlib'
6
6
  require 'stringio'
7
+ require 'rack'
7
8
  require_relative './client_ip.rb'
8
9
  require_relative './app_config.rb'
9
10
  require_relative './update_user.rb'
10
11
  require_relative './update_company.rb'
11
- require_relative './helpers.rb'
12
+ require_relative './moesif_helpers.rb'
12
13
 
13
14
  module MoesifRack
14
15
 
@@ -30,7 +31,7 @@ module MoesifRack
30
31
  @skip = options['skip']
31
32
  @debug = options['debug']
32
33
  @app_config = AppConfig.new(@debug)
33
- @helpers = Helpers.new(@debug)
34
+ @moesif_helpers = MoesifHelpers.new(@debug)
34
35
  @config = @app_config.get_config(@api_controller)
35
36
  @config_etag = nil
36
37
  @last_config_download_time = Time.now.utc
@@ -50,13 +51,13 @@ module MoesifRack
50
51
  @config, @config_etag, @last_config_download_time = @app_config.parse_configuration(new_config)
51
52
  end
52
53
  rescue => exception
53
- @helpers.log_debug 'Error while parsing application configuration on initialization'
54
- @helpers.log_debug exception.to_s
54
+ @moesif_helpers.log_debug 'Error while parsing application configuration on initialization'
55
+ @moesif_helpers.log_debug exception.to_s
55
56
  end
56
57
  @capture_outoing_requests = options['capture_outoing_requests']
57
58
  @capture_outgoing_requests = options['capture_outgoing_requests']
58
59
  if @capture_outoing_requests || @capture_outgoing_requests
59
- @helpers.log_debug 'Start Capturing outgoing requests'
60
+ @moesif_helpers.log_debug 'Start Capturing outgoing requests'
60
61
  require_relative '../../moesif_capture_outgoing/httplog.rb'
61
62
  MoesifCaptureOutgoing.start_capture_outgoing(options)
62
63
  end
@@ -94,12 +95,30 @@ module MoesifRack
94
95
  return Base64.encode64(body), 'base64'
95
96
  end
96
97
 
97
- def @helpers.log_debug(message)
98
+ def @moesif_helpers.log_debug(message)
98
99
  if @debug
99
100
  puts("#{Time.now.to_s} [Moesif Middleware] PID #{Process.pid} TID #{Thread.current.object_id} #{message}")
100
101
  end
101
102
  end
102
103
 
104
+ def parse_multipart(multipart_form_data, content_type)
105
+ @moesif_helpers.log_debug("try to parse multiple part #{content_type}")
106
+
107
+ sanitized_multipart_form_data = multipart_form_data.gsub(/\r?\n/, "\r\n")
108
+
109
+ io = StringIO.new(sanitized_multipart_form_data)
110
+ tempfile = Rack::Multipart::Parser::TEMPFILE_FACTORY
111
+ bufsize = Rack::Multipart::Parser::BUFSIZE
112
+ query_parser = Rack::Utils.default_query_parser
113
+ result = Rack::Multipart::Parser.parse(io, sanitized_multipart_form_data.length, content_type, tempfile, bufsize, query_parser)
114
+
115
+ @moesif_helpers.log_debug("multipart parse result")
116
+ @moesif_helpers.log_debug(result.inspect)
117
+
118
+ # this is a hash shold be treated as JSON down the road.
119
+ result.params
120
+ end
121
+
103
122
  def parse_body(body, headers)
104
123
  begin
105
124
  if (body.instance_of?(Hash) || body.instance_of?(Array))
@@ -108,6 +127,9 @@ module MoesifRack
108
127
  elsif start_with_json(body)
109
128
  parsed_body = JSON.parse(body)
110
129
  transfer_encoding = 'json'
130
+ elsif headers.key?('content-type') && ((headers['content-type'].downcase).include? 'multipart/form-data')
131
+ parsed_body = parse_multipart(body, headers['content-type'])
132
+ transfer_encoding = 'json'
111
133
  elsif headers.key?('content-encoding') && ((headers['content-encoding'].downcase).include? "gzip")
112
134
  uncompressed_string = decompress_body(body)
113
135
  parsed_body, transfer_encoding = base64_encode_body(uncompressed_string)
@@ -127,29 +149,29 @@ module MoesifRack
127
149
  begin
128
150
  until @events_queue.empty? do
129
151
  batch_events = []
130
- until batch_events.size == @batch_size || @events_queue.empty? do
152
+ until batch_events.size == @batch_size || @events_queue.empty? do
131
153
  batch_events << @events_queue.pop
132
- end
133
- @helpers.log_debug("Sending #{batch_events.size.to_s} events to Moesif")
154
+ end
155
+ @moesif_helpers.log_debug("Sending #{batch_events.size.to_s} events to Moesif")
134
156
  event_api_response = @api_controller.create_events_batch(batch_events)
135
157
  @event_response_config_etag = event_api_response[:x_moesif_config_etag]
136
- @helpers.log_debug(event_api_response.to_s)
137
- @helpers.log_debug("Events successfully sent to Moesif")
158
+ @moesif_helpers.log_debug(event_api_response.to_s)
159
+ @moesif_helpers.log_debug("Events successfully sent to Moesif")
138
160
  end
139
-
161
+
140
162
  if @events_queue.empty?
141
- @helpers.log_debug("No events to read from the queue")
163
+ @moesif_helpers.log_debug("No events to read from the queue")
142
164
  end
143
-
165
+
144
166
  sleep @batch_max_time
145
167
  rescue MoesifApi::APIException => e
146
168
  if e.response_code.between?(401, 403)
147
169
  puts "Unathorized accesss sending event to Moesif. Please verify your Application Id."
148
- @helpers.log_debug(e.to_s)
170
+ @moesif_helpers.log_debug(e.to_s)
149
171
  end
150
- @helpers.log_debug("Error sending event to Moesif, with status code #{e.response_code.to_s}")
172
+ @moesif_helpers.log_debug("Error sending event to Moesif, with status code #{e.response_code.to_s}")
151
173
  rescue => e
152
- @helpers.log_debug(e.to_s)
174
+ @moesif_helpers.log_debug(e.to_s)
153
175
  end
154
176
  end
155
177
  end
@@ -158,7 +180,7 @@ module MoesifRack
158
180
  def call env
159
181
  start_time = Time.now.utc.iso8601(3)
160
182
 
161
- @helpers.log_debug('Calling Moesif middleware')
183
+ @moesif_helpers.log_debug('Calling Moesif middleware')
162
184
 
163
185
  status, headers, body = @app.call env
164
186
  end_time = Time.now.utc.iso8601(3)
@@ -177,6 +199,8 @@ module MoesifRack
177
199
  req_headers[new_key] = val
178
200
  end
179
201
 
202
+ # rewind first in case someone else already read the body
203
+ req.body.rewind
180
204
  req_body_string = req.body.read
181
205
  req.body.rewind
182
206
  req_body_transfer_encoding = nil
@@ -229,12 +253,12 @@ module MoesifRack
229
253
  end
230
254
 
231
255
  # Add Transaction Id to the Response Header
232
- if !transaction_id.nil?
256
+ if !transaction_id.nil?
233
257
  rsp_headers["X-Moesif-Transaction-Id"] = transaction_id
234
258
  end
235
259
 
236
260
  # Add Transaction Id to the Repsonse Header sent to the client
237
- if !transaction_id.nil?
261
+ if !transaction_id.nil?
238
262
  headers["X-Moesif-Transaction-Id"] = transaction_id
239
263
  end
240
264
 
@@ -254,73 +278,73 @@ module MoesifRack
254
278
  event_model.request = event_req
255
279
  event_model.response = event_rsp
256
280
  event_model.direction = "Incoming"
257
-
281
+
258
282
  if @identify_user
259
- @helpers.log_debug "calling identify user proc"
283
+ @moesif_helpers.log_debug "calling identify user proc"
260
284
  event_model.user_id = @identify_user.call(env, headers, body)
261
285
  end
262
286
 
263
287
  if @identify_company
264
- @helpers.log_debug "calling identify company proc"
288
+ @moesif_helpers.log_debug "calling identify company proc"
265
289
  event_model.company_id = @identify_company.call(env, headers, body)
266
290
  end
267
291
 
268
292
  if @get_metadata
269
- @helpers.log_debug "calling get_metadata proc"
293
+ @moesif_helpers.log_debug "calling get_metadata proc"
270
294
  event_model.metadata = @get_metadata.call(env, headers, body)
271
295
  end
272
296
 
273
297
  if @identify_session
274
- @helpers.log_debug "calling identify session proc"
298
+ @moesif_helpers.log_debug "calling identify session proc"
275
299
  event_model.session_token = @identify_session.call(env, headers, body)
276
300
  end
277
301
  if @mask_data
278
- @helpers.log_debug "calling mask_data proc"
302
+ @moesif_helpers.log_debug "calling mask_data proc"
279
303
  event_model = @mask_data.call(event_model)
280
304
  end
281
305
 
282
- @helpers.log_debug "sending data to moesif"
283
- @helpers.log_debug event_model.to_json
306
+ @moesif_helpers.log_debug "sending data to moesif"
307
+ @moesif_helpers.log_debug event_model.to_json
284
308
  # Perform the API call through the SDK function
285
309
  begin
286
310
  random_percentage = Random.rand(0.00..100.00)
287
311
 
288
- begin
312
+ begin
289
313
  sampling_percentage = @app_config.get_sampling_percentage(event_model, @config, event_model.user_id, event_model.company_id)
290
- @helpers.log_debug "Using sample rate #{sampling_percentage}"
314
+ @moesif_helpers.log_debug "Using sample rate #{sampling_percentage}"
291
315
  rescue => exception
292
- @helpers.log_debug 'Error while getting sampling percentage, assuming default behavior'
293
- @helpers.log_debug exception.to_s
316
+ @moesif_helpers.log_debug 'Error while getting sampling percentage, assuming default behavior'
317
+ @moesif_helpers.log_debug exception.to_s
294
318
  sampling_percentage = 100
295
319
  end
296
320
 
297
- if sampling_percentage > random_percentage
321
+ if sampling_percentage > random_percentage
298
322
  event_model.weight = @app_config.calculate_weight(sampling_percentage)
299
323
  # Add Event to the queue
300
324
  @events_queue << event_model
301
- @helpers.log_debug("Event added to the queue ")
325
+ @moesif_helpers.log_debug("Event added to the queue ")
302
326
  if Time.now.utc > (@last_worker_run + 60)
303
327
  start_worker()
304
328
  end
305
329
 
306
330
  if !@event_response_config_etag.nil? && !@config_etag.nil? && @config_etag != @event_response_config_etag && Time.now.utc > (@last_config_download_time + 300)
307
- begin
331
+ begin
308
332
  new_config = @app_config.get_config(@api_controller)
309
333
  if !new_config.nil?
310
334
  @config, @config_etag, @last_config_download_time = @app_config.parse_configuration(new_config)
311
335
  end
312
336
 
313
337
  rescue => exception
314
- @helpers.log_debug 'Error while updating the application configuration'
315
- @helpers.log_debug exception.to_s
338
+ @moesif_helpers.log_debug 'Error while updating the application configuration'
339
+ @moesif_helpers.log_debug exception.to_s
316
340
  end
317
341
  end
318
342
  else
319
- @helpers.log_debug("Skipped Event due to sampling percentage: " + sampling_percentage.to_s + " and random percentage: " + random_percentage .to_s)
343
+ @moesif_helpers.log_debug("Skipped Event due to sampling percentage: " + sampling_percentage.to_s + " and random percentage: " + random_percentage.to_s)
320
344
  end
321
345
  rescue => exception
322
- @helpers.log_debug "Error adding event to the queue "
323
- @helpers.log_debug exception.to_s
346
+ @moesif_helpers.log_debug "Error adding event to the queue "
347
+ @moesif_helpers.log_debug exception.to_s
324
348
  end
325
349
 
326
350
  end
@@ -334,15 +358,15 @@ module MoesifRack
334
358
  end
335
359
 
336
360
  if !should_skip
337
- begin
361
+ begin
338
362
  process_send.call
339
363
  rescue => exception
340
- @helpers.log_debug 'Error while logging event - '
341
- @helpers.log_debug exception.to_s
342
- @helpers.log_debug exception.backtrace
364
+ @moesif_helpers.log_debug 'Error while logging event - '
365
+ @moesif_helpers.log_debug exception.to_s
366
+ @moesif_helpers.log_debug exception.backtrace
343
367
  end
344
368
  else
345
- @helpers.log_debug "Skipped Event using should_skip configuration option."
369
+ @moesif_helpers.log_debug "Skipped Event using should_skip configuration option."
346
370
  end
347
371
 
348
372
  [status, headers, body]
@@ -1,6 +1,6 @@
1
1
  require 'moesif_api'
2
2
 
3
- require_relative './helpers.rb'
3
+ require_relative './moesif_helpers.rb'
4
4
 
5
5
  class RegexConfigHelper
6
6
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moesif_rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.16
4
+ version: 1.4.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Moesif, Inc
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-02-24 00:00:00.000000000 Z
12
+ date: 2023-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: test-unit
@@ -56,7 +56,7 @@ files:
56
56
  - lib/moesif_rack.rb
57
57
  - lib/moesif_rack/app_config.rb
58
58
  - lib/moesif_rack/client_ip.rb
59
- - lib/moesif_rack/helpers.rb
59
+ - lib/moesif_rack/moesif_helpers.rb
60
60
  - lib/moesif_rack/moesif_middleware.rb
61
61
  - lib/moesif_rack/regex_config_helper.rb
62
62
  - lib/moesif_rack/update_company.rb