zuora_connect 3.1.0 → 3.1.1.pre.c

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: 689c9d74cda46ebd41a5d98dba982700dd365fa3746378276ceb0da4f5d0c493
4
- data.tar.gz: 719e7beb03b156986160f8fa881960a7b7231b706c9a6bcd50af1788d622a125
3
+ metadata.gz: ef73a28bd87609cedef16023f75320765d7b38b3e3417be5b5000be410596127
4
+ data.tar.gz: 62440f4e6e5ae219f40d9dc5b927b896cd26214cb9693191629929594c9f349a
5
5
  SHA512:
6
- metadata.gz: 4f905b5518a0b7e556d3cf4a45e73e86b149a4b95d111a315e46a2f91e9a07b43b2e9b77f0bd1c34e6fbf5848d321b64615ec612fc907b7f3fb9fd2f56944be3
7
- data.tar.gz: a61a9c662b80a4d8af8a98f6eeef2be56b79cc9bc0853ae36a57ce22a59dde8bae5a7ab1b175aedec703743b6ccae8e81f2e565b028a23cdda9b7dce7544eb1a
6
+ metadata.gz: fe0dc6bf317c0ff0e76d069db2abd158175527cd5b971065b6c84d79412971c4fbab8ad5141bd4525497d41e38ca2b99c0760f662791a920955770692e278ef5
7
+ data.tar.gz: f15d374ed1aaa037ca1764d71f468eac6019b6515ac0a41f20835e732adc0dc9651b893f8f5f18b2a494e2e54f083be7dda77b9a6863dbd53a1d39f13e7cb221
@@ -187,7 +187,7 @@ module ZuoraConnect
187
187
  raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
188
188
  self.refresh(session: session)
189
189
 
190
- elsif session["#{self.id}::task_data"].blank?
190
+ elsif session["#{self.id}::task_data"].blank? && !ZuoraConnect.configuration.local_task_data
191
191
  self.new_session_message = "REFRESHING - Task Data Blank"
192
192
  ZuoraConnect.logger.debug(self.new_session_message)
193
193
  raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
@@ -353,8 +353,10 @@ module ZuoraConnect
353
353
  end
354
354
 
355
355
  def fetch_connect_data(session: {})
356
+ refresh_count ||= 0
356
357
  self.check_oauth_state
357
- response = HTTParty.get(ZuoraConnect.configuration.url + "/api/#{self.api_version}/tools/tasks/#{self.id}.json",:body => {:access_token => self.access_token})
358
+ request_url = ZuoraConnect.configuration.url + "/api/#{self.api_version}/tools/tasks/#{self.id}.json"
359
+ response = HTTParty.get(request_url,:body => {:access_token => self.access_token})
358
360
 
359
361
  if response.code == 200
360
362
  begin
@@ -367,45 +369,43 @@ module ZuoraConnect
367
369
  self.set_backup_creds
368
370
  self.save(validate: false) if self.changed?
369
371
  else
370
- raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error Communicating with Connect", response.body, response.code)
372
+ raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error communicating with Connect for '#{request_url}' with #{response.code}", response.body, response.code)
373
+ end
374
+ rescue *(ZuoraAPI::Login::CONNECTION_EXCEPTIONS + ZuoraAPI::Login::CONNECTION_READ_EXCEPTIONS) => ex
375
+ refresh_count += 1
376
+ if refresh_count < 3
377
+ sleep(10)
378
+ ZuoraConnect.logger.debug("REFRESH TASK - Connection Failure Retrying(#{refresh_count})", ex, self.default_ougai_items)
379
+ retry
380
+ else
381
+ ZuoraConnect.logger.fatal("REFRESH TASK - Connection Failed", ex)
382
+ raise
383
+ end
384
+ rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
385
+ refresh_count += 1
386
+ if refresh_count < 3
387
+ ZuoraConnect.logger.debug("REFRESH TASK - Communication Failure Retrying(#{refresh_count})", ex, self.default_ougai_items)
388
+ self.refresh_oauth if ex.code == 401
389
+ retry
390
+ else
391
+ ZuoraConnect.logger.fatal("REFRESH TASK - Communication Failed #{ex.code}", ex, self.default_ougai_items)
392
+ raise
371
393
  end
