From 291fab81b544e038d97c4c5dc735d6b6ad49ed19 Mon Sep 17 00:00:00 2001 From: Edouard Menayde Date: Wed, 8 Jan 2025 17:25:17 +0100 Subject: [PATCH 1/4] Enforce mix format and format unformated files --- .github/workflows/ci.yml | 2 ++ config/test.exs | 4 +--- .../xs2a/financial_institution_status.ex | 3 ++- lib/ibanity/api/billing/xs2a/report.ex | 9 ++++--- lib/ibanity/api/consent/consent.ex | 7 +++--- .../api/consent/processing_operation.ex | 4 ++-- lib/ibanity/api/reporting/xs2a/nbb_report.ex | 3 ++- .../sandbox/financial_institution_account.ex | 12 ++++++++-- .../api/sandbox/financial_institution_user.ex | 1 + .../authorization_completed.ex | 3 ++- .../status_updated.ex | 3 ++- .../authorization_completed.ex | 3 ++- .../status_updated.ex | 3 ++- lib/ibanity/api/xs2a/account.ex | 24 +++++++++++++++---- .../account_information_access_request.ex | 10 ++++++-- ...nformation_access_request_authorization.ex | 9 +++++-- .../xs2a/bulk_payment_initiation_request.ex | 3 ++- ...ayment_initiation_request_authorization.ex | 9 +++++-- lib/ibanity/api/xs2a/financial_institution.ex | 9 ++++--- .../api/xs2a/payment_initiation_request.ex | 3 ++- ...ayment_initiation_request_authorization.ex | 9 +++++-- lib/ibanity/api/xs2a/pending_transaction.ex | 16 +++++++++++-- .../periodic_payment_initiation_request.ex | 3 ++- ...ayment_initiation_request_authorization.ex | 9 +++++-- .../sandbox/financial_institution_account.ex | 9 ++++--- .../sandbox/financial_institution_holding.ex | 3 ++- .../financial_institution_transaction.ex | 3 ++- .../sandbox/financial_institution_user.ex | 1 + lib/ibanity/api/xs2a/synchronization.ex | 20 +++++++++++++--- lib/ibanity/api/xs2a/transaction.ex | 16 +++++++++++-- .../api/xs2a/transaction_delete_request.ex | 19 ++++++++++++--- lib/ibanity/signature.ex | 5 ++-- lib/ibanity/util/query_params_util.ex | 2 +- lib/ibanity/webhook.ex | 12 +++++++--- lib/ibanity/webhook_plug.ex | 5 +++- .../xs2a/payment_inititation_request_test.exs | 2 +- ...financial_institution_transaction_test.exs | 2 +- .../deserialization/xs2a/transaction_test.exs | 2 +- 38 files changed, 197 insertions(+), 65 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b0e1834..e191369 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,6 +27,8 @@ jobs: run: mix deps.get - name: Run tests run: mix test + - name: Check formatting + run: mix format --check-formatted - name: Notify slack failure on master branch if: contains(github.ref, 'master') && failure() env: diff --git a/config/test.exs b/config/test.exs index dd957d2..1a025be 100644 --- a/config/test.exs +++ b/config/test.exs @@ -1,8 +1,6 @@ import Config -config :ibanity, :applications, [ - default: [] -] +config :ibanity, :applications, default: [] config :ibanity, :api_url, "https://api.ibanity.com" config :ibanity, :products, ["xs2a", "consent"] diff --git a/lib/ibanity/api/billing/xs2a/financial_institution_status.ex b/lib/ibanity/api/billing/xs2a/financial_institution_status.ex index 4e03504..2d979b4 100644 --- a/lib/ibanity/api/billing/xs2a/financial_institution_status.ex +++ b/lib/ibanity/api/billing/xs2a/financial_institution_status.ex @@ -7,7 +7,8 @@ defmodule Ibanity.Billing.Xs2a.FinancialInstitutionStatus do worst_status: nil, best_status: nil - def list(%Request{} = request), do: Client.execute(request, :get, @api_schema_path, "financialInstitutionStatus") + def list(%Request{} = request), + do: Client.execute(request, :get, @api_schema_path, "financialInstitutionStatus") def key_mapping do [ diff --git a/lib/ibanity/api/billing/xs2a/report.ex b/lib/ibanity/api/billing/xs2a/report.ex index a2b395f..625aa21 100644 --- a/lib/ibanity/api/billing/xs2a/report.ex +++ b/lib/ibanity/api/billing/xs2a/report.ex @@ -23,9 +23,12 @@ defmodule Ibanity.Billing.Xs2a.Report do end: {~w(attributes billingPeriod end), :datetime}, active_accounts_count: {~w(attributes billingPeriod activeAccountsCount), :integer}, inactive_accounts_count: {~w(attributes billingPeriod inactiveAccountsCount), :integer}, - payment_initiation_requests_count: {~w(attributes billingPeriod paymentInitiationRequestsCount), :integer}, - account_transactions_synchronization_count: {~w(attributes billingPeriod accountTransactionsSynchronizationCount), :integer}, - account_details_synchronization_count: {~w(attributes billingPeriod accountDetailsSynchronizationCount), :integer}, + payment_initiation_requests_count: + {~w(attributes billingPeriod paymentInitiationRequestsCount), :integer}, + account_transactions_synchronization_count: + {~w(attributes billingPeriod accountTransactionsSynchronizationCount), :integer}, + account_details_synchronization_count: + {~w(attributes billingPeriod accountDetailsSynchronizationCount), :integer}, accounts_count: {~w(attributes billingPeriod accountsCount), :integer} ] end diff --git a/lib/ibanity/api/consent/consent.ex b/lib/ibanity/api/consent/consent.ex index ea8b32f..d1d6f77 100644 --- a/lib/ibanity/api/consent/consent.ex +++ b/lib/ibanity/api/consent/consent.ex @@ -4,7 +4,7 @@ defmodule Ibanity.Consent.Consent do use Ibanity.Resource - @api_schema_path ~w(consent consents) + @api_schema_path ~w(consent consents) @validate_api_schema_path ~w(consent consent validations) @revoke_api_schema_path ~w(consent consent revocations) @@ -116,13 +116,14 @@ defmodule Ibanity.Consent.Consent do revoked_at: {~w(attributes revokedAt), :datetime}, data_subject: {~w(attributes dataSubject), :string}, authorized_representative_type: {~w(attributes authorizedRepresentativeType), :string}, - authorized_representative_reference: {~w(attributes authorizedRepresentativeReference), :string}, + authorized_representative_reference: + {~w(attributes authorizedRepresentativeReference), :string}, data_controller_meta: {~w(attributes dataControllerMeta), :string}, displayed_text: {~w(attributes displayedText), :string}, action_type: {~w(attributes actionType), :string}, terms_reference: {~w(attributes termsReference), :string}, terms_version: {~w(attributes termsVersion), :string}, - status: {~w(attributes status), :string}, + status: {~w(attributes status), :string} ] end end diff --git a/lib/ibanity/api/consent/processing_operation.ex b/lib/ibanity/api/consent/processing_operation.ex index 576980a..4cce5db 100644 --- a/lib/ibanity/api/consent/processing_operation.ex +++ b/lib/ibanity/api/consent/processing_operation.ex @@ -4,7 +4,7 @@ defmodule Ibanity.Consent.ProcessingOperation do use Ibanity.Resource - @api_schema_path ~w(consent consent processingOperations) + @api_schema_path ~w(consent consent processingOperations) @revoke_api_schema_path ~w(consent consent processingOperation revocations) @resource_type "processing_operation" @@ -60,7 +60,7 @@ defmodule Ibanity.Consent.ProcessingOperation do |> Client.execute(:get, @api_schema_path) end - @doc """ + @doc """ [Revokes a processing operation]. Returns `{:ok, processing_operation}` if successful, `{:error, reason}` otherwise. diff --git a/lib/ibanity/api/reporting/xs2a/nbb_report.ex b/lib/ibanity/api/reporting/xs2a/nbb_report.ex index 4edd4c1..2320cf8 100644 --- a/lib/ibanity/api/reporting/xs2a/nbb_report.ex +++ b/lib/ibanity/api/reporting/xs2a/nbb_report.ex @@ -20,7 +20,8 @@ defmodule Ibanity.Reporting.Xs2a.NbbReport do beginning: {~w(attributes beginning), :datetime}, end: {~w(attributes end), :datetime}, account_information_accounts: {~w(attributes accountInformationAccounts), :string}, - account_information_synchronization_count: {~w(attributes accountInformationSynchronizationCount), :string}, + account_information_synchronization_count: + {~w(attributes accountInformationSynchronizationCount), :string}, payment_initiation_accounts: {~w(attributes paymentInitiationAccounts), :string}, payment_initiations: {~w(attributes paymentInitiations), :string} ] diff --git a/lib/ibanity/api/sandbox/financial_institution_account.ex b/lib/ibanity/api/sandbox/financial_institution_account.ex index a77f11b..d06a467 100644 --- a/lib/ibanity/api/sandbox/financial_institution_account.ex +++ b/lib/ibanity/api/sandbox/financial_institution_account.ex @@ -103,7 +103,11 @@ defmodule Ibanity.Sandbox.FinancialInstitutionAccount do """ @deprecated "Use Ibanity.Xs2a.Sandbox.FinancialInstitutionAccount.find/3 instead" def find(financial_institution_id, user_id, account_id) do - Ibanity.Xs2a.Sandbox.FinancialInstitutionAccount.find(financial_institution_id, user_id, account_id) + Ibanity.Xs2a.Sandbox.FinancialInstitutionAccount.find( + financial_institution_id, + user_id, + account_id + ) end @doc """ @@ -142,7 +146,11 @@ defmodule Ibanity.Sandbox.FinancialInstitutionAccount do """ @deprecated "Use Ibanity.Xs2a.Sandbox.FinancialInstitutionAccount.delete/3 instead" def delete(financial_institution_id, user_id, account_id) do - Ibanity.Xs2a.Sandbox.FinancialInstitutionAccount.delete(financial_institution_id, user_id, account_id) + Ibanity.Xs2a.Sandbox.FinancialInstitutionAccount.delete( + financial_institution_id, + user_id, + account_id + ) end @doc """ diff --git a/lib/ibanity/api/sandbox/financial_institution_user.ex b/lib/ibanity/api/sandbox/financial_institution_user.ex index 60cabbb..0d337f6 100644 --- a/lib/ibanity/api/sandbox/financial_institution_user.ex +++ b/lib/ibanity/api/sandbox/financial_institution_user.ex @@ -51,6 +51,7 @@ defmodule Ibanity.Sandbox.FinancialInstitutionUser do def list(%Request{} = request) do Ibanity.Xs2a.Sandbox.FinancialInstitutionUser.list(request) end + def list, do: list(%Request{}) @doc """ diff --git a/lib/ibanity/api/webhooks/xs2a/bulk_payment_initiation_request/authorization_completed.ex b/lib/ibanity/api/webhooks/xs2a/bulk_payment_initiation_request/authorization_completed.ex index daaab1f..7138eff 100644 --- a/lib/ibanity/api/webhooks/xs2a/bulk_payment_initiation_request/authorization_completed.ex +++ b/lib/ibanity/api/webhooks/xs2a/bulk_payment_initiation_request/authorization_completed.ex @@ -13,7 +13,8 @@ defmodule Ibanity.Webhooks.Xs2a.BulkPaymentInitiationRequest.AuthorizationComple id: {~w(id), :string}, created_at: {~w(attributes createdAt), :datetime}, status: {~w(attributes status), :string}, - bulk_payment_initiation_request_id: {~w(relationships bulkPaymentInitiationRequest data id), :string} + bulk_payment_initiation_request_id: + {~w(relationships bulkPaymentInitiationRequest data id), :string} ] end end diff --git a/lib/ibanity/api/webhooks/xs2a/bulk_payment_initiation_request/status_updated.ex b/lib/ibanity/api/webhooks/xs2a/bulk_payment_initiation_request/status_updated.ex index 6ec6397..bc36742 100644 --- a/lib/ibanity/api/webhooks/xs2a/bulk_payment_initiation_request/status_updated.ex +++ b/lib/ibanity/api/webhooks/xs2a/bulk_payment_initiation_request/status_updated.ex @@ -13,7 +13,8 @@ defmodule Ibanity.Webhooks.Xs2a.BulkPaymentInitiationRequest.StatusUpdated do id: {~w(id), :string}, created_at: {~w(attributes createdAt), :datetime}, status: {~w(attributes status), :string}, - bulk_payment_initiation_request_id: {~w(relationships bulkPaymentInitiationRequest data id), :string} + bulk_payment_initiation_request_id: + {~w(relationships bulkPaymentInitiationRequest data id), :string} ] end end diff --git a/lib/ibanity/api/webhooks/xs2a/periodic_payment_initiation_request/authorization_completed.ex b/lib/ibanity/api/webhooks/xs2a/periodic_payment_initiation_request/authorization_completed.ex index 2e8e1be..2802865 100644 --- a/lib/ibanity/api/webhooks/xs2a/periodic_payment_initiation_request/authorization_completed.ex +++ b/lib/ibanity/api/webhooks/xs2a/periodic_payment_initiation_request/authorization_completed.ex @@ -13,7 +13,8 @@ defmodule Ibanity.Webhooks.Xs2a.PeriodicPaymentInitiationRequest.AuthorizationCo id: {~w(id), :string}, created_at: {~w(attributes createdAt), :datetime}, status: {~w(attributes status), :string}, - periodic_payment_initiation_request_id: {~w(relationships periodicPaymentInitiationRequest data id), :string} + periodic_payment_initiation_request_id: + {~w(relationships periodicPaymentInitiationRequest data id), :string} ] end end diff --git a/lib/ibanity/api/webhooks/xs2a/periodic_payment_initiation_request/status_updated.ex b/lib/ibanity/api/webhooks/xs2a/periodic_payment_initiation_request/status_updated.ex index 548667d..a9ccbe3 100644 --- a/lib/ibanity/api/webhooks/xs2a/periodic_payment_initiation_request/status_updated.ex +++ b/lib/ibanity/api/webhooks/xs2a/periodic_payment_initiation_request/status_updated.ex @@ -13,7 +13,8 @@ defmodule Ibanity.Webhooks.Xs2a.PeriodicPaymentInitiationRequest.StatusUpdated d id: {~w(id), :string}, created_at: {~w(attributes createdAt), :datetime}, status: {~w(attributes status), :string}, - periodic_payment_initiation_request_id: {~w(relationships periodicPaymentInitiationRequest data id), :string} + periodic_payment_initiation_request_id: + {~w(relationships periodicPaymentInitiationRequest data id), :string} ] end end diff --git a/lib/ibanity/api/xs2a/account.ex b/lib/ibanity/api/xs2a/account.ex index c66cca2..d231cd8 100644 --- a/lib/ibanity/api/xs2a/account.ex +++ b/lib/ibanity/api/xs2a/account.ex @@ -53,7 +53,12 @@ defmodule Ibanity.Xs2a.Account do {:ok, %Ibanity.Collection{items: [...]}} """ def list(%Request{} = request), - do: list(request, Request.get_id(request, :financial_institution_id), Request.get_id(request, :account_information_access_request_id)) + do: + list( + request, + Request.get_id(request, :financial_institution_id), + Request.get_id(request, :account_information_access_request_id) + ) @doc false def list(%Request{} = request, nil, nil) do @@ -98,7 +103,13 @@ defmodule Ibanity.Xs2a.Account do |> Request.id(:id, "") |> Request.id(:financial_institution_id, financial_institution_id) |> Request.id(:account_information_access_request_id, account_information_access_request_id) - |> Client.execute(:get, ["xs2a", "customer", "financialInstitution", "accountInformationAccessRequest", "accounts"]) + |> Client.execute(:get, [ + "xs2a", + "customer", + "financialInstitution", + "accountInformationAccessRequest", + "accounts" + ]) end @doc """ @@ -231,13 +242,16 @@ defmodule Ibanity.Xs2a.Account do product: {~w(attributes product), :string}, holder_name: {~w(attributes holderName), :string}, current_balance_changed_at: {~w(attributes currentBalanceChangedAt), :datetime}, - current_balance_variation_observed_at: {~w(attributes currentBalanceVariationObservedAt), :datetime}, + current_balance_variation_observed_at: + {~w(attributes currentBalanceVariationObservedAt), :datetime}, current_balance_reference_date: {~w(attributes currentBalanceReferenceDate), :datetime}, available_balance_changed_at: {~w(attributes availableBalanceChangedAt), :datetime}, - available_balance_variation_observed_at: {~w(attributes availableBalanceVariationObservedAt), :datetime}, + available_balance_variation_observed_at: + {~w(attributes availableBalanceVariationObservedAt), :datetime}, available_balance_reference_date: {~w(attributes availableBalanceReferenceDate), :datetime}, authorized_at: {~w(attributes authorizedAt), :datetime}, - authorization_expiration_expected_at: {~w(attributes authorizationExpirationExpectedAt), :datetime}, + authorization_expiration_expected_at: + {~w(attributes authorizationExpirationExpectedAt), :datetime}, pending_transactions: {~w(relationships pendingTransactions links related), :string}, transactions: {~w(relationships transactions links related), :string}, financial_institution: {~w(relationships financialInstitution links related), :string}, diff --git a/lib/ibanity/api/xs2a/account_information_access_request.ex b/lib/ibanity/api/xs2a/account_information_access_request.ex index 5510c9c..f7562cb 100644 --- a/lib/ibanity/api/xs2a/account_information_access_request.ex +++ b/lib/ibanity/api/xs2a/account_information_access_request.ex @@ -13,7 +13,12 @@ defmodule Ibanity.Xs2a.AccountInformationAccessRequest do skip_ibanity_completion_callback: false, allow_financial_institution_redirect_uri: false - @api_schema_path ["xs2a", "customer", "financialInstitution", "accountInformationAccessRequests"] + @api_schema_path [ + "xs2a", + "customer", + "financialInstitution", + "accountInformationAccessRequests" + ] @doc """ [Creates an account information access request](https://documentation.ibanity.com/xs2a/api#create-account-information-access-request) @@ -80,7 +85,8 @@ defmodule Ibanity.Xs2a.AccountInformationAccessRequest do status: {~w(attributes status), :string}, errors: {~w(attributes errors), :string}, skip_ibanity_completion_callback: {~w(attributes skipIbanityCompletionCallback), :boolean}, - allow_financial_institution_redirect_uri: {~w(attributes allowFinancialInstitutionRedirectUri), :boolean}, + allow_financial_institution_redirect_uri: + {~w(attributes allowFinancialInstitutionRedirectUri), :boolean} ] end end diff --git a/lib/ibanity/api/xs2a/account_information_access_request_authorization.ex b/lib/ibanity/api/xs2a/account_information_access_request_authorization.ex index 47a1b1e..dd0e581 100644 --- a/lib/ibanity/api/xs2a/account_information_access_request_authorization.ex +++ b/lib/ibanity/api/xs2a/account_information_access_request_authorization.ex @@ -8,7 +8,13 @@ defmodule Ibanity.Xs2a.AccountInformationAccessRequestAuthorization do defstruct id: nil, status: nil - @api_schema_path ["xs2a", "customer", "financialInstitution", "accountInformationAccessRequest", "authorizations"] + @api_schema_path [ + "xs2a", + "customer", + "financialInstitution", + "accountInformationAccessRequest", + "authorizations" + ] @doc """ [Creates an account information access request authorization](https://documentation.ibanity.com/xs2a/api#create-account-information-access-request-authorization) @@ -40,7 +46,6 @@ defmodule Ibanity.Xs2a.AccountInformationAccessRequestAuthorization do |> Client.execute(:post, @api_schema_path, "accountInformationAccessRequestAuthorization") end - @doc false def key_mapping do [ diff --git a/lib/ibanity/api/xs2a/bulk_payment_initiation_request.ex b/lib/ibanity/api/xs2a/bulk_payment_initiation_request.ex index 1feeef4..4bc1748 100644 --- a/lib/ibanity/api/xs2a/bulk_payment_initiation_request.ex +++ b/lib/ibanity/api/xs2a/bulk_payment_initiation_request.ex @@ -65,7 +65,8 @@ defmodule Ibanity.Xs2a.BulkPaymentInitiationRequest do debtor_account_reference_type: {~w(attributes debtorAccountReferenceType), :string}, debtor_account_reference: {~w(attributes debtorAccountReference), :string}, skip_ibanity_completion_callback: {~w(attributes skipIbanityCompletionCallback), :boolean}, - allow_financial_institution_redirect_uri: {~w(attributes allowFinancialInstitutionRedirectUri), :boolean}, + allow_financial_institution_redirect_uri: + {~w(attributes allowFinancialInstitutionRedirectUri), :boolean}, batch_booking_preferred: {~w(attributes batchBookingPreferred), :boolean}, consent_reference: {~w(attributes consentReference), :string}, redirect_link: {~w(links redirect), :string}, diff --git a/lib/ibanity/api/xs2a/bulk_payment_initiation_request_authorization.ex b/lib/ibanity/api/xs2a/bulk_payment_initiation_request_authorization.ex index a11f6f4..ed4e61f 100644 --- a/lib/ibanity/api/xs2a/bulk_payment_initiation_request_authorization.ex +++ b/lib/ibanity/api/xs2a/bulk_payment_initiation_request_authorization.ex @@ -8,7 +8,13 @@ defmodule Ibanity.Xs2a.BulkPaymentInitiationRequestAuthorization do defstruct id: nil, status: nil - @api_schema_path ["xs2a", "customer", "financialInstitution", "bulkPaymentInitiationRequest", "authorizations"] + @api_schema_path [ + "xs2a", + "customer", + "financialInstitution", + "bulkPaymentInitiationRequest", + "authorizations" + ] @doc """ [Creates an account information access request authorization](https://documentation.ibanity.com/xs2a/api#create-bulk-payment-initiation-request-authorization) @@ -40,7 +46,6 @@ defmodule Ibanity.Xs2a.BulkPaymentInitiationRequestAuthorization do |> Client.execute(:post, @api_schema_path, "bulkPaymentInitiationRequestAuthorization") end - @doc false def key_mapping do [ diff --git a/lib/ibanity/api/xs2a/financial_institution.ex b/lib/ibanity/api/xs2a/financial_institution.ex index 31e528e..04f76c2 100644 --- a/lib/ibanity/api/xs2a/financial_institution.ex +++ b/lib/ibanity/api/xs2a/financial_institution.ex @@ -206,7 +206,8 @@ defmodule Ibanity.Xs2a.FinancialInstitution do payments_product_types: {~w(attributes paymentsProductTypes), :string}, periodic_payments_product_types: {~w(attributes periodicPaymentsProductTypes), :string}, authorization_models: {~w(attributes authorizationModels), :string}, - financial_institution_customer_reference_required: {~w(attributes financialInstitutionCustomerReferenceRequired), :boolean}, + financial_institution_customer_reference_required: + {~w(attributes financialInstitutionCustomerReferenceRequired), :boolean}, shared_brand_reference: {~w(attributes sharedBrandReference), :string}, shared_brand_name: {~w(attributes sharedBrandName), :string}, maintenance_from: {~w(attributes maintenanceFrom), :datetime}, @@ -216,8 +217,10 @@ defmodule Ibanity.Xs2a.FinancialInstitution do pending_transactions_available: {~w(attributes pendingTransactionsAvailable), :boolean}, bulk_payment_instructions_limit: {~w(attributes bulkPaymentInstructionsLimit), :integer}, expected_authorization_lifetime: {~w(attributes expectedAuthorizationLifetime), :integer}, - payment_debtor_account_reference_required: {~w(attributes paymentDebtorAccountReferenceRequired), :boolean}, - bulk_payment_debtor_account_reference_required: {~w(attributes bulkPaymentDebtorAccountReferenceRequired), :boolean} + payment_debtor_account_reference_required: + {~w(attributes paymentDebtorAccountReferenceRequired), :boolean}, + bulk_payment_debtor_account_reference_required: + {~w(attributes bulkPaymentDebtorAccountReferenceRequired), :boolean} ] end end diff --git a/lib/ibanity/api/xs2a/payment_initiation_request.ex b/lib/ibanity/api/xs2a/payment_initiation_request.ex index cca3ab6..892fa0b 100644 --- a/lib/ibanity/api/xs2a/payment_initiation_request.ex +++ b/lib/ibanity/api/xs2a/payment_initiation_request.ex @@ -55,7 +55,8 @@ defmodule Ibanity.Xs2a.PaymentInitiationRequest do redirect_link: {~w(links redirect), :string}, financial_institution_id: {~w(relationships financialInstitution data id), :string}, skip_ibanity_completion_callback: {~w(attributes skipIbanityCompletionCallback), :boolean}, - allow_financial_institution_redirect_uri: {~w(attributes allowFinancialInstitutionRedirectUri), :boolean} + allow_financial_institution_redirect_uri: + {~w(attributes allowFinancialInstitutionRedirectUri), :boolean} ] end diff --git a/lib/ibanity/api/xs2a/payment_initiation_request_authorization.ex b/lib/ibanity/api/xs2a/payment_initiation_request_authorization.ex index 489245d..47f4540 100644 --- a/lib/ibanity/api/xs2a/payment_initiation_request_authorization.ex +++ b/lib/ibanity/api/xs2a/payment_initiation_request_authorization.ex @@ -8,7 +8,13 @@ defmodule Ibanity.Xs2a.PaymentInitiationRequestAuthorization do defstruct id: nil, status: nil - @api_schema_path ["xs2a", "customer", "financialInstitution", "paymentInitiationRequest", "authorizations"] + @api_schema_path [ + "xs2a", + "customer", + "financialInstitution", + "paymentInitiationRequest", + "authorizations" + ] @doc """ [Creates an account information access request authorization](https://documentation.ibanity.com/xs2a/api#create-payment-initiation-request-authorization) @@ -40,7 +46,6 @@ defmodule Ibanity.Xs2a.PaymentInitiationRequestAuthorization do |> Client.execute(:post, @api_schema_path, "paymentInitiationRequestAuthorization") end - @doc false def key_mapping do [ diff --git a/lib/ibanity/api/xs2a/pending_transaction.ex b/lib/ibanity/api/xs2a/pending_transaction.ex index a5a01d9..f70d689 100644 --- a/lib/ibanity/api/xs2a/pending_transaction.ex +++ b/lib/ibanity/api/xs2a/pending_transaction.ex @@ -64,7 +64,13 @@ defmodule Ibanity.Xs2a.PendingTransaction do def list(%Request{} = request) do request |> Request.id(:id, "") - |> Client.execute(:get, ["xs2a", "customer", "financialInstitution", "account", "pendingTransactions"]) + |> Client.execute(:get, [ + "xs2a", + "customer", + "financialInstitution", + "account", + "pendingTransactions" + ]) end @doc """ @@ -84,7 +90,13 @@ defmodule Ibanity.Xs2a.PendingTransaction do """ def find(%Request{} = request) do request - |> Client.execute(:get, ["xs2a", "customer", "financialInstitution", "account", "pendingTransactions"]) + |> Client.execute(:get, [ + "xs2a", + "customer", + "financialInstitution", + "account", + "pendingTransactions" + ]) end @doc false diff --git a/lib/ibanity/api/xs2a/periodic_payment_initiation_request.ex b/lib/ibanity/api/xs2a/periodic_payment_initiation_request.ex index 140162b..f0ba0fc 100644 --- a/lib/ibanity/api/xs2a/periodic_payment_initiation_request.ex +++ b/lib/ibanity/api/xs2a/periodic_payment_initiation_request.ex @@ -63,7 +63,8 @@ defmodule Ibanity.Xs2a.PeriodicPaymentInitiationRequest do end_date: {~w(attributes endDate), :date}, execution_rule: {~w(attributes executionRule), :string}, skip_ibanity_completion_callback: {~w(attributes skipIbanityCompletionCallback), :boolean}, - allow_financial_institution_redirect_uri: {~w(attributes allowFinancialInstitutionRedirectUri), :boolean} + allow_financial_institution_redirect_uri: + {~w(attributes allowFinancialInstitutionRedirectUri), :boolean} ] end diff --git a/lib/ibanity/api/xs2a/periodic_payment_initiation_request_authorization.ex b/lib/ibanity/api/xs2a/periodic_payment_initiation_request_authorization.ex index 4a2d696..2b3845c 100644 --- a/lib/ibanity/api/xs2a/periodic_payment_initiation_request_authorization.ex +++ b/lib/ibanity/api/xs2a/periodic_payment_initiation_request_authorization.ex @@ -8,7 +8,13 @@ defmodule Ibanity.Xs2a.PeriodicPaymentInitiationRequestAuthorization do defstruct id: nil, status: nil - @api_schema_path ["xs2a", "customer", "financialInstitution", "periodicPaymentInitiationRequest", "authorizations"] + @api_schema_path [ + "xs2a", + "customer", + "financialInstitution", + "periodicPaymentInitiationRequest", + "authorizations" + ] @doc """ [Creates an account information access request authorization](https://documentation.ibanity.com/xs2a/api#create-periodic-payment-initiation-request-authorization) @@ -40,7 +46,6 @@ defmodule Ibanity.Xs2a.PeriodicPaymentInitiationRequestAuthorization do |> Client.execute(:post, @api_schema_path, "periodicPaymentInitiationRequestAuthorization") end - @doc false def key_mapping do [ diff --git a/lib/ibanity/api/xs2a/sandbox/financial_institution_account.ex b/lib/ibanity/api/xs2a/sandbox/financial_institution_account.ex index 0472ed6..c11e9ec 100644 --- a/lib/ibanity/api/xs2a/sandbox/financial_institution_account.ex +++ b/lib/ibanity/api/xs2a/sandbox/financial_institution_account.ex @@ -216,13 +216,16 @@ defmodule Ibanity.Xs2a.Sandbox.FinancialInstitutionAccount do product: {~w(attributes product), :string}, holder_name: {~w(attributes holderName), :string}, current_balance_changed_at: {~w(attributes currentBalanceChangedAt), :datetime}, - current_balance_variation_observed_at: {~w(attributes currentBalanceVariationObservedAt), :datetime}, + current_balance_variation_observed_at: + {~w(attributes currentBalanceVariationObservedAt), :datetime}, current_balance_reference_date: {~w(attributes currentBalanceReferenceDate), :datetime}, available_balance_changed_at: {~w(attributes availableBalanceChangedAt), :datetime}, - available_balance_variation_observed_at: {~w(attributes availableBalanceVariationObservedAt), :datetime}, + available_balance_variation_observed_at: + {~w(attributes availableBalanceVariationObservedAt), :datetime}, available_balance_reference_date: {~w(attributes availableBalanceReferenceDate), :datetime}, authorized_at: {~w(attributes authorizedAt), :datetime}, - authorization_expiration_expected_at: {~w(attributes authorizationExpirationExpectedAt), :datetime}, + authorization_expiration_expected_at: + {~w(attributes authorizationExpirationExpectedAt), :datetime}, transactions: {~w(relationships financialInstitutionTransactions links related), :string}, financial_institution_user: {~w(relationships financialInstitutionUser links related), :string}, diff --git a/lib/ibanity/api/xs2a/sandbox/financial_institution_holding.ex b/lib/ibanity/api/xs2a/sandbox/financial_institution_holding.ex index de66332..56107a8 100644 --- a/lib/ibanity/api/xs2a/sandbox/financial_institution_holding.ex +++ b/lib/ibanity/api/xs2a/sandbox/financial_institution_holding.ex @@ -225,7 +225,8 @@ defmodule Ibanity.Xs2a.Sandbox.FinancialInstitutionHolding do reference_type: {~w(attributes referenceType), :string}, subtype: {~w(attributes subtype), :string}, quantity: {~w(attributes quantity), :float}, - financial_institution_account_id: {~w(relationships financialInstitutionAccount data id), :string} + financial_institution_account_id: + {~w(relationships financialInstitutionAccount data id), :string} ] end end diff --git a/lib/ibanity/api/xs2a/sandbox/financial_institution_transaction.ex b/lib/ibanity/api/xs2a/sandbox/financial_institution_transaction.ex index 9e22714..d400e87 100644 --- a/lib/ibanity/api/xs2a/sandbox/financial_institution_transaction.ex +++ b/lib/ibanity/api/xs2a/sandbox/financial_institution_transaction.ex @@ -307,7 +307,8 @@ defmodule Ibanity.Xs2a.Sandbox.FinancialInstitutionTransaction do card_reference: {~w(attributes cardReference), :string}, card_reference_type: {~w(attributes cardReferenceType), :string}, automatic_booking: {~w(attributes automaticBooking), :boolean}, - financial_institution_account_id: {~w(relationships financialInstitutionAccount data id), :string}, + financial_institution_account_id: + {~w(relationships financialInstitutionAccount data id), :string} ] end end diff --git a/lib/ibanity/api/xs2a/sandbox/financial_institution_user.ex b/lib/ibanity/api/xs2a/sandbox/financial_institution_user.ex index dffb1c3..b79bd19 100644 --- a/lib/ibanity/api/xs2a/sandbox/financial_institution_user.ex +++ b/lib/ibanity/api/xs2a/sandbox/financial_institution_user.ex @@ -57,6 +57,7 @@ defmodule Ibanity.Xs2a.Sandbox.FinancialInstitutionUser do |> Request.id(:id, "") |> Client.execute(:get, @api_schema_path) end + def list, do: list(%Request{}) @doc """ diff --git a/lib/ibanity/api/xs2a/synchronization.ex b/lib/ibanity/api/xs2a/synchronization.ex index 79396ae..be8ddc0 100644 --- a/lib/ibanity/api/xs2a/synchronization.ex +++ b/lib/ibanity/api/xs2a/synchronization.ex @@ -35,9 +35,22 @@ defmodule Ibanity.Xs2a.Synchronization do ...> |> Synchronization.list {:ok, %Ibanity.Collection{items: [%Ibanity.Synchronization{...}], ...}} """ - def list(%Request{resource_ids: [financial_institution_id: _financial_institution_id, account_information_access_request_id: _account_information_access_request_id]} = request) do + def list( + %Request{ + resource_ids: [ + financial_institution_id: _financial_institution_id, + account_information_access_request_id: _account_information_access_request_id + ] + } = request + ) do request - |> Client.execute(:get, ["xs2a", "customer", "financialInstitution", "accountInformationAccessRequest", "initialAccountTransactionsSynchronizations"]) + |> Client.execute(:get, [ + "xs2a", + "customer", + "financialInstitution", + "accountInformationAccessRequest", + "initialAccountTransactionsSynchronizations" + ]) end @doc """ @@ -96,7 +109,8 @@ defmodule Ibanity.Xs2a.Synchronization do errors: {~w(attributes errors), :string}, created_at: {~w(attributes createdAt), :datetime}, updated_at: {~w(attributes updatedAt), :datetime}, - updated_pending_transactions: {~w(relationships updatedPendingTransactions links related), :string}, + updated_pending_transactions: + {~w(relationships updatedPendingTransactions links related), :string}, updated_transactions: {~w(relationships updatedTransactions links related), :string} ] end diff --git a/lib/ibanity/api/xs2a/transaction.ex b/lib/ibanity/api/xs2a/transaction.ex index 34ccc79..c871cb9 100644 --- a/lib/ibanity/api/xs2a/transaction.ex +++ b/lib/ibanity/api/xs2a/transaction.ex @@ -64,7 +64,13 @@ defmodule Ibanity.Xs2a.Transaction do def list(%Request{} = request) do request |> Request.id(:id, "") - |> Client.execute(:get, ["xs2a", "customer", "financialInstitution", "account", "transactions"]) + |> Client.execute(:get, [ + "xs2a", + "customer", + "financialInstitution", + "account", + "transactions" + ]) end @doc """ @@ -84,7 +90,13 @@ defmodule Ibanity.Xs2a.Transaction do """ def find(%Request{} = request) do request - |> Client.execute(:get, ["xs2a", "customer", "financialInstitution", "account", "transactions"]) + |> Client.execute(:get, [ + "xs2a", + "customer", + "financialInstitution", + "account", + "transactions" + ]) end @doc false diff --git a/lib/ibanity/api/xs2a/transaction_delete_request.ex b/lib/ibanity/api/xs2a/transaction_delete_request.ex index 31f36d9..b6b8cd2 100644 --- a/lib/ibanity/api/xs2a/transaction_delete_request.ex +++ b/lib/ibanity/api/xs2a/transaction_delete_request.ex @@ -27,7 +27,10 @@ defmodule Ibanity.Xs2a.TransactionDeleteRequest do |> Request.resource_type(@resource_type) |> Request.id(:financial_institution_id, financial_institution_id) |> Request.id(:account_id, account_id) - |> Client.execute(:post, ~w(xs2a customer financialInstitution account transactionDeleteRequests)) + |> Client.execute( + :post, + ~w(xs2a customer financialInstitution account transactionDeleteRequests) + ) end @doc """ @@ -44,12 +47,22 @@ defmodule Ibanity.Xs2a.TransactionDeleteRequest do ...> |> TransactionDeleteRequest.create {:ok, %TransactionDeleteRequest{id: "9c57df52-bd8e-42d2-b15a-a664741e3ed2"}} """ - def create(%Request{resource_ids: [financial_institution_id: financial_institution_id, account_id: account_id]} = request) do + def create( + %Request{ + resource_ids: [ + financial_institution_id: financial_institution_id, + account_id: account_id + ] + } = request + ) do request |> Request.resource_type(@resource_type) |> Request.id(:financial_institution_id, financial_institution_id) |> Request.id(:account_id, account_id) - |> Client.execute(:post, ~w(xs2a customer financialInstitution account transactionDeleteRequests)) + |> Client.execute( + :post, + ~w(xs2a customer financialInstitution account transactionDeleteRequests) + ) end @doc """ diff --git a/lib/ibanity/signature.ex b/lib/ibanity/signature.ex index c26a977..1a0d423 100644 --- a/lib/ibanity/signature.ex +++ b/lib/ibanity/signature.ex @@ -48,8 +48,9 @@ defmodule Ibanity.Signature do ~s/created="#{timestamp}"/, ~s/algorithm="#{@algorithm}"/, ~s/headers="#{signing_headers}"/, - ~s/signature="#{signature}"/, - ] |> Enum.join(",") + ~s/signature="#{signature}"/ + ] + |> Enum.join(",") end defp signing_headers(request, method, uri, timestamp) do diff --git a/lib/ibanity/util/query_params_util.ex b/lib/ibanity/util/query_params_util.ex index 62687dc..da072eb 100644 --- a/lib/ibanity/util/query_params_util.ex +++ b/lib/ibanity/util/query_params_util.ex @@ -11,7 +11,7 @@ defmodule Ibanity.QueryParamsUtil do IO.iodata_to_binary(encode_pair("", query_params)) end - #covers structs + # covers structs defp encode_pair(field, %{__struct__: struct} = map) when is_atom(struct) do [field, ?= | encode_field(map)] end diff --git a/lib/ibanity/webhook.ex b/lib/ibanity/webhook.ex index fe9b5ac..241bcb2 100644 --- a/lib/ibanity/webhook.ex +++ b/lib/ibanity/webhook.ex @@ -31,7 +31,12 @@ defmodule Ibanity.Webhook do end """ @spec construct_event(String.t(), String.t(), atom(), integer) :: {:ok, Struct} | {:error, any} - def construct_event(payload, signature_header, application \\ :default, tolerance \\ @default_tolerance) do + def construct_event( + payload, + signature_header, + application \\ :default, + tolerance \\ @default_tolerance + ) do case verify_signature_header(payload, signature_header, application, tolerance) do {:ok, _} -> {:ok, convert_to_event!(payload)} error -> error @@ -44,6 +49,7 @@ defmodule Ibanity.Webhook do case Ibanity.Configuration.webhook_key(kid, application) do %Key{} = signer_key -> signer = Joken.Signer.create(@signing_algorithm, signer_key_map(signer_key)) + Joken.verify_and_validate( token_config(), signature_header, @@ -78,10 +84,10 @@ defmodule Ibanity.Webhook do do: digest == Base.encode64(:crypto.hash(:sha512, payload), case: :lower) defp validate_issued_at(iat, _, %{tolerance: tolerance}), - do: iat <= (System.system_time(:second) + tolerance) + do: iat <= System.system_time(:second) + tolerance defp validate_expiration(exp, _, %{tolerance: tolerance}), - do: exp >= (System.system_time(:second) - tolerance) + do: exp >= System.system_time(:second) - tolerance defp validate_audience(aud, _, %{application: application}), do: aud == Ibanity.Configuration.application_id(application) diff --git a/lib/ibanity/webhook_plug.ex b/lib/ibanity/webhook_plug.ex index aa4d695..502d922 100644 --- a/lib/ibanity/webhook_plug.ex +++ b/lib/ibanity/webhook_plug.ex @@ -60,7 +60,10 @@ defmodule Ibanity.WebhookPlug do end @impl true - def call(%Conn{method: "POST", path_info: path_info} = conn, %{path_info: path_info, handler: handler} = opts) do + def call( + %Conn{method: "POST", path_info: path_info} = conn, + %{path_info: path_info, handler: handler} = opts + ) do with [signature] <- get_req_header(conn, "signature"), {:ok, payload, _} = Conn.read_body(conn), {:ok, %{} = event} <- construct_event(payload, signature, opts), diff --git a/test/lib/deserialization/xs2a/payment_inititation_request_test.exs b/test/lib/deserialization/xs2a/payment_inititation_request_test.exs index 4d2823e..6f3fbc2 100644 --- a/test/lib/deserialization/xs2a/payment_inititation_request_test.exs +++ b/test/lib/deserialization/xs2a/payment_inititation_request_test.exs @@ -67,7 +67,7 @@ defmodule Ibanity.Xs2a.PaymentInitiationRequest.DeserializationTest do redirect_link: "https://callback.ibanity.com/sandbox/fi/pir/i?state=dmF1bHQ6djE6V1FLZFp...", financial_institution_id: "b2c76f6b-ab34-4843-8ef3-84300ef98a09", skip_ibanity_completion_callback: true, - allow_financial_institution_redirect_uri: true, + allow_financial_institution_redirect_uri: true } assert actual == expected diff --git a/test/lib/deserialization/xs2a/sandbox/financial_institution_transaction_test.exs b/test/lib/deserialization/xs2a/sandbox/financial_institution_transaction_test.exs index dfb59e1..2a3ca5f 100644 --- a/test/lib/deserialization/xs2a/sandbox/financial_institution_transaction_test.exs +++ b/test/lib/deserialization/xs2a/sandbox/financial_institution_transaction_test.exs @@ -70,7 +70,7 @@ defmodule Ibanity.Xs2a.Sandbox.FinancialInstitutionTransaction.DeserializationTe end_to_end_id: "61dd468606594217af9965ad3928280d", purpose_code: "CASH", mandate_id: "12345678", - creditor_id: "98765", + creditor_id: "98765", additional_information: "addional", fee: 3.14, card_reference: "1234", diff --git a/test/lib/deserialization/xs2a/transaction_test.exs b/test/lib/deserialization/xs2a/transaction_test.exs index b4d1aaf..d823afe 100644 --- a/test/lib/deserialization/xs2a/transaction_test.exs +++ b/test/lib/deserialization/xs2a/transaction_test.exs @@ -67,7 +67,7 @@ defmodule Ibanity.Xs2a.Transaction.DeserializationTest do end_to_end_id: "61dd468606594217af9965ad3928280d", purpose_code: "CASH", mandate_id: "12345678", - creditor_id: "98765", + creditor_id: "98765", digest: "d59f256988324499809c18a8d4a8be60ff36e3d1e0c89c380be49e032e39a287", additional_information: "addional", fee: 3.14, From 0e6d20c7761f3a2ed825310eceaa879cfd3b44de Mon Sep 17 00:00:00 2001 From: Edouard Menayde Date: Wed, 8 Jan 2025 17:38:24 +0100 Subject: [PATCH 2/4] Remove outdated Supervisor.Spec import --- lib/ibanity/application.ex | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/ibanity/application.ex b/lib/ibanity/application.ex index 385a9a6..ed9716c 100644 --- a/lib/ibanity/application.ex +++ b/lib/ibanity/application.ex @@ -1,11 +1,10 @@ defmodule Ibanity.Application do @moduledoc false use Application - import Supervisor.Spec def start(_type, _args) do children = [ - worker(Ibanity.Configuration, [Application.get_all_env(:ibanity)]) + {Ibanity.Configuration, Application.get_all_env(:ibanity)} ] opts = [strategy: :one_for_one, name: Ibanity.Supervisor] From 2ea032a7ef1407a4b1aaeb609db4fa03f934441f Mon Sep 17 00:00:00 2001 From: Edouard Menayde Date: Wed, 8 Jan 2025 17:40:21 +0100 Subject: [PATCH 3/4] Remove invalid code in doc --- lib/ibanity/id_replacer.ex | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/ibanity/id_replacer.ex b/lib/ibanity/id_replacer.ex index de60f96..c16d7a2 100644 --- a/lib/ibanity/id_replacer.ex +++ b/lib/ibanity/id_replacer.ex @@ -12,10 +12,6 @@ defmodule Ibanity.IdReplacer do ...> Ibanity.IdReplacer.replace_all(url, &String.upcase/1) "https://api.ibanity.com/customer/synchronizations/{SYNCHRONIZATIONID}" - iex> url = "https://api.ibanity.com/customer/synchronizations" - ...> Ibanity.IdReplacer.replace_all(url, &String.replace("*", String.length(&1))) - "https://api.ibanity.com/customer/synchronizations" - iex> url = "https://api.ibanity.com/customer/financial-institutions/{financialInstitutionId}/accounts/{accountId}" ...> Ibanity.IdReplacer.replace_all(url, &Recase.to_snake/1) "https://api.ibanity.com/customer/financial-institutions/{financial_institution_id}/accounts/{account_id}" From f667bf9a93e326d3842e973881b63f8641368b42 Mon Sep 17 00:00:00 2001 From: Edouard Menayde Date: Wed, 8 Jan 2025 17:45:33 +0100 Subject: [PATCH 4/4] Configure CI to run on pull request --- .github/workflows/ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e191369..d4601c7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,8 @@ name: Elixir CI -on: [push] +on: + push: + pull_request: jobs: build: