ibanity 0.5 → 1.3

Sign up to get free protection for your applications and to get access to all the features.
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