372
394
  end
373
395
 
374
-
375
396
  def refresh(session: {})
376
397
  refresh_count ||= 0
377
398
  skip_connect ||= ZuoraConnect.configuration.skip_connect
378
- begin
379
- #Check how app was deployed
380
- if !self.auto_deployed? && (!skip_connect || self['zuora_logins'].blank?)
381
- self.fetch_connect_data(session: session)
382
- else
383
- self.build_task(task_data: self.zuora_logins, session: session)
384
- end
385
- self.last_refresh = Time.now.to_i
386
- self.cache_app_instance
387
- self.reset_mark_for_refresh
388
- rescue *(ZuoraAPI::Login::CONNECTION_EXCEPTIONS + ZuoraAPI::Login::CONNECTION_READ_EXCEPTIONS) => ex
389
- refresh_count += 1
390
- if refresh_count < 3
391
- sleep(10)
392
- ZuoraConnect.logger.debug("REFRESH TASK - Connection Failure Retrying(#{refresh_count})", ex, self.default_ougai_items)
393
- retry
394
- else
395
- ZuoraConnect.logger.fatal("REFRESH TASK - Connection Failed", ex)
396
- raise
397
- end
398
- rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
399
- refresh_count += 1
400
- if refresh_count < 3
401
- ZuoraConnect.logger.debug("REFRESH TASK - Communication Failure Retrying(#{refresh_count})", ex, self.default_ougai_items)
402
- self.refresh_oauth if ex.code == 401
403
- retry
404
- else
405
- ZuoraConnect.logger.fatal("REFRESH TASK - Communication Failed #{ex.code}", ex, self.default_ougai_items)
406
- raise
407
- end
399
+ #Check how app was deployed
400
+ if !self.auto_deployed? && (!skip_connect || self['zuora_logins'].blank?)
401
+ self.fetch_connect_data(session: session)
402
+ else
403
+ self.build_task(task_data: self.zuora_logins, session: session)
408
404
  end
405
+ self.last_refresh = Time.now.to_i
406
+ self.cache_app_instance
407
+ self.reset_mark_for_refresh
408
+
409
409
  rescue => ex
410
410
  refresh_count += 1
411
411
  if self['zuora_logins'].present? && refresh_count < 3
@@ -416,10 +416,6 @@ module ZuoraConnect
416
416
  raise
417
417
  end
418
418
 
419
- def aws_secrets
420
- (Rails.application.secrets.aws || {}).transform_keys { |key| key.to_s }
421
- end
422
-
423
419
  #### START KMS ENCRYPTION Methods ####
424
420
  def set_backup_creds
425
421
  if self.kms_key.present? && self.kms_key.match(/^arn:aws:.*/) && self.task_data.present?
@@ -435,14 +431,105 @@ module ZuoraConnect
435
431
 
436
432
  def zuora_logins
437
433
  raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Zuora Logins is blank, cannot decrypt.") if super.blank?
438
- return JSON.parse(kms_decrypt(super))
434
+ return JSON.parse(kms_decrypt(super, field_name: :zuora_logins))
435
+ end
436
+
437
+ def kms_client
438
+ @kms_client ||= Aws::KMS::Client.new({region: aws_secrets['AWS_REGION'], credentials: self.aws_auth_client}.delete_if { |k, v| v.blank? })
439
+ return @kms_client
440
+ end
441
+
442
+ def decrypted_data_key
443
+ $cleartextkey ||= kms_client.decrypt(ciphertext_blob: Base64.strict_decode64(encrypted_data_key)).plaintext
444
+ return $cleartextkey
445
+ end
446
+
447
+ def aws_secrets
448
+ (Rails.application.secrets.aws || {}).transform_keys { |key| key.to_s }
449
+ end
450
+
451
+ def connect_secrets
452
+ (Rails.application.secrets.connect || {}).transform_keys { |key| key.to_s }
453
+ end
454
+
455
+ def kms_key(raise_on_blank: false)
456
+ kms_value = ENV['AWS_KMS_ARN'] || aws_secrets['AWS_KMS_ARN']
457
+ raise ZuoraConnect::Exceptions::Error.new("Missing KMS key") if raise_on_blank && kms_value.blank?
458
+ return kms_value
439
459
  end
