ibanity 2.3 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -7
  3. data/ibanity.gemspec +1 -1
  4. data/lib/ibanity/api/consent.rb +2 -0
  5. data/lib/ibanity/api/isabel_connect.rb +9 -0
  6. data/lib/ibanity/api/ponto_connect/payment_request.rb +20 -0
  7. data/lib/ibanity/api/ponto_connect/pending_transaction.rb +22 -0
  8. data/lib/ibanity/api/ponto_connect.rb +18 -0
  9. data/lib/ibanity/api/sandbox/financial_institution_account.rb +9 -24
  10. data/lib/ibanity/api/sandbox/financial_institution_holding.rb +9 -28
  11. data/lib/ibanity/api/sandbox/financial_institution_transaction.rb +11 -35
  12. data/lib/ibanity/api/sandbox/financial_institution_user.rb +11 -12
  13. data/lib/ibanity/api/webhooks/ponto_connect.rb +11 -0
  14. data/lib/ibanity/api/webhooks/xs2a.rb +27 -0
  15. data/lib/ibanity/api/webhooks.rb +3 -0
  16. data/lib/ibanity/api/xs2a/holding.rb +2 -2
  17. data/lib/ibanity/api/xs2a/pending_transaction.rb +2 -2
  18. data/lib/ibanity/api/xs2a/sandbox/financial_institution_account.rb +43 -0
  19. data/lib/ibanity/api/xs2a/sandbox/financial_institution_holding.rb +47 -0
  20. data/lib/ibanity/api/xs2a/sandbox/financial_institution_transaction.rb +57 -0
  21. data/lib/ibanity/api/xs2a/sandbox/financial_institution_user.rb +34 -0
  22. data/lib/ibanity/api/xs2a/transaction.rb +2 -2
  23. data/lib/ibanity/api/xs2a/transaction_delete_request.rb +25 -0
  24. data/lib/ibanity/api/xs2a.rb +23 -0
  25. data/lib/ibanity/version.rb +1 -1
  26. data/lib/ibanity/webhook.rb +28 -38
  27. data/lib/ibanity.rb +10 -54
  28. data/spec/lib/ibanity/webhook_signature_spec.rb +75 -0
  29. data/spec/support/fixture.rb +10 -0
  30. data/spec/support/fixtures/json/webhooks/example_payload.json +1 -0
  31. data/spec/support/fixtures/signature/webhooks/example_signature.sig +1 -0
  32. metadata +23 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48dd4b01d72e61f94d0f750657abe36e7598ae92cbc4112b1be54bc5385900a6
4
- data.tar.gz: e2958c684d2b6e9b41474c372407cd78d2f4cc9d54ce9cb0128c68babc5eb9ce
3
+ metadata.gz: 0e092383f84fc0b8c6df811fe2d1af6bc87de9e344eb1ee799b55c15ab67f54d
4
+ data.tar.gz: ec5240d8803bae7ce90f13fc013855a66ecc20ff9e6178e22782888d5b24bd2b
5
5
  SHA512:
6
- metadata.gz: 36edf303e46ef38ccbd09c2f45b5537f534035d39715163599dbe35c9f74e113e920146bb98fe64fb9fac1ee73ee41e448a60a35a608ed54ea7a6844a444eb9f
7
- data.tar.gz: 94fb8e370e15e770fbb2791496ed7fac35ef1e4936ee38f020ce8c0556dedd9e02d572014ac490bb08ff1da0984f439e912bcd4f1a75405b5d74b8c48693ee38
6
+ metadata.gz: 6f006d8c7a773864e6430883439aa6c522b40a758464614e7f543ee1c02637b5df3256f5dc88058c4d6ac518829f9113e607c42c99e46baa066479889427a29e
7
+ data.tar.gz: c533b786a60213eaf6d3735f18bf1beb3a1831fb2053c7e01f434741703b4a6ed6b577063f1cc4bc736056ab08ea7edf400b7601c9db8b27fc27918659415768
data/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.5
4
+
5
+ * [Ponto Connect] Add payment requests
6
+ * [Ponto Connect] Add PendingTransaction
7
+ * [Ponto Connect] Add additional webhooks event
8
+
9
+ * `Ibanity::Webhooks::PontoConnect::Account::PendingTransactionsCreated`
10
+ * `Ibanity::Webhooks::PontoConnect::Account::PendingTransactionsUpdated`
11
+
12
+ ## 2.4
13
+
14
+ * New TransactionDeleteRequest service
15
+ * New Webhooks for Bulk Payment Initiation Request, Payment Initiation Request, and Periodic Payment Initiation Request
16
+ * Refactor library structure
17
+ * Move module Ibanty::Sandbox (FinancialInstitutionAccount, FinancialInstitutionHolding, FinancialInstitutionTransaction, FinancialInstitutionUser) to Ibanty::Xs2a::Sandbox
18
+
19
+ ## 2.3.1
20
+
21
+ * Migrate from Jose to JWT gem following incompatibly with OpenSSL 3. Only used in webhooks signature validation.
22
+
3
23
  ## 2.3
4
24
 
5
25
  * [Ponto Connect] Add IntegrationAccount
@@ -12,13 +32,13 @@
12
32
  ## 2.2
13
33
 
14
34
  * [Ponto Connect] Add additional webhook events
15
- * `Ibanity::Webhooks::Account::Reauthorized`
16
- * `Ibanity::Webhooks::Integration::AccountAdded`
17
- * `Ibanity::Webhooks::Integration::AccountRevoked`
18
- * `Ibanity::Webhooks::Integration::Created`
19
- * `Ibanity::Webhooks::Integration::Revoked`
20
- * `Ibanity::Webhooks::Organization::Blocked`
21
- * `Ibanity::Webhooks::Organization::Unblocked`
35
+ * `Ibanity::Webhooks::PontoConnect::Account::Reauthorized`
36
+ * `Ibanity::Webhooks::PontoConnect::Integration::AccountAdded`
37
+ * `Ibanity::Webhooks::PontoConnect::Integration::AccountRevoked`
38
+ * `Ibanity::Webhooks::PontoConnect::Integration::Created`
39
+ * `Ibanity::Webhooks::PontoConnect::Integration::Revoked`
40
+ * `Ibanity::Webhooks::PontoConnect::Organization::Blocked`
41
+ * `Ibanity::Webhooks::PontoConnect::Organization::Unblocked`
22
42
 
23
43
  ## 2.1
24
44
 
data/ibanity.gemspec CHANGED
@@ -19,6 +19,6 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "rest-client", ">= 1.8.0"
22
- spec.add_dependency "jose", ">= 1.1.3"
22
+ spec.add_dependency "jwt", ">= 2.0.0"
23
23
  spec.add_development_dependency "rspec", "3.9.0"
24
24
  end
