zuora_connect 2.0.25 → 2.0.26

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4fea76bb37d1ec660b8a128db1cca709c37e6e2214d3d521c51e4195a3f8164f
4
- data.tar.gz: 4a14dabec4749c279c835ccf0d6fbe52c9fdca911b2513a610f06ac84cf095f6
3
+ metadata.gz: 239f7a1bb6772f339b0c133922484240ab3d1386977da45fd19c056efe8ab287
4
+ data.tar.gz: 953110b10aa289412dba1f78e7d20fef51c25fb7e7d5a727b7cc2e87e46a6bdf
5
5
  SHA512:
6
- metadata.gz: f203e242d524d7936497fc760ec6a563e703e96e62745e27b650a98a4dea4d3717563a3ed7a20144d1dab4c51313694a5993e2d9cb02cb8abadc3e3160f75699
7
- data.tar.gz: 87365e269b53f1e9d8f48841ba4c5b1a8892627a20f30b3a6af2fc31498446e7facecc1dd91546c03ce80e78f01e67185f37bd4ec47d68d6b333ac5246ad089e
6
+ metadata.gz: d36513091307381a8f13907ccd9e9c1302e2745fb071f7b895edca58d5e769e002ea749a65a55c71d7a1d86a085c54e07df628e208c0b134617021d75696dd4d
7
+ data.tar.gz: e422088de704297c8ab7cbf9a876f120059d9ed641ad31d6ed54fa43520e88ee5beb1b81c172e3adb10f9a82e3466a6946c9c057d88a26062e3a38052ec6925b
@@ -19,6 +19,12 @@ module ZuoraConnect
19
19
  IGNORED_LOCALS = ['fr', 'ja', 'es', 'zh', 'de']
20
20
  INTERNAL_HOSTS = []
21
21
  LOGIN_TENANT_DESTINATION = 'target_login'
22
+ AWS_AUTH_ERRORS = [
23
+ Aws::Sigv4::Errors::MissingCredentialsError,
24
+ Aws::Errors::MissingCredentialsError,
25
+ Aws::S3::Errors::AccessDenied,
26
+ ].freeze
27
+ AWS_AUTH_ERRORS_MSG = "AWS Auth Errors".freeze
22
28
 
23
29
  def init
24
30
  self.connect_user = 'Nobody'
@@ -250,8 +256,9 @@ module ZuoraConnect
250
256
 
251
257
  def refresh(session: {}, session_fallback: false)
252
258
  refresh_count ||= 0
259
+ skip_connect ||= false
253
260
  #Check how app was deployed
254
- if !self['zuora_logins'].present?
261
+ if self.id < 25000000 && !skip_connect
255
262
  start = Time.now
256
263
  response = HTTParty.get(ZuoraConnect.configuration.url + "/api/#{self.api_version}/tools/tasks/#{self.id}.json",:body => {:access_token => self.access_token})
257
264
  response_time = Time.now - start
@@ -263,7 +270,12 @@ module ZuoraConnect
263
270
  rescue JSON::ParserError => ex
264
271
  raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("JSON parse error", response.body, response.code)
265
272
  end
266
- self.build_task(task_data: parsed_json, session: session)
273
+
274
+ self.build_task(task_data: parsed_json, session: session)
275
+ if self.kms_key.present?
276
+ self.zuora_logins = parsed_json
277
+ self.save(:validate => false)
278
+ end
267
279
  else
268
280
  raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error Communicating with Connect", response.body, response.code)
269
281
  end
@@ -274,21 +286,31 @@ module ZuoraConnect
274
286
  self.cache_app_instance
275
287
  self.reset_mark_for_refresh
276
288
  rescue *(ZuoraAPI::Login::CONNECTION_EXCEPTIONS + ZuoraAPI::Login::CONNECTION_READ_EXCEPTIONS) => ex
277
- if (refresh_count += 1) < 3
278
- sleep(30)
289
+ refresh_count += 1
290
+ if refresh_count < 3
291
+ sleep(10)
279
292
  ZuoraConnect.logger.debug("REFRESH TASK - Connection Failure Retrying(#{refresh_count})", ex, self.default_ougai_items)
280
293
  retry
294
+ elsif refresh_count < 4 && self['zuora_logins'].present?
295
+ ZuoraConnect.logger.warn("REFRESH TASK - Fallback to local encrypted store", ex, self.default_ougai_items)
296
+ skip_connect = true
297
+ retry
281
298
  else
282
299
  ZuoraConnect.logger.fatal("REFRESH TASK - Connection Failed", ex, self.default_ougai_items)
283
300
  raise
284
301
  end
285
302
  rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
286
- if (refresh_count += 1) < 3
303
+ refresh_count += 1
304
+ if refresh_count < 3
287
305
  ZuoraConnect.logger.debug("REFRESH TASK - Communication Failure Retrying(#{refresh_count})", ex, self.default_ougai_items)
288
306
  if ex.code == 401
289
307
  self.refresh_oauth
290
308
  end
291
309
  retry
310
+ elsif refresh_count < 4 && self['zuora_logins'].present?
311
+ ZuoraConnect.logger.warn("REFRESH TASK - Fallback to local encrypted store", ex, self.default_ougai_items)
312
+ skip_connect = true
313
+ retry
292
314
  else
293
315
  ZuoraConnect.logger.fatal("REFRESH TASK - Communication Failed #{ex.code}", ex, self.default_ougai_items)
294
316
  raise
@@ -301,26 +323,46 @@ module ZuoraConnect
301
323
  end
302
324
 
303
325
  def zuora_logins
326
+ raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Zuora Logins is blank, cannot decrypt.") if super.blank?
304
327
  return JSON.parse(kms_decrypt(super))
305
328
  end
306
329
 
307
330
  def kms_decrypt(value)
331
+ kms_tries ||= 0
308
332
  kms_client = Aws::KMS::Client.new({region: Rails.application.secrets.aws['AWS_REGION'], credentials: self.aws_auth_client}.delete_if { |k, v| v.blank? })
309
333
  resp = kms_client.decrypt({ciphertext_blob: [value].pack("H*") })
310
334
  return resp.plaintext
335
+ rescue *AWS_AUTH_ERRORS => ex
336
+ Rails.logger.error(AWS_AUTH_ERRORS_MSG, ex)
337
+ if (kms_tries += 1) < 3
338
+ retry
339
+ else
340
+ raise
341
+ end
311
342
  end
312
343
 
313
344
  def kms_encrypt(value)
345
+ kms_tries ||= 0
314
346
  kms_client = Aws::KMS::Client.new({region: Rails.application.secrets.aws['AWS_REGION'], credentials: self.aws_auth_client}.delete_if {|k,v| v.blank? })
315
- kms_key = ENV['AWS_KMS_ARN'] || Rails.application.secrets.aws['AWS_KMS_ARN']
316
347
 
317
348
  resp = kms_client.encrypt({key_id: kms_key, plaintext: value})
318
349
  return resp.ciphertext_blob.unpack('H*').first
350
+ rescue *AWS_AUTH_ERRORS => ex
351
+ Rails.logger.error(AWS_AUTH_ERRORS_MSG, ex)
352
+ if (kms_tries += 1) < 3
353
+ retry
354
+ else
355
+ raise
356
+ end
357
+ end
358
+
359
+ def kms_key
360
+ return ENV['AWS_KMS_ARN'] || Rails.application.secrets.aws['AWS_KMS_ARN']
319
361
  end
320
362
 
321
363
  def aws_auth_client
322
364
  if Rails.env.to_s == 'development'
323
- return Aws::Credentials.new(Rails.application.secrets.aws['AWS_ACCESS_KEY_ID'], Rails.application.secrets.aws['AWS_SECRET_ACCESS_KEY'])
365
+ return Aws::Credentials.new(Rails.application.secrets.aws['AWS_ACCESS_KEY_ID'], Rails.application.secrets.aws['AWS_SECRET_ACCESS_KEY'])
324
366
  else
325
367
  return nil
326
368
  end