440
460
 
441
- def kms_decrypt(value)
461
+ def iv_key
462
+ iv_key_value = ENV['IV_KEY'] || connect_secrets['IV_KEY']
463
+ #Create new one 'Base64.strict_encode64(OpenSSL::Cipher.new('AES-256-CBC').random_iv)'
464
+ raise ZuoraConnect::Exceptions::Error.new("Missing IV cipher key") if iv_key_value.blank?
465
+ return iv_key_value
466
+ end
467
+
468
+ def encrypted_data_key
469
+ #Base64.strict_encode64(kms_client.generate_data_key(key_id: kms_key, key_spec: 'AES_256').ciphertext_blob)
470
+ encrypted_data_key_value = ENV['ENCRYPTED_DATA_KEY'] || connect_secrets['ENCRYPTED_DATA_KEY']
471
+ raise ZuoraConnect::Exceptions::Error.new("Missing encrypted data key 'ENCRYPTED_DATA_KEY'.") if encrypted_data_key_value.blank?
472
+ return encrypted_data_key_value
473
+ end
474
+
475
+ def aws_auth_client
476
+ if Rails.env.to_s == 'development'
477
+ return Aws::Credentials.new(aws_secrets['AWS_ACCESS_KEY_ID'], aws_secrets['AWS_SECRET_ACCESS_KEY'])
478
+ else
479
+ return nil
480
+ end
481
+ end
482
+
483
+ def fetch_cipher(type)
484
+ raise "Type must be set to 'encrypt' or 'decrypt'" if !['decrypt','encrypt'].include?(type)
485
+ cipher = OpenSSL::Cipher.new('AES-256-CBC')
486
+ cipher.send(type)
487
+ cipher.key = self.decrypted_data_key
488
+ cipher.iv = Base64.strict_decode64(self.iv_key)
489
+ return cipher
490
+ end
491
+
492
+ def kms_decrypt(value, field_name: nil, encryption_type: ZuoraConnect.configuration.encryption_type)
442
493
  kms_tries ||= 0
443
- kms_client = Aws::KMS::Client.new({region: aws_secrets['AWS_REGION'], credentials: self.aws_auth_client}.delete_if { |k, v| v.blank? })
444
- resp = kms_client.decrypt({ciphertext_blob: [value].pack("H*") })
445
- return resp.plaintext
494
+ original_encryption_type ||= encryption_type.dup
495
+
496
+ case encryption_type
497
+ when :direct
498
+ result = kms_client.decrypt(ciphertext_blob: [value].pack("H*") ).plaintext
499
+ #Update original encryption
500
+ if original_encryption_type != encryption_type && field_name.present?
501
+ ZuoraConnect.logger.debug("Updating encryption to '#{original_encryption_type}', from '#{encryption_type}' for field '#{field_name}'", self.default_ougai_items)
502
+ self.update_column(field_name, self.kms_encrypt(result, encryption_type: original_encryption_type))
503
+ end
504
+
505
+ return result
506
+ when :envelope
507
+ cipher = fetch_cipher('decrypt')
508
+ result = cipher.update(Base64.strict_decode64(value)) + cipher.final
509
+
510
+ #Update original encryption
511
+ if original_encryption_type != encryption_type && field_name.present?
512
+ ZuoraConnect.logger.debug("Updating encryption to '#{original_encryption_type}', from '#{encryption_type}' for field '#{field_name}'", self.default_ougai_items)
513
+ self.update_column(field_name, self.kms_encrypt(result, encryption_type: original_encryption_type))
514
+ end
515
+ return result
516
+ else
517
+ ZuoraConnect::Exceptions::Error.new("Invalid encryption method '#{encryption_type}'.")
518
+ end
519
+ rescue ArgumentError => ex
520
+ if ex.message == 'invalid base64' && encryption_type == :envelope && (kms_tries += 1) < 3
521
+ ZuoraConnect.logger.warn("Fallback to encryption 'direct', from '#{encryption_type}'", ex, self.default_ougai_items)
522
+ encryption_type = :direct
523
+ retry
524
+ end
525
+ raise#Add protection when decrypting
526
+ rescue Aws::KMS::Errors::InvalidCiphertextException => ex
527
+ if encryption_type == :direct && (kms_tries += 1) < 3
528
+ ZuoraConnect.logger.warn("Fallback to encryption 'envelope', from '#{encryption_type}'", ex, self.default_ougai_items)
529
+ encryption_type = :envelope
530
+ retry
531
+ end
532
+ raise
446
533
  rescue *AWS_AUTH_ERRORS => ex
447
534
  if (kms_tries += 1) < 3
448
535
  Rails.logger.warn(AWS_AUTH_ERRORS_MSG, ex)
@@ -453,12 +540,20 @@ module ZuoraConnect
453
540
  end
454
541
  end
455
542
 
456
- def kms_encrypt(value)
543
+ def kms_encrypt(value, encryption_type: ZuoraConnect.configuration.encryption_type)
457
544
  kms_tries ||= 0
458
- kms_client = Aws::KMS::Client.new({region: aws_secrets['AWS_REGION'], credentials: self.aws_auth_client}.delete_if {|k,v| v.blank? })
459
-
460
- resp = kms_client.encrypt({key_id: kms_key, plaintext: value})
461
- return resp.ciphertext_blob.unpack('H*').first
545
+ case encryption_type
546
+ when :direct
547
+ resp = kms_client.encrypt({key_id: kms_key(raise_on_blank: true), plaintext: value})
548
+ return resp.ciphertext_blob.unpack('H*').first
549
+ when :envelope
550
+ cipher = fetch_cipher('encrypt')
551
+ value = cipher.update(value.to_s)
552
+ value << cipher.final
553
+ return Base64.strict_encode64(value)
554
+ else
555
+ ZuoraConnect::Exceptions::Error.new("Invalid encryption method '#{encryption_type}'.")
556
+ end
462
557
  rescue *AWS_AUTH_ERRORS => ex
463
558
  if (kms_tries += 1) < 3
464
559
  Rails.logger.warn(AWS_AUTH_ERRORS_MSG, ex)
@@ -468,18 +563,6 @@ module ZuoraConnect
468
563
  raise
469
564
  end
470
565
  end
471
-
472
- def kms_key
473
- return ENV['AWS_KMS_ARN'] || aws_secrets['AWS_KMS_ARN']
474
- end
475
-
476
- def aws_auth_client
477
- if Rails.env.to_s == 'development'
478
- return Aws::Credentials.new(aws_secrets['AWS_ACCESS_KEY_ID'], aws_secrets['AWS_SECRET_ACCESS_KEY'])
479
- else
480
- return nil
481
- end
482
- end
483
566
  #### END KMS ENCRYPTION Methods ####
484
567
 
485
568
  #### START Metrics Methods ####
@@ -505,9 +588,13 @@ module ZuoraConnect
505
588
  def build_task(task_data: {}, session: {})
506
589
  session = {} if session.blank?
507
590
  self.task_data = task_data
591
+ if self.task_data.blank? && ZuoraConnect.configuration.local_task_data
592
+ self.task_data = self.zuora_logins
593
+ end
594
+
508
595
  self.mode = self.task_data["mode"]
509
596
 
510
- if task_data['id'].to_s != self.id.to_s
597
+ if self.task_data['id'].to_s != self.id.to_s
511
598
  raise ZuoraConnect::Exceptions::MissMatch.new("Wrong Instance Identifier/Lookup")
512
599
  end
513
600
 
@@ -545,7 +632,7 @@ module ZuoraConnect
545
632
  raise
546
633
  rescue => ex
547
634
  ZuoraConnect.logger.error("Build Task Error", ex)
548
- ZuoraConnect.logger.error("Task Data: #{task_data}") if task_data.present?
635
+ ZuoraConnect.logger.error("Task Data: #{self.task_data}") if self.task_data.present?
549
636
  if session.present?
550
637
  ZuoraConnect.logger.error("Task Session: #{session.to_h}") if session.methods.include?(:to_h)
551
638
  ZuoraConnect.logger.error("Task Session: #{session.to_hash}") if session.methods.include?(:to_hash)
@@ -796,19 +883,19 @@ module ZuoraConnect
796
883
  if login.tenant_type == "Zuora"
797
884
  if login.available_entities.size > 1 && Rails.application.config.session_store != ActionDispatch::Session::CookieStore