@@ -0,0 +1,2 @@
1
+ require_relative "consent/consent"
2
+ require_relative "consent/processing_operation"
@@ -0,0 +1,9 @@
1
+ require_relative "isabel_connect/account"
2
+ require_relative "isabel_connect/balance"
3
+ require_relative "isabel_connect/transaction"
4
+ require_relative "isabel_connect/intraday_transaction"
5
+ require_relative "isabel_connect/account_report"
6
+ require_relative "isabel_connect/access_token"
7
+ require_relative "isabel_connect/refresh_token"
8
+ require_relative "isabel_connect/token"
9
+ require_relative "isabel_connect/bulk_payment_initiation_request"
@@ -0,0 +1,20 @@
1
+ module Ibanity
2
+ module PontoConnect
3
+ class PaymentRequest < Ibanity::BaseResource
4
+ def self.find(access_token:, account_id:, id:)
5
+ uri = Ibanity.ponto_connect_api_schema["account"]["paymentRequests"].sub("{accountId}", account_id).sub("{paymentRequestId}", id)
6
+ find_by_uri(uri: uri, customer_access_token: access_token)
7
+ end
8
+
9
+ def self.create(account_id:, access_token: nil, **attributes)
10
+ uri = Ibanity.ponto_connect_api_schema["account"]["paymentRequests"].gsub("{accountId}", account_id).gsub("{paymentRequestId}", "")
11
+ create_by_uri(uri: uri, resource_type: "payment", attributes: attributes, customer_access_token: access_token)
12
+ end
13
+
14
+ def self.delete(id:, account_id:, access_token:)
15
+ uri = Ibanity.ponto_connect_api_schema["account"]["paymentRequests"].gsub("{accountId}", account_id).gsub("{paymentRequestId}", id)
16
+ destroy_by_uri(uri: uri, customer_access_token: access_token)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ module Ibanity
2
+ module PontoConnect
3
+ class PendingTransaction < Ibanity::BaseResource
4
+ def self.list(access_token:, account_id: nil, synchronization_id: nil, **query_params)
5
+ uri = if synchronization_id
6
+ Ibanity.ponto_connect_api_schema["synchronization"]["updatedPendingTransactions"]
7
+ .sub("{synchronizationId}", synchronization_id)
8
+ else
9
+ Ibanity.ponto_connect_api_schema["account"]["pendingTransactions"]
10
+ .sub("{accountId}", account_id)
11
+ .sub("{pendingTransactionId}", "")
12
+ end
13
+ list_by_uri(uri: uri, query_params: query_params, customer_access_token: access_token)
14
+ end
15
+
16
+ def self.find(access_token:, account_id:, id:)
17
+ uri = Ibanity.ponto_connect_api_schema["account"]["pendingTransactions"].sub("{accountId}", account_id).sub("{pendingTransactionId}", id)
18
+ find_by_uri(uri: uri, customer_access_token: access_token)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ require_relative "ponto_connect/token"
2
+ require_relative "ponto_connect/financial_institution"
3
+ require_relative "ponto_connect/account"
4
+ require_relative "ponto_connect/transaction"
5
+ require_relative "ponto_connect/pending_transaction"
6
+ require_relative "ponto_connect/synchronization"
7
+ require_relative "ponto_connect/payment"
8
+ require_relative "ponto_connect/bulk_payment"
9
+ require_relative "ponto_connect/payment_request"
10
+ require_relative "ponto_connect/user_info"
11
+ require_relative "ponto_connect/usage"
12
+ require_relative "ponto_connect/integration"
13
+ require_relative "ponto_connect/sandbox/financial_institution_account"
14
+ require_relative "ponto_connect/sandbox/financial_institution_transaction"
15
+ require_relative "ponto_connect/onboarding_details"
16
+ require_relative "ponto_connect/reauthorization_request"
17
+ require_relative "ponto_connect/payment_activation_request"
18
+ require_relative "ponto_connect/integration_account"
@@ -1,40 +1,25 @@
1
1
  module Ibanity
2
2
  module Sandbox
3
+ # <b>DEPRECATED:</b> Please use <tt>Ibanity::Xs2a::Sandbox::FinancialInstitutionAccount</tt> instead.
3
4
  class FinancialInstitutionAccount < Ibanity::BaseResource
4
5
  def self.create(financial_institution_user_id:, financial_institution_id:, idempotency_key: nil, **attributes)
5
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccounts"]
6
- .gsub("{financialInstitutionId}", financial_institution_id)
7
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
8
- .gsub("{financialInstitutionAccountId}", "")
9
- uri = Ibanity.client.build_uri(path)
10
- create_by_uri(uri: uri, resource_type: "financialInstitutionAccount", attributes: attributes, idempotency_key: idempotency_key)
6
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionAccount.create` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionAccount.create instead"
7
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionAccount.create(financial_institution_user_id: financial_institution_user_id, financial_institution_id: financial_institution_id, idempotency_key: idempotency_key, attributes)
11
8
  end
12
9
 
13
10
  def self.list(financial_institution_id:, financial_institution_user_id:, **query_params)
14
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccounts"]
15
- .gsub("{financialInstitutionId}", financial_institution_id)
16
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
17
- .gsub("{financialInstitutionAccountId}", "")
18
- uri = Ibanity.client.build_uri(path)
19
- list_by_uri(uri: uri, query_params: query_params)
11
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionAccount.list` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionAccount.list instead"
12
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionAccount.list(financial_institution_id: financial_institution_id, financial_institution_user_id: financial_institution_user_id, query_params)
20
13
  end
21
14
 
22
15
  def self.find(id:, financial_institution_user_id:, financial_institution_id:)
23
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccounts"]
24
- .gsub("{financialInstitutionId}", financial_institution_id)
25
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
26
- .gsub("{financialInstitutionAccountId}", id)
27
- uri = Ibanity.client.build_uri(path)
28
- find_by_uri(uri: uri)
16
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionAccount.find` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionAccount.find instead"
17
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionAccount.find(id: id, financial_institution_user_id: financial_institution_user_id, financial_institution_id: financial_institution_id)
29
18
  end
30
19
 
31
20
  def self.delete(id:, financial_institution_user_id:, financial_institution_id:)
32
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccounts"]
33
- .gsub("{financialInstitutionId}", financial_institution_id)
34
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
35
- .gsub("{financialInstitutionAccountId}", id)
36
- uri = Ibanity.client.build_uri(path)
37
- destroy_by_uri(uri: uri)
21
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionAccount.delete` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionAccount.delete instead"
22
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionAccount.delete(id: id, financial_institution_user_id: financial_institution_user_id, financial_institution_id: financial_institution_id)
38
23
  end
39
24
  end
40
25
  end
@@ -1,44 +1,25 @@
1
1
  module Ibanity
2
2
  module Sandbox
3
+ # <b>DEPRECATED:</b> Please use <tt>Ibanity::Xs2a::Sandbox::FinancialInstitutionHolding</tt> instead.
3
4
  class FinancialInstitutionHolding < Ibanity::BaseResource
4
5
  def self.create(financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:, idempotency_key: nil, **attributes)
5
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionHoldings"]
6
- .gsub("{financialInstitutionId}", financial_institution_id)
7
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
8
- .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
9
- .gsub("{financialInstitutionHoldingId}", "")
10
- uri = Ibanity.client.build_uri(path)
11
- create_by_uri(uri: uri, resource_type: "financialInstitutionHolding", attributes: attributes, idempotency_key: idempotency_key)
6
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionHolding.create` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionHolding.create instead"
7
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionHolding.create(financial_institution_user_id: financial_institution_user_id, financial_institution_id: financial_institution_id, financial_institution_account_id: financial_institution_account_id, idempotency_key: idempotency_key, attributes)
12
8
  end
13
9
 
14
10
  def self.list(financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:, **query_params)
15
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionHoldings"]
16
- .gsub("{financialInstitutionId}", financial_institution_id)
17
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
18
- .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
19
- .gsub("{financialInstitutionHoldingId}", "")
20
- uri = Ibanity.client.build_uri(path)
21
- list_by_uri(uri: uri, query_params: query_params)
11
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionHolding.list` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionHolding.list instead"
12
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionHolding.list(financial_institution_user_id: financial_institution_user_id, financial_institution_id: financial_institution_id, financial_institution_account_id: financial_institution_account_id, query_params)
22
13
  end
23
14
 
24
15
  def self.find(id:, financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:)
25
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionHoldings"]
26
- .gsub("{financialInstitutionId}", financial_institution_id)
27
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
28
- .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
29
- .gsub("{financialInstitutionHoldingId}", id)
30
- uri = Ibanity.client.build_uri(path)
31
- find_by_uri(uri: uri)
16
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionHolding.find` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionHolding.find instead"
17
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionHolding.find(id: id, financial_institution_user_id: financial_institution_user_id, financial_institution_id: financial_institution_id, financial_institution_account_id: financial_institution_account_id)
32
18
  end
33
19
 
34
20
  def self.delete(id:, financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:)
35
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionHoldings"]
36
- .gsub("{financialInstitutionId}", financial_institution_id)
37
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
38
- .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
39
- .gsub("{financialInstitutionHoldingId}", id)
40
- uri = Ibanity.client.build_uri(path)
41
- destroy_by_uri(uri: uri)
21
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionHolding.delete` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionHolding.delete instead"
22
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionHolding.find(id: id, financial_institution_user_id: financial_institution_user_id, financial_institution_id: financial_institution_id, financial_institution_account_id: financial_institution_account_id)
42
23
  end
43
24
  end
44
25
  end
@@ -1,54 +1,30 @@
1
1
  module Ibanity
2
2
  module Sandbox
3
+ # <b>DEPRECATED:</b> Please use <tt>Ibanity::Xs2a::Sandbox::FinancialInstitutionTransaction</tt> instead.
3
4
  class FinancialInstitutionTransaction < Ibanity::BaseResource
4
5
  def self.create(financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:, idempotency_key: nil, **attributes)
5
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionTransactions"]
6
- .gsub("{financialInstitutionId}", financial_institution_id)
7
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
8
- .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
9
- .gsub("{financialInstitutionTransactionId}", "")
10
- uri = Ibanity.client.build_uri(path)
11
- create_by_uri(uri: uri, resource_type: "financialInstitutionTransaction", attributes: attributes, idempotency_key: idempotency_key)
6
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionTransaction.create` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionTransaction.create instead"
7
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionTransaction.create(financial_institution_user_id: financial_institution_user_id, financial_institution_id: financial_institution_id, financial_institution_account_id: financial_institution_account_id, idempotency_key: idempotency_key, attributes)
12
8
  end
13
9
 
14
10
  def self.list(financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:, **query_params)
15
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionTransactions"]
16
- .gsub("{financialInstitutionId}", financial_institution_id)
17
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
18
- .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
19
- .gsub("{financialInstitutionTransactionId}", "")
20
- uri = Ibanity.client.build_uri(path)
21
- list_by_uri(uri: uri, query_params: query_params)
11
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionTransaction.list` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionTransaction.list instead"
12
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionTransaction.list(financial_institution_user_id: financial_institution_user_id, financial_institution_id: financial_institution_id, financial_institution_account_id: financial_institution_account_id, query_params)
22
13
  end
23
14
 
24
15
  def self.find(id:, financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:)
25
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionTransactions"]
26
- .gsub("{financialInstitutionId}", financial_institution_id)
27
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
28
- .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
29
- .gsub("{financialInstitutionTransactionId}", id)
30
- uri = Ibanity.client.build_uri(path)
31
- find_by_uri(uri: uri)
16
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionTransaction.find` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionTransaction.find instead"
17
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionTransaction.find(id: id, financial_institution_user_id: financial_institution_user_id, financial_institution_id: financial_institution_id, financial_institution_account_id: financial_institution_account_id)
32
18
  end
33
19
 
34
20
  def self.update(id:, financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:, idempotency_key: nil, **attributes)
35
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionTransactions"]
36
- .gsub("{financialInstitutionId}", financial_institution_id)
37
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
38
- .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
39
- .gsub("{financialInstitutionTransactionId}", id)
40
- uri = Ibanity.client.build_uri(path)
41
- update_by_uri(uri: uri, resource_type: "financialInstitutionTransaction", attributes: attributes, idempotency_key: idempotency_key)
21
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionTransaction.create` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionTransaction.create instead"
22
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionTransaction.create(id: id, financial_institution_user_id: financial_institution_user_id, financial_institution_id: financial_institution_id, financial_institution_account_id: financial_institution_account_id, idempotency_key: idempotency_key, attributes)
42
23
  end
43
24
 
44
25
  def self.delete(id:, financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:)
45
- path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionTransactions"]
46
- .gsub("{financialInstitutionId}", financial_institution_id)
47
- .gsub("{financialInstitutionUserId}", financial_institution_user_id)
48
- .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
49
- .gsub("{financialInstitutionTransactionId}", id)
50
- uri = Ibanity.client.build_uri(path)
51
- destroy_by_uri(uri: uri)
26
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionTransaction.delete` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionTransaction.delete instead"
27
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionTransaction.find(id: id, financial_institution_user_id: financial_institution_user_id, financial_institution_id: financial_institution_id, financial_institution_account_id: financial_institution_account_id)
52
28
  end
53
29
  end
54
30
  end
@@ -1,31 +1,30 @@
1
1
  module Ibanity
2
2
  module Sandbox
3
+ # <b>DEPRECATED:</b> Please use <tt>Ibanity::Xs2a::Sandbox::FinancialInstitutionUser</tt> instead.
3
4
  class FinancialInstitutionUser < Ibanity::BaseResource
4
5
  def self.create(idempotency_key: nil, **attributes)
5
- path = Ibanity.sandbox_api_schema["financialInstitutionUsers"].gsub("{financialInstitutionUserId}", "")
6
- uri = Ibanity.client.build_uri(path)
7
- create_by_uri(uri: uri, resource_type: "financialInstitutionUser", attributes: attributes, idempotency_key: idempotency_key)
6
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionUser.create` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionUser.create instead"
7
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionUser.create(idempotency_key: idempotency_key, attributes)
8
8
  end
9
9
 
10
10
  def self.list(**query_params)
11
- uri = Ibanity.sandbox_api_schema["financialInstitutionUsers"].sub("{financialInstitutionUserId}", "")
12
- list_by_uri(uri: uri, query_params: query_params)
11
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionUser.list` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionUser.list instead"
12
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionUser.list(query_params)
13
13
  end
14
14
 
15
15
  def self.find(id:)
16
- uri = Ibanity.sandbox_api_schema["financialInstitutionUsers"].sub("{financialInstitutionUserId}", id)
17
- find_by_uri(uri: uri)
16
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionUser.find` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionUser.find instead"
17
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionUser.find(id: id)
18
18
  end
19
19
 
20
20
  def self.update(id:, idempotency_key: nil, **attributes)
