ibanity 0.5 → 1.3

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 (64) hide show
  1. checksums.yaml +5 -5
  2. data/.rspec +1 -0
  3. data/.travis.yml +20 -0
  4. data/CHANGELOG.md +20 -0
  5. data/README.md +2 -0
  6. data/ibanity.gemspec +1 -2
  7. data/lib/ibanity.rb +68 -14
  8. data/lib/ibanity/api/base_resource.rb +45 -15
  9. data/lib/ibanity/api/consent/consent.rb +41 -0
  10. data/lib/ibanity/api/consent/processing_operation.rb +37 -0
  11. data/lib/ibanity/api/isabel_connect/access_token.rb +17 -0
  12. data/lib/ibanity/api/isabel_connect/account.rb +15 -0
  13. data/lib/ibanity/api/isabel_connect/account_report.rb +15 -0
  14. data/lib/ibanity/api/isabel_connect/balance.rb +11 -0
  15. data/lib/ibanity/api/isabel_connect/bulk_payment_initiation_request.rb +25 -0
  16. data/lib/ibanity/api/isabel_connect/intraday_transaction.rb +10 -0
  17. data/lib/ibanity/api/isabel_connect/refresh_token.rb +29 -0
  18. data/lib/ibanity/api/isabel_connect/transaction.rb +10 -0
  19. data/lib/ibanity/api/o_auth_resource.rb +19 -0
  20. data/lib/ibanity/api/ponto_connect/account.rb +15 -0
  21. data/lib/ibanity/api/ponto_connect/financial_institution.rb +15 -0
  22. data/lib/ibanity/api/ponto_connect/payment.rb +20 -0
  23. data/lib/ibanity/api/ponto_connect/sandbox/financial_institution_account.rb +21 -0
  24. data/lib/ibanity/api/ponto_connect/sandbox/financial_institution_transaction.rb +31 -0
  25. data/lib/ibanity/api/ponto_connect/synchronization.rb +15 -0
  26. data/lib/ibanity/api/ponto_connect/token.rb +53 -0
  27. data/lib/ibanity/api/ponto_connect/transaction.rb +15 -0
  28. data/lib/ibanity/api/ponto_connect/usage.rb +10 -0
  29. data/lib/ibanity/api/ponto_connect/user_info.rb +10 -0
  30. data/lib/ibanity/api/sandbox/financial_institution_account.rb +41 -0
  31. data/lib/ibanity/api/sandbox/financial_institution_holding.rb +45 -0
  32. data/lib/ibanity/api/sandbox/financial_institution_transaction.rb +45 -0
  33. data/lib/ibanity/api/sandbox/financial_institution_user.rb +32 -0
  34. data/lib/ibanity/api/xs2a/account.rb +33 -0
  35. data/lib/ibanity/api/xs2a/account_information_access_request.rb +27 -0
  36. data/lib/ibanity/api/xs2a/account_information_access_request_authorization.rb +21 -0
  37. data/lib/ibanity/api/xs2a/bulk_payment_initiation_request.rb +33 -0
  38. data/lib/ibanity/api/xs2a/customer.rb +10 -0
  39. data/lib/ibanity/api/xs2a/customer_access_token.rb +11 -0
  40. data/lib/ibanity/api/xs2a/financial_institution.rb +36 -0
  41. data/lib/ibanity/api/xs2a/holding.rb +21 -0
  42. data/lib/ibanity/api/xs2a/payment_initiation_request.rb +33 -0
  43. data/lib/ibanity/api/xs2a/payment_initiation_request_authorization.rb +21 -0
  44. data/lib/ibanity/api/xs2a/periodic_payment_initiation_request.rb +33 -0
  45. data/lib/ibanity/api/xs2a/synchronization.rb +17 -0
  46. data/lib/ibanity/api/xs2a/transaction.rb +21 -0
  47. data/lib/ibanity/client.rb +41 -30
  48. data/lib/ibanity/collection.rb +47 -0
  49. data/lib/ibanity/error.rb +9 -5
  50. data/lib/ibanity/http_signature.rb +4 -2
  51. data/lib/ibanity/util.rb +11 -4
  52. data/lib/ibanity/version.rb +1 -1
  53. data/spec/lib/ibanity/util_spec.rb +89 -0
  54. data/spec/spec_helper.rb +100 -0
  55. metadata +52 -30
  56. data/lib/ibanity/api/account.rb +0 -20
  57. data/lib/ibanity/api/account_information_access_request.rb +0 -17
  58. data/lib/ibanity/api/customer_access_token.rb +0 -9
  59. data/lib/ibanity/api/financial_institution.rb +0 -30
  60. data/lib/ibanity/api/financial_institution_account.rb +0 -39
  61. data/lib/ibanity/api/financial_institution_transaction.rb +0 -43
  62. data/lib/ibanity/api/financial_institution_user.rb +0 -30
  63. data/lib/ibanity/api/payment_initiation_request.rb +0 -24
  64. data/lib/ibanity/api/transaction.rb +0 -19
