ibanity 2.3 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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