21
- path = Ibanity.sandbox_api_schema["financialInstitutionUsers"].sub("{financialInstitutionUserId}", id)
22
- uri = Ibanity.client.build_uri(path)
23
- update_by_uri(uri: uri, resource_type: "financialInstitutionUser", attributes: attributes, idempotency_key: idempotency_key)
21
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionUser.update` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionUser.update instead"
22
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionUser.find(id: id, idempotency_key: idempotency_key, attributes)
24
23
  end
25
24
 
26
25
  def self.delete(id:)
27
- uri = Ibanity.sandbox_api_schema["financialInstitutionUsers"].sub("{financialInstitutionUserId}", id)
28
- destroy_by_uri(uri: uri)
26
+ warn "[DEPRECATION] `Ibanity::Sandbox::FinancialInstitutionUser.delete` is deprecated. Please use Ibanity::Xs2a::Sandbox::FinancialInstitutionUser.delete instead"
27
+ Ibanity::Xs2a::Sandbox::FinancialInstitutionUser.delete(id: id)
29
28
  end
30
29
  end
31
30
  end
@@ -19,6 +19,12 @@ module Ibanity
19
19
  class TransactionsUpdated < Ibanity::BaseResource
20
20
  end
21
21
 
22
+ class PendingTransactionsCreated < Ibanity::BaseResource
23
+ end
24
+
25
+ class PendingTransactionsUpdated < Ibanity::BaseResource
26
+ end
27
+
22
28
  class Reauthorized < Ibanity::BaseResource
23
29
  end
24
30
  end
@@ -44,6 +50,11 @@ module Ibanity
44
50
  class Unblocked < Ibanity::BaseResource
45
51
  end
46
52
  end
53
+
54
+ module PaymentRequest
55
+ class Closed < Ibanity::BaseResource
56
+ end
57
+ end
47
58
  end
48
59
  end
49
60
  end
@@ -16,6 +16,9 @@ module Ibanity
16
16
  class TransactionsCreated < Ibanity::BaseResource
17
17
  end
18
18
 
19
+ class TransactionsDeleted < Ibanity::BaseResource
20
+ end
21
+
19
22
  class TransactionsUpdated < Ibanity::BaseResource
20
23
  end
21
24
 
@@ -25,6 +28,30 @@ module Ibanity
25
28
  class PendingTransactionsUpdated < Ibanity::BaseResource
26
29
  end
27
30
  end
31
+
32
+ module BulkPaymentInitiationRequest
33
+ class AuthorizationCompleted < Ibanity::BaseResource
34
+ end
35
+
36
+ class StatusUpdated < Ibanity::BaseResource
37
+ end
38
+ end
39
+
40
+ module PaymentInitiationRequest
41
+ class AuthorizationCompleted < Ibanity::BaseResource
42
+ end
43
+
44
+ class StatusUpdated < Ibanity::BaseResource
45
+ end
46
+ end
47
+
48
+ module PeriodicPaymentInitiationRequest
49
+ class AuthorizationCompleted < Ibanity::BaseResource
50
+ end
51
+
52
+ class StatusUpdated < Ibanity::BaseResource
53
+ end
54
+ end
28
55
  end
29
56
  end
30
57
  end
@@ -0,0 +1,3 @@
1
+ require_relative "webhooks/key"
2
+ require_relative "webhooks/xs2a"
3
+ require_relative "webhooks/ponto_connect"
@@ -2,7 +2,7 @@ module Ibanity
2
2
  module Xs2a
3
3
  class Holding < Ibanity::BaseResource
4
4
  def self.list(financial_institution_id:, account_id:, customer_access_token:, headers: nil, **query_params)
5
- uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["holdings"]
5
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["account"]["holdings"]
6
6
  .sub("{financialInstitutionId}", financial_institution_id)
7
7
  .sub("{accountId}", account_id)
8
8
  .sub("{holdingId}", "")
@@ -10,7 +10,7 @@ module Ibanity
10
10
  end
11
11
 
12
12
  def self.find(id:, financial_institution_id:, account_id:, customer_access_token:)
13
- uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["holdings"]
13
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["account"]["holdings"]
14
14
  .sub("{financialInstitutionId}", financial_institution_id)
15
15
  .sub("{accountId}", account_id)
16
16
  .sub("{holdingId}", id)
@@ -6,7 +6,7 @@ module Ibanity
6
6
  Ibanity.xs2a_api_schema["customer"]["synchronization"]["updatedPendingTransactions"]
7
7
  .sub("{synchronizationId}", synchronization_id)
8
8
  else
9
- Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["pendingTransactions"]
9
+ Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["account"]["pendingTransactions"]
10
10
  .sub("{financialInstitutionId}", financial_institution_id)
11
11
  .sub("{accountId}", account_id)
12
12
  .sub("{pendingTransactionId}", "")
@@ -16,7 +16,7 @@ module Ibanity
16
16
  end
17
17
 
18
18
  def self.find(id:, financial_institution_id:, account_id:, customer_access_token:)
19
- uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["pendingTransactions"]
19
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["account"]["pendingTransactions"]
20
20
  .sub("{financialInstitutionId}", financial_institution_id)
21
21
  .sub("{accountId}", account_id)
22
22
  .sub("{pendingTransactionId}", id)
@@ -0,0 +1,43 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ module Sandbox
4
+ class FinancialInstitutionAccount < Ibanity::BaseResource
5
+ def self.create(financial_institution_user_id:, financial_institution_id:, idempotency_key: nil, **attributes)
6
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccounts"]
7
+ .gsub("{financialInstitutionId}", financial_institution_id)
8
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
9
+ .gsub("{financialInstitutionAccountId}", "")
10
+ uri = Ibanity.client.build_uri(path)
11
+ create_by_uri(uri: uri, resource_type: "financialInstitutionAccount", attributes: attributes, idempotency_key: idempotency_key)
12
+ end
13
+
14
+ def self.list(financial_institution_id:, financial_institution_user_id:, **query_params)
15
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccounts"]
16
+ .gsub("{financialInstitutionId}", financial_institution_id)
17
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
18
+ .gsub("{financialInstitutionAccountId}", "")
19
+ uri = Ibanity.client.build_uri(path)
20
+ list_by_uri(uri: uri, query_params: query_params)
21
+ end
22
+
23
+ def self.find(id:, financial_institution_user_id:, financial_institution_id:)
24
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccounts"]
25
+ .gsub("{financialInstitutionId}", financial_institution_id)
26
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
27
+ .gsub("{financialInstitutionAccountId}", id)
28
+ uri = Ibanity.client.build_uri(path)
29
+ find_by_uri(uri: uri)
30
+ end
31
+
32
+ def self.delete(id:, financial_institution_user_id:, financial_institution_id:)
33
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccounts"]
34
+ .gsub("{financialInstitutionId}", financial_institution_id)
35
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
36
+ .gsub("{financialInstitutionAccountId}", id)
37
+ uri = Ibanity.client.build_uri(path)
38
+ destroy_by_uri(uri: uri)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,47 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ module Sandbox
4
+ class FinancialInstitutionHolding < Ibanity::BaseResource
5
+ def self.create(financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:, idempotency_key: nil, **attributes)
6
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionHoldings"]
7
+ .gsub("{financialInstitutionId}", financial_institution_id)
8
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
9
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
10
+ .gsub("{financialInstitutionHoldingId}", "")
11
+ uri = Ibanity.client.build_uri(path)
12
+ create_by_uri(uri: uri, resource_type: "financialInstitutionHolding", attributes: attributes, idempotency_key: idempotency_key)
13
+ end
14
+
15
+ def self.list(financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:, **query_params)
16
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionHoldings"]
17
+ .gsub("{financialInstitutionId}", financial_institution_id)
18
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
19
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
20
+ .gsub("{financialInstitutionHoldingId}", "")
21
+ uri = Ibanity.client.build_uri(path)
22
+ list_by_uri(uri: uri, query_params: query_params)
23
+ end
24
+
25
+ def self.find(id:, financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:)
26
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionHoldings"]
27
+ .gsub("{financialInstitutionId}", financial_institution_id)
28
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
29
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
30
+ .gsub("{financialInstitutionHoldingId}", id)
31
+ uri = Ibanity.client.build_uri(path)
32
+ find_by_uri(uri: uri)
33
+ end
34
+
35
+ def self.delete(id:, financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:)
36
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionHoldings"]
37
+ .gsub("{financialInstitutionId}", financial_institution_id)
38
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
39
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
40
+ .gsub("{financialInstitutionHoldingId}", id)
41
+ uri = Ibanity.client.build_uri(path)
42
+ destroy_by_uri(uri: uri)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,57 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ module Sandbox
4
+ class FinancialInstitutionTransaction < Ibanity::BaseResource
5
+ def self.create(financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:, idempotency_key: nil, **attributes)
6
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionTransactions"]
7
+ .gsub("{financialInstitutionId}", financial_institution_id)
8
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
9
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
10
+ .gsub("{financialInstitutionTransactionId}", "")
11
+ uri = Ibanity.client.build_uri(path)
12
+ create_by_uri(uri: uri, resource_type: "financialInstitutionTransaction", attributes: attributes, idempotency_key: idempotency_key)
13
+ end
14
+
15
+ def self.list(financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:, **query_params)
16
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionTransactions"]
17
+ .gsub("{financialInstitutionId}", financial_institution_id)
18
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
19
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
20
+ .gsub("{financialInstitutionTransactionId}", "")
21
+ uri = Ibanity.client.build_uri(path)
22
+ list_by_uri(uri: uri, query_params: query_params)
23
+ end
24
+
25
+ def self.find(id:, financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:)
26
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionTransactions"]
27
+ .gsub("{financialInstitutionId}", financial_institution_id)
28
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
29
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
30
+ .gsub("{financialInstitutionTransactionId}", id)
31
+ uri = Ibanity.client.build_uri(path)
32
+ find_by_uri(uri: uri)
33
+ end
34
+
35
+ def self.update(id:, financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:, idempotency_key: nil, **attributes)
36
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionTransactions"]
37
+ .gsub("{financialInstitutionId}", financial_institution_id)
38
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
39
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
40
+ .gsub("{financialInstitutionTransactionId}", id)
41
+ uri = Ibanity.client.build_uri(path)
42
+ update_by_uri(uri: uri, resource_type: "financialInstitutionTransaction", attributes: attributes, idempotency_key: idempotency_key)
43
+ end
44
+
45
+ def self.delete(id:, financial_institution_user_id:, financial_institution_id:, financial_institution_account_id:)
46
+ path = Ibanity.sandbox_api_schema["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionTransactions"]
47
+ .gsub("{financialInstitutionId}", financial_institution_id)
48
+ .gsub("{financialInstitutionUserId}", financial_institution_user_id)
49
+ .gsub("{financialInstitutionAccountId}", financial_institution_account_id)
50
+ .gsub("{financialInstitutionTransactionId}", id)
51
+ uri = Ibanity.client.build_uri(path)
52
+ destroy_by_uri(uri: uri)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,34 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ module Sandbox
4
+ class FinancialInstitutionUser < Ibanity::BaseResource
5
+ def self.create(idempotency_key: nil, **attributes)
6
+ path = Ibanity.sandbox_api_schema["financialInstitutionUsers"].gsub("{financialInstitutionUserId}", "")
7
+ uri = Ibanity.client.build_uri(path)
8
+ create_by_uri(uri: uri, resource_type: "financialInstitutionUser", attributes: attributes, idempotency_key: idempotency_key)
9
+ end
10
+
11
+ def self.list(**query_params)
12
+ uri = Ibanity.sandbox_api_schema["financialInstitutionUsers"].sub("{financialInstitutionUserId}", "")
13
+ list_by_uri(uri: uri, query_params: query_params)
14
+ end
15
+
16
+ def self.find(id:)
17
+ uri = Ibanity.sandbox_api_schema["financialInstitutionUsers"].sub("{financialInstitutionUserId}", id)
18
+ find_by_uri(uri: uri)
19
+ end
20
+
21
+ def self.update(id:, idempotency_key: nil, **attributes)
22
+ path = Ibanity.sandbox_api_schema["financialInstitutionUsers"].sub("{financialInstitutionUserId}", id)
23
+ uri = Ibanity.client.build_uri(path)
24
+ update_by_uri(uri: uri, resource_type: "financialInstitutionUser", attributes: attributes, idempotency_key: idempotency_key)
25
+ end
26
+
27
+ def self.delete(id:)
28
+ uri = Ibanity.sandbox_api_schema["financialInstitutionUsers"].sub("{financialInstitutionUserId}", id)
29
+ destroy_by_uri(uri: uri)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -6,7 +6,7 @@ module Ibanity
6
6
  Ibanity.xs2a_api_schema["customer"]["synchronization"]["updatedTransactions"]
7
7
  .sub("{synchronizationId}", synchronization_id)
8
8
  else
9
- Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["transactions"]
9
+ Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["account"]["transactions"]
10
10
  .sub("{financialInstitutionId}", financial_institution_id)
11
11
  .sub("{accountId}", account_id)
12
12
  .sub("{transactionId}", "")
@@ -15,7 +15,7 @@ module Ibanity
15
15
  end
16
16
 
17
17
  def self.find(id:, financial_institution_id:, account_id:, customer_access_token:)
18
- uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["transactions"]
18
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["account"]["transactions"]
19
19
  .sub("{financialInstitutionId}", financial_institution_id)
20
20
  .sub("{accountId}", account_id)
21
21
  .sub("{transactionId}", id)
@@ -0,0 +1,25 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class TransactionDeleteRequest < Ibanity::BaseResource
4
+ def self.create_for_application(idempotency_key: nil, **attributes)
5
+ path = Ibanity.xs2a_api_schema["transactionDeleteRequests"]
6
+ uri = Ibanity.client.build_uri(path)
7
+ create_by_uri(uri: uri, resource_type: "transactionDeleteRequest", attributes: attributes, idempotency_key: idempotency_key)
8
+ end
9
+
10
+ def self.create_for_customer(idempotency_key: nil, customer_access_token:, **attributes)
11
+ path = Ibanity.xs2a_api_schema["customer"]["transactionDeleteRequests"]
12
+ uri = Ibanity.client.build_uri(path)
13
+ create_by_uri(uri: uri, resource_type: "transactionDeleteRequest", attributes: attributes, idempotency_key: idempotency_key, customer_access_token: customer_access_token)
14
+ end
15
+
16
+ def self.create_for_financial_institution_and_account(idempotency_key: nil, financial_institution_id:, account_id:, customer_access_token:, **attributes)
17
+ path = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["account"]["transactionDeleteRequests"]
18
+ .sub("{financialInstitutionId}", financial_institution_id)
19
+ .sub("{accountId}", account_id)
20
+ uri = Ibanity.client.build_uri(path)
21
+ create_by_uri(uri: uri, resource_type: "transactionDeleteRequest", attributes: attributes, idempotency_key: idempotency_key, customer_access_token: customer_access_token)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ require_relative "xs2a/account"
2
+ require_relative "xs2a/pending_transaction"
3
+ require_relative "xs2a/transaction"
4
+ require_relative "xs2a/holding"
5
+ require_relative "xs2a/batch_synchronization"
6
+ require_relative "xs2a/financial_institution"
7
+ require_relative "xs2a/financial_institution_country"
8
+ require_relative "xs2a/account_information_access_request"
9
+ require_relative "xs2a/account_information_access_request_authorization"
10
+ require_relative "xs2a/payment_initiation_request_authorization"
11
+ require_relative "xs2a/customer_access_token"
12
+ require_relative "xs2a/customer"
13
+ require_relative "xs2a/payment_initiation_request"
14
+ require_relative "xs2a/transaction_delete_request"
15
+ require_relative "xs2a/bulk_payment_initiation_request"
16
+ require_relative "xs2a/bulk_payment_initiation_request_authorization"
17
+ require_relative "xs2a/periodic_payment_initiation_request"
18
+ require_relative "xs2a/periodic_payment_initiation_request_authorization"
19
+ require_relative "xs2a/synchronization"
20
+ require_relative "xs2a/sandbox/financial_institution_account"
21
+ require_relative "xs2a/sandbox/financial_institution_transaction"
22
+ require_relative "xs2a/sandbox/financial_institution_holding"
23
+ require_relative "xs2a/sandbox/financial_institution_user"
@@ -1,3 +1,3 @@
1
1
  module Ibanity
2
- VERSION = "2.3"
2
+ VERSION = "2.5.0"
3
3
  end
@@ -26,66 +26,56 @@ module Ibanity
26
26
  #
27
27
  # Returns true otherwise
28
28
  def self.verify!(payload, signature_header, tolerance)
29
- begin
30
- key_details = JOSE::JWT.peek_protected(signature_header).to_hash
31
- raise unless key_details["alg"] == SIGNING_ALGORITHM && key_details["kid"]
32
- rescue
33
- raise Ibanity::Error.new("Key details could not be parsed from the header", nil)
34
- end
35
-
36
- key = Ibanity.webhook_keys.find { |key| key.kid == key_details["kid"] }
29
+ jwks_loader = ->(options) do
30
+ raise Ibanity::Error.new("The key id from the header didn't match an available signing key", nil) if options[:kid_not_found]
37
31
 
38
- if key.nil?
39
- raise Ibanity::Error.new("The key id from the header didn't match an available signing key", nil)
32
+ keys = Ibanity.webhook_keys.select { |key| key.use == "sig" }
33
+ .map { |key| JWT::JWK.new(key.to_h {|key, value| [key.to_s, value] }) }
34
+ JWT::JWK::Set.new(keys)
40
35
  end
41
- signer = JOSE::JWK.from(key.to_h {|key, value| [key.to_s, value] })
42
- verified, claims_string, _jws = JOSE::JWT.verify_strict(signer, [SIGNING_ALGORITHM], signature_header)
43
-
44
- raise Ibanity::Error.new("The signature verification failed", nil) unless verified
45
36
 
46
- jwt = JOSE::JWT.from(claims_string)
37
+ options = {
38
+ aud: Ibanity.client.application_id,
39
+ algorithm: SIGNING_ALGORITHM,
40
+ exp_leeway: tolerance,
41
+ iss: Ibanity.client.base_uri,
42
+ jwks: jwks_loader,
43
+ verify_aud: true,
44
+ verify_iss: true
45
+ }
46
+ jwts = JWT.decode(signature_header, nil, true, options)
47
+ jwt = jwts.first
47
48
 
48
49
  validate_digest!(jwt, payload)
49
50
  validate_issued_at!(jwt, tolerance)
50
- validate_expiration!(jwt, tolerance)
51
- validate_issuer!(jwt)
52
- validate_audience!(jwt)
53
51
 
54
52
  true
53
+ rescue JWT::ExpiredSignature
54
+ raise_invalid_signature_error!("exp")
55
+ rescue JWT::IncorrectAlgorithm
56
+ raise Ibanity::Error.new("Incorrect algorithm for signature", nil)
57
+ rescue JWT::InvalidAudError
58
+ raise_invalid_signature_error!("aud")
59
+ rescue JWT::InvalidIssuerError
60
+ raise_invalid_signature_error!("iss")
61
+ rescue JWT::DecodeError
62
+ raise Ibanity::Error.new("The signature verification failed", nil)
55
63
  end
56
64
 
57
65
  private
58
66
 
59
67
  def self.validate_digest!(jwt, payload)
60
- unless Digest::SHA512.base64digest(payload) == jwt.fields["digest"]
68
+ unless Digest::SHA512.base64digest(payload) == jwt["digest"]
61
69
  raise_invalid_signature_error!("digest")
62
70
  end
63
71
  end
64
72
 
65
73
  def self.validate_issued_at!(jwt, tolerance)
66
- unless jwt.fields["iat"] <= Time.now.to_i + tolerance
74
+ unless jwt["iat"] <= Time.now.to_i + tolerance
67
75
  raise_invalid_signature_error!("iat")
68
76
  end
69
77
  end
70
78
 
71
- def self.validate_expiration!(jwt, tolerance)
72
- unless jwt.fields["exp"] >= Time.now.to_i - tolerance
73
- raise_invalid_signature_error!("exp")
74
- end
75
- end
76
-
77
- def self.validate_issuer!(jwt)
78
- unless jwt.fields["iss"] == Ibanity.client.base_uri
79
- raise_invalid_signature_error!("iss")
80
- end
81
- end
82
-
83
- def self.validate_audience!(jwt)
84
- unless jwt.fields["aud"] == Ibanity.client.application_id
85
- raise_invalid_signature_error!("aud")
86
- end
87
- end
88
-
89
79
  def self.raise_invalid_signature_error!(field)
90
80
  raise Ibanity::Error.new("The signature #{field} is invalid", nil)
91
81
  end
data/lib/ibanity.rb CHANGED
@@ -4,69 +4,25 @@ require "uri"
4
4
  require "rest_client"
5
5
  require "json"
6
6
  require "securerandom"
7
- require "jose"
7
+ require "jwt"
8
8
 
9
9
  require_relative "ibanity/util"
10
10
  require_relative "ibanity/error"
11
11
  require_relative "ibanity/collection"
12
12
  require_relative "ibanity/client"
13
13
  require_relative "ibanity/http_signature"
14
+ require_relative "ibanity/webhook"
15
+
14
16
  require_relative "ibanity/api/base_resource"
15
17
  require_relative "ibanity/api/flat_resource"
16
- require_relative "ibanity/webhook"
17
- require_relative "ibanity/api/xs2a/account"
18
- require_relative "ibanity/api/xs2a/pending_transaction"
19
- require_relative "ibanity/api/xs2a/transaction"
20
- require_relative "ibanity/api/xs2a/holding"
21
- require_relative "ibanity/api/xs2a/batch_synchronization"
22
- require_relative "ibanity/api/xs2a/financial_institution"
23
- require_relative "ibanity/api/xs2a/financial_institution_country"
24
- require_relative "ibanity/api/xs2a/account_information_access_request"
25
- require_relative "ibanity/api/xs2a/account_information_access_request_authorization"
26
- require_relative "ibanity/api/xs2a/payment_initiation_request_authorization"
27
- require_relative "ibanity/api/xs2a/customer_access_token"
28
- require_relative "ibanity/api/xs2a/customer"
29
- require_relative "ibanity/api/xs2a/payment_initiation_request"
30
- require_relative "ibanity/api/xs2a/bulk_payment_initiation_request"
31
- require_relative "ibanity/api/xs2a/bulk_payment_initiation_request_authorization"
32
- require_relative "ibanity/api/xs2a/periodic_payment_initiation_request"
33
- require_relative "ibanity/api/xs2a/periodic_payment_initiation_request_authorization"
34
- require_relative "ibanity/api/xs2a/synchronization"
18
+
35
19
  require_relative "ibanity/api/o_auth_resource"
36
- require_relative "ibanity/api/isabel_connect/account"
37
- require_relative "ibanity/api/isabel_connect/balance"
38
- require_relative "ibanity/api/isabel_connect/transaction"
39
- require_relative "ibanity/api/isabel_connect/intraday_transaction"
40
- require_relative "ibanity/api/isabel_connect/account_report"
41
- require_relative "ibanity/api/isabel_connect/access_token"
42
- require_relative "ibanity/api/isabel_connect/refresh_token"
43
- require_relative "ibanity/api/isabel_connect/token"
44
- require_relative "ibanity/api/isabel_connect/bulk_payment_initiation_request"
45
- require_relative "ibanity/api/sandbox/financial_institution_account"
46
- require_relative "ibanity/api/sandbox/financial_institution_transaction"
47
- require_relative "ibanity/api/sandbox/financial_institution_holding"
48
- require_relative "ibanity/api/sandbox/financial_institution_user"
49
- require_relative "ibanity/api/ponto_connect/token"
50
- require_relative "ibanity/api/ponto_connect/financial_institution"
51
- require_relative "ibanity/api/ponto_connect/account"
52
- require_relative "ibanity/api/ponto_connect/transaction"
53
- require_relative "ibanity/api/ponto_connect/synchronization"
54
- require_relative "ibanity/api/consent/consent"
55
- require_relative "ibanity/api/consent/processing_operation"
56
- require_relative "ibanity/api/ponto_connect/payment"
57
- require_relative "ibanity/api/ponto_connect/bulk_payment"
58
- require_relative "ibanity/api/ponto_connect/user_info"
59
- require_relative "ibanity/api/ponto_connect/usage"
60
- require_relative "ibanity/api/ponto_connect/integration"
61
- require_relative "ibanity/api/ponto_connect/sandbox/financial_institution_account"
62
- require_relative "ibanity/api/ponto_connect/sandbox/financial_institution_transaction"
63
- require_relative "ibanity/api/ponto_connect/onboarding_details"
64
- require_relative "ibanity/api/ponto_connect/reauthorization_request"
65
- require_relative "ibanity/api/ponto_connect/payment_activation_request"
66
- require_relative "ibanity/api/ponto_connect/integration_account"
67
- require_relative "ibanity/api/webhooks/key"
68
- require_relative "ibanity/api/webhooks/xs2a"
69
- require_relative "ibanity/api/webhooks/ponto_connect"
20
+
21
+ require_relative "ibanity/api/consent"
22
+ require_relative "ibanity/api/ponto_connect"
23
+ require_relative "ibanity/api/isabel_connect"
24
+ require_relative "ibanity/api/webhooks"
25
+ require_relative "ibanity/api/xs2a"
70
26
 
71
27
  module Ibanity
72
28
  class << self
@@ -0,0 +1,75 @@
1
+ require 'ibanity'
2
+
3
+ RSpec.describe Ibanity::Webhook::Signature do
4
+ subject(:signature_module) { described_class }
5
+
6
+ let(:client) { instance_double("Ibanity::Client") }
7
+
8
+ before do
9
+ allow(Ibanity).to receive(:client).and_return(client)
10
+ allow(Ibanity).to receive(:webhook_keys).and_return(
11
+ [
12
+ Ibanity::Webhooks::Key.new(
13
+ alg: "RS512",
14
+ e: "AQAB",
15
+ kid: "sandbox_events_signature_1",
16
+ kty: "RSA",
17
+ n: "v9qVZmotpil47Pw2NOmP11bpE5B_GtG6ICfqtm13Uusa4asf4FWedclr-kQTV2Ly5rSItq2f3RGRNyove_4TiTIbx21rwM5HP0iFhlVaqHjkr1iSmKzCFojOnTM4UwKQNROhDVDC6TWIzSafZkBacUrCX5l0PLSh2aEK8aiopu5ajYpOr8Ipjw_mbKXxBfcxtjgskbXPyEcf6xlB_Dygl9-btAvRTKiuie4qAWANTdVAgSnddjZMJxFnndZMCH1h-z4ISwphBYbwG2aZrZ7RfHnoIROxsdmKeostYtHy3gMR4_poufzFRR8lpvODd3m7lzdXKBTCvzlQYBNpmf6gmG9p08laE-h67F1GoqvuqspcvRlVpGZEzEwRIbPMAaS4_omCSj4HFZyo58PLUsAp--AD8GGFfVMyBdFhTEkr2235O5AP4UMdHuvyP-NPFCsqibqKK1GIl_Hy0UXnqg7-MCGqs4jX1k4IZZ3wDwza30f1O6tUtaOT8YXzZ2ZWnVWyMLcNx6gep8t3A7gTzEXcselrJgO6SLFRhYA0QmtIRtTwnl-8OmjEi5AJVzO0e-yiRj7g_JLEmgG3pDwmvbiXzEqkY5mPqJMB9G5qcd0SWgvvZs02_1tRRhvw0D5BTKfcEcLW9PKm8Nts1_BGSXKOhTSeQgxuw4iC63ST3dtpl-0=",
18
+ status: "ACTIVE",
19
+ use: "sig"
20
+ )
21
+ ]
22
+ )
23
+ allow(client).to receive(:application_id).and_return("e643b5be-ccb1-4a38-b7b6-36689853bef5")
24
+ allow(client).to receive(:base_uri).and_return("https://api.ibanity.com")
25
+ end
26
+
27
+ describe ".verify!" do
28
+ let(:payload) { Fixture.load_unparsed_json("webhooks/example_payload.json") }
29
+ let(:signature) { Fixture.load_signature("webhooks/example_signature.sig") }
30
+ let(:tolerance) { Time.now.to_i + 10 - 1691670985 }
31
+
32
+ it "returns true for a correct signature" do
33
+ expect(signature_module.verify!(payload, signature, tolerance)).to be_truthy
34
+ end
35
+
36
+ it "raises an error if the contents are altered" do
37
+ expect do
38
+ signature_module.verify!(payload + "altered", signature, tolerance)
39
+ end.to raise_error(Ibanity::Error, /The signature digest is invalid/)
40
+ end
41
+
42
+ it "raises an error if the signature is expired" do
43
+ expect do
44
+ signature_module.verify!(payload, signature, 0)
45
+ end.to raise_error(Ibanity::Error, /The signature exp is invalid/)
46
+ end
47
+
48
+ it "raises an error if the audience is invalid" do
49
+ allow(client).to receive(:application_id).and_return("invalid")
50
+ expect do
51
+ signature_module.verify!(payload, signature, tolerance)
52
+ end.to raise_error(Ibanity::Error, /The signature aud is invalid/)
53
+ end
54
+
55
+ it "raises an error if the issuer is invalid" do
56
+ allow(client).to receive(:base_uri).and_return("invalid")
57
+ expect do
58
+ signature_module.verify!(payload, signature, tolerance)
59
+ end.to raise_error(Ibanity::Error, /The signature iss is invalid/)
60
+ end
61
+
62
+ it "raises an error if the signing key is unavailable" do
63
+ allow(Ibanity).to receive(:webhook_keys).and_return([])
64
+ expect do
65
+ signature_module.verify!(payload, signature, tolerance)
66
+ end.to raise_error(Ibanity::Error, /The key id from the header didn't match an available signing key/)
67
+ end
68
+
69
+ it "raises an error if the signature is altered" do
70
+ expect do
71
+ signature_module.verify!(payload, signature + "altered", tolerance)
72
+ end.to raise_error(Ibanity::Error, /The signature verification failed/)
73
+ end
74
+ end
75
+ end
@@ -5,4 +5,14 @@ module Fixture
5
5
  path = Pathname([File.dirname(__FILE__ ), "fixtures", "json", filename].join("/"))
6
6
  JSON.parse(File.read(path))
7
7
  end
8
+
9
+ def self.load_unparsed_json(filename)
10
+ path = Pathname([File.dirname(__FILE__ ), "fixtures", "json", filename].join("/"))
11
+ File.read(path)
12
+ end
13
+
14
+ def self.load_signature(filename)
15
+ path = Pathname([File.dirname(__FILE__ ), "fixtures", "signature", filename].join("/"))
16
+ File.read(path)
17
+ end
8
18
  end
@@ -0,0 +1 @@
1
+ {"data":{"attributes":{"createdAt":"2023-08-10T12:24:42.224Z","synchronizationSubtype":"accountTransactions"},"id":"3465fd2f-6c9a-484e-971e-56bf44c9181a","relationships":{"account":{"data":{"id":"1d89d411-e310-4802-bbb7-aad7d98371e7","type":"account"}},"organization":{"data":{"id":"9315d6b3-129a-481a-9604-e2a95e0f967d","type":"organization"}},"synchronization":{"data":{"id":"178b59a6-679f-43d4-b5ad-28caea0bc08b","type":"synchronization"}}},"type":"pontoConnect.synchronization.succeededWithoutChange"}}
@@ -0,0 +1 @@
1
+ eyJhbGciOiJSUzUxMiIsImtpZCI6InNhbmRib3hfZXZlbnRzX3NpZ25hdHVyZV8xIn0.eyJhdWQiOiJlNjQzYjViZS1jY2IxLTRhMzgtYjdiNi0zNjY4OTg1M2JlZjUiLCJkaWdlc3QiOiJDZEJPWGwzMGsyM0lsVVdkM2JPL1FtazhXek5lN1NERjVCV3FUQnIyVzQ0VjlqRnhjZW4wSEFHVGsra0Nka0NjWVZsRW9PYmtZM0JCc2lPRnNFV0hIUT09IiwiZXhwIjoxNjkxNjcwOTg1LCJpYXQiOjE2OTE2NzA5MjUsImlzcyI6Imh0dHBzOi8vYXBpLmliYW5pdHkuY29tIiwianRpIjoiMWMyOTNkNTYtOTk1Yi00NDg5LTlhODMtMDEzZTg2ZTk4NjQ2In0.ooEZQDTfGmfYr5DmD7wVxdIN_0YXDBiwwL1_fFwSlTiIcr8vehAbDtcsyf3XrycySkUbWvtZYbhYXJw1BH4eDKdhCd2MnrxNX8BzxEjbAKzsGTT4l1YnrbBEIfcL_Z3qCzxJOzWErkSAgIi1XbiNFbw1YTU0c_Y0bBwxY6EEZgQVpG0-OXbzxhT7GRnsdSmYCAEkbLUzhRDj37fOz0oTfuimn04ANqVNJbTrOnQ2md_lOIS1XWl_WaDrk8pExUQ5JQii7dIxnzaHLB5J6U8zAOUchNLYJW1tcJmpVE_3baO_W6MvsWfEG9wY5Jud55WsnSHOOA4ak0KQJx3owqXt3uzlKH0MjPe6UeuJagZo1nXPW8IV6QCyvqtJ6TMwXqN67GHzh2YTS-Ct7qFxgHKFutlSfBfV4PaTTRd0ywqgTIVXY9P_hQmTSL_J0WiTg_2Di0ty10ehCau9rF1Bmpf2ZnSMK2Rr4JRPIMnFQsU-W5jZbZNF_tDaECzzkDoZgMDRrQT1TsdfSWU-XWG2f0ytiHKVcFJE9mMd25b2SJ6rx2e-TZaQwb5jO61uL1Q8zjvPWqofWZ5emiby9FWNFS-0fqF0UUJdlb7XU1fo_cQi0q4pYGgN2_2sgNETXr99zcTT2vpCf9x9RZGUzXne_WhZP_gp49m0kTX1W0s8O_2g2Do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ibanity
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.3'
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ibanity
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-20 00:00:00.000000000 Z
11
+ date: 2024-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -25,19 +25,19 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.8.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: jose
28
+ name: jwt
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.3
33
+ version: 2.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.3
40
+ version: 2.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,9 +72,11 @@ files:
72
72
  - ibanity.gemspec
73
73
  - lib/ibanity.rb
74
74
  - lib/ibanity/api/base_resource.rb
75
+ - lib/ibanity/api/consent.rb
75
76
  - lib/ibanity/api/consent/consent.rb
76
77
  - lib/ibanity/api/consent/processing_operation.rb
77
78
  - lib/ibanity/api/flat_resource.rb
79
+ - lib/ibanity/api/isabel_connect.rb
78
80
  - lib/ibanity/api/isabel_connect/access_token.rb
79
81
  - lib/ibanity/api/isabel_connect/account.rb
80
82
  - lib/ibanity/api/isabel_connect/account_report.rb
@@ -85,6 +87,7 @@ files:
85
87
  - lib/ibanity/api/isabel_connect/token.rb
86
88
  - lib/ibanity/api/isabel_connect/transaction.rb
87
89
  - lib/ibanity/api/o_auth_resource.rb
90
+ - lib/ibanity/api/ponto_connect.rb
88
91
  - lib/ibanity/api/ponto_connect/account.rb
89
92
  - lib/ibanity/api/ponto_connect/bulk_payment.rb
90
93
  - lib/ibanity/api/ponto_connect/financial_institution.rb
@@ -93,6 +96,8 @@ files:
93
96
  - lib/ibanity/api/ponto_connect/onboarding_details.rb
94
97
  - lib/ibanity/api/ponto_connect/payment.rb
95
98
  - lib/ibanity/api/ponto_connect/payment_activation_request.rb
99
+ - lib/ibanity/api/ponto_connect/payment_request.rb
100
+ - lib/ibanity/api/ponto_connect/pending_transaction.rb
96
101
  - lib/ibanity/api/ponto_connect/reauthorization_request.rb
97
102
  - lib/ibanity/api/ponto_connect/sandbox/financial_institution_account.rb
98
103
  - lib/ibanity/api/ponto_connect/sandbox/financial_institution_transaction.rb
@@ -105,9 +110,11 @@ files:
105
110
  - lib/ibanity/api/sandbox/financial_institution_holding.rb
106
111
  - lib/ibanity/api/sandbox/financial_institution_transaction.rb
107
112
  - lib/ibanity/api/sandbox/financial_institution_user.rb
113
+ - lib/ibanity/api/webhooks.rb
108
114
  - lib/ibanity/api/webhooks/key.rb
109
115
  - lib/ibanity/api/webhooks/ponto_connect.rb
110
116
  - lib/ibanity/api/webhooks/xs2a.rb
117
+ - lib/ibanity/api/xs2a.rb
111
118
  - lib/ibanity/api/xs2a/account.rb
112
119
  - lib/ibanity/api/xs2a/account_information_access_request.rb
113
120
  - lib/ibanity/api/xs2a/account_information_access_request_authorization.rb
@@ -124,8 +131,13 @@ files:
124
131
  - lib/ibanity/api/xs2a/pending_transaction.rb
125
132
  - lib/ibanity/api/xs2a/periodic_payment_initiation_request.rb
126
133
  - lib/ibanity/api/xs2a/periodic_payment_initiation_request_authorization.rb
134
+ - lib/ibanity/api/xs2a/sandbox/financial_institution_account.rb
135
+ - lib/ibanity/api/xs2a/sandbox/financial_institution_holding.rb
136
+ - lib/ibanity/api/xs2a/sandbox/financial_institution_transaction.rb
137
+ - lib/ibanity/api/xs2a/sandbox/financial_institution_user.rb
127
138
  - lib/ibanity/api/xs2a/synchronization.rb
128
139
  - lib/ibanity/api/xs2a/transaction.rb
140
+ - lib/ibanity/api/xs2a/transaction_delete_request.rb
129
141
  - lib/ibanity/client.rb
130
142
  - lib/ibanity/collection.rb
131
143
  - lib/ibanity/error.rb
@@ -136,6 +148,7 @@ files:
136
148
  - spec/lib/ibanity/base_resource_spec.rb
137
149
  - spec/lib/ibanity/http_signature_spec.rb
138
150
  - spec/lib/ibanity/util_spec.rb
151
+ - spec/lib/ibanity/webhook_signature_spec.rb
139
152
  - spec/spec_helper.rb
140
153
  - spec/support/crypto_helper.rb
141
154
  - spec/support/fixture.rb
@@ -143,9 +156,11 @@ files:
143
156
  - spec/support/fixtures/json/relationships/data_without_type.json
144
157
  - spec/support/fixtures/json/relationships/meta_with_type.json
145
158
  - spec/support/fixtures/json/relationships/no_links_related.json
159
+ - spec/support/fixtures/json/webhooks/example_payload.json
146
160
  - spec/support/fixtures/signature/test-certificate.pem
147
161
  - spec/support/fixtures/signature/test-private_key.pem
148
162
  - spec/support/fixtures/signature/test-public_key.pem
163
+ - spec/support/fixtures/signature/webhooks/example_signature.sig
149
164
  homepage: https://documentation.ibanity.com/api/ruby
150
165
  licenses:
151
166
  - MIT
@@ -173,6 +188,7 @@ test_files:
173
188
  - spec/lib/ibanity/base_resource_spec.rb
174
189
  - spec/lib/ibanity/http_signature_spec.rb
175
190
  - spec/lib/ibanity/util_spec.rb
191
+ - spec/lib/ibanity/webhook_signature_spec.rb
176
192
  - spec/spec_helper.rb
177
193
  - spec/support/crypto_helper.rb
178
194
  - spec/support/fixture.rb
@@ -180,6 +196,8 @@ test_files:
180
196
  - spec/support/fixtures/json/relationships/data_without_type.json
181
197
  - spec/support/fixtures/json/relationships/meta_with_type.json
182
198
  - spec/support/fixtures/json/relationships/no_links_related.json
199
+ - spec/support/fixtures/json/webhooks/example_payload.json
183
200
  - spec/support/fixtures/signature/test-certificate.pem
184
201
  - spec/support/fixtures/signature/test-private_key.pem
185
202
  - spec/support/fixtures/signature/test-public_key.pem
203
+ - spec/support/fixtures/signature/webhooks/example_signature.sig