@@ -0,0 +1,32 @@
1
+ module Ibanity
2
+ module Sandbox
3
+ class FinancialInstitutionUser < Ibanity::BaseResource
4
+ 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)
8
+ end
9
+
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)
13
+ end
14
+
15
+ def self.find(id:)
16
+ uri = Ibanity.sandbox_api_schema["financialInstitutionUsers"].sub("{financialInstitutionUserId}", id)
17
+ find_by_uri(uri: uri)
18
+ end
19
+
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)
24
+ end
25
+
26
+ def self.delete(id:)
27
+ uri = Ibanity.sandbox_api_schema["financialInstitutionUsers"].sub("{financialInstitutionUserId}", id)
28
+ destroy_by_uri(uri: uri)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class Account < Ibanity::BaseResource
4
+ def self.list(financial_institution_id: nil, account_information_access_request_id: nil, customer_access_token:, headers: nil, **query_params)
5
+ uri = if account_information_access_request_id
6
+ Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["accountInformationAccessRequest"]["accounts"]
7
+ .sub("{financialInstitutionId}", financial_institution_id)
8
+ .sub("{accountInformationAccessRequestId}", account_information_access_request_id)
9
+ .sub("{accountId}", "")
10
+ elsif financial_institution_id
11
+ Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["accounts"].sub("{financialInstitutionId}", financial_institution_id).sub("{accountId}", "")
12
+ else
13
+ Ibanity.xs2a_api_schema["customer"]["accounts"].sub("{accountId}", "")
14
+ end
15
+ list_by_uri(uri: uri, query_params: query_params, customer_access_token: customer_access_token, headers: headers)
16
+ end
17
+
18
+ def self.find(id:, financial_institution_id:, customer_access_token:, headers: nil)
19
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["accounts"]
20
+ .sub("{financialInstitutionId}", financial_institution_id)
21
+ .sub("{accountId}", id)
22
+ find_by_uri(uri: uri, customer_access_token: customer_access_token, headers: headers)
23
+ end
24
+
25
+ def self.delete(id:, financial_institution_id:, customer_access_token:)
26
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["accounts"]
27
+ .sub("{financialInstitutionId}", financial_institution_id)
28
+ .sub("{accountId}", id)
29
+ destroy_by_uri(uri: uri, customer_access_token: customer_access_token)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,27 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class AccountInformationAccessRequest < Ibanity::BaseResource
4
+ def self.create_for_financial_institution(financial_institution_id:, customer_access_token:, idempotency_key: nil, meta: nil, **attributes)
5
+ path = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["accountInformationAccessRequests"]
6
+ .gsub("{financialInstitutionId}", financial_institution_id)
7
+ .gsub("{accountInformationAccessRequestId}", "")
8
+ uri = Ibanity.client.build_uri(path)
9
+ create_by_uri(
10
+ uri: uri,
11
+ resource_type: "accountInformationAccessRequest",
12
+ attributes: attributes,
13
+ customer_access_token: customer_access_token,
14
+ idempotency_key: idempotency_key,
15
+ meta: meta
16
+ )
17
+ end
18
+
19
+ def self.find(id:, financial_institution_id:, customer_access_token:)
20
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["accountInformationAccessRequests"]
21
+ .gsub("{financialInstitutionId}", financial_institution_id)
22
+ .gsub("{accountInformationAccessRequestId}", id)
23
+ find_by_uri(uri: uri, customer_access_token: customer_access_token)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class AccountInformationAccessRequestAuthorization < Ibanity::BaseResource
4
+ def self.create(financial_institution_id:, account_information_access_request_id:, customer_access_token:, idempotency_key: nil, meta: nil, **attributes)
5
+ path = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["accountInformationAccessRequest"]["authorizations"]
6
+ .gsub("{financialInstitutionId}", financial_institution_id)
7
+ .gsub("{accountInformationAccessRequestId}", account_information_access_request_id)
8
+ .gsub("{authorizationId}", "")
9
+ uri = Ibanity.client.build_uri(path)
10
+ create_by_uri(
11
+ uri: uri,
12
+ resource_type: "authorization",
13
+ attributes: attributes,
14
+ customer_access_token: customer_access_token,
15
+ idempotency_key: idempotency_key,
16
+ meta: meta
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,33 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class BulkPaymentInitiationRequest < Ibanity::BaseResource
4
+ def self.create_for_financial_institution(financial_institution_id:, customer_access_token:, idempotency_key: nil, **attributes)
5
+ path = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["bulkPaymentInitiationRequests"]
6
+ .gsub("{financialInstitutionId}", financial_institution_id)
7
+ .sub("{paymentInitiationRequestId}", "")
8
+ uri = Ibanity.client.build_uri(path)
9
+ create_by_uri(
10
+ uri: uri,
11
+ resource_type: "bulkPaymentInitiationRequest",
12
+ attributes: attributes,
13
+ customer_access_token: customer_access_token,
14
+ idempotency_key: idempotency_key
15
+ )
16
+ end
17
+
18
+ def self.find(id:, financial_institution_id:, customer_access_token:)
19
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["bulkPaymentInitiationRequests"]
20
+ .gsub("{financialInstitutionId}", financial_institution_id)
21
+ .sub("{paymentInitiationRequestId}", id)
22
+ find_by_uri(uri: uri, customer_access_token: customer_access_token)
23
+ end
24
+
25
+ def self.delete(id:, financial_institution_id:, customer_access_token:)
26
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["bulkPaymentInitiationRequests"]
27
+ .gsub("{financialInstitutionId}", financial_institution_id)
28
+ .sub("{paymentInitiationRequestId}", id)
29
+ destroy_by_uri(uri: uri, customer_access_token: customer_access_token)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,10 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class Customer < ::Ibanity::BaseResource
4
+ def self.delete(customer_access_token:)
5
+ uri = Ibanity.xs2a_api_schema["customer"]["self"]
6
+ destroy_by_uri(uri: uri, customer_access_token: customer_access_token)
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class CustomerAccessToken < ::Ibanity::BaseResource
4
+ def self.create(idempotency_key: nil, **attributes)
5
+ path = ::Ibanity.xs2a_api_schema["customerAccessTokens"]
6
+ uri = ::Ibanity.client.build_uri(path)
7
+ create_by_uri(uri: uri, resource_type: "customerAccessToken", attributes: attributes, idempotency_key: idempotency_key)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,36 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class FinancialInstitution < Ibanity::BaseResource
4
+ def self.list(customer_access_token: nil, **query_params)
5
+ uri = if customer_access_token.nil?
6
+ Ibanity.xs2a_api_schema["financialInstitutions"].sub("{financialInstitutionId}", "")
7
+ else
8
+ Ibanity.xs2a_api_schema["customer"]["financialInstitutions"].sub("{financialInstitutionId}", "")
9
+ end
10
+ list_by_uri(uri: uri, query_params: query_params, customer_access_token: customer_access_token)
11
+ end
12
+
13
+ def self.find(id:)
14
+ uri = Ibanity.xs2a_api_schema["financialInstitutions"].sub("{financialInstitutionId}", id)
15
+ find_by_uri(uri: uri)
16
+ end
17
+
18
+ def self.create(idempotency_key: nil, **attributes)
19
+ path = Ibanity.sandbox_api_schema["financialInstitutions"].gsub("{financialInstitutionId}", "")
20
+ uri = Ibanity.client.build_uri(path)
21
+ create_by_uri(uri: uri, resource_type: "financialInstitution", attributes: attributes, idempotency_key: idempotency_key)
22
+ end
23
+
24
+ def self.update(id:, idempotency_key: nil, **attributes)
25
+ path = Ibanity.sandbox_api_schema["financialInstitutions"].gsub("{financialInstitutionId}", id)
26
+ uri = Ibanity.client.build_uri(path)
27
+ update_by_uri(uri: uri, resource_type: "financialInstitution", attributes: attributes, idempotency_key: idempotency_key)
28
+ end
29
+
30
+ def self.delete(id:)
31
+ uri = Ibanity.sandbox_api_schema["financialInstitutions"].gsub("{financialInstitutionId}", id)
32
+ destroy_by_uri(uri: uri)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,21 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class Holding < Ibanity::BaseResource
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"]
6
+ .sub("{financialInstitutionId}", financial_institution_id)
7
+ .sub("{accountId}", account_id)
8
+ .sub("{holdingId}", "")
9
+ list_by_uri(uri: uri, query_params: query_params, customer_access_token: customer_access_token, headers: headers)
10
+ end
11
+
12
+ def self.find(id:, financial_institution_id:, account_id:, customer_access_token:)
13
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["holdings"]
14
+ .sub("{financialInstitutionId}", financial_institution_id)
15
+ .sub("{accountId}", account_id)
16
+ .sub("{holdingId}", id)
17
+ find_by_uri(uri: uri, customer_access_token: customer_access_token)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,33 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class PaymentInitiationRequest < Ibanity::BaseResource
4
+ def self.create_for_financial_institution(financial_institution_id:, customer_access_token:, idempotency_key: nil, **attributes)
5
+ path = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["paymentInitiationRequests"]
6
+ .gsub("{financialInstitutionId}", financial_institution_id)
7
+ .sub("{paymentInitiationRequestId}", "")
8
+ uri = Ibanity.client.build_uri(path)
9
+ create_by_uri(
10
+ uri: uri,
11
+ resource_type: "accountInformationAccessRequest",
12
+ attributes: attributes,
13
+ customer_access_token: customer_access_token,
14
+ idempotency_key: idempotency_key
15
+ )
16
+ end
17
+
18
+ def self.find(id:, financial_institution_id:, customer_access_token:)
19
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["paymentInitiationRequests"]
20
+ .gsub("{financialInstitutionId}", financial_institution_id)
21
+ .sub("{paymentInitiationRequestId}", id)
22
+ find_by_uri(uri: uri, customer_access_token: customer_access_token)
23
+ end
24
+
25
+ def self.delete(id:, financial_institution_id:, customer_access_token:)
26
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["paymentInitiationRequests"]
27
+ .gsub("{financialInstitutionId}", financial_institution_id)
28
+ .sub("{paymentInitiationRequestId}", id)
29
+ destroy_by_uri(uri: uri, customer_access_token: customer_access_token)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class PaymentInitiationRequestAuthorization < Ibanity::BaseResource
4
+ def self.create(financial_institution_id:, payment_initiation_request_id:, customer_access_token:, idempotency_key: nil, meta: nil, **attributes)
5
+ path = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["paymentInitiationRequest"]["authorizations"]
6
+ .gsub("{financialInstitutionId}", financial_institution_id)
7
+ .gsub("{paymentInitiationRequestId}", payment_initiation_request_id)
8
+ .gsub("{authorizationId}", "")
9
+ uri = Ibanity.client.build_uri(path)
10
+ create_by_uri(
11
+ uri: uri,
12
+ resource_type: "authorization",
13
+ attributes: attributes,
14
+ customer_access_token: customer_access_token,
15
+ idempotency_key: idempotency_key,
16
+ meta: meta
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,33 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class PeriodicPaymentInitiationRequest < Ibanity::BaseResource
4
+ def self.create_for_financial_institution(financial_institution_id:, customer_access_token:, idempotency_key: nil, **attributes)
5
+ path = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["periodicPaymentInitiationRequests"]
6
+ .gsub("{financialInstitutionId}", financial_institution_id)
7
+ .sub("{paymentInitiationRequestId}", "")
8
+ uri = Ibanity.client.build_uri(path)
9
+ create_by_uri(
10
+ uri: uri,
11
+ resource_type: "periodicPaymentInitiationRequest",
12
+ attributes: attributes,
13
+ customer_access_token: customer_access_token,
14
+ idempotency_key: idempotency_key
15
+ )
16
+ end
17
+
18
+ def self.find(id:, financial_institution_id:, customer_access_token:)
19
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["periodicPaymentInitiationRequests"]
20
+ .gsub("{financialInstitutionId}", financial_institution_id)
21
+ .sub("{paymentInitiationRequestId}", id)
22
+ find_by_uri(uri: uri, customer_access_token: customer_access_token)
23
+ end
24
+
25
+ def self.delete(id:, financial_institution_id:, customer_access_token:)
26
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["periodicPaymentInitiationRequests"]
27
+ .gsub("{financialInstitutionId}", financial_institution_id)
28
+ .sub("{paymentInitiationRequestId}", id)
29
+ destroy_by_uri(uri: uri, customer_access_token: customer_access_token)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,17 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class Synchronization < Ibanity::BaseResource
4
+ def self.create(customer_access_token:, **attributes)
5
+ uri = Ibanity.xs2a_api_schema["customer"]["synchronizations"]
6
+ .sub("{synchronizationId}", "")
7
+ create_by_uri(uri: uri, resource_type: "synchronization", attributes: attributes, customer_access_token: customer_access_token)
8
+ end
9
+
10
+ def self.find(id:, customer_access_token:)
11
+ uri = Ibanity.xs2a_api_schema["customer"]["synchronizations"]
12
+ .sub("{synchronizationId}", id)
13
+ find_by_uri(uri: uri, customer_access_token: customer_access_token)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module Ibanity
2
+ module Xs2a
3
+ class Transaction < Ibanity::BaseResource
4
+ def self.list(financial_institution_id:, account_id:, customer_access_token:, headers: nil, **query_params)
5
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["transactions"]
6
+ .sub("{financialInstitutionId}", financial_institution_id)
7
+ .sub("{accountId}", account_id)
8
+ .sub("{transactionId}", "")
9
+ list_by_uri(uri: uri, query_params: query_params, customer_access_token: customer_access_token, headers: headers)
10
+ end
11
+
12
+ def self.find(id:, financial_institution_id:, account_id:, customer_access_token:)
13
+ uri = Ibanity.xs2a_api_schema["customer"]["financialInstitution"]["transactions"]
14
+ .sub("{financialInstitutionId}", financial_institution_id)
15
+ .sub("{accountId}", account_id)
16
+ .sub("{transactionId}", id)
17
+ find_by_uri(uri: uri, customer_access_token: customer_access_token)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,11 +1,15 @@
1
1
  module Ibanity
2
2
  class Client
3
3
 
4
- attr_reader :base_uri, :signature_certificate, :signature_key
4
+ attr_reader :base_uri, :signature_certificate, :signature_key, :isabel_connect_client_id, :isabel_connect_client_secret, :ponto_connect_client_id, :ponto_connect_client_secret
5
5
 
6
- def initialize(certificate:, key:, key_passphrase:, signature_certificate: nil, signature_certificate_id: nil, signature_key: nil, signature_key_passphrase: nil, api_scheme: "https", api_host: "api.ibanity.com", api_port: "443", ssl_ca_file: nil)
7
- @certificate = OpenSSL::X509::Certificate.new(certificate)
8
- @key = OpenSSL::PKey::RSA.new(key, key_passphrase)
6
+ def initialize(certificate:, key:, key_passphrase:, signature_certificate: nil, signature_certificate_id: nil, signature_key: nil, signature_key_passphrase: nil, api_scheme: "https", api_host: "api.ibanity.com", api_port: "443", ssl_ca_file: nil, isabel_connect_client_id: "valid_client_id", isabel_connect_client_secret: "valid_client_secret", ponto_connect_client_id: nil, ponto_connect_client_secret: nil)
7
+ @isabel_connect_client_id = isabel_connect_client_id
8
+ @isabel_connect_client_secret = isabel_connect_client_secret
9
+ @ponto_connect_client_id = ponto_connect_client_id
10
+ @ponto_connect_client_secret = ponto_connect_client_secret
11
+ @certificate = OpenSSL::X509::Certificate.new(certificate)
12
+ @key = OpenSSL::PKey::RSA.new(key, key_passphrase)
9
13
  if signature_certificate
10
14
  @signature_certificate = OpenSSL::X509::Certificate.new(signature_certificate)
11
15
  @signature_certificate_id = signature_certificate_id
@@ -15,24 +19,24 @@ module Ibanity
15
19
  @ssl_ca_file = ssl_ca_file
16
20
  end
17
21
 
18
- def get(uri:, query_params: {}, customer_access_token: nil)
19
- headers = build_headers(customer_access_token)
20
- execute(method: :get, uri: uri, headers: headers, query_params: query_params)
22
+ def get(uri:, query_params: {}, customer_access_token: nil, headers: nil, json: true)
23
+ headers = build_headers(customer_access_token: customer_access_token, extra_headers: headers, json: json)
24
+ execute(method: :get, uri: uri, headers: headers, query_params: query_params, json: json)
21
25
  end
22
26
 
23
- def post(uri:, payload:, query_params: {}, customer_access_token: nil, idempotency_key: nil)
24
- headers = build_headers(customer_access_token, idempotency_key)
25
- execute(method: :post, uri: uri, headers: headers, query_params: query_params, payload: payload)
27
+ def post(uri:, payload:, query_params: {}, customer_access_token: nil, idempotency_key: nil, json: true, headers: nil)
28
+ headers = build_headers(customer_access_token: customer_access_token, idempotency_key: idempotency_key, extra_headers: headers, json: json)
29
+ execute(method: :post, uri: uri, headers: headers, query_params: query_params, payload: payload, json: json)
26
30
  end
27
31
 
28
- def patch(uri:, payload:, query_params: {}, customer_access_token: nil, idempotency_key: nil)
29
- headers = build_headers(customer_access_token, idempotency_key)
30
- execute(method: :patch, uri: uri, headers: headers, query_params: query_params, payload: payload)
32
+ def patch(uri:, payload:, query_params: {}, customer_access_token: nil, idempotency_key: nil, json: true)
33
+ headers = build_headers(customer_access_token: customer_access_token, idempotency_key: idempotency_key, json: json)
34
+ execute(method: :patch, uri: uri, headers: headers, query_params: query_params, payload: payload, json: json)
31
35
  end
32
36
 
33
- def delete(uri:, query_params: {}, customer_access_token: nil)
34
- headers = build_headers(customer_access_token)
35
- execute(method: :delete, uri: uri, headers: headers, query_params: query_params)
37
+ def delete(uri:, query_params: {}, customer_access_token: nil, json: true)
38
+ headers = build_headers(customer_access_token: customer_access_token, json: json)
39
+ execute(method: :delete, uri: uri, headers: headers, query_params: query_params, json: json)
36
40
  end
37
41
 
38
42
  def build_uri(path)
@@ -41,17 +45,17 @@ module Ibanity
41
45
 
42
46
  private
43
47
 
44
- def execute(method:, uri:, headers:, query_params: {}, payload: nil, idempotency_key: nil)
48
+ def execute(method:, uri:, headers:, query_params: {}, payload: nil, json:)
45
49
  if @signature_certificate
46
50
  signature = Ibanity::HttpSignature.new(
47
- certificate: @signature_certificate,
51
+ certificate: @signature_certificate,
48
52
  certificate_id: @signature_certificate_id,
49
- key: @signature_key,
50
- method: method,
51
- uri: uri,
52
- query_params: query_params,
53
- headers: headers,
54
- payload: payload
53
+ key: @signature_key,
54
+ method: method,
55
+ uri: uri,
56
+ query_params: query_params,
57
+ headers: headers,
58
+ payload: payload && json ? payload.to_json : payload
55
59
  )
56
60
  headers.merge!(signature.signature_headers)
57
61
  end
@@ -59,30 +63,37 @@ module Ibanity
59
63
  method: method,
60
64
  url: uri,
61
65
  headers: headers.merge(params: query_params),
62
- payload: payload ? payload.to_json : nil,
66
+ payload: payload && json ? payload.to_json : payload,
63
67
  ssl_client_cert: @certificate,
64
68
  ssl_client_key: @key,
65
69
  ssl_ca_file: @ssl_ca_file
66
70
  }
67
71
  raw_response = RestClient::Request.execute(query) do |response, request, result, &block|
68
72
  if response.code >= 400
73
+ ibanity_request_id = response.headers[:ibanity_request_id]
69
74
  body = JSON.parse(response.body)
70
- raise Ibanity::Error.new(body["errors"]), "Ibanity request failed."
75
+ raise Ibanity::Error.new(body["errors"] || body, ibanity_request_id), "Ibanity request failed."
71
76
  else
72
77
  response.return!(&block)
73
78
  end
74
79
  end
75
80
  JSON.parse(raw_response)
81
+ rescue JSON::ParserError => e
82
+ return raw_response.body
76
83
  end
77
84
 
78
- def build_headers(customer_access_token = nil, idempotency_key = nil)
85
+ def build_headers(customer_access_token: nil, idempotency_key: nil, extra_headers: nil, json:)
79
86
  headers = {
80
- content_type: :json,
81
- accept: :json,
87
+ accept: :json,
82
88
  }
89
+ headers[:content_type] = :json if json
83
90
  headers["Authorization"] = "Bearer #{customer_access_token}" unless customer_access_token.nil?
84
91
  headers["Ibanity-Idempotency-Key"] = idempotency_key unless idempotency_key.nil?
85
- headers
92
+ if extra_headers.nil?
93
+ headers
94
+ else
95
+ headers.merge(extra_headers)
96
+ end
86
97
  end
87
98
  end
88
99
  end