onlinepayments-sdk-ruby 4.23.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 -52
- 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 -28
- 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 -128
- 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 -100
- 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 -59
- data/lib/onlinepayments/sdk/domain/create_hosted_checkout_response.rb +60 -43
- data/lib/onlinepayments/sdk/domain/create_hosted_tokenization_request.rb +57 -42
- 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 -60
- 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 +51 -35
- 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 +52 -44
- 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 +27 -22
- data/lib/onlinepayments/sdk/domain/mandate_personal_name.rb +27 -20
- data/lib/onlinepayments/sdk/domain/mandate_personal_name_response.rb +27 -20
- data/lib/onlinepayments/sdk/domain/mandate_redirect_data.rb +27 -20
- data/lib/onlinepayments/sdk/domain/mandate_response.rb +64 -44
- 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 +58 -45
- 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 +27 -20
- 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 +51 -0
- data/lib/onlinepayments/sdk/domain/payment_product302_specific_data.rb +22 -20
- data/lib/onlinepayments/sdk/domain/payment_product3203_specific_output.rb +27 -24
- 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 +139 -88
- data/lib/onlinepayments/sdk/domain/redirect_payment_method_specific_output.rb +95 -75
- data/lib/onlinepayments/sdk/domain/redirect_payment_product3203_specific_input.rb +20 -16
- 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 -31
- data/lib/onlinepayments/sdk/domain/subsequent_card_payment_method_specific_input.rb +60 -39
- 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 -63
- data/lib/onlinepayments/sdk/domain/three_d_secure_base.rb +78 -52
- 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 +89 -35
- 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/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
@@ -0,0 +1,27 @@
|
|
1
|
+
module OnlinePayments
|
2
|
+
module SDK
|
3
|
+
module JSON
|
4
|
+
# Class responsible for marshalling and unmarshalling objects to and from JSON
|
5
|
+
class Marshaller
|
6
|
+
|
7
|
+
# Marshals _request_object_ to JSON format by calling #to_h on it.
|
8
|
+
#
|
9
|
+
# @param request_object [OnlinePayments::SDK::Domain::DataObject] the object to format
|
10
|
+
# @return [String] _request_object_ converted to JSON
|
11
|
+
def marshal(request_object)
|
12
|
+
raise NotImplementedError
|
13
|
+
end
|
14
|
+
|
15
|
+
# Unmarshals a JSON string into an object of type _type_.
|
16
|
+
# The new object is initialized by calling .new_from_hash with contents of the JSON as a Hash object.
|
17
|
+
#
|
18
|
+
# @param response_json [String] The JSON to unmarshal
|
19
|
+
# @param type [Type] The class of the object that will be instantiated using _type.new_from_hash_
|
20
|
+
# @return The JSON unmarshalled to the given type
|
21
|
+
def unmarshal(response_json, type)
|
22
|
+
raise NotImplementedError
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Dir[File.join(__dir__, 'json', '*.rb')].each { |f| require f }
|
@@ -1,21 +1,23 @@
|
|
1
|
-
module OnlinePayments
|
2
|
-
module
|
1
|
+
module OnlinePayments
|
2
|
+
module SDK
|
3
|
+
module Logging
|
4
|
+
# Base logger class used in this SDK. This class is an interface and cannot be instantiated.
|
5
|
+
class CommunicatorLogger
|
3
6
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
raise NotImplementedError, "#{self.class.name} is not implemented."
|
11
|
-
end
|
7
|
+
# Interface, no instantiation
|
8
|
+
# @see OnlinePayments::SDK::Logging::StdoutCommunicatorLogger
|
9
|
+
# @see OnlinePayments::SDK::Logging::RubyCommunicatorLogger
|
10
|
+
def initialize
|
11
|
+
raise NotImplementedError.new("#{self.class.name} is not implemented.")
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
# Logs a message with or without exception
|
15
|
+
#
|
16
|
+
# @param message [String] the message to log
|
17
|
+
# @param thrown [Exception, nil] the exception to log, or nil to log no exception
|
18
|
+
def log(message, thrown = nil)
|
19
|
+
raise NotImplementedError.new("#{self.class.name}#log() is not implemented.")
|
20
|
+
end
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -1,56 +1,89 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
# Abstract class used to construct a message describing a request or response.
|
5
|
-
#
|
6
|
-
# @attr_reader [String] request_id An identifier assigned to the request and response
|
7
|
-
# @attr_reader [String] headers Request or response headers in string form
|
8
|
-
# @attr_reader [String] body Request or response body as a string
|
9
|
-
# @attr_reader [String] content_type Content type of the body, generally 'application/json' or 'text/html'
|
10
|
-
class LogMessageBuilder
|
11
|
-
|
12
|
-
attr_reader :request_id
|
13
|
-
attr_reader :headers
|
14
|
-
attr_reader :body
|
15
|
-
attr_reader :content_type
|
16
|
-
|
17
|
-
# Create a new LogMessageBuilder
|
18
|
-
def initialize(request_id)
|
19
|
-
raise ArgumentError if request_id.nil? || request_id.empty?
|
20
|
-
@request_id = request_id
|
21
|
-
@headers = ''
|
22
|
-
end
|
1
|
+
require 'onlinepayments/sdk/logging/obfuscation/body_obfuscator'
|
2
|
+
require 'onlinepayments/sdk/logging/obfuscation/header_obfuscator'
|
23
3
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
4
|
+
module OnlinePayments
|
5
|
+
module SDK
|
6
|
+
module Logging
|
7
|
+
# Abstract class used to construct a message describing a request or response.
|
8
|
+
#
|
9
|
+
# @attr_reader [String] request_id An identifier assigned to the request and response
|
10
|
+
# @attr_reader [String] headers Request or response headers in string form
|
11
|
+
# @attr_reader [String] body Request or response body as a string
|
12
|
+
# @attr_reader [String] content_type Content type of the body, generally 'application/json' or 'text/html'
|
13
|
+
# @attr_reader [OnlinePayments::SDK::Logging::Obfuscation::BodyObfuscator] body_obfuscator
|
14
|
+
# @attr_reader [OnlinePayments::SDK::Logging::Obfuscation::HeaderObfuscator] header_obfuscator
|
15
|
+
class LogMessageBuilder
|
29
16
|
|
30
|
-
|
17
|
+
attr_reader :request_id
|
18
|
+
attr_reader :headers
|
19
|
+
attr_reader :body
|
20
|
+
attr_reader :content_type
|
21
|
+
attr_reader :body_obfuscator
|
22
|
+
attr_reader :header_obfuscator
|
31
23
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
24
|
+
# Create a new LogMessageBuilder
|
25
|
+
def initialize(request_id,
|
26
|
+
body_obfuscator = Obfuscation::BodyObfuscator.default_obfuscator,
|
27
|
+
header_obfuscator = Obfuscation::HeaderObfuscator.default_obfuscator)
|
28
|
+
raise ArgumentError if request_id.nil? or request_id.empty?
|
29
|
+
raise ArgumentError if body_obfuscator.nil?
|
30
|
+
raise ArgumentError if header_obfuscator.nil?
|
31
|
+
@request_id = request_id
|
32
|
+
@headers = ''
|
33
|
+
@body_obfuscator = body_obfuscator
|
34
|
+
@header_obfuscator = header_obfuscator
|
35
|
+
end
|
38
36
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
# Adds a single header to the #headers string
|
38
|
+
def add_headers(name, value)
|
39
|
+
@headers += ', ' if @headers.length > 0
|
40
|
+
@headers += name + '="'
|
41
|
+
@headers += @header_obfuscator.obfuscate_header(name, value) unless value.nil?
|
42
|
+
@headers += '"'
|
43
|
+
end
|
43
44
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
# Sets the body of this message to the parameter body.
|
46
|
+
|
47
|
+
# @param body [String] the message body
|
48
|
+
# @param content_type [String] the content type of the body
|
49
|
+
def set_body(body, content_type)
|
50
|
+
if is_binary(content_type)
|
51
|
+
@body = "<binary content>"
|
52
|
+
else
|
53
|
+
@body = @body_obfuscator.obfuscate_body(body)
|
54
|
+
end
|
55
|
+
@content_type = content_type
|
56
|
+
end
|
57
|
+
|
58
|
+
# Constructs and returns the log message as a string.
|
59
|
+
# @return [String]
|
60
|
+
def get_message
|
61
|
+
raise NotImplementedError.new("#{self.class.name}#get_message() is not implemented.")
|
62
|
+
end
|
63
|
+
|
64
|
+
def to_s
|
65
|
+
if self.class == LogMessageBuilder
|
66
|
+
super.to_s
|
67
|
+
else
|
68
|
+
get_message
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# Returns an empty string if the parameter is nil, and returns the parameter itself otherwise
|
73
|
+
protected def empty_if_null(value)
|
74
|
+
value.nil? ? '' : value
|
75
|
+
end
|
49
76
|
|
50
|
-
|
51
|
-
|
52
|
-
|
77
|
+
# Returns whether or not the content type is binary
|
78
|
+
def is_binary(content_type)
|
79
|
+
if content_type.nil?
|
80
|
+
false
|
81
|
+
else
|
82
|
+
content_type = content_type.downcase
|
83
|
+
!(content_type.start_with?("text/") || content_type.include?("json") || content_type.include?("xml"))
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
53
87
|
end
|
54
|
-
end
|
55
88
|
end
|
56
89
|
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'onlinepayments/sdk/logging/obfuscation/obfuscation_rule'
|
2
|
+
|
3
|
+
module OnlinePayments
|
4
|
+
module SDK
|
5
|
+
module Logging
|
6
|
+
module Obfuscation
|
7
|
+
# A class that can be used to obfuscate properties in JSON bodies.
|
8
|
+
class BodyObfuscator
|
9
|
+
|
10
|
+
# Creates a new body obfuscator.
|
11
|
+
# This will contain some pre-defined obfuscation rules, as well as any provided custom rules
|
12
|
+
#
|
13
|
+
# @param additional_rules [Hash] An optional hash where the keys are property names and the values are
|
14
|
+
# functions that obfuscate a single value
|
15
|
+
def initialize(additional_rules = nil)
|
16
|
+
@obfuscation_rules = {
|
17
|
+
"additionalInfo" => Obfuscation.obfuscate_all,
|
18
|
+
"cardholderName" => Obfuscation.obfuscate_all,
|
19
|
+
"dateOfBirth" => Obfuscation.obfuscate_all,
|
20
|
+
"emailAddress" => Obfuscation.obfuscate_all,
|
21
|
+
"faxNumber" => Obfuscation.obfuscate_all,
|
22
|
+
"firstName" => Obfuscation.obfuscate_all,
|
23
|
+
"houseNumber" => Obfuscation.obfuscate_all,
|
24
|
+
"mobilePhoneNumber" => Obfuscation.obfuscate_all,
|
25
|
+
"passengerName" => Obfuscation.obfuscate_all,
|
26
|
+
"phoneNumber" => Obfuscation.obfuscate_all,
|
27
|
+
"street" => Obfuscation.obfuscate_all,
|
28
|
+
"workPhoneNumber" => Obfuscation.obfuscate_all,
|
29
|
+
"zip" => Obfuscation.obfuscate_all,
|
30
|
+
"cardNumber" => Obfuscation.obfuscate_all_but_last(4),
|
31
|
+
"expiryDate" => Obfuscation.obfuscate_all_but_last(2),
|
32
|
+
"cvv" => Obfuscation.obfuscate_all,
|
33
|
+
"iban" => Obfuscation.obfuscate_all_but_last(4),
|
34
|
+
"accountNumber" => Obfuscation.obfuscate_all_but_last(4),
|
35
|
+
"reformattedAccountNumber" => Obfuscation.obfuscate_all_but_last(4),
|
36
|
+
"bin" => Obfuscation.obfuscate_all_but_first(6),
|
37
|
+
"value" => Obfuscation.obfuscate_all,
|
38
|
+
"keyId" => Obfuscation.obfuscate_with_fixed_length(8),
|
39
|
+
"secretKey" => Obfuscation.obfuscate_with_fixed_length(8),
|
40
|
+
"publicKey" => Obfuscation.obfuscate_with_fixed_length(8),
|
41
|
+
"userAuthenticationToken" => Obfuscation.obfuscate_with_fixed_length(8),
|
42
|
+
"encryptedPayload" => Obfuscation.obfuscate_with_fixed_length(8),
|
43
|
+
"decryptedPayload" => Obfuscation.obfuscate_with_fixed_length(8),
|
44
|
+
"encryptedCustomerInput" => Obfuscation.obfuscate_with_fixed_length(8),
|
45
|
+
}
|
46
|
+
if additional_rules
|
47
|
+
additional_rules.each do |name, rule|
|
48
|
+
@obfuscation_rules[name] = rule
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
@property_pattern = build_property_pattern(@obfuscation_rules.keys)
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def build_property_pattern(pn)
|
58
|
+
return /$^/ if pn.empty? # no possible match
|
59
|
+
# Regex to create:
|
60
|
+
# (["'])(X|Y|Z)\1\s*:\s*(?:(["'])(.*?)(?<!\\)\3|([^"'\s\[\{]\S*))
|
61
|
+
# Groups:
|
62
|
+
# 1: opening " or ' for the property name
|
63
|
+
# 2: property name
|
64
|
+
# 3: opening " or ' for the value
|
65
|
+
# 4: quoted value
|
66
|
+
# 5: non-quoted-value
|
67
|
+
# The negative lookbehind is to allow escaped quotes to be part of
|
68
|
+
# the value. What this does not allow currently is having values end
|
69
|
+
# with a \ (which would be escaped to \\).
|
70
|
+
regex = pn.inject("([\"'])(") { |r, p| "#{r}#{Regexp.quote(p)}|" }.chop <<
|
71
|
+
")\\1\\s*:\\s*(?:([\"'])(.*?)(?<!\\\\)\\3|([^\"'\\s\\[\\{]((?!,)\\S)*))"
|
72
|
+
/#{regex}/m # dotall mode
|
73
|
+
end
|
74
|
+
|
75
|
+
def obfuscate_value(property_name, value)
|
76
|
+
obfuscation_rule = @obfuscation_rules[property_name]
|
77
|
+
return obfuscation_rule.call(value) if obfuscation_rule
|
78
|
+
value
|
79
|
+
end
|
80
|
+
|
81
|
+
public
|
82
|
+
|
83
|
+
# Obfuscates the given body as necessary.
|
84
|
+
#
|
85
|
+
# @return (String)
|
86
|
+
def obfuscate_body(body)
|
87
|
+
return nil if body.nil?
|
88
|
+
return '' if body.empty?
|
89
|
+
|
90
|
+
body.gsub(@property_pattern) do
|
91
|
+
m = Regexp.last_match
|
92
|
+
property_name = m[2]
|
93
|
+
value = m[4] || m[5]
|
94
|
+
# copy value 'cause it's part of m[0]
|
95
|
+
m[0].sub(value, obfuscate_value(property_name, value.dup))
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
|
101
|
+
DEFAULT_OBFUSCATOR = BodyObfuscator.new
|
102
|
+
|
103
|
+
public
|
104
|
+
|
105
|
+
# @return [BodyObfuscator]
|
106
|
+
def self.default_obfuscator
|
107
|
+
DEFAULT_OBFUSCATOR
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'onlinepayments/sdk/logging/obfuscation/obfuscation_rule'
|
2
|
+
|
3
|
+
module OnlinePayments
|
4
|
+
module SDK
|
5
|
+
module Logging
|
6
|
+
module Obfuscation
|
7
|
+
# A class that can be used to obfuscate headers.
|
8
|
+
class HeaderObfuscator
|
9
|
+
|
10
|
+
# Creates a new header obfuscator.
|
11
|
+
# This will contain some pre-defined obfuscation rules, as well as any provided custom rules
|
12
|
+
#
|
13
|
+
# @param additional_rules [Hash] An optional hash where the keys are header names and the values are
|
14
|
+
# functions that obfuscate a single value
|
15
|
+
def initialize(additional_rules = nil)
|
16
|
+
@obfuscation_rules = {
|
17
|
+
"X-GCS-Authentication-Token" => Obfuscation.obfuscate_with_fixed_length(8),
|
18
|
+
"X-GCS-CallerPassword" => Obfuscation.obfuscate_with_fixed_length(8),
|
19
|
+
"authorization" => Obfuscation.obfuscate_with_fixed_length(8),
|
20
|
+
"www-authenticate" => Obfuscation.obfuscate_with_fixed_length(8),
|
21
|
+
"proxy-authenticate" => Obfuscation.obfuscate_with_fixed_length(8),
|
22
|
+
"proxy-authorization" => Obfuscation.obfuscate_with_fixed_length(8),
|
23
|
+
}
|
24
|
+
if additional_rules
|
25
|
+
additional_rules.each do |name, rule|
|
26
|
+
@obfuscation_rules[name.downcase] = rule
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Obfuscates the value for the given header as necessary.
|
32
|
+
#
|
33
|
+
# @return (String)
|
34
|
+
def obfuscate_header(header_name, value)
|
35
|
+
obfuscation_rule = @obfuscation_rules[header_name.downcase]
|
36
|
+
return obfuscation_rule.call(value) if obfuscation_rule
|
37
|
+
value
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
DEFAULT_OBFUSCATOR = HeaderObfuscator.new
|
43
|
+
|
44
|
+
public
|
45
|
+
|
46
|
+
# @return [HeaderObfuscator]
|
47
|
+
def self.default_obfuscator
|
48
|
+
DEFAULT_OBFUSCATOR
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module OnlinePayments
|
2
|
+
module SDK
|
3
|
+
module Logging
|
4
|
+
module Obfuscation
|
5
|
+
# Abstract mixin module that allows specifying body and header obfuscators for an object.
|
6
|
+
module ObfuscationCapable
|
7
|
+
|
8
|
+
# Sets the current body obfuscator to use.
|
9
|
+
def set_body_obfuscator(body_obfuscator)
|
10
|
+
raise NotImplementedError
|
11
|
+
end
|
12
|
+
|
13
|
+
# Sets the current header obfuscator to use.
|
14
|
+
def set_header_obfuscator(header_obfuscator)
|
15
|
+
raise NotImplementedError
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module OnlinePayments
|
2
|
+
module SDK
|
3
|
+
module Logging
|
4
|
+
module Obfuscation
|
5
|
+
|
6
|
+
# Returns an obfuscation rule (callable) that will replace all characters with *
|
7
|
+
def self.obfuscate_all
|
8
|
+
->(value) do
|
9
|
+
return value if value.nil? or value.empty?
|
10
|
+
'*' * (value || '').length
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns an obfuscation rule (function) that will replace values with a fixed length string containing only *
|
15
|
+
def self.obfuscate_with_fixed_length(fixed_length)
|
16
|
+
->(value) { '*' * fixed_length }
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns an obfuscation rule (function) that will keep a fixed number of characters at the start,
|
20
|
+
# then replaces all other characters with *
|
21
|
+
def self.obfuscate_all_but_first(count)
|
22
|
+
->(value) do
|
23
|
+
return value if value.nil? or value.empty?
|
24
|
+
return value if value.length < count
|
25
|
+
# range describes the range of characters to replace with asterisks
|
26
|
+
range = count...value.length
|
27
|
+
value[range] = '*' * range.size
|
28
|
+
value
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Returns an obfuscation rule that will keep a fixed number of characters at the end,
|
33
|
+
# then replaces all other characters with *
|
34
|
+
def self.obfuscate_all_but_last(count)
|
35
|
+
->(value) do
|
36
|
+
return value if value.nil? or value.empty?
|
37
|
+
return value if value.length < count
|
38
|
+
# range describes the range of characters to replace with asterisks
|
39
|
+
range = 0...(value.length - count)
|
40
|
+
value[range] = '*' * range.size
|
41
|
+
value
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Dir[File.join(__dir__, 'obfuscation', '*.rb')].each { |f| require f }
|
@@ -1,38 +1,49 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'onlinepayments/sdk/logging/obfuscation/body_obfuscator'
|
2
|
+
require 'onlinepayments/sdk/logging/obfuscation/header_obfuscator'
|
3
|
+
require 'onlinepayments/sdk/logging/log_message_builder'
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
module OnlinePayments
|
6
|
+
module SDK
|
7
|
+
module Logging
|
8
|
+
# Class that converts data about a request into a properly formatted log message.
|
9
|
+
# Formats request id, http method, uri, headers and body into a helpful message.
|
10
|
+
class RequestLogMessageBuilder < LogMessageBuilder
|
7
11
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
12
|
+
def initialize(request_id, method, uri,
|
13
|
+
body_obfuscator = Obfuscation::BodyObfuscator.default_obfuscator,
|
14
|
+
header_obfuscator = Obfuscation::HeaderObfuscator.default_obfuscator)
|
15
|
+
super(request_id, body_obfuscator, header_obfuscator)
|
16
|
+
@method = method
|
17
|
+
@uri = uri
|
18
|
+
end
|
13
19
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
# Constructs and returns a log message based on the request data. The log message is a string.
|
21
|
+
def get_message
|
22
|
+
msg_template_without_body = "Outgoing request (requestId='%s'):\n" +
|
23
|
+
" method: '%s'\n" +
|
24
|
+
" uri: '%s'\n" +
|
25
|
+
" headers: '%s'"
|
26
|
+
msg_template_with_body = msg_template_without_body + "\n" +
|
27
|
+
" content-type: '%s'\n" +
|
28
|
+
" body: '%s'"
|
21
29
|
|
22
|
-
|
30
|
+
return sprintf(msg_template_without_body, @request_id, empty_if_null(@method),
|
31
|
+
format_uri, @headers) if @body.nil?
|
32
|
+
sprintf(msg_template_with_body, @request_id, empty_if_null(@method),
|
33
|
+
format_uri, @headers, empty_if_null(@content_type), @body)
|
34
|
+
end
|
23
35
|
|
24
|
-
|
25
|
-
" method: \"%s\"\n"\
|
26
|
-
" uri: \"%s\"\n"\
|
27
|
-
" headers: \"%s\"".freeze
|
28
|
-
MSG_TEMPLATE_WITH_BODY = "#{MSG_TEMPLATE_WITHOUT_BODY}\n"\
|
29
|
-
" content-type: \"%s\"\n"\
|
30
|
-
" body: \"%s\"".freeze
|
36
|
+
private
|
31
37
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
38
|
+
def format_uri
|
39
|
+
'' unless @uri && @uri.path
|
40
|
+
if @uri.query.nil?
|
41
|
+
@uri.path
|
42
|
+
else
|
43
|
+
"#{@uri.path}?#{@uri.query}" unless @uri.query.nil?
|
44
|
+
end
|
45
|
+
# @uri.path + '?' + empty_if_null(@uri.query)
|
46
|
+
end
|
36
47
|
end
|
37
48
|
end
|
38
49
|
end
|
@@ -1,33 +1,40 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
class ResponseLogMessageBuilder < LogMessageBuilder
|
1
|
+
require 'onlinepayments/sdk/logging/obfuscation/body_obfuscator'
|
2
|
+
require 'onlinepayments/sdk/logging/obfuscation/header_obfuscator'
|
3
|
+
require 'onlinepayments/sdk/logging/log_message_builder'
|
5
4
|
|
5
|
+
module OnlinePayments
|
6
|
+
module SDK
|
7
|
+
module Logging
|
6
8
|
# Class that converts data about a response into a properly formatted log message.
|
7
9
|
# Formats request id, status code, headers, body and time between request and response into a helpful message.
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
class ResponseLogMessageBuilder < LogMessageBuilder
|
11
|
+
|
12
|
+
# @param request_id [String] identifier of the request corresponding to this response.
|
13
|
+
# @param status_code [Integer] HTTP status code of the response.
|
14
|
+
# @param duration [Float] time elapsed between request and response.
|
15
|
+
def initialize(request_id, status_code, duration = -1,
|
16
|
+
body_obfuscator = Obfuscation::BodyObfuscator.default_obfuscator,
|
17
|
+
header_obfuscator = Obfuscation::HeaderObfuscator.default_obfuscator)
|
18
|
+
super(request_id, body_obfuscator, header_obfuscator)
|
19
|
+
@status_code = status_code
|
20
|
+
@duration = duration
|
21
|
+
end
|
17
22
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
# Constructs and returns a log message based on the request data. The log message is a string.
|
24
|
+
def get_message
|
25
|
+
msg_template = "Incoming response (requestId='%s'" +
|
26
|
+
((@duration < 0) ? "" : ", %.3f ms") +
|
27
|
+
"):\n" +
|
28
|
+
" status-code: '%s'\n" +
|
29
|
+
" headers: '%s'\n" +
|
30
|
+
" content-type: '%s'\n" +
|
31
|
+
" body: '%s'"
|
25
32
|
|
26
|
-
|
33
|
+
return sprintf(msg_template, @request_id, @status_code, @headers,
|
34
|
+
empty_if_null(@content_type), empty_if_null(@body)) if @duration < 0
|
27
35
|
sprintf(msg_template, @request_id, @duration, @status_code, @headers,
|
28
|
-
empty_if_null(@content_type), empty_if_null(@body)) :
|
29
|
-
sprintf(msg_template, @request_id, @status_code, @headers,
|
30
36
|
empty_if_null(@content_type), empty_if_null(@body))
|
37
|
+
end
|
31
38
|
end
|
32
39
|
end
|
33
40
|
end
|