onlinepayments-sdk-ruby 4.22.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +0 -0
- data/LICENSE.txt +0 -0
- data/README.md +5 -6
- data/Rakefile +0 -0
- data/lib/onlinepayments/sdk/api_exception.rb +47 -35
- data/lib/onlinepayments/sdk/api_resource.rb +49 -97
- data/lib/onlinepayments/sdk/authentication/authenticator.rb +19 -0
- data/lib/onlinepayments/sdk/authentication/authorization_type.rb +15 -0
- data/lib/onlinepayments/sdk/authentication/v1hmac_authenticator.rb +109 -0
- data/lib/onlinepayments/sdk/authentication.rb +1 -0
- data/lib/onlinepayments/sdk/authorization_exception.rb +14 -8
- data/lib/onlinepayments/sdk/call_context.rb +30 -21
- data/lib/onlinepayments/sdk/client.rb +36 -18
- data/lib/onlinepayments/sdk/communication/communication_exception.rb +19 -0
- data/lib/onlinepayments/sdk/communication/connection.rb +48 -0
- data/lib/onlinepayments/sdk/communication/default_connection.rb +427 -0
- data/lib/onlinepayments/sdk/communication/metadata_provider.rb +160 -0
- data/lib/onlinepayments/sdk/communication/multipart_form_data_object.rb +52 -0
- data/lib/onlinepayments/sdk/communication/multipart_form_data_request.rb +13 -0
- data/lib/onlinepayments/sdk/communication/not_found_exception.rb +19 -0
- data/lib/onlinepayments/sdk/communication/param_request.rb +14 -0
- data/lib/onlinepayments/sdk/communication/pooled_connection.rb +26 -0
- data/lib/onlinepayments/sdk/communication/request_header.rb +62 -0
- data/lib/onlinepayments/sdk/communication/request_param.rb +28 -0
- data/lib/onlinepayments/sdk/communication/response_exception.rb +56 -0
- data/lib/onlinepayments/sdk/communication/response_header.rb +78 -0
- data/lib/onlinepayments/sdk/communication.rb +1 -0
- data/lib/onlinepayments/sdk/communicator.rb +475 -268
- data/lib/onlinepayments/sdk/communicator_configuration.rb +162 -53
- data/lib/onlinepayments/sdk/declined_payment_exception.rb +28 -21
- data/lib/onlinepayments/sdk/declined_payout_exception.rb +28 -23
- data/lib/onlinepayments/sdk/declined_refund_exception.rb +28 -23
- data/lib/onlinepayments/sdk/declined_transaction_exception.rb +16 -10
- data/lib/onlinepayments/sdk/domain/account_on_file.rb +44 -35
- data/lib/onlinepayments/sdk/domain/account_on_file_attribute.rb +42 -28
- data/lib/onlinepayments/sdk/domain/account_on_file_display_hints.rb +29 -24
- data/lib/onlinepayments/sdk/domain/acquirer_information.rb +27 -22
- data/lib/onlinepayments/sdk/domain/acquirer_selection_information.rb +34 -24
- data/lib/onlinepayments/sdk/domain/additional_order_input.rb +43 -38
- data/lib/onlinepayments/sdk/domain/address.rb +65 -43
- data/lib/onlinepayments/sdk/domain/address_personal.rb +78 -48
- data/lib/onlinepayments/sdk/domain/airline_data.rb +204 -123
- data/lib/onlinepayments/sdk/domain/airline_flight_leg.rb +158 -95
- data/lib/onlinepayments/sdk/domain/airline_passenger.rb +59 -39
- data/lib/onlinepayments/sdk/domain/amount_breakdown.rb +27 -20
- data/lib/onlinepayments/sdk/domain/amount_of_money.rb +27 -20
- data/lib/onlinepayments/sdk/domain/api_error.rb +73 -47
- data/lib/onlinepayments/sdk/domain/apple_pay_line_item.rb +72 -0
- data/lib/onlinepayments/sdk/domain/apple_pay_recurring_payment_request.rb +61 -0
- data/lib/onlinepayments/sdk/domain/bank_account_iban.rb +20 -16
- data/lib/onlinepayments/sdk/domain/browser_data.rb +51 -35
- data/lib/onlinepayments/sdk/domain/calculate_surcharge_request.rb +27 -24
- data/lib/onlinepayments/sdk/domain/calculate_surcharge_response.rb +22 -20
- data/lib/onlinepayments/sdk/domain/cancel_payment_request.rb +27 -22
- data/lib/onlinepayments/sdk/domain/cancel_payment_response.rb +20 -18
- data/lib/onlinepayments/sdk/domain/capture.rb +41 -32
- data/lib/onlinepayments/sdk/domain/capture_output.rb +106 -78
- data/lib/onlinepayments/sdk/domain/capture_payment_request.rb +43 -26
- data/lib/onlinepayments/sdk/domain/capture_response.rb +41 -32
- data/lib/onlinepayments/sdk/domain/capture_status_output.rb +20 -16
- data/lib/onlinepayments/sdk/domain/captures_response.rb +22 -20
- data/lib/onlinepayments/sdk/domain/card.rb +41 -28
- data/lib/onlinepayments/sdk/domain/card_essentials.rb +41 -32
- data/lib/onlinepayments/sdk/domain/card_fraud_results.rb +34 -24
- data/lib/onlinepayments/sdk/domain/card_info.rb +27 -20
- data/lib/onlinepayments/sdk/domain/card_payment_method_specific_input.rb +199 -136
- data/lib/onlinepayments/sdk/domain/card_payment_method_specific_input_base.rb +149 -104
- data/lib/onlinepayments/sdk/domain/card_payment_method_specific_input_for_hosted_checkout.rb +36 -28
- data/lib/onlinepayments/sdk/domain/card_payment_method_specific_output.rb +133 -108
- data/lib/onlinepayments/sdk/domain/card_payout_method_specific_input.rb +41 -30
- data/lib/onlinepayments/sdk/domain/card_recurrence_details.rb +20 -16
- data/lib/onlinepayments/sdk/domain/card_source.rb +41 -30
- data/lib/onlinepayments/sdk/domain/card_without_cvv.rb +34 -24
- data/lib/onlinepayments/sdk/domain/company_information.rb +20 -16
- data/lib/onlinepayments/sdk/domain/complete_payment_card_payment_method_specific_input.rb +20 -18
- data/lib/onlinepayments/sdk/domain/complete_payment_request.rb +27 -24
- data/lib/onlinepayments/sdk/domain/complete_payment_response.rb +35 -31
- data/lib/onlinepayments/sdk/domain/contact_details.rb +51 -35
- data/lib/onlinepayments/sdk/domain/create_hosted_checkout_request.rb +76 -67
- data/lib/onlinepayments/sdk/domain/create_hosted_checkout_response.rb +60 -43
- data/lib/onlinepayments/sdk/domain/create_hosted_tokenization_request.rb +57 -50
- data/lib/onlinepayments/sdk/domain/create_hosted_tokenization_response.rb +57 -44
- data/lib/onlinepayments/sdk/domain/create_mandate_request.rb +71 -48
- data/lib/onlinepayments/sdk/domain/create_mandate_response.rb +27 -24
- data/lib/onlinepayments/sdk/domain/create_mandate_with_return_url.rb +71 -48
- data/lib/onlinepayments/sdk/domain/create_payment_link_request.rb +120 -87
- data/lib/onlinepayments/sdk/domain/create_payment_request.rb +82 -72
- data/lib/onlinepayments/sdk/domain/create_payment_response.rb +35 -31
- data/lib/onlinepayments/sdk/domain/create_payout_request.rb +61 -40
- data/lib/onlinepayments/sdk/domain/create_token_request.rb +27 -22
- data/lib/onlinepayments/sdk/domain/created_payment_output.rb +27 -22
- data/lib/onlinepayments/sdk/domain/created_token_response.rb +50 -38
- data/lib/onlinepayments/sdk/domain/credit_card_specific_input_hosted_tokenization.rb +29 -26
- data/lib/onlinepayments/sdk/domain/credit_card_validation_rules_hosted_tokenization.rb +27 -20
- data/lib/onlinepayments/sdk/domain/currency_conversion.rb +27 -22
- data/lib/onlinepayments/sdk/domain/currency_conversion_input.rb +27 -20
- data/lib/onlinepayments/sdk/domain/currency_conversion_request.rb +27 -24
- data/lib/onlinepayments/sdk/domain/currency_conversion_response.rb +34 -28
- data/lib/onlinepayments/sdk/domain/currency_conversion_result.rb +27 -20
- data/lib/onlinepayments/sdk/domain/currency_conversion_specific_input.rb +20 -16
- data/lib/onlinepayments/sdk/domain/customer.rb +87 -68
- data/lib/onlinepayments/sdk/domain/customer_account.rb +77 -55
- data/lib/onlinepayments/sdk/domain/customer_account_authentication.rb +34 -20
- data/lib/onlinepayments/sdk/domain/customer_bank_account.rb +34 -24
- data/lib/onlinepayments/sdk/domain/customer_device.rb +64 -44
- data/lib/onlinepayments/sdk/domain/customer_device_output.rb +20 -16
- data/lib/onlinepayments/sdk/domain/customer_output.rb +20 -18
- data/lib/onlinepayments/sdk/domain/customer_payment_activity.rb +34 -24
- data/lib/onlinepayments/sdk/domain/customer_token.rb +35 -31
- data/lib/onlinepayments/sdk/domain/data_object.rb +32 -0
- data/lib/onlinepayments/sdk/domain/dcc_card_source.rb +41 -30
- data/lib/onlinepayments/sdk/domain/dcc_proposal.rb +51 -41
- data/lib/onlinepayments/sdk/domain/decrypted_payment_data.rb +51 -35
- data/lib/onlinepayments/sdk/domain/directory_entry.rb +34 -24
- data/lib/onlinepayments/sdk/domain/discount.rb +20 -16
- data/lib/onlinepayments/sdk/domain/empty_validator.rb +7 -6
- data/lib/onlinepayments/sdk/domain/error_response.rb +29 -24
- data/lib/onlinepayments/sdk/domain/external_cardholder_authentication_data.rb +86 -55
- data/lib/onlinepayments/sdk/domain/external_token_linked.rb +35 -24
- data/lib/onlinepayments/sdk/domain/feedbacks.rb +30 -0
- data/lib/onlinepayments/sdk/domain/fixed_list_validator.rb +22 -20
- data/lib/onlinepayments/sdk/domain/fraud_fields.rb +37 -28
- data/lib/onlinepayments/sdk/domain/fraud_results.rb +20 -16
- data/lib/onlinepayments/sdk/domain/g_pay_three_d_secure.rb +50 -36
- data/lib/onlinepayments/sdk/domain/get_hosted_checkout_response.rb +27 -22
- data/lib/onlinepayments/sdk/domain/get_hosted_tokenization_response.rb +27 -22
- data/lib/onlinepayments/sdk/domain/get_iin_details_request.rb +27 -22
- data/lib/onlinepayments/sdk/domain/get_iin_details_response.rb +52 -38
- data/lib/onlinepayments/sdk/domain/get_mandate_response.rb +20 -18
- data/lib/onlinepayments/sdk/domain/get_payment_product_groups_response.rb +22 -20
- data/lib/onlinepayments/sdk/domain/get_payment_products_response.rb +22 -20
- data/lib/onlinepayments/sdk/domain/get_privacy_policy_response.rb +20 -16
- data/lib/onlinepayments/sdk/domain/gift_card_purchase.rb +27 -22
- data/lib/onlinepayments/sdk/domain/hosted_checkout_specific_input.rb +83 -56
- data/lib/onlinepayments/sdk/domain/hosted_checkout_specific_output.rb +27 -20
- data/lib/onlinepayments/sdk/domain/iin_detail.rb +34 -24
- data/lib/onlinepayments/sdk/domain/label_template_element.rb +27 -20
- data/lib/onlinepayments/sdk/domain/length_validator.rb +27 -20
- data/lib/onlinepayments/sdk/domain/line_item.rb +44 -31
- data/lib/onlinepayments/sdk/domain/line_item_invoice_data.rb +20 -16
- data/lib/onlinepayments/sdk/domain/loan_recipient.rb +51 -35
- data/lib/onlinepayments/sdk/domain/lodging_data.rb +20 -16
- data/lib/onlinepayments/sdk/domain/mandate_address.rb +51 -35
- data/lib/onlinepayments/sdk/domain/mandate_address_response.rb +58 -0
- data/lib/onlinepayments/sdk/domain/mandate_contact_details.rb +20 -16
- data/lib/onlinepayments/sdk/domain/mandate_customer.rb +52 -44
- data/lib/onlinepayments/sdk/domain/mandate_customer_response.rb +66 -0
- data/lib/onlinepayments/sdk/domain/mandate_merchant_action.rb +27 -22
- data/lib/onlinepayments/sdk/domain/mandate_personal_information.rb +27 -22
- data/lib/onlinepayments/sdk/domain/mandate_personal_information_response.rb +39 -0
- data/lib/onlinepayments/sdk/domain/mandate_personal_name.rb +27 -20
- data/lib/onlinepayments/sdk/domain/mandate_personal_name_response.rb +37 -0
- data/lib/onlinepayments/sdk/domain/mandate_redirect_data.rb +27 -20
- data/lib/onlinepayments/sdk/domain/mandate_response.rb +66 -42
- data/lib/onlinepayments/sdk/domain/merchant_action.rb +43 -28
- data/lib/onlinepayments/sdk/domain/mobile_payment_data.rb +27 -20
- data/lib/onlinepayments/sdk/domain/mobile_payment_method_hosted_checkout_specific_input.rb +43 -26
- data/lib/onlinepayments/sdk/domain/mobile_payment_method_specific_input.rb +71 -50
- data/lib/onlinepayments/sdk/domain/mobile_payment_method_specific_output.rb +56 -51
- data/lib/onlinepayments/sdk/domain/mobile_payment_product302_specific_input.rb +32 -0
- data/lib/onlinepayments/sdk/domain/mobile_payment_product320_specific_input.rb +20 -18
- data/lib/onlinepayments/sdk/domain/mobile_three_d_secure_challenge_parameters.rb +51 -0
- data/lib/onlinepayments/sdk/domain/multiple_payment_information.rb +37 -0
- data/lib/onlinepayments/sdk/domain/omnichannel_payout_specific_input.rb +20 -16
- data/lib/onlinepayments/sdk/domain/operation_output.rb +67 -45
- data/lib/onlinepayments/sdk/domain/operation_payment_references.rb +30 -0
- data/lib/onlinepayments/sdk/domain/order.rb +75 -66
- data/lib/onlinepayments/sdk/domain/order_line_details.rb +79 -47
- data/lib/onlinepayments/sdk/domain/order_references.rb +34 -24
- data/lib/onlinepayments/sdk/domain/order_status_output.rb +52 -38
- data/lib/onlinepayments/sdk/domain/order_type_information.rb +27 -20
- data/lib/onlinepayments/sdk/domain/other_details.rb +37 -0
- data/lib/onlinepayments/sdk/domain/payment_account_on_file.rb +27 -20
- data/lib/onlinepayments/sdk/domain/payment_context.rb +34 -26
- data/lib/onlinepayments/sdk/domain/payment_creation_output.rb +41 -28
- data/lib/onlinepayments/sdk/domain/payment_details_response.rb +60 -49
- data/lib/onlinepayments/sdk/domain/payment_error_response.rb +37 -31
- data/lib/onlinepayments/sdk/domain/payment_link_event.rb +34 -24
- data/lib/onlinepayments/sdk/domain/payment_link_order_input.rb +34 -28
- data/lib/onlinepayments/sdk/domain/payment_link_order_output.rb +34 -28
- data/lib/onlinepayments/sdk/domain/payment_link_response.rb +74 -51
- data/lib/onlinepayments/sdk/domain/payment_link_specific_input.rb +36 -24
- data/lib/onlinepayments/sdk/domain/payment_output.rb +115 -94
- data/lib/onlinepayments/sdk/domain/payment_product.rb +117 -85
- data/lib/onlinepayments/sdk/domain/payment_product130_specific_input.rb +20 -18
- data/lib/onlinepayments/sdk/domain/payment_product130_specific_three_d_secure.rb +41 -28
- data/lib/onlinepayments/sdk/domain/payment_product3012.rb +27 -20
- data/lib/onlinepayments/sdk/domain/payment_product3012_specific_input.rb +41 -28
- data/lib/onlinepayments/sdk/domain/payment_product302_specific_data.rb +22 -20
- data/lib/onlinepayments/sdk/domain/payment_product3203_specific_output.rb +40 -0
- data/lib/onlinepayments/sdk/domain/payment_product3208_specific_input.rb +20 -16
- data/lib/onlinepayments/sdk/domain/payment_product3208_specific_output.rb +20 -16
- data/lib/onlinepayments/sdk/domain/payment_product3209_specific_input.rb +20 -16
- data/lib/onlinepayments/sdk/domain/payment_product3209_specific_output.rb +20 -16
- data/lib/onlinepayments/sdk/domain/payment_product320_specific_data.rb +29 -24
- data/lib/onlinepayments/sdk/domain/payment_product5001_specific_output.rb +48 -16
- data/lib/onlinepayments/sdk/domain/payment_product5100_specific_input.rb +20 -16
- data/lib/onlinepayments/sdk/domain/payment_product5402_specific_output.rb +20 -16
- data/lib/onlinepayments/sdk/domain/payment_product5404.rb +27 -20
- data/lib/onlinepayments/sdk/domain/payment_product5407.rb +27 -20
- data/lib/onlinepayments/sdk/domain/payment_product5500_specific_output.rb +41 -24
- data/lib/onlinepayments/sdk/domain/payment_product771_specific_output.rb +20 -16
- data/lib/onlinepayments/sdk/domain/payment_product840_customer_account.rb +72 -47
- data/lib/onlinepayments/sdk/domain/payment_product840_specific_output.rb +43 -38
- data/lib/onlinepayments/sdk/domain/payment_product_display_hints.rb +34 -24
- data/lib/onlinepayments/sdk/domain/payment_product_field.rb +41 -32
- data/lib/onlinepayments/sdk/domain/payment_product_field_data_restrictions.rb +27 -22
- data/lib/onlinepayments/sdk/domain/payment_product_field_display_element.rb +41 -28
- data/lib/onlinepayments/sdk/domain/payment_product_field_display_hints.rb +84 -56
- data/lib/onlinepayments/sdk/domain/payment_product_field_form_element.rb +30 -24
- data/lib/onlinepayments/sdk/domain/payment_product_field_tooltip.rb +28 -20
- data/lib/onlinepayments/sdk/domain/payment_product_field_validators.rb +83 -73
- data/lib/onlinepayments/sdk/domain/payment_product_filter.rb +32 -29
- data/lib/onlinepayments/sdk/domain/payment_product_filter_hosted_tokenization.rb +22 -20
- data/lib/onlinepayments/sdk/domain/payment_product_filters_hosted_checkout.rb +27 -24
- data/lib/onlinepayments/sdk/domain/payment_product_filters_hosted_tokenization.rb +27 -24
- data/lib/onlinepayments/sdk/domain/payment_product_group.rb +44 -37
- data/lib/onlinepayments/sdk/domain/payment_product_networks_response.rb +22 -20
- data/lib/onlinepayments/sdk/domain/payment_references.rb +27 -20
- data/lib/onlinepayments/sdk/domain/payment_response.rb +51 -41
- data/lib/onlinepayments/sdk/domain/payment_status_output.rb +66 -46
- data/lib/onlinepayments/sdk/domain/payout_error_response.rb +37 -31
- data/lib/onlinepayments/sdk/domain/payout_output.rb +27 -22
- data/lib/onlinepayments/sdk/domain/payout_response.rb +41 -32
- data/lib/onlinepayments/sdk/domain/payout_result.rb +41 -32
- data/lib/onlinepayments/sdk/domain/payout_status_output.rb +34 -24
- data/lib/onlinepayments/sdk/domain/personal_information.rb +34 -26
- data/lib/onlinepayments/sdk/domain/personal_information_token.rb +20 -18
- data/lib/onlinepayments/sdk/domain/personal_name.rb +34 -24
- data/lib/onlinepayments/sdk/domain/personal_name_token.rb +27 -20
- data/lib/onlinepayments/sdk/domain/product_directory.rb +22 -20
- data/lib/onlinepayments/sdk/domain/protection_eligibility.rb +27 -20
- data/lib/onlinepayments/sdk/domain/range_validator.rb +27 -20
- data/lib/onlinepayments/sdk/domain/rate_details.rb +51 -35
- data/lib/onlinepayments/sdk/domain/redirect_data.rb +27 -20
- data/lib/onlinepayments/sdk/domain/redirect_payment_method_specific_input.rb +140 -81
- data/lib/onlinepayments/sdk/domain/redirect_payment_method_specific_output.rb +96 -68
- data/lib/onlinepayments/sdk/domain/redirect_payment_product3203_specific_input.rb +30 -0
- data/lib/onlinepayments/sdk/domain/redirect_payment_product3302_specific_input.rb +44 -0
- data/lib/onlinepayments/sdk/domain/redirect_payment_product3306_specific_input.rb +20 -16
- data/lib/onlinepayments/sdk/domain/redirect_payment_product5001_specific_input.rb +20 -16
- data/lib/onlinepayments/sdk/domain/redirect_payment_product5300_specific_input.rb +74 -0
- data/lib/onlinepayments/sdk/domain/redirect_payment_product5406_specific_input.rb +20 -18
- data/lib/onlinepayments/sdk/domain/redirect_payment_product5408_specific_input.rb +27 -22
- data/lib/onlinepayments/sdk/domain/redirect_payment_product5410_specific_input.rb +32 -0
- data/lib/onlinepayments/sdk/domain/redirect_payment_product809_specific_input.rb +20 -16
- data/lib/onlinepayments/sdk/domain/redirect_payment_product840_specific_input.rb +41 -20
- data/lib/onlinepayments/sdk/domain/redirection_data.rb +20 -16
- data/lib/onlinepayments/sdk/domain/refund_card_method_specific_output.rb +34 -26
- data/lib/onlinepayments/sdk/domain/refund_e_wallet_method_specific_output.rb +34 -26
- data/lib/onlinepayments/sdk/domain/refund_error_response.rb +37 -31
- data/lib/onlinepayments/sdk/domain/refund_mobile_method_specific_output.rb +34 -24
- data/lib/onlinepayments/sdk/domain/refund_output.rb +89 -64
- data/lib/onlinepayments/sdk/domain/refund_payment_product840_customer_account.rb +34 -24
- data/lib/onlinepayments/sdk/domain/refund_payment_product840_specific_output.rb +20 -18
- data/lib/onlinepayments/sdk/domain/refund_redirect_method_specific_output.rb +27 -20
- data/lib/onlinepayments/sdk/domain/refund_request.rb +43 -24
- data/lib/onlinepayments/sdk/domain/refund_response.rb +41 -32
- data/lib/onlinepayments/sdk/domain/refunds_response.rb +22 -20
- data/lib/onlinepayments/sdk/domain/regular_expression_validator.rb +20 -16
- data/lib/onlinepayments/sdk/domain/send_test_request.rb +30 -0
- data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_input.rb +27 -22
- data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_input_base.rb +27 -22
- data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_output.rb +34 -28
- data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_product771_specific_input.rb +27 -22
- data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_product771_specific_input_base.rb +27 -22
- data/lib/onlinepayments/sdk/domain/session_request.rb +22 -20
- data/lib/onlinepayments/sdk/domain/session_response.rb +53 -39
- data/lib/onlinepayments/sdk/domain/shipping.rb +76 -52
- data/lib/onlinepayments/sdk/domain/shipping_method.rb +41 -28
- data/lib/onlinepayments/sdk/domain/shopping_cart.rb +62 -48
- data/lib/onlinepayments/sdk/domain/shopping_cart_extension.rb +51 -43
- data/lib/onlinepayments/sdk/domain/show_form_data.rb +35 -39
- data/lib/onlinepayments/sdk/domain/subsequent_card_payment_method_specific_input.rb +60 -35
- data/lib/onlinepayments/sdk/domain/subsequent_payment_product5001_specific_input.rb +20 -16
- data/lib/onlinepayments/sdk/domain/subsequent_payment_request.rb +35 -31
- data/lib/onlinepayments/sdk/domain/subsequent_payment_response.rb +20 -18
- data/lib/onlinepayments/sdk/domain/surcharge.rb +59 -48
- data/lib/onlinepayments/sdk/domain/surcharge_calculation_card.rb +27 -20
- data/lib/onlinepayments/sdk/domain/surcharge_for_payment_link.rb +20 -16
- data/lib/onlinepayments/sdk/domain/surcharge_rate.rb +41 -28
- data/lib/onlinepayments/sdk/domain/surcharge_specific_input.rb +27 -22
- data/lib/onlinepayments/sdk/domain/surcharge_specific_output.rb +34 -28
- data/lib/onlinepayments/sdk/domain/test_connection.rb +20 -16
- data/lib/onlinepayments/sdk/domain/three_d_secure.rb +98 -87
- data/lib/onlinepayments/sdk/domain/three_d_secure_base.rb +75 -69
- data/lib/onlinepayments/sdk/domain/three_d_secure_data.rb +34 -24
- data/lib/onlinepayments/sdk/domain/three_d_secure_results.rb +107 -67
- data/lib/onlinepayments/sdk/domain/token_card.rb +27 -22
- data/lib/onlinepayments/sdk/domain/token_card_data.rb +27 -18
- data/lib/onlinepayments/sdk/domain/token_card_specific_input.rb +20 -18
- data/lib/onlinepayments/sdk/domain/token_data.rb +27 -18
- data/lib/onlinepayments/sdk/domain/token_e_wallet.rb +28 -22
- data/lib/onlinepayments/sdk/domain/token_response.rb +58 -45
- data/lib/onlinepayments/sdk/domain/transaction.rb +20 -18
- data/lib/onlinepayments/sdk/domain/uploadable_file.rb +33 -0
- data/lib/onlinepayments/sdk/domain/validate_credentials_request.rb +37 -0
- data/lib/onlinepayments/sdk/domain/validate_credentials_response.rb +30 -0
- data/lib/onlinepayments/sdk/domain/value_mapping_element.rb +29 -24
- data/lib/onlinepayments/sdk/domain.rb +4 -0
- data/lib/onlinepayments/sdk/exception_factory.rb +76 -0
- data/lib/onlinepayments/sdk/factory.rb +163 -118
- data/lib/onlinepayments/sdk/idempotence_exception.rb +23 -19
- data/lib/onlinepayments/sdk/json/default_marshaller.rb +34 -0
- data/lib/onlinepayments/sdk/json/marshaller.rb +27 -0
- data/lib/onlinepayments/sdk/json/marshaller_syntax_exception.rb +9 -0
- data/lib/onlinepayments/sdk/json.rb +1 -0
- data/lib/onlinepayments/sdk/logging/communicator_logger.rb +18 -16
- data/lib/onlinepayments/sdk/logging/log_message_builder.rb +80 -47
- data/lib/onlinepayments/sdk/logging/logging_capable.rb +1 -1
- data/lib/onlinepayments/sdk/logging/obfuscation/body_obfuscator.rb +113 -0
- data/lib/onlinepayments/sdk/logging/obfuscation/header_obfuscator.rb +54 -0
- data/lib/onlinepayments/sdk/logging/obfuscation/obfuscation_capable.rb +21 -0
- data/lib/onlinepayments/sdk/logging/obfuscation/obfuscation_rule.rb +47 -0
- data/lib/onlinepayments/sdk/logging/obfuscation.rb +1 -0
- data/lib/onlinepayments/sdk/logging/request_log_message_builder.rb +40 -29
- data/lib/onlinepayments/sdk/logging/response_log_message_builder.rb +30 -23
- data/lib/onlinepayments/sdk/logging/ruby_communicator_logger.rb +49 -45
- data/lib/onlinepayments/sdk/logging/stdout_communicator_logger.rb +20 -23
- data/lib/onlinepayments/sdk/logging.rb +1 -10
- data/lib/onlinepayments/sdk/merchant/captures/captures_client.rb +57 -0
- data/lib/onlinepayments/sdk/merchant/captures.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/complete/complete_client.rb +60 -0
- data/lib/onlinepayments/sdk/merchant/complete.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/hostedcheckout/hosted_checkout_client.rb +72 -71
- data/lib/onlinepayments/sdk/merchant/hostedcheckout.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/hostedtokenization/hosted_tokenization_client.rb +72 -71
- data/lib/onlinepayments/sdk/merchant/hostedtokenization.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/mandates/mandates_client.rb +165 -164
- data/lib/onlinepayments/sdk/merchant/mandates.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/merchant_client.rb +116 -64
- data/lib/onlinepayments/sdk/merchant/paymentlinks/payment_links_client.rb +102 -101
- data/lib/onlinepayments/sdk/merchant/paymentlinks.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/payments/payments_client.rb +233 -332
- data/lib/onlinepayments/sdk/merchant/payments.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/payouts/payouts_client.rb +73 -71
- data/lib/onlinepayments/sdk/merchant/payouts.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/privacypolicy/get_privacy_policy_params.rb +32 -0
- data/lib/onlinepayments/sdk/merchant/privacypolicy/privacy_policy_client.rb +54 -0
- data/lib/onlinepayments/sdk/merchant/privacypolicy.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/productgroups/get_product_group_params.rb +50 -47
- data/lib/onlinepayments/sdk/merchant/productgroups/get_product_groups_params.rb +50 -47
- data/lib/onlinepayments/sdk/merchant/productgroups/product_groups_client.rb +72 -72
- data/lib/onlinepayments/sdk/merchant/productgroups.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/products/get_payment_product_networks_params.rb +27 -25
- data/lib/onlinepayments/sdk/merchant/products/get_payment_product_params.rb +50 -47
- data/lib/onlinepayments/sdk/merchant/products/get_payment_products_params.rb +50 -47
- data/lib/onlinepayments/sdk/merchant/products/get_product_directory_params.rb +21 -19
- data/lib/onlinepayments/sdk/merchant/products/products_client.rb +134 -136
- data/lib/onlinepayments/sdk/merchant/products.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/refunds/refunds_client.rb +57 -0
- data/lib/onlinepayments/sdk/merchant/refunds.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/services/services_client.rb +124 -155
- data/lib/onlinepayments/sdk/merchant/services.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/sessions/sessions_client.rb +42 -41
- data/lib/onlinepayments/sdk/merchant/sessions.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/tokens/tokens_client.rb +101 -100
- data/lib/onlinepayments/sdk/merchant/tokens.rb +4 -0
- data/lib/onlinepayments/sdk/merchant/webhooks/webhooks_client.rb +83 -0
- data/lib/onlinepayments/sdk/merchant/webhooks.rb +4 -0
- data/lib/onlinepayments/sdk/merchant.rb +4 -0
- data/lib/onlinepayments/sdk/platform_exception.rb +19 -0
- data/lib/onlinepayments/sdk/proxy_configuration.rb +60 -60
- data/lib/onlinepayments/sdk/reference_exception.rb +14 -9
- data/lib/onlinepayments/sdk/validation_exception.rb +14 -9
- data/lib/onlinepayments/sdk/webhooks/api_version_mismatch_exception.rb +17 -15
- data/lib/onlinepayments/sdk/webhooks/in_memory_secret_key_store.rb +46 -43
- data/lib/onlinepayments/sdk/webhooks/secret_key_not_available_exception.rb +16 -12
- data/lib/onlinepayments/sdk/webhooks/secret_key_store.rb +13 -11
- data/lib/onlinepayments/sdk/webhooks/signature_validation_exception.rb +15 -14
- data/lib/onlinepayments/sdk/webhooks/signature_validator.rb +81 -0
- data/lib/onlinepayments/sdk/webhooks/webhooks_event.rb +84 -53
- data/lib/onlinepayments/sdk/webhooks/webhooks_helper.rb +28 -90
- data/lib/onlinepayments/sdk/webhooks.rb +1 -11
- data/lib/onlinepayments/sdk.rb +4 -26
- data/onlinepayments-sdk-ruby.gemspec +3 -2
- metadata +95 -40
- data/lib/onlinepayments/sdk/authenticator.rb +0 -16
- data/lib/onlinepayments/sdk/communication_exception.rb +0 -16
- data/lib/onlinepayments/sdk/connection.rb +0 -41
- data/lib/onlinepayments/sdk/data_object.rb +0 -31
- data/lib/onlinepayments/sdk/defaultimpl/authorization_type.rb +0 -24
- data/lib/onlinepayments/sdk/defaultimpl/default_authenticator.rb +0 -108
- data/lib/onlinepayments/sdk/defaultimpl/default_connection.rb +0 -365
- data/lib/onlinepayments/sdk/defaultimpl/default_marshaller.rb +0 -32
- data/lib/onlinepayments/sdk/defaultimpl.rb +0 -6
- data/lib/onlinepayments/sdk/domain/network_token_essentials.rb +0 -38
- data/lib/onlinepayments/sdk/domain/page_customization.rb +0 -26
- data/lib/onlinepayments/sdk/domain/payment_product5002_specific_input.rb +0 -34
- data/lib/onlinepayments/sdk/domain/payment_product840.rb +0 -26
- data/lib/onlinepayments/sdk/domain/three_ds_whitelist.rb +0 -30
- data/lib/onlinepayments/sdk/endpoint_configuration.rb +0 -127
- data/lib/onlinepayments/sdk/exceptions.rb +0 -8
- data/lib/onlinepayments/sdk/logging/logging_util.rb +0 -286
- data/lib/onlinepayments/sdk/marshaller.rb +0 -24
- data/lib/onlinepayments/sdk/marshaller_syntax_exception.rb +0 -6
- data/lib/onlinepayments/sdk/merchant/services/get_privacy_policy_params.rb +0 -30
- data/lib/onlinepayments/sdk/meta_data_provider.rb +0 -150
- data/lib/onlinepayments/sdk/modules.rb +0 -62
- data/lib/onlinepayments/sdk/multipart_form_data_object.rb +0 -44
- data/lib/onlinepayments/sdk/multipart_form_data_request.rb +0 -9
- data/lib/onlinepayments/sdk/not_found_exception.rb +0 -16
- data/lib/onlinepayments/sdk/param_request.rb +0 -11
- data/lib/onlinepayments/sdk/payment_platform_exception.rb +0 -15
- data/lib/onlinepayments/sdk/pooled_connection.rb +0 -21
- data/lib/onlinepayments/sdk/request_header.rb +0 -50
- data/lib/onlinepayments/sdk/request_param.rb +0 -23
- data/lib/onlinepayments/sdk/response_exception.rb +0 -47
- data/lib/onlinepayments/sdk/response_header.rb +0 -42
- data/lib/onlinepayments/sdk/uploadable_file.rb +0 -30
- data/lib/onlinepayments/sdk/webhooks/webhooks.rb +0 -22
- data/lib/onlinepayments/sdk/webhooks/webhooks_helper_builder.rb +0 -25
@@ -1,55 +1,58 @@
|
|
1
1
|
require 'concurrent'
|
2
2
|
require 'singleton'
|
3
|
+
require 'onlinepayments/sdk/webhooks/secret_key_not_available_exception'
|
4
|
+
require 'onlinepayments/sdk/webhooks/secret_key_store'
|
3
5
|
|
4
|
-
module OnlinePayments
|
5
|
-
module
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
module OnlinePayments
|
7
|
+
module SDK
|
8
|
+
module Webhooks
|
9
|
+
# An in-memory secret key store. This implementation can be used
|
10
|
+
# in applications where secret keys are specified at application
|
11
|
+
# startup. Thread-safe.
|
12
|
+
class InMemorySecretKeyStore
|
13
|
+
include Singleton
|
14
|
+
include SecretKeyStore
|
10
15
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
# under high concurrency.
|
18
|
-
@store = Concurrent::Map.new
|
19
|
-
end
|
16
|
+
# Creates new InMemorySecretKeyStore
|
17
|
+
def initialize
|
18
|
+
# NOTE: use Map instead of Hash to provide better performance
|
19
|
+
# under high concurrency.
|
20
|
+
@store = Concurrent::Map.new
|
21
|
+
end
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
# Retrieves the secret key corresponding to the given key id
|
24
|
+
#
|
25
|
+
# @param key_id [String] key id of the secret key
|
26
|
+
# @raise [OnlinePayments::SDK::Webhooks::SecretKeyNotAvailableException] if the secret key for the given key id is not available.
|
27
|
+
def get_secret_key(key_id)
|
28
|
+
if (secret_key = @store.get(key_id)).nil?
|
29
|
+
msg = "could not find secret key for key id " + key_id
|
30
|
+
raise SecretKeyNotAvailableException.new(message: msg, key_id: key_id)
|
31
|
+
end
|
32
|
+
secret_key
|
28
33
|
end
|
29
|
-
msg = "could not find secret key for key id #{key_id}"
|
30
|
-
raise SecretKeyNotAvailableException, message: msg, key_id: key_id
|
31
|
-
end
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
35
|
+
# Stores the given secret key for the given key id.
|
36
|
+
#
|
37
|
+
# @param key_id [String] key id of the secret key
|
38
|
+
# @param secret_key [String] the secret key to be stored
|
39
|
+
def store_secret_key(key_id, secret_key)
|
40
|
+
raise ArgumentError if key_id.nil? or key_id.strip.empty?
|
41
|
+
raise ArgumentError if secret_key.nil? or secret_key.strip.empty?
|
42
|
+
@store.put(key_id, secret_key)
|
43
|
+
end
|
42
44
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
# Removes the secret key for the given key id.
|
46
|
+
#
|
47
|
+
# @param key_id [String] the key id whose corresponding secret should be removed from the store
|
48
|
+
def remove_secret_key(key_id)
|
49
|
+
@store.delete(key_id)
|
50
|
+
end
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
-
|
52
|
+
# Removes all stored secret keys from the store
|
53
|
+
def clear
|
54
|
+
@store.clear
|
55
|
+
end
|
53
56
|
end
|
54
57
|
end
|
55
58
|
end
|
@@ -1,17 +1,21 @@
|
|
1
|
-
|
2
|
-
module Webhooks
|
3
|
-
# Raised when an error caused a secret to become not available.
|
4
|
-
#
|
5
|
-
# @attr_reader [String] key_id
|
6
|
-
class SecretKeyNotAvailableException < SignatureValidationException
|
1
|
+
require 'onlinepayments/sdk/webhooks/signature_validation_exception'
|
7
2
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
3
|
+
module OnlinePayments
|
4
|
+
module SDK
|
5
|
+
module Webhooks
|
6
|
+
# Raised when an error caused a secret to become not available.
|
7
|
+
#
|
8
|
+
# @attr_reader [String] key_id
|
9
|
+
class SecretKeyNotAvailableException < SignatureValidationException
|
10
|
+
|
11
|
+
def initialize(args)
|
12
|
+
raise ArgumentError if (key_id = args.delete(:key_id)).nil? # key_id is mandatory
|
13
|
+
super(args)
|
14
|
+
@key_id = key_id
|
15
|
+
end
|
13
16
|
|
14
|
-
|
17
|
+
attr_reader :key_id
|
18
|
+
end
|
15
19
|
end
|
16
20
|
end
|
17
21
|
end
|
@@ -1,15 +1,17 @@
|
|
1
|
-
module OnlinePayments
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module OnlinePayments
|
2
|
+
module SDK
|
3
|
+
module Webhooks
|
4
|
+
# An abstract store of secret keys. Implementation can store secret keys in a database,
|
5
|
+
# on disk, etc. Should be Thread-safe.
|
6
|
+
module SecretKeyStore
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
# Retrieve secret key for given key id
|
9
|
+
#
|
10
|
+
# @param key_id [String] key id of the secret key
|
11
|
+
# @raise [OnlinePayments::SDK::Webhooks::SecretKeyNotAvailableException] if the secret key for the given key id is not available.
|
12
|
+
def get_secret_key(key_id)
|
13
|
+
raise NotImplementedError
|
14
|
+
end
|
13
15
|
end
|
14
16
|
end
|
15
17
|
end
|
@@ -1,18 +1,19 @@
|
|
1
|
-
module OnlinePayments
|
2
|
-
module
|
1
|
+
module OnlinePayments
|
2
|
+
module SDK
|
3
|
+
module Webhooks
|
4
|
+
# Raised when an error occurred when validating Webhooks signatures
|
5
|
+
class SignatureValidationException < RuntimeError
|
3
6
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
# store backtrace info if exception given
|
15
|
-
set_backtrace(args[:cause].backtrace) if args[:cause]
|
7
|
+
# Creates a new SignatureValidationException
|
8
|
+
#
|
9
|
+
# @param [Hash] args the options to create the Exception with
|
10
|
+
# @option args [String] :message the error message
|
11
|
+
# @option args [RuntimeError] :cause an Error object that causes the Exception
|
12
|
+
def initialize(args)
|
13
|
+
super(args[:message]) # NOTE: can be nil
|
14
|
+
# store backtrace info if exception given
|
15
|
+
set_backtrace(args[:cause].backtrace) unless args[:cause].nil?
|
16
|
+
end
|
16
17
|
end
|
17
18
|
end
|
18
19
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'openssl'
|
3
|
+
require 'onlinepayments/sdk/webhooks/signature_validation_exception'
|
4
|
+
|
5
|
+
module OnlinePayments
|
6
|
+
module SDK
|
7
|
+
module Webhooks
|
8
|
+
|
9
|
+
# Validator for webhooks signatures. Thread-safe.
|
10
|
+
class SignatureValidator
|
11
|
+
def initialize(secret_key_store)
|
12
|
+
raise ArgumentError if secret_key_store.nil?
|
13
|
+
@secret_key_store = secret_key_store
|
14
|
+
end
|
15
|
+
|
16
|
+
# Validates incoming request using request headers
|
17
|
+
#
|
18
|
+
# @param body [String] body of the request
|
19
|
+
# @param request_headers [Array<OnlinePayments::SDK::Communication::RequestHeader>] headers of the request
|
20
|
+
def validate(body, request_headers)
|
21
|
+
validate_body(body, request_headers)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
HEADER_SIGNATURE = 'X-GCS-Signature'.freeze
|
27
|
+
HEADER_KEY_ID = 'X-GCS-KeyId'.freeze
|
28
|
+
HMAC_SCHEME = 'SHA256'.freeze
|
29
|
+
|
30
|
+
# Validates the body using given request headers
|
31
|
+
#
|
32
|
+
# @param body [String] body of the request
|
33
|
+
# @param request_headers [Array<OnlinePayments::SDK::Communication::RequestHeader>] headers of the request
|
34
|
+
def validate_body(body, request_headers)
|
35
|
+
signature = get_header_value(request_headers, HEADER_SIGNATURE)
|
36
|
+
key_id = get_header_value(request_headers, HEADER_KEY_ID)
|
37
|
+
secret_key = @secret_key_store.get_secret_key(key_id)
|
38
|
+
digest = OpenSSL::Digest.new(HMAC_SCHEME)
|
39
|
+
hmac = OpenSSL::HMAC.digest(digest, secret_key, body)
|
40
|
+
expected_signature = Base64.strict_encode64(hmac).strip
|
41
|
+
|
42
|
+
unless equal_signatures?(signature, expected_signature)
|
43
|
+
msg = "failed to validate signature '#{signature}'"
|
44
|
+
raise SignatureValidationException.new(message: msg)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Checks two signatures
|
49
|
+
#
|
50
|
+
# @param signature [String]
|
51
|
+
# @param expected_signature [String]
|
52
|
+
def equal_signatures?(signature, expected_signature)
|
53
|
+
# NOTE: copy the signatures to avoid runtime tampering via references
|
54
|
+
signature = signature.dup.freeze
|
55
|
+
expected_signature = expected_signature.dup.freeze
|
56
|
+
# NOTE: do not use simple equality comparision to avoid side channel attack
|
57
|
+
limit = [signature.length, expected_signature.length, 256].max
|
58
|
+
limit.times.inject(true) do |flag, idx|
|
59
|
+
# NOTE: this block is constructed to take constant time to run
|
60
|
+
flag &= signature[idx] == expected_signature[idx]
|
61
|
+
# [] returns nil if idx >= the length of the String
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Retrieves header value from the request headers whose header name matches the given parameter
|
66
|
+
def get_header_value(request_headers, header_name)
|
67
|
+
if (right_header = request_headers.select { |h| h.name.casecmp(header_name) == 0 }).size != 1
|
68
|
+
msg = if right_header.empty?
|
69
|
+
"could not find header '#{header_name}'"
|
70
|
+
else
|
71
|
+
# more than 2 headers
|
72
|
+
"encountered multiple occurrences of header '#{header_name}'"
|
73
|
+
end
|
74
|
+
raise SignatureValidationException.new(message: msg)
|
75
|
+
end
|
76
|
+
right_header.first.value
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -1,57 +1,88 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
1
|
+
require 'onlinepayments/sdk/domain/data_object'
|
2
|
+
require 'onlinepayments/sdk/domain/payment_response'
|
3
|
+
require 'onlinepayments/sdk/domain/payout_response'
|
4
|
+
require 'onlinepayments/sdk/domain/refund_response'
|
5
|
+
require 'onlinepayments/sdk/domain/token_response'
|
6
|
+
|
7
|
+
module OnlinePayments
|
8
|
+
module SDK
|
9
|
+
module Webhooks
|
10
|
+
# @attr [String] api_version
|
11
|
+
# @attr [String] created
|
12
|
+
# @attr [String] id
|
13
|
+
# @attr [String] merchant_id
|
14
|
+
# @attr [String] type
|
15
|
+
# @attr [OnlinePayments::SDK::V2::Domain::PaymentResponse] payment
|
16
|
+
# @attr [OnlinePayments::SDK::V2::Domain::PayoutResponse] payout
|
17
|
+
# @attr [OnlinePayments::SDK::V2::Domain::RefundResponse] refund
|
18
|
+
# @attr [OnlinePayments::SDK::V2::Domain::TokenResponse] token
|
19
|
+
class WebhooksEvent < OnlinePayments::SDK::Domain::DataObject
|
20
|
+
|
21
|
+
attr_accessor :api_version
|
22
|
+
|
23
|
+
attr_accessor :created
|
24
|
+
|
25
|
+
attr_accessor :dispute
|
26
|
+
|
27
|
+
attr_accessor :id
|
28
|
+
|
29
|
+
attr_accessor :merchant_id
|
30
|
+
|
31
|
+
attr_accessor :type
|
32
|
+
|
33
|
+
attr_accessor :payment
|
34
|
+
|
35
|
+
attr_accessor :payout
|
36
|
+
|
37
|
+
attr_accessor :refund
|
38
|
+
|
39
|
+
attr_accessor :token
|
40
|
+
|
41
|
+
# @return (Hash)
|
42
|
+
def to_h
|
43
|
+
hash = super
|
44
|
+
hash['apiVersion'] = @api_version unless @api_version.nil?
|
45
|
+
hash['created'] = @created unless @created.nil?
|
46
|
+
hash['id'] = @id unless @id.nil?
|
47
|
+
hash['merchantId'] = @merchant_id unless @merchant_id.nil?
|
48
|
+
hash['type'] = @type unless @type.nil?
|
49
|
+
hash['payment'] = @payment.to_h unless @payment.nil?
|
50
|
+
hash['payout'] = @payout.to_h unless @payout.nil?
|
51
|
+
hash['refund'] = @refund.to_h unless @refund.nil?
|
52
|
+
hash['token'] = @token.to_h unless @token.nil?
|
53
|
+
hash
|
54
|
+
end
|
43
55
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
56
|
+
def from_hash(hash)
|
57
|
+
super
|
58
|
+
if hash.has_key? 'apiVersion'
|
59
|
+
@api_version = hash['apiVersion']
|
60
|
+
end
|
61
|
+
if hash.has_key? 'created'
|
62
|
+
@created = hash['created']
|
63
|
+
end
|
64
|
+
if hash.has_key? 'id'
|
65
|
+
@id = hash['id']
|
66
|
+
end
|
67
|
+
if hash.has_key? 'merchantId'
|
68
|
+
@merchant_id = hash['merchantId']
|
69
|
+
end
|
70
|
+
if hash.has_key? 'type'
|
71
|
+
@type = hash['type']
|
72
|
+
end
|
73
|
+
if hash.has_key? 'payment'
|
74
|
+
@payment = OnlinePayments::SDK::Domain::PaymentResponse.new_from_hash(hash['payment'])
|
75
|
+
end
|
76
|
+
if hash.has_key? 'payout'
|
77
|
+
@payout = OnlinePayments::SDK::Domain::PayoutResponse.new_from_hash(hash['payout'])
|
78
|
+
end
|
79
|
+
if hash.has_key? 'refund'
|
80
|
+
@refund = OnlinePayments::SDK::Domain::RefundResponse.new_from_hash(hash['refund'])
|
81
|
+
end
|
82
|
+
if hash.has_key? 'token'
|
83
|
+
@token = OnlinePayments::SDK::Domain::TokenResponse.new_from_hash(hash['token'])
|
84
|
+
end
|
85
|
+
end
|
55
86
|
end
|
56
87
|
end
|
57
88
|
end
|
@@ -1,100 +1,38 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
# Unmarshals the given body, while also validating it using the given request headers.
|
17
|
-
#
|
18
|
-
# @param body [String] body of the request
|
19
|
-
# @param request_headers [Array<OnlinePayments::SDK::RequestHeader>] headers of the request
|
20
|
-
def unmarshal(body, request_headers)
|
21
|
-
validate(body, request_headers)
|
22
|
-
event = @marshaller.unmarshal(body, WebhooksEvent)
|
23
|
-
validate_api_version(event)
|
24
|
-
event
|
25
|
-
end
|
26
|
-
|
27
|
-
# Validates incoming request using request headers
|
28
|
-
#
|
29
|
-
# @param body [String] body of the request
|
30
|
-
# @param request_headers [Array<OnlinePayments::SDK::RequestHeader>] headers of the request
|
31
|
-
def validate(body, request_headers)
|
32
|
-
validate_body(body, request_headers)
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
HEADER_SIGNATURE = 'X-GCS-Signature'.freeze
|
38
|
-
HEADER_KEY_ID = 'X-GCS-KeyId'.freeze
|
39
|
-
HMAC_SCHEME = 'SHA256'.freeze
|
40
|
-
|
41
|
-
# validation utility methods
|
42
|
-
|
43
|
-
# Validates the body using given request headers
|
44
|
-
#
|
45
|
-
# @param body [String] body of the request
|
46
|
-
# @param request_headers [Array<OnlinePayments::SDK::RequestHeader>] headers of the request
|
47
|
-
def validate_body(body, request_headers)
|
48
|
-
signature = get_header_value(request_headers, HEADER_SIGNATURE)
|
49
|
-
key_id = get_header_value(request_headers, HEADER_KEY_ID)
|
50
|
-
secret_key = @secret_key_store.get_secret_key(key_id)
|
51
|
-
digest = OpenSSL::Digest.new(HMAC_SCHEME)
|
52
|
-
hmac = OpenSSL::HMAC.digest(digest, secret_key, body)
|
53
|
-
expected_signature = Base64.strict_encode64(hmac).strip
|
54
|
-
|
55
|
-
unless equal_signatures?(signature, expected_signature)
|
56
|
-
msg = "failed to validate signature '#{signature}'"
|
57
|
-
raise SignatureValidationException, message: msg
|
1
|
+
require 'onlinepayments/sdk/webhooks/webhooks_event'
|
2
|
+
require 'onlinepayments/sdk/webhooks/api_version_mismatch_exception'
|
3
|
+
require 'onlinepayments/sdk/webhooks/signature_validator'
|
4
|
+
|
5
|
+
module OnlinePayments
|
6
|
+
module SDK
|
7
|
+
module Webhooks
|
8
|
+
# Online Payments platform webhooks Helper, Thread-safe.
|
9
|
+
class WebhooksHelper
|
10
|
+
def initialize(marshaller, secret_key_store)
|
11
|
+
raise ArgumentError if marshaller.nil?
|
12
|
+
@marshaller = marshaller
|
13
|
+
@signature_validator = OnlinePayments::SDK::Webhooks::SignatureValidator.new(secret_key_store)
|
58
14
|
end
|
59
|
-
end
|
60
15
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
# NOTE: this block is constructed to take constant time to run
|
73
|
-
flag &= signature[idx] == expected_signature[idx]
|
74
|
-
# [] returns nil if idx >= the length of the String
|
16
|
+
# Unmarshals the given body, while also validating it using the given request headers.
|
17
|
+
#
|
18
|
+
# @param body [String] body of the request
|
19
|
+
# @param request_headers [Array<OnlinePayments::SDK::Communication::RequestHeader>] headers of the request
|
20
|
+
# @return [OnlinePayments::SDK::Webhooks::WebhooksEvent]
|
21
|
+
def unmarshal(body, request_headers)
|
22
|
+
@signature_validator.validate(body, request_headers)
|
23
|
+
|
24
|
+
event = @marshaller.unmarshal(body, OnlinePayments::SDK::Webhooks::WebhooksEvent)
|
25
|
+
validate_api_version(event)
|
26
|
+
event
|
75
27
|
end
|
76
|
-
end
|
77
|
-
|
78
|
-
# general utility methods
|
79
28
|
|
80
|
-
|
81
|
-
def validate_api_version(event)
|
82
|
-
raise ApiVersionMismatchException.new event.api_version, 'v1' unless 'v1'.eql?(event.api_version)
|
83
|
-
end
|
29
|
+
private
|
84
30
|
|
85
|
-
|
86
|
-
|
87
|
-
if (right_header = request_headers.select { |h| h.name.casecmp(header_name) == 0 }).size != 1
|
88
|
-
msg = if right_header.empty?
|
89
|
-
"could not find header '#{header_name}'"
|
90
|
-
else
|
91
|
-
# more than 2 headers
|
92
|
-
"encountered multiple occurrences of header '#{header_name}'"
|
93
|
-
end
|
94
|
-
raise SignatureValidationException, message: msg
|
31
|
+
def validate_api_version(event)
|
32
|
+
raise OnlinePayments::SDK::Webhooks::ApiVersionMismatchException.new(event.api_version, 'v1') unless 'v1'.eql?(event.api_version)
|
95
33
|
end
|
96
|
-
right_header.first.value
|
97
34
|
end
|
98
35
|
end
|
36
|
+
|
99
37
|
end
|
100
38
|
end
|
@@ -1,11 +1 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require "#{prefix}/api_version_mismatch_exception"
|
4
|
-
require "#{prefix}/signature_validation_exception"
|
5
|
-
require "#{prefix}/secret_key_not_available_exception"
|
6
|
-
require "#{prefix}/secret_key_store"
|
7
|
-
require "#{prefix}/in_memory_secret_key_store"
|
8
|
-
require "#{prefix}/webhooks_event"
|
9
|
-
require "#{prefix}/webhooks_helper"
|
10
|
-
require "#{prefix}/webhooks_helper_builder"
|
11
|
-
require "#{prefix}/webhooks"
|
1
|
+
Dir[File.join(__dir__, 'webhooks', '*.rb')].each { |f| require f }
|
data/lib/onlinepayments/sdk.rb
CHANGED
@@ -1,26 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
require
|
5
|
-
|
6
|
-
require "#{prefix}/marshaller"
|
7
|
-
require "#{prefix}/response_header"
|
8
|
-
require "#{prefix}/authenticator"
|
9
|
-
require "#{prefix}/data_object"
|
10
|
-
require "#{prefix}/proxy_configuration"
|
11
|
-
require "#{prefix}/connection"
|
12
|
-
require "#{prefix}/pooled_connection"
|
13
|
-
require "#{prefix}/communicator"
|
14
|
-
require "#{prefix}/endpoint_configuration"
|
15
|
-
require "#{prefix}/communicator_configuration"
|
16
|
-
require "#{prefix}/client"
|
17
|
-
require "#{prefix}/call_context"
|
18
|
-
require "#{prefix}/api_resource"
|
19
|
-
require "#{prefix}/request_param"
|
20
|
-
require "#{prefix}/request_header"
|
21
|
-
require "#{prefix}/param_request"
|
22
|
-
require "#{prefix}/meta_data_provider"
|
23
|
-
require "#{prefix}/factory"
|
24
|
-
|
25
|
-
require "#{prefix}/defaultimpl"
|
26
|
-
require "#{prefix}/webhooks"
|
1
|
+
#
|
2
|
+
# This file was automatically generated.
|
3
|
+
#
|
4
|
+
Dir[File.join(__dir__, 'sdk', '*.rb')].each { |f| require f }
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = 'onlinepayments-sdk-ruby'
|
3
|
-
spec.version = '
|
3
|
+
spec.version = '5.0.0'
|
4
4
|
spec.authors = ['Worldline Direct support team']
|
5
5
|
spec.email = ['82139942+worldline-direct-support-team@users.noreply.github.com']
|
6
6
|
spec.summary = %q{SDK to communicate with the Online Payments platform using the Online Payments Server API}
|
@@ -22,7 +22,8 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency 'yard', '~> 0.9'
|
23
23
|
spec.add_development_dependency 'rspec', '~> 3.5'
|
24
24
|
spec.add_development_dependency 'webmock', '~> 2.1'
|
25
|
-
spec.add_development_dependency 'sinatra', '~> 1
|
25
|
+
spec.add_development_dependency 'sinatra', '~> 2.1'
|
26
|
+
spec.add_development_dependency 'webrick', '~> 1.7'
|
26
27
|
spec.add_development_dependency 'rake', '~> 12.3', '>= 12.3.3'
|
27
28
|
# spec.metadata['yard.run'] = 'yri' # compiles yard doc on install
|
28
29
|
end
|