798
885
  login.available_entities.each do |entity_key|
799
- session["#{self.id}::#{key}::#{entity_key}:current_session"] = login.client(entity_key).current_session if login.client.respond_to?(:current_session)
800
- session["#{self.id}::#{key}::#{entity_key}:bearer_token"] = login.client(entity_key).bearer_token if login.client.respond_to?(:bearer_token)
801
- session["#{self.id}::#{key}::#{entity_key}:oauth_session_expires_at"] = login.client(entity_key).oauth_session_expires_at if login.client.respond_to?(:oauth_session_expires_at)
886
+ session["#{self.id}::#{key}::#{entity_key}:current_session"] = login.client(entity_key).current_session if login.client.respond_to?(:current_session) && login.client(entity_key).current_session.present?
887
+ session["#{self.id}::#{key}::#{entity_key}:bearer_token"] = login.client(entity_key).bearer_token if login.client.respond_to?(:bearer_token) && login.client(entity_key).bearer_token.present?
888
+ session["#{self.id}::#{key}::#{entity_key}:oauth_session_expires_at"] = login.client(entity_key).oauth_session_expires_at if login.client.respond_to?(:oauth_session_expires_at) && login.client(entity_key).oauth_session_expires_at.present?
802
889
  end
803
890
  else
804
- session["#{self.id}::#{key}:current_session"] = login.client.current_session if login.client.respond_to?(:current_session)
805
- session["#{self.id}::#{key}:bearer_token"] = login.client.bearer_token if login.client.respond_to?(:bearer_token)
806
- session["#{self.id}::#{key}:oauth_session_expires_at"] = login.client.oauth_session_expires_at if login.client.respond_to?(:oauth_session_expires_at)
891
+ session["#{self.id}::#{key}:current_session"] = login.client.current_session if login.client.respond_to?(:current_session) && login.client.current_session.present?
892
+ session["#{self.id}::#{key}:bearer_token"] = login.client.bearer_token if login.client.respond_to?(:bearer_token) && login.client.bearer_token.present?
893
+ session["#{self.id}::#{key}:oauth_session_expires_at"] = login.client.oauth_session_expires_at if login.client.respond_to?(:oauth_session_expires_at) && login.client.oauth_session_expires_at.present?
807
894
  end
808
895
  end
809
896
  end
810
897
 
811
- session["#{self.id}::task_data"] = self.task_data
898
+ session["#{self.id}::task_data"] = self.task_data if !ZuoraConnect.configuration.local_task_data
812
899
 
813
900
  #Redis is not defined strip out old data
814
901
  if !defined?(Redis.current)
@@ -848,6 +935,9 @@ module ZuoraConnect
848
935
  else
849
936
  begin
850
937
  return JSON.parse(encryptor.decrypt_and_verify(CGI::unescape(data)))
938
+ rescue ActiveSupport::MessageEncryptor::InvalidMessage => ex
939
+ Rails.logger.error('Error Decrypting', ex, self.default_ougai_items) if log_fatal && !Rails.env.test?
940
+ return JSON.parse(encryptor.decrypt_and_verify(data))
851
941
  rescue ActiveSupport::MessageVerifier::InvalidSignature => ex
852
942
  ZuoraConnect.logger.error("Error Decrypting", ex, self.default_ougai_items) if log_fatal
853
943
  return rescue_return
@@ -11,6 +11,15 @@ class RedisFlash
11
11
  end
12
12
  end
13
13
 
14
+ class Redis
15
+ def self.current
16
+ @current ||= Redis.new()
17
+ end
18
+ def self.current=(redis)
19
+ @current = redis
20
+ end
21
+ end
22
+
14
23
  if defined?(Redis.current)
15
24
  Redis.current = Redis.new(:id => "#{ZuoraObservability::Env.full_process_name(process_name: 'Redis')}", :url => redis_url, :timeout => 6, :reconnect_attempts => 2)
16
25
  browser_urls['Redis'] = { "url" => redis_url }
@@ -9,5 +9,8 @@ class AddEnvironmentFields < ActiveRecord::Migration[5.0]
9
9
  if column_exists? :zuora_connect_app_instances, :organizations