@@ -1,3 +1,3 @@
1
1
  module ZuoraConnect
2
- VERSION = "2.0.25"
2
+ VERSION = "2.0.26"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zuora_connect
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.25
4
+ version: 2.0.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Connect Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-30 00:00:00.000000000 Z
11
+ date: 2020-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: apartment
@@ -423,41 +423,41 @@ test_files:
423
423
  - test/integration/navigation_test.rb
424
424
  - test/controllers/zuora_connect/api/v1/app_instance_controller_test.rb
425
425
  - test/fixtures/zuora_connect/app_instances.yml
426
+ - test/lib/generators/zuora_connect/datatable_generator_test.rb
427
+ - test/models/zuora_connect/app_instance_test.rb
428
+ - test/zuora_connect_test.rb
429
+ - test/dummy/Rakefile
430
+ - test/dummy/config.ru
431
+ - test/dummy/public/422.html
432
+ - test/dummy/public/404.html
433
+ - test/dummy/public/500.html
434
+ - test/dummy/public/favicon.ico
426
435
  - test/dummy/app/controllers/application_controller.rb
436
+ - test/dummy/app/helpers/application_helper.rb
427
437
  - test/dummy/app/views/layouts/application.html.erb
428
- - test/dummy/app/assets/stylesheets/application.css
429
438
  - test/dummy/app/assets/javascripts/application.js
430
- - test/dummy/app/helpers/application_helper.rb
431
- - test/dummy/bin/setup
432
- - test/dummy/bin/bundle
433
- - test/dummy/bin/rake
439
+ - test/dummy/app/assets/stylesheets/application.css
440
+ - test/dummy/README.rdoc
434
441
  - test/dummy/bin/rails
435
- - test/dummy/config/routes.rb
436
- - test/dummy/config/environment.rb
437
- - test/dummy/config/application.rb
442
+ - test/dummy/bin/rake
443
+ - test/dummy/bin/bundle
444
+ - test/dummy/bin/setup
445
+ - test/dummy/config/secrets.yml
438
446
  - test/dummy/config/boot.rb
447
+ - test/dummy/config/initializers/mime_types.rb
448
+ - test/dummy/config/initializers/filter_parameter_logging.rb
449
+ - test/dummy/config/initializers/session_store.rb
450
+ - test/dummy/config/initializers/inflections.rb
451
+ - test/dummy/config/initializers/cookies_serializer.rb
452
+ - test/dummy/config/initializers/assets.rb
453
+ - test/dummy/config/initializers/wrap_parameters.rb
454
+ - test/dummy/config/initializers/backtrace_silencers.rb
439
455
  - test/dummy/config/database.yml
456
+ - test/dummy/config/environment.rb
457
+ - test/dummy/config/application.rb
458
+ - test/dummy/config/routes.rb
440
459
  - test/dummy/config/environments/production.rb
441
460
  - test/dummy/config/environments/development.rb
442
461
  - test/dummy/config/environments/test.rb
443
- - test/dummy/config/secrets.yml
444
462
  - test/dummy/config/locales/en.yml
445
- - test/dummy/config/initializers/inflections.rb
446
- - test/dummy/config/initializers/backtrace_silencers.rb
447
- - test/dummy/config/initializers/mime_types.rb
448
- - test/dummy/config/initializers/filter_parameter_logging.rb
449
- - test/dummy/config/initializers/assets.rb
450
- - test/dummy/config/initializers/cookies_serializer.rb
451
- - test/dummy/config/initializers/session_store.rb
452
- - test/dummy/config/initializers/wrap_parameters.rb
453
- - test/dummy/public/favicon.ico
454
- - test/dummy/public/500.html
455
- - test/dummy/public/404.html
456
- - test/dummy/public/422.html
457
- - test/dummy/Rakefile
458
- - test/dummy/README.rdoc
459
- - test/dummy/config.ru
460
- - test/lib/generators/zuora_connect/datatable_generator_test.rb
461
463
  - test/test_helper.rb
462
- - test/zuora_connect_test.rb
463
- - test/models/zuora_connect/app_instance_test.rb