10
10
  change_column :zuora_connect_app_instances, :organizations, :jsonb, default: []
11
11
  end
12
+ unless column_exists? :zuora_connect_app_instances, :zuora_global_tenant_id
13
+ add_column :zuora_connect_app_instances, :zuora_global_tenant_id, :text, default: ""
14
+ end
12
15
  end
13
16
  end
@@ -1,24 +1,16 @@
1
- # desc "Explaining what the task does"
2
- # task :connect do
3
- # # Task goes here
4
- # end
5
-
6
1
  namespace :db do
7
2
  desc 'Also create shared_extensions Schema'
8
3
  task :extensions => :environment do
9
4
  # Create Schema
10
- ActiveRecord::Base.connection.execute 'CREATE SCHEMA IF NOT EXISTS shared_extensions;'
11
- # Enable Hstore
12
- ActiveRecord::Base.connection.execute 'CREATE EXTENSION IF NOT EXISTS HSTORE SCHEMA shared_extensions;'
13
- # Enable UUID-OSSP
14
- ActiveRecord::Base.connection.execute 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp" SCHEMA shared_extensions;'
5
+ at_exit {
6
+ ActiveRecord::Base.connection.execute 'CREATE SCHEMA IF NOT EXISTS shared_extensions;'
7
+ # Enable Hstore
8
+ ActiveRecord::Base.connection.execute 'CREATE EXTENSION IF NOT EXISTS HSTORE SCHEMA shared_extensions;'
9
+ # Enable UUID-OSSP
10
+ ActiveRecord::Base.connection.execute 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp" SCHEMA shared_extensions;'
11
+ }
15
12
  end
16
13
  end
17
14
 
18
- Rake::Task["db:create"].enhance do
19
- Rake::Task["db:extensions"].invoke
20
- end
21
-
22
- Rake::Task["db:test:purge"].enhance do
23
- Rake::Task["db:extensions"].invoke
24
- end
15
+ Rake::Task["db:create"].enhance [:extensions]
16
+ Rake::Task["db:test:purge"].enhance [:extensions]
@@ -7,7 +7,7 @@ module ZuoraConnect
7
7
 
8
8
  attr_accessor :oauth_client_id, :oauth_client_secret, :oauth_client_redirect_uri
9
9
 
10
- attr_accessor :dev_mode_logins, :dev_mode_options, :dev_mode_mode, :dev_mode_appinstance, :dev_mode_user, :dev_mode_pass, :dev_mode_admin, :dev_mode_secret_access_key,:dev_mode_access_key_id,:aws_region, :s3_bucket_name, :s3_folder_name, :insert_migrations, :skip_connect
10
+ attr_accessor :dev_mode_logins, :dev_mode_options, :dev_mode_mode, :dev_mode_appinstance, :dev_mode_user, :dev_mode_pass, :dev_mode_admin, :dev_mode_secret_access_key,:dev_mode_access_key_id,:aws_region, :s3_bucket_name, :s3_folder_name, :insert_migrations, :skip_connect, :encryption_type, :local_task_data
11
11
 
12
12
  def initialize
13
13
  @default_locale = :en
@@ -21,6 +21,8 @@ module ZuoraConnect
21
21
  @blpop_queue = false
22
22
  @insert_migrations = true
23
23
  @skip_connect = false
24
+ @encryption_type = :direct
25
+ @local_task_data = false
24
26
 
25
27
  # Setting the app name for telegraf write
26
28
  @enable_metrics = false
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ZuoraConnect
4
- VERSION = "3.1.0"
4
+ VERSION = "3.1.1-c"
5
5
  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: 3.1.0
4
+ version: 3.1.1.pre.c
5
5
  platform: ruby
6
6
  authors:
7
7
  - Connect Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-23 00:00:00.000000000 Z
11
+ date: 2022-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: apartment
@@ -452,9 +452,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
452
452
  version: '0'
453
453
  required_rubygems_version: !ruby/object:Gem::Requirement
454
454
  requirements:
455
- - - ">="
455
+ - - ">"
456
456
  - !ruby/object:Gem::Version
457
- version: '0'
457
+ version: 1.3.1
458
458
  requirements: []
459
459
  rubygems_version: 3.3.7
460
460
  signing_key: