connect-sdk-ruby 2.45.0 → 2.46.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.
Files changed (588) hide show
  1. checksums.yaml +4 -4
  2. data/connect-sdk-ruby.gemspec +1 -1
  3. data/examples/merchant/captures/create_refund_capture_example.rb +1 -1
  4. data/examples/merchant/captures/get_capture_example.rb +1 -1
  5. data/examples/merchant/disputes/cancel_dispute_example.rb +1 -1
  6. data/examples/merchant/disputes/get_dispute_example.rb +1 -1
  7. data/examples/merchant/disputes/submit_dispute_example.rb +1 -1
  8. data/examples/merchant/disputes/upload_dispute_file_example.rb +1 -1
  9. data/examples/merchant/files/get_file_example.rb +1 -1
  10. data/examples/merchant/hostedcheckouts/create_hosted_checkout_example.rb +1 -1
  11. data/examples/merchant/hostedcheckouts/delete_hosted_checkout_example.rb +1 -1
  12. data/examples/merchant/hostedcheckouts/get_hosted_checkout_example.rb +1 -1
  13. data/examples/merchant/hostedmandatemanagements/create_hosted_mandate_management_example.rb +1 -1
  14. data/examples/merchant/hostedmandatemanagements/get_hosted_mandate_management_example.rb +1 -1
  15. data/examples/merchant/installments/get_installments_info_example.rb +1 -1
  16. data/examples/merchant/mandates/block_mandate_example.rb +1 -1
  17. data/examples/merchant/mandates/create_mandate_example.rb +1 -1
  18. data/examples/merchant/mandates/create_mandate_with_reference_example.rb +1 -1
  19. data/examples/merchant/mandates/get_mandate_example.rb +1 -1
  20. data/examples/merchant/mandates/revoke_mandate_example.rb +1 -1
  21. data/examples/merchant/mandates/unblock_mandate_example.rb +1 -1
  22. data/examples/merchant/payments/approve_payment_example.rb +1 -1
  23. data/examples/merchant/payments/cancel_approval_payment_example.rb +1 -1
  24. data/examples/merchant/payments/cancel_payment_example.rb +1 -1
  25. data/examples/merchant/payments/capture_payment_example.rb +1 -1
  26. data/examples/merchant/payments/complete_payment_example.rb +1 -1
  27. data/examples/merchant/payments/create_payment_dispute_example.rb +1 -1
  28. data/examples/merchant/payments/create_payment_example.rb +1 -1
  29. data/examples/merchant/payments/find_payments_example.rb +1 -1
  30. data/examples/merchant/payments/get_payment_captures_example.rb +1 -1
  31. data/examples/merchant/payments/get_payment_device_fingerprint_details_example.rb +1 -1
  32. data/examples/merchant/payments/get_payment_disputes_example.rb +1 -1
  33. data/examples/merchant/payments/get_payment_example.rb +1 -1
  34. data/examples/merchant/payments/get_refunds_example.rb +1 -1
  35. data/examples/merchant/payments/get_third_party_status_example.rb +1 -1
  36. data/examples/merchant/payments/process_challenged_payment_example.rb +1 -1
  37. data/examples/merchant/payments/refund_payment_example.rb +1 -1
  38. data/examples/merchant/payments/tokenize_payment_example.rb +1 -1
  39. data/examples/merchant/payouts/approve_payout_example.rb +1 -1
  40. data/examples/merchant/payouts/cancel_approval_payout_example.rb +1 -1
  41. data/examples/merchant/payouts/cancel_payout_example.rb +1 -1
  42. data/examples/merchant/payouts/create_payout_example.rb +1 -1
  43. data/examples/merchant/payouts/find_payouts_example.rb +1 -1
  44. data/examples/merchant/payouts/get_payout_example.rb +1 -1
  45. data/examples/merchant/productgroups/get_device_fingerprint_for_groups_example.rb +1 -1
  46. data/examples/merchant/productgroups/get_payment_product_group_example.rb +1 -1
  47. data/examples/merchant/productgroups/get_payment_product_groups_example.rb +1 -1
  48. data/examples/merchant/products/create_payment_product_session_example.rb +1 -1
  49. data/examples/merchant/products/get_customer_details_example.rb +1 -1
  50. data/examples/merchant/products/get_device_fingerprint_example.rb +1 -1
  51. data/examples/merchant/products/get_directory_example.rb +1 -1
  52. data/examples/merchant/products/get_networks_example.rb +1 -1
  53. data/examples/merchant/products/get_payment_product_example.rb +1 -1
  54. data/examples/merchant/products/get_payment_products_example.rb +1 -1
  55. data/examples/merchant/refunds/approve_refund_example.rb +1 -1
  56. data/examples/merchant/refunds/cancel_approval_refund_example.rb +1 -1
  57. data/examples/merchant/refunds/cancel_refund_example.rb +1 -1
  58. data/examples/merchant/refunds/find_refunds_example.rb +1 -1
  59. data/examples/merchant/refunds/get_refund_example.rb +1 -1
  60. data/examples/merchant/riskassessments/risk_assessment_bank_account_example.rb +1 -1
  61. data/examples/merchant/riskassessments/risk_assessment_cards_example.rb +1 -1
  62. data/examples/merchant/services/convert_amount_example.rb +1 -1
  63. data/examples/merchant/services/convert_bank_account_example.rb +1 -1
  64. data/examples/merchant/services/get_privacy_policy_example.rb +1 -1
  65. data/examples/merchant/services/iin_details_example.rb +1 -1
  66. data/examples/merchant/services/test_connection_example.rb +1 -1
  67. data/examples/merchant/sessions/create_session_example.rb +1 -1
  68. data/examples/merchant/tokens/approve_sepa_direct_debit_token_example.rb +1 -1
  69. data/examples/merchant/tokens/create_token_example.rb +1 -1
  70. data/examples/merchant/tokens/delete_token_example.rb +1 -1
  71. data/examples/merchant/tokens/get_token_example.rb +1 -1
  72. data/examples/merchant/tokens/update_token_example.rb +1 -1
  73. data/lib/ingenico/connect/sdk/api_exception.rb +46 -43
  74. data/lib/ingenico/connect/sdk/api_resource.rb +124 -107
  75. data/lib/ingenico/connect/sdk/authenticator.rb +15 -12
  76. data/lib/ingenico/connect/sdk/authorization_exception.rb +13 -8
  77. data/lib/ingenico/connect/sdk/call_context.rb +24 -21
  78. data/lib/ingenico/connect/sdk/client.rb +3 -4
  79. data/lib/ingenico/connect/sdk/communication_exception.rb +14 -11
  80. data/lib/ingenico/connect/sdk/communicator.rb +475 -471
  81. data/lib/ingenico/connect/sdk/communicator_configuration.rb +79 -73
  82. data/lib/ingenico/connect/sdk/connection.rb +38 -33
  83. data/lib/ingenico/connect/sdk/data_object.rb +26 -24
  84. data/lib/ingenico/connect/sdk/declined_payment_exception.rb +38 -35
  85. data/lib/ingenico/connect/sdk/declined_payout_exception.rb +38 -35
  86. data/lib/ingenico/connect/sdk/declined_refund_exception.rb +37 -36
  87. data/lib/ingenico/connect/sdk/declined_transaction_exception.rb +15 -10
  88. data/lib/ingenico/connect/sdk/defaultimpl/authorization_type.rb +16 -13
  89. data/lib/ingenico/connect/sdk/defaultimpl/default_authenticator.rb +98 -94
  90. data/lib/ingenico/connect/sdk/defaultimpl/default_connection.rb +365 -347
  91. data/lib/ingenico/connect/sdk/defaultimpl/default_marshaller.rb +30 -25
  92. data/lib/ingenico/connect/sdk/defaultimpl.rb +1 -6
  93. data/lib/ingenico/connect/sdk/domain/capture/capture.rb +35 -32
  94. data/lib/ingenico/connect/sdk/domain/capture/capture_output.rb +117 -114
  95. data/lib/ingenico/connect/sdk/domain/capture/capture_response.rb +9 -6
  96. data/lib/ingenico/connect/sdk/domain/capture/capture_status_output.rb +36 -33
  97. data/lib/ingenico/connect/sdk/domain/capture/captures_response.rb +24 -21
  98. data/lib/ingenico/connect/sdk/domain/capture.rb +5 -0
  99. data/lib/ingenico/connect/sdk/domain/definitions/abstract_order_status.rb +21 -18
  100. data/lib/ingenico/connect/sdk/domain/definitions/abstract_payment_method_specific_input.rb +21 -18
  101. data/lib/ingenico/connect/sdk/domain/definitions/additional_order_input_airline_data.rb +29 -26
  102. data/lib/ingenico/connect/sdk/domain/definitions/address.rb +63 -60
  103. data/lib/ingenico/connect/sdk/domain/definitions/airline_data.rb +200 -197
  104. data/lib/ingenico/connect/sdk/domain/definitions/airline_flight_leg.rb +159 -156
  105. data/lib/ingenico/connect/sdk/domain/definitions/airline_passenger.rb +45 -42
  106. data/lib/ingenico/connect/sdk/domain/definitions/amount_of_money.rb +27 -24
  107. data/lib/ingenico/connect/sdk/domain/definitions/bank_account.rb +21 -18
  108. data/lib/ingenico/connect/sdk/domain/definitions/bank_account_bban.rb +51 -48
  109. data/lib/ingenico/connect/sdk/domain/definitions/bank_account_iban.rb +21 -18
  110. data/lib/ingenico/connect/sdk/domain/definitions/card.rb +27 -24
  111. data/lib/ingenico/connect/sdk/domain/definitions/card_essentials.rb +33 -30
  112. data/lib/ingenico/connect/sdk/domain/definitions/card_fraud_results.rb +47 -44
  113. data/lib/ingenico/connect/sdk/domain/definitions/card_without_cvv.rb +21 -18
  114. data/lib/ingenico/connect/sdk/domain/definitions/company_information.rb +27 -24
  115. data/lib/ingenico/connect/sdk/domain/definitions/contact_details_base.rb +27 -24
  116. data/lib/ingenico/connect/sdk/domain/definitions/customer_base.rb +36 -33
  117. data/lib/ingenico/connect/sdk/domain/definitions/fraud_fields.rb +171 -168
  118. data/lib/ingenico/connect/sdk/domain/definitions/fraud_fields_shipping_details.rb +40 -37
  119. data/lib/ingenico/connect/sdk/domain/definitions/fraud_results.rb +35 -32
  120. data/lib/ingenico/connect/sdk/domain/definitions/fraud_results_retail_decisions.rb +33 -30
  121. data/lib/ingenico/connect/sdk/domain/definitions/fraugster_results.rb +27 -24
  122. data/lib/ingenico/connect/sdk/domain/definitions/in_auth.rb +52 -49
  123. data/lib/ingenico/connect/sdk/domain/definitions/key_value_pair.rb +27 -24
  124. data/lib/ingenico/connect/sdk/domain/definitions/lodging_charge.rb +33 -30
  125. data/lib/ingenico/connect/sdk/domain/definitions/lodging_data.rb +135 -132
  126. data/lib/ingenico/connect/sdk/domain/definitions/lodging_room.rb +69 -66
  127. data/lib/ingenico/connect/sdk/domain/definitions/microsoft_fraud_results.rb +57 -54
  128. data/lib/ingenico/connect/sdk/domain/definitions/order_status_output.rb +64 -61
  129. data/lib/ingenico/connect/sdk/domain/definitions/payment_product_filter.rb +34 -31
  130. data/lib/ingenico/connect/sdk/domain/definitions/personal_name_base.rb +33 -30
  131. data/lib/ingenico/connect/sdk/domain/definitions/redirect_data_base.rb +27 -24
  132. data/lib/ingenico/connect/sdk/domain/definitions/result_do_risk_assessment.rb +47 -44
  133. data/lib/ingenico/connect/sdk/domain/definitions/retail_decisions_cc_fraud_check_output.rb +33 -30
  134. data/lib/ingenico/connect/sdk/domain/definitions/validation_bank_account_check.rb +33 -30
  135. data/lib/ingenico/connect/sdk/domain/definitions/validation_bank_account_output.rb +48 -45
  136. data/lib/ingenico/connect/sdk/domain/definitions.rb +5 -0
  137. data/lib/ingenico/connect/sdk/domain/dispute/create_dispute_request.rb +46 -43
  138. data/lib/ingenico/connect/sdk/domain/dispute/dispute.rb +47 -44
  139. data/lib/ingenico/connect/sdk/domain/dispute/dispute_creation_detail.rb +33 -30
  140. data/lib/ingenico/connect/sdk/domain/dispute/dispute_output.rb +75 -72
  141. data/lib/ingenico/connect/sdk/domain/dispute/dispute_reference.rb +52 -49
  142. data/lib/ingenico/connect/sdk/domain/dispute/dispute_response.rb +9 -6
  143. data/lib/ingenico/connect/sdk/domain/dispute/dispute_status_output.rb +45 -42
  144. data/lib/ingenico/connect/sdk/domain/dispute/disputes_response.rb +24 -21
  145. data/lib/ingenico/connect/sdk/domain/dispute/upload_dispute_file_response.rb +27 -24
  146. data/lib/ingenico/connect/sdk/domain/dispute.rb +5 -0
  147. data/lib/ingenico/connect/sdk/domain/errors/api_error.rb +57 -54
  148. data/lib/ingenico/connect/sdk/domain/errors/error_response.rb +30 -27
  149. data/lib/ingenico/connect/sdk/domain/errors.rb +5 -0
  150. data/lib/ingenico/connect/sdk/domain/file/hosted_file.rb +45 -42
  151. data/lib/ingenico/connect/sdk/domain/file.rb +5 -0
  152. data/lib/ingenico/connect/sdk/domain/hostedcheckout/create_hosted_checkout_request.rb +92 -89
  153. data/lib/ingenico/connect/sdk/domain/hostedcheckout/create_hosted_checkout_response.rb +48 -45
  154. data/lib/ingenico/connect/sdk/domain/hostedcheckout/created_payment_output.rb +62 -59
  155. data/lib/ingenico/connect/sdk/domain/hostedcheckout/displayed_data.rb +36 -33
  156. data/lib/ingenico/connect/sdk/domain/hostedcheckout/frequency.rb +27 -24
  157. data/lib/ingenico/connect/sdk/domain/hostedcheckout/get_hosted_checkout_response.rb +28 -25
  158. data/lib/ingenico/connect/sdk/domain/hostedcheckout/hosted_checkout_specific_input.rb +77 -74
  159. data/lib/ingenico/connect/sdk/domain/hostedcheckout/mobile_payment_method_specific_input_hosted_checkout.rb +53 -50
  160. data/lib/ingenico/connect/sdk/domain/hostedcheckout/mobile_payment_product302_specific_input_hosted_checkout.rb +21 -18
  161. data/lib/ingenico/connect/sdk/domain/hostedcheckout/mobile_payment_product320_specific_input_hosted_checkout.rb +34 -31
  162. data/lib/ingenico/connect/sdk/domain/hostedcheckout/payment_product_filters_hosted_checkout.rb +35 -32
  163. data/lib/ingenico/connect/sdk/domain/hostedcheckout/recurring_payments_data.rb +29 -26
  164. data/lib/ingenico/connect/sdk/domain/hostedcheckout/trial_information.rb +48 -45
  165. data/lib/ingenico/connect/sdk/domain/hostedcheckout/trial_period.rb +27 -24
  166. data/lib/ingenico/connect/sdk/domain/hostedcheckout.rb +5 -0
  167. data/lib/ingenico/connect/sdk/domain/hostedmandatemanagement/create_hosted_mandate_management_request.rb +29 -26
  168. data/lib/ingenico/connect/sdk/domain/hostedmandatemanagement/create_hosted_mandate_management_response.rb +33 -30
  169. data/lib/ingenico/connect/sdk/domain/hostedmandatemanagement/get_hosted_mandate_management_response.rb +28 -25
  170. data/lib/ingenico/connect/sdk/domain/hostedmandatemanagement/hosted_mandate_info.rb +52 -49
  171. data/lib/ingenico/connect/sdk/domain/hostedmandatemanagement/hosted_mandate_management_specific_input.rb +45 -42
  172. data/lib/ingenico/connect/sdk/domain/hostedmandatemanagement.rb +5 -0
  173. data/lib/ingenico/connect/sdk/domain/installments/get_installment_request.rb +46 -43
  174. data/lib/ingenico/connect/sdk/domain/installments/installment_display_hints.rb +33 -30
  175. data/lib/ingenico/connect/sdk/domain/installments/installment_options.rb +37 -34
  176. data/lib/ingenico/connect/sdk/domain/installments/installment_options_response.rb +24 -21
  177. data/lib/ingenico/connect/sdk/domain/installments.rb +5 -0
  178. data/lib/ingenico/connect/sdk/domain/mandates/create_mandate_base.rb +58 -55
  179. data/lib/ingenico/connect/sdk/domain/mandates/create_mandate_request.rb +9 -6
  180. data/lib/ingenico/connect/sdk/domain/mandates/create_mandate_response.rb +29 -26
  181. data/lib/ingenico/connect/sdk/domain/mandates/create_mandate_with_return_url.rb +21 -18
  182. data/lib/ingenico/connect/sdk/domain/mandates/get_mandate_response.rb +22 -19
  183. data/lib/ingenico/connect/sdk/domain/mandates/mandate_address.rb +52 -49
  184. data/lib/ingenico/connect/sdk/domain/mandates/mandate_contact_details.rb +21 -18
  185. data/lib/ingenico/connect/sdk/domain/mandates/mandate_customer.rb +49 -46
  186. data/lib/ingenico/connect/sdk/domain/mandates/mandate_merchant_action.rb +28 -25
  187. data/lib/ingenico/connect/sdk/domain/mandates/mandate_personal_information.rb +28 -25
  188. data/lib/ingenico/connect/sdk/domain/mandates/mandate_personal_name.rb +27 -24
  189. data/lib/ingenico/connect/sdk/domain/mandates/mandate_redirect_data.rb +9 -6
  190. data/lib/ingenico/connect/sdk/domain/mandates/mandate_response.rb +52 -49
  191. data/lib/ingenico/connect/sdk/domain/mandates.rb +5 -0
  192. data/lib/ingenico/connect/sdk/domain/metadata/shopping_cart_extension.rb +49 -42
  193. data/lib/ingenico/connect/sdk/domain/metadata.rb +1 -0
  194. data/lib/ingenico/connect/sdk/domain/payment/abstract_bank_transfer_payment_method_specific_input.rb +21 -18
  195. data/lib/ingenico/connect/sdk/domain/payment/abstract_card_payment_method_specific_input.rb +129 -119
  196. data/lib/ingenico/connect/sdk/domain/payment/abstract_cash_payment_method_specific_input.rb +9 -6
  197. data/lib/ingenico/connect/sdk/domain/payment/abstract_e_invoice_payment_method_specific_input.rb +21 -18
  198. data/lib/ingenico/connect/sdk/domain/payment/abstract_payment_method_specific_output.rb +21 -18
  199. data/lib/ingenico/connect/sdk/domain/payment/abstract_redirect_payment_method_specific_input.rb +52 -49
  200. data/lib/ingenico/connect/sdk/domain/payment/abstract_redirect_payment_product4101_specific_input.rb +9 -6
  201. data/lib/ingenico/connect/sdk/domain/payment/abstract_redirect_payment_product840_specific_input.rb +21 -18
  202. data/lib/ingenico/connect/sdk/domain/payment/abstract_sepa_direct_debit_payment_method_specific_input.rb +9 -6
  203. data/lib/ingenico/connect/sdk/domain/payment/abstract_sepa_direct_debit_payment_product771_specific_input.rb +23 -20
  204. data/lib/ingenico/connect/sdk/domain/payment/abstract_three_d_secure.rb +72 -69
  205. data/lib/ingenico/connect/sdk/domain/payment/account_funding_recipient.rb +53 -50
  206. data/lib/ingenico/connect/sdk/domain/payment/additional_order_input.rb +82 -79
  207. data/lib/ingenico/connect/sdk/domain/payment/address_personal.rb +22 -19
  208. data/lib/ingenico/connect/sdk/domain/payment/afr_name.rb +27 -24
  209. data/lib/ingenico/connect/sdk/domain/payment/amount_breakdown.rb +27 -24
  210. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_card_payment_method_specific_output.rb +21 -18
  211. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_direct_debit_payment_method_specific_input.rb +9 -6
  212. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_mobile_payment_method_specific_output.rb +21 -18
  213. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_non_sepa_direct_debit_payment_method_specific_input.rb +9 -6
  214. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_payment_method_specific_input.rb +27 -24
  215. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_request.rb +48 -45
  216. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_sepa_direct_debit_payment_method_specific_input.rb +9 -6
  217. data/lib/ingenico/connect/sdk/domain/payment/bank_transfer_payment_method_specific_input.rb +9 -6
  218. data/lib/ingenico/connect/sdk/domain/payment/bank_transfer_payment_method_specific_input_base.rb +9 -6
  219. data/lib/ingenico/connect/sdk/domain/payment/bank_transfer_payment_method_specific_output.rb +22 -19
  220. data/lib/ingenico/connect/sdk/domain/payment/browser_data.rb +57 -54
  221. data/lib/ingenico/connect/sdk/domain/payment/cancel_approval_payment_response.rb +22 -19
  222. data/lib/ingenico/connect/sdk/domain/payment/cancel_payment_card_payment_method_specific_output.rb +21 -18
  223. data/lib/ingenico/connect/sdk/domain/payment/cancel_payment_mobile_payment_method_specific_output.rb +21 -18
  224. data/lib/ingenico/connect/sdk/domain/payment/cancel_payment_response.rb +36 -33
  225. data/lib/ingenico/connect/sdk/domain/payment/capture_payment_request.rb +27 -24
  226. data/lib/ingenico/connect/sdk/domain/payment/card_payment_method_specific_input.rb +65 -62
  227. data/lib/ingenico/connect/sdk/domain/payment/card_payment_method_specific_input_base.rb +22 -19
  228. data/lib/ingenico/connect/sdk/domain/payment/card_payment_method_specific_output.rb +60 -57
  229. data/lib/ingenico/connect/sdk/domain/payment/card_recurrence_details.rb +33 -30
  230. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_method_specific_input.rb +66 -63
  231. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_method_specific_input_base.rb +9 -6
  232. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_method_specific_output.rb +22 -19
  233. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1503_specific_input.rb +24 -21
  234. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1504_specific_input.rb +9 -6
  235. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1521_specific_input.rb +9 -6
  236. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1522_specific_input.rb +9 -6
  237. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1523_specific_input.rb +9 -6
  238. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1524_specific_input.rb +9 -6
  239. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1526_specific_input.rb +9 -6
  240. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product_with_redirect_specific_input_base.rb +21 -18
  241. data/lib/ingenico/connect/sdk/domain/payment/complete_payment_card_payment_method_specific_input.rb +22 -19
  242. data/lib/ingenico/connect/sdk/domain/payment/complete_payment_request.rb +36 -33
  243. data/lib/ingenico/connect/sdk/domain/payment/complete_payment_response.rb +9 -6
  244. data/lib/ingenico/connect/sdk/domain/payment/contact_details.rb +45 -42
  245. data/lib/ingenico/connect/sdk/domain/payment/create_payment_request.rb +120 -117
  246. data/lib/ingenico/connect/sdk/domain/payment/create_payment_response.rb +9 -6
  247. data/lib/ingenico/connect/sdk/domain/payment/create_payment_result.rb +36 -33
  248. data/lib/ingenico/connect/sdk/domain/payment/customer.rb +89 -86
  249. data/lib/ingenico/connect/sdk/domain/payment/customer_account.rb +104 -101
  250. data/lib/ingenico/connect/sdk/domain/payment/customer_account_authentication.rb +33 -30
  251. data/lib/ingenico/connect/sdk/domain/payment/customer_approve_payment.rb +21 -18
  252. data/lib/ingenico/connect/sdk/domain/payment/customer_device.rb +64 -61
  253. data/lib/ingenico/connect/sdk/domain/payment/customer_payment_activity.rb +33 -30
  254. data/lib/ingenico/connect/sdk/domain/payment/decrypted_payment_data.rb +65 -62
  255. data/lib/ingenico/connect/sdk/domain/payment/device_fingerprint_details.rb +27 -24
  256. data/lib/ingenico/connect/sdk/domain/payment/device_render_options.rb +38 -35
  257. data/lib/ingenico/connect/sdk/domain/payment/e_invoice_payment_method_specific_input.rb +28 -25
  258. data/lib/ingenico/connect/sdk/domain/payment/e_invoice_payment_method_specific_input_base.rb +9 -6
  259. data/lib/ingenico/connect/sdk/domain/payment/e_invoice_payment_method_specific_output.rb +29 -26
  260. data/lib/ingenico/connect/sdk/domain/payment/e_invoice_payment_product9000_specific_input.rb +28 -25
  261. data/lib/ingenico/connect/sdk/domain/payment/e_invoice_payment_product9000_specific_output.rb +21 -18
  262. data/lib/ingenico/connect/sdk/domain/payment/exemption_output.rb +33 -30
  263. data/lib/ingenico/connect/sdk/domain/payment/external_cardholder_authentication_data.rb +83 -80
  264. data/lib/ingenico/connect/sdk/domain/payment/find_payments_response.rb +47 -44
  265. data/lib/ingenico/connect/sdk/domain/payment/g_pay_three_d_secure.rb +46 -43
  266. data/lib/ingenico/connect/sdk/domain/payment/gift_card_purchase.rb +28 -25
  267. data/lib/ingenico/connect/sdk/domain/payment/hosted_checkout_specific_output.rb +27 -24
  268. data/lib/ingenico/connect/sdk/domain/payment/installments.rb +53 -50
  269. data/lib/ingenico/connect/sdk/domain/payment/invoice_payment_method_specific_input.rb +21 -18
  270. data/lib/ingenico/connect/sdk/domain/payment/invoice_payment_method_specific_output.rb +22 -19
  271. data/lib/ingenico/connect/sdk/domain/payment/level3_summary_data.rb +40 -37
  272. data/lib/ingenico/connect/sdk/domain/payment/line_item.rb +45 -42
  273. data/lib/ingenico/connect/sdk/domain/payment/line_item_invoice_data.rb +52 -49
  274. data/lib/ingenico/connect/sdk/domain/payment/line_item_level3_interchange_information.rb +63 -60
  275. data/lib/ingenico/connect/sdk/domain/payment/loan_recipient.rb +56 -53
  276. data/lib/ingenico/connect/sdk/domain/payment/merchant.rb +46 -43
  277. data/lib/ingenico/connect/sdk/domain/payment/merchant_action.rb +67 -64
  278. data/lib/ingenico/connect/sdk/domain/payment/mobile_payment_data.rb +27 -24
  279. data/lib/ingenico/connect/sdk/domain/payment/mobile_payment_method_specific_input.rb +59 -56
  280. data/lib/ingenico/connect/sdk/domain/payment/mobile_payment_method_specific_output.rb +48 -45
  281. data/lib/ingenico/connect/sdk/domain/payment/mobile_payment_product320_specific_input.rb +28 -25
  282. data/lib/ingenico/connect/sdk/domain/payment/mobile_three_d_secure_challenge_parameters.rb +45 -42
  283. data/lib/ingenico/connect/sdk/domain/payment/non_sepa_direct_debit_payment_method_specific_input.rb +71 -68
  284. data/lib/ingenico/connect/sdk/domain/payment/non_sepa_direct_debit_payment_method_specific_output.rb +22 -19
  285. data/lib/ingenico/connect/sdk/domain/payment/non_sepa_direct_debit_payment_product705_specific_input.rb +34 -31
  286. data/lib/ingenico/connect/sdk/domain/payment/non_sepa_direct_debit_payment_product730_specific_input.rb +22 -19
  287. data/lib/ingenico/connect/sdk/domain/payment/order.rb +77 -74
  288. data/lib/ingenico/connect/sdk/domain/payment/order_approve_payment.rb +36 -33
  289. data/lib/ingenico/connect/sdk/domain/payment/order_invoice_data.rb +47 -44
  290. data/lib/ingenico/connect/sdk/domain/payment/order_line_details.rb +101 -98
  291. data/lib/ingenico/connect/sdk/domain/payment/order_output.rb +29 -26
  292. data/lib/ingenico/connect/sdk/domain/payment/order_references.rb +52 -49
  293. data/lib/ingenico/connect/sdk/domain/payment/order_references_approve_payment.rb +21 -18
  294. data/lib/ingenico/connect/sdk/domain/payment/order_type_information.rb +45 -42
  295. data/lib/ingenico/connect/sdk/domain/payment/payment.rb +48 -45
  296. data/lib/ingenico/connect/sdk/domain/payment/payment_account_on_file.rb +27 -24
  297. data/lib/ingenico/connect/sdk/domain/payment/payment_approval_response.rb +45 -42
  298. data/lib/ingenico/connect/sdk/domain/payment/payment_creation_output.rb +45 -42
  299. data/lib/ingenico/connect/sdk/domain/payment/payment_creation_references.rb +27 -24
  300. data/lib/ingenico/connect/sdk/domain/payment/payment_error_response.rb +37 -34
  301. data/lib/ingenico/connect/sdk/domain/payment/payment_output.rb +117 -114
  302. data/lib/ingenico/connect/sdk/domain/payment/payment_product3201_specific_output.rb +22 -19
  303. data/lib/ingenico/connect/sdk/domain/payment/payment_product771_specific_output.rb +21 -18
  304. data/lib/ingenico/connect/sdk/domain/payment/payment_product806_specific_output.rb +29 -26
  305. data/lib/ingenico/connect/sdk/domain/payment/payment_product836_specific_output.rb +21 -18
  306. data/lib/ingenico/connect/sdk/domain/payment/payment_product840_customer_account.rb +75 -72
  307. data/lib/ingenico/connect/sdk/domain/payment/payment_product840_specific_output.rb +49 -46
  308. data/lib/ingenico/connect/sdk/domain/payment/payment_product863_third_party_data.rb +57 -54
  309. data/lib/ingenico/connect/sdk/domain/payment/payment_references.rb +57 -54
  310. data/lib/ingenico/connect/sdk/domain/payment/payment_response.rb +9 -6
  311. data/lib/ingenico/connect/sdk/domain/payment/payment_status_output.rb +33 -30
  312. data/lib/ingenico/connect/sdk/domain/payment/personal_identification.rb +33 -30
  313. data/lib/ingenico/connect/sdk/domain/payment/personal_information.rb +47 -44
  314. data/lib/ingenico/connect/sdk/domain/payment/personal_name.rb +21 -18
  315. data/lib/ingenico/connect/sdk/domain/payment/protection_eligibility.rb +27 -24
  316. data/lib/ingenico/connect/sdk/domain/payment/redirect_data.rb +9 -6
  317. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_method_specific_input.rb +92 -89
  318. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_method_specific_input_base.rb +29 -26
  319. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_method_specific_output.rb +76 -73
  320. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product4101_specific_input.rb +33 -30
  321. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product4101_specific_input_base.rb +21 -18
  322. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product809_specific_input.rb +29 -26
  323. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product816_specific_input.rb +22 -19
  324. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product840_specific_input.rb +29 -26
  325. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product840_specific_input_base.rb +9 -6
  326. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product861_specific_input.rb +21 -18
  327. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product863_specific_input.rb +27 -24
  328. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product869_specific_input.rb +33 -30
  329. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product882_specific_input.rb +21 -18
  330. data/lib/ingenico/connect/sdk/domain/payment/redirection_data.rb +27 -24
  331. data/lib/ingenico/connect/sdk/domain/payment/refund_bank_method_specific_output.rb +9 -6
  332. data/lib/ingenico/connect/sdk/domain/payment/refund_card_method_specific_output.rb +28 -25
  333. data/lib/ingenico/connect/sdk/domain/payment/refund_cash_method_specific_output.rb +9 -6
  334. data/lib/ingenico/connect/sdk/domain/payment/refund_e_invoice_method_specific_output.rb +9 -6
  335. data/lib/ingenico/connect/sdk/domain/payment/refund_e_wallet_method_specific_output.rb +22 -19
  336. data/lib/ingenico/connect/sdk/domain/payment/refund_method_specific_output.rb +33 -30
  337. data/lib/ingenico/connect/sdk/domain/payment/refund_mobile_method_specific_output.rb +21 -18
  338. data/lib/ingenico/connect/sdk/domain/payment/refund_output.rb +69 -66
  339. data/lib/ingenico/connect/sdk/domain/payment/refund_payment_product840_customer_account.rb +33 -30
  340. data/lib/ingenico/connect/sdk/domain/payment/refund_payment_product840_specific_output.rb +22 -19
  341. data/lib/ingenico/connect/sdk/domain/payment/scheme_token_data.rb +52 -49
  342. data/lib/ingenico/connect/sdk/domain/payment/sdk_data_input.rb +58 -55
  343. data/lib/ingenico/connect/sdk/domain/payment/sdk_data_output.rb +21 -18
  344. data/lib/ingenico/connect/sdk/domain/payment/seller.rb +102 -99
  345. data/lib/ingenico/connect/sdk/domain/payment/sepa_direct_debit_payment_method_specific_input.rb +64 -61
  346. data/lib/ingenico/connect/sdk/domain/payment/sepa_direct_debit_payment_method_specific_input_base.rb +22 -19
  347. data/lib/ingenico/connect/sdk/domain/payment/sepa_direct_debit_payment_method_specific_output.rb +35 -32
  348. data/lib/ingenico/connect/sdk/domain/payment/sepa_direct_debit_payment_product771_specific_input.rb +28 -25
  349. data/lib/ingenico/connect/sdk/domain/payment/sepa_direct_debit_payment_product771_specific_input_base.rb +28 -25
  350. data/lib/ingenico/connect/sdk/domain/payment/shipping.rb +64 -61
  351. data/lib/ingenico/connect/sdk/domain/payment/shopping_cart.rb +59 -56
  352. data/lib/ingenico/connect/sdk/domain/payment/third_party_data.rb +22 -19
  353. data/lib/ingenico/connect/sdk/domain/payment/third_party_status_response.rb +21 -18
  354. data/lib/ingenico/connect/sdk/domain/payment/three_d_secure.rb +29 -26
  355. data/lib/ingenico/connect/sdk/domain/payment/three_d_secure_base.rb +9 -6
  356. data/lib/ingenico/connect/sdk/domain/payment/three_d_secure_data.rb +33 -30
  357. data/lib/ingenico/connect/sdk/domain/payment/three_d_secure_results.rb +112 -109
  358. data/lib/ingenico/connect/sdk/domain/payment/tokenize_payment_request.rb +21 -18
  359. data/lib/ingenico/connect/sdk/domain/payment/trustly_bank_account.rb +45 -42
  360. data/lib/ingenico/connect/sdk/domain/payment.rb +5 -0
  361. data/lib/ingenico/connect/sdk/domain/payout/abstract_payout_method_specific_input.rb +9 -6
  362. data/lib/ingenico/connect/sdk/domain/payout/approve_payout_request.rb +21 -18
  363. data/lib/ingenico/connect/sdk/domain/payout/bank_transfer_payout_method_specific_input.rb +56 -53
  364. data/lib/ingenico/connect/sdk/domain/payout/card_payout_method_specific_input.rb +47 -44
  365. data/lib/ingenico/connect/sdk/domain/payout/create_payout_request.rb +126 -123
  366. data/lib/ingenico/connect/sdk/domain/payout/find_payouts_response.rb +47 -44
  367. data/lib/ingenico/connect/sdk/domain/payout/payout_customer.rb +49 -46
  368. data/lib/ingenico/connect/sdk/domain/payout/payout_details.rb +36 -33
  369. data/lib/ingenico/connect/sdk/domain/payout/payout_error_response.rb +37 -34
  370. data/lib/ingenico/connect/sdk/domain/payout/payout_merchant.rb +21 -18
  371. data/lib/ingenico/connect/sdk/domain/payout/payout_recipient.rb +33 -30
  372. data/lib/ingenico/connect/sdk/domain/payout/payout_references.rb +33 -30
  373. data/lib/ingenico/connect/sdk/domain/payout/payout_response.rb +9 -6
  374. data/lib/ingenico/connect/sdk/domain/payout/payout_result.rb +35 -32
  375. data/lib/ingenico/connect/sdk/domain/payout.rb +5 -0
  376. data/lib/ingenico/connect/sdk/domain/product/abstract_indicator.rb +27 -24
  377. data/lib/ingenico/connect/sdk/domain/product/account_on_file.rb +48 -45
  378. data/lib/ingenico/connect/sdk/domain/product/account_on_file_attribute.rb +27 -24
  379. data/lib/ingenico/connect/sdk/domain/product/account_on_file_display_hints.rb +30 -27
  380. data/lib/ingenico/connect/sdk/domain/product/authentication_indicator.rb +9 -6
  381. data/lib/ingenico/connect/sdk/domain/product/boleto_bancario_requiredness_validator.rb +21 -18
  382. data/lib/ingenico/connect/sdk/domain/product/create_payment_product_session_request.rb +22 -19
  383. data/lib/ingenico/connect/sdk/domain/product/create_payment_product_session_response.rb +22 -19
  384. data/lib/ingenico/connect/sdk/domain/product/device_fingerprint_request.rb +21 -18
  385. data/lib/ingenico/connect/sdk/domain/product/device_fingerprint_response.rb +27 -24
  386. data/lib/ingenico/connect/sdk/domain/product/directory.rb +24 -21
  387. data/lib/ingenico/connect/sdk/domain/product/directory_entry.rb +47 -44
  388. data/lib/ingenico/connect/sdk/domain/product/empty_validator.rb +9 -6
  389. data/lib/ingenico/connect/sdk/domain/product/fixed_list_validator.rb +24 -21
  390. data/lib/ingenico/connect/sdk/domain/product/get_customer_details_request.rb +30 -27
  391. data/lib/ingenico/connect/sdk/domain/product/get_customer_details_response.rb +75 -72
  392. data/lib/ingenico/connect/sdk/domain/product/label_template_element.rb +27 -24
  393. data/lib/ingenico/connect/sdk/domain/product/length_validator.rb +27 -24
  394. data/lib/ingenico/connect/sdk/domain/product/mobile_payment_product_session302_specific_input.rb +33 -30
  395. data/lib/ingenico/connect/sdk/domain/product/mobile_payment_product_session302_specific_output.rb +21 -18
  396. data/lib/ingenico/connect/sdk/domain/product/payment_product.rb +203 -200
  397. data/lib/ingenico/connect/sdk/domain/product/payment_product302_specific_data.rb +24 -21
  398. data/lib/ingenico/connect/sdk/domain/product/payment_product320_specific_data.rb +30 -27
  399. data/lib/ingenico/connect/sdk/domain/product/payment_product863_specific_data.rb +24 -21
  400. data/lib/ingenico/connect/sdk/domain/product/payment_product_display_hints.rb +33 -30
  401. data/lib/ingenico/connect/sdk/domain/product/payment_product_field.rb +47 -44
  402. data/lib/ingenico/connect/sdk/domain/product/payment_product_field_data_restrictions.rb +28 -25
  403. data/lib/ingenico/connect/sdk/domain/product/payment_product_field_display_element.rb +45 -42
  404. data/lib/ingenico/connect/sdk/domain/product/payment_product_field_display_hints.rb +77 -74
  405. data/lib/ingenico/connect/sdk/domain/product/payment_product_field_form_element.rb +30 -27
  406. data/lib/ingenico/connect/sdk/domain/product/payment_product_field_tooltip.rb +27 -24
  407. data/lib/ingenico/connect/sdk/domain/product/payment_product_field_validators.rb +92 -89
  408. data/lib/ingenico/connect/sdk/domain/product/payment_product_group.rb +59 -56
  409. data/lib/ingenico/connect/sdk/domain/product/payment_product_group_response.rb +9 -6
  410. data/lib/ingenico/connect/sdk/domain/product/payment_product_groups.rb +24 -21
  411. data/lib/ingenico/connect/sdk/domain/product/payment_product_networks_response.rb +24 -21
  412. data/lib/ingenico/connect/sdk/domain/product/payment_product_response.rb +9 -6
  413. data/lib/ingenico/connect/sdk/domain/product/payment_products.rb +24 -21
  414. data/lib/ingenico/connect/sdk/domain/product/range_validator.rb +27 -24
  415. data/lib/ingenico/connect/sdk/domain/product/regular_expression_validator.rb +21 -18
  416. data/lib/ingenico/connect/sdk/domain/product/value_mapping_element.rb +38 -35
  417. data/lib/ingenico/connect/sdk/domain/product.rb +5 -0
  418. data/lib/ingenico/connect/sdk/domain/refund/approve_refund_request.rb +21 -18
  419. data/lib/ingenico/connect/sdk/domain/refund/bank_account_bban_refund.rb +33 -30
  420. data/lib/ingenico/connect/sdk/domain/refund/bank_refund_method_specific_input.rb +35 -32
  421. data/lib/ingenico/connect/sdk/domain/refund/find_refunds_response.rb +47 -44
  422. data/lib/ingenico/connect/sdk/domain/refund/refund_customer.rb +48 -45
  423. data/lib/ingenico/connect/sdk/domain/refund/refund_error_response.rb +37 -34
  424. data/lib/ingenico/connect/sdk/domain/refund/refund_references.rb +21 -18
  425. data/lib/ingenico/connect/sdk/domain/refund/refund_request.rb +49 -46
  426. data/lib/ingenico/connect/sdk/domain/refund/refund_response.rb +9 -6
  427. data/lib/ingenico/connect/sdk/domain/refund/refund_result.rb +35 -32
  428. data/lib/ingenico/connect/sdk/domain/refund/refunds_response.rb +24 -21
  429. data/lib/ingenico/connect/sdk/domain/refund.rb +5 -0
  430. data/lib/ingenico/connect/sdk/domain/riskassessments/contact_details_risk_assessment.rb +21 -18
  431. data/lib/ingenico/connect/sdk/domain/riskassessments/customer_account_risk_assessment.rb +27 -24
  432. data/lib/ingenico/connect/sdk/domain/riskassessments/customer_device_risk_assessment.rb +27 -24
  433. data/lib/ingenico/connect/sdk/domain/riskassessments/customer_risk_assessment.rb +77 -74
  434. data/lib/ingenico/connect/sdk/domain/riskassessments/merchant_risk_assessment.rb +21 -18
  435. data/lib/ingenico/connect/sdk/domain/riskassessments/order_risk_assessment.rb +43 -40
  436. data/lib/ingenico/connect/sdk/domain/riskassessments/personal_information_risk_assessment.rb +22 -19
  437. data/lib/ingenico/connect/sdk/domain/riskassessments/personal_name_risk_assessment.rb +9 -6
  438. data/lib/ingenico/connect/sdk/domain/riskassessments/risk_assessment.rb +48 -45
  439. data/lib/ingenico/connect/sdk/domain/riskassessments/risk_assessment_bank_account.rb +29 -26
  440. data/lib/ingenico/connect/sdk/domain/riskassessments/risk_assessment_card.rb +22 -19
  441. data/lib/ingenico/connect/sdk/domain/riskassessments/risk_assessment_response.rb +24 -21
  442. data/lib/ingenico/connect/sdk/domain/riskassessments/shipping_risk_assessment.rb +34 -31
  443. data/lib/ingenico/connect/sdk/domain/riskassessments.rb +5 -0
  444. data/lib/ingenico/connect/sdk/domain/services/bank_data.rb +45 -42
  445. data/lib/ingenico/connect/sdk/domain/services/bank_details.rb +29 -26
  446. data/lib/ingenico/connect/sdk/domain/services/bank_details_request.rb +9 -6
  447. data/lib/ingenico/connect/sdk/domain/services/bank_details_response.rb +43 -40
  448. data/lib/ingenico/connect/sdk/domain/services/convert_amount.rb +21 -18
  449. data/lib/ingenico/connect/sdk/domain/services/get_iin_details_request.rb +28 -25
  450. data/lib/ingenico/connect/sdk/domain/services/get_iin_details_response.rb +47 -44
  451. data/lib/ingenico/connect/sdk/domain/services/get_privacy_policy_response.rb +21 -18
  452. data/lib/ingenico/connect/sdk/domain/services/iin_detail.rb +27 -24
  453. data/lib/ingenico/connect/sdk/domain/services/payment_context.rb +46 -43
  454. data/lib/ingenico/connect/sdk/domain/services/swift.rb +75 -72
  455. data/lib/ingenico/connect/sdk/domain/services/test_connection.rb +21 -18
  456. data/lib/ingenico/connect/sdk/domain/services.rb +5 -0
  457. data/lib/ingenico/connect/sdk/domain/sessions/payment_product_filters_client_session.rb +29 -26
  458. data/lib/ingenico/connect/sdk/domain/sessions/session_request.rb +31 -28
  459. data/lib/ingenico/connect/sdk/domain/sessions/session_response.rb +54 -51
  460. data/lib/ingenico/connect/sdk/domain/sessions.rb +5 -0
  461. data/lib/ingenico/connect/sdk/domain/token/abstract_token.rb +21 -18
  462. data/lib/ingenico/connect/sdk/domain/token/approve_token_request.rb +9 -6
  463. data/lib/ingenico/connect/sdk/domain/token/contact_details_token.rb +9 -6
  464. data/lib/ingenico/connect/sdk/domain/token/create_token_request.rb +55 -52
  465. data/lib/ingenico/connect/sdk/domain/token/create_token_response.rb +33 -30
  466. data/lib/ingenico/connect/sdk/domain/token/creditor.rb +81 -78
  467. data/lib/ingenico/connect/sdk/domain/token/customer_token.rb +29 -26
  468. data/lib/ingenico/connect/sdk/domain/token/customer_token_with_contact_details.rb +22 -19
  469. data/lib/ingenico/connect/sdk/domain/token/debtor.rb +81 -78
  470. data/lib/ingenico/connect/sdk/domain/token/mandate_approval.rb +33 -30
  471. data/lib/ingenico/connect/sdk/domain/token/mandate_non_sepa_direct_debit.rb +29 -26
  472. data/lib/ingenico/connect/sdk/domain/token/mandate_sepa_direct_debit.rb +22 -19
  473. data/lib/ingenico/connect/sdk/domain/token/mandate_sepa_direct_debit_with_mandate_id.rb +21 -18
  474. data/lib/ingenico/connect/sdk/domain/token/mandate_sepa_direct_debit_without_creditor.rb +54 -51
  475. data/lib/ingenico/connect/sdk/domain/token/personal_information_token.rb +22 -19
  476. data/lib/ingenico/connect/sdk/domain/token/personal_name_token.rb +9 -6
  477. data/lib/ingenico/connect/sdk/domain/token/token_card.rb +29 -26
  478. data/lib/ingenico/connect/sdk/domain/token/token_card_data.rb +34 -31
  479. data/lib/ingenico/connect/sdk/domain/token/token_e_wallet.rb +29 -26
  480. data/lib/ingenico/connect/sdk/domain/token/token_e_wallet_data.rb +21 -18
  481. data/lib/ingenico/connect/sdk/domain/token/token_non_sepa_direct_debit.rb +29 -26
  482. data/lib/ingenico/connect/sdk/domain/token/token_non_sepa_direct_debit_payment_product705_specific_data.rb +28 -25
  483. data/lib/ingenico/connect/sdk/domain/token/token_non_sepa_direct_debit_payment_product730_specific_data.rb +22 -19
  484. data/lib/ingenico/connect/sdk/domain/token/token_response.rb +61 -58
  485. data/lib/ingenico/connect/sdk/domain/token/token_sepa_direct_debit.rb +29 -26
  486. data/lib/ingenico/connect/sdk/domain/token/token_sepa_direct_debit_without_creditor.rb +29 -26
  487. data/lib/ingenico/connect/sdk/domain/token/update_token_request.rb +49 -46
  488. data/lib/ingenico/connect/sdk/domain/token.rb +5 -0
  489. data/lib/ingenico/connect/sdk/domain.rb +1 -0
  490. data/lib/ingenico/connect/sdk/endpoint_configuration.rb +120 -116
  491. data/lib/ingenico/connect/sdk/exceptions.rb +1 -8
  492. data/lib/ingenico/connect/sdk/factory.rb +193 -182
  493. data/lib/ingenico/connect/sdk/global_collect_exception.rb +15 -10
  494. data/lib/ingenico/connect/sdk/idempotence_exception.rb +23 -19
  495. data/lib/ingenico/connect/sdk/logging/communicator_logger.rb +20 -16
  496. data/lib/ingenico/connect/sdk/logging/log_message_builder.rb +73 -67
  497. data/lib/ingenico/connect/sdk/logging/logging_capable.rb +12 -12
  498. data/lib/ingenico/connect/sdk/logging/logging_util.rb +304 -297
  499. data/lib/ingenico/connect/sdk/logging/obfuscation/body_obfuscator.rb +83 -79
  500. data/lib/ingenico/connect/sdk/logging/obfuscation/header_obfuscator.rb +42 -38
  501. data/lib/ingenico/connect/sdk/logging/obfuscation/obfuscation_capable.rb +17 -12
  502. data/lib/ingenico/connect/sdk/logging/obfuscation/obfuscation_rule.rb +40 -36
  503. data/lib/ingenico/connect/sdk/logging/obfuscation.rb +1 -0
  504. data/lib/ingenico/connect/sdk/logging/request_log_message_builder.rb +42 -34
  505. data/lib/ingenico/connect/sdk/logging/response_log_message_builder.rb +35 -29
  506. data/lib/ingenico/connect/sdk/logging/ruby_communicator_logger.rb +51 -47
  507. data/lib/ingenico/connect/sdk/logging/stdout_communicator_logger.rb +26 -22
  508. data/lib/ingenico/connect/sdk/logging.rb +1 -14
  509. data/lib/ingenico/connect/sdk/marshaller.rb +22 -19
  510. data/lib/ingenico/connect/sdk/marshaller_syntax_exception.rb +7 -4
  511. data/lib/ingenico/connect/sdk/merchant/captures/captures_client.rb +75 -72
  512. data/lib/ingenico/connect/sdk/merchant/captures.rb +5 -0
  513. data/lib/ingenico/connect/sdk/merchant/disputes/disputes_client.rb +134 -131
  514. data/lib/ingenico/connect/sdk/merchant/disputes/upload_file_request.rb +17 -14
  515. data/lib/ingenico/connect/sdk/merchant/disputes.rb +5 -0
  516. data/lib/ingenico/connect/sdk/merchant/files/files_client.rb +43 -40
  517. data/lib/ingenico/connect/sdk/merchant/files.rb +5 -0
  518. data/lib/ingenico/connect/sdk/merchant/hostedcheckouts/hostedcheckouts_client.rb +98 -95
  519. data/lib/ingenico/connect/sdk/merchant/hostedcheckouts.rb +5 -0
  520. data/lib/ingenico/connect/sdk/merchant/hostedmandatemanagements/hostedmandatemanagements_client.rb +70 -67
  521. data/lib/ingenico/connect/sdk/merchant/hostedmandatemanagements.rb +5 -0
  522. data/lib/ingenico/connect/sdk/merchant/installments/installments_client.rb +41 -38
  523. data/lib/ingenico/connect/sdk/merchant/installments.rb +5 -0
  524. data/lib/ingenico/connect/sdk/merchant/mandates/mandates_client.rb +191 -188
  525. data/lib/ingenico/connect/sdk/merchant/mandates.rb +5 -0
  526. data/lib/ingenico/connect/sdk/merchant/merchant_client.rb +110 -107
  527. data/lib/ingenico/connect/sdk/merchant/payments/find_payments_params.rb +35 -32
  528. data/lib/ingenico/connect/sdk/merchant/payments/payments_client.rb +519 -516
  529. data/lib/ingenico/connect/sdk/merchant/payments.rb +5 -0
  530. data/lib/ingenico/connect/sdk/merchant/payouts/find_payouts_params.rb +26 -23
  531. data/lib/ingenico/connect/sdk/merchant/payouts/payouts_client.rb +186 -183
  532. data/lib/ingenico/connect/sdk/merchant/payouts.rb +5 -0
  533. data/lib/ingenico/connect/sdk/merchant/productgroups/find_productgroups_params.rb +49 -46
  534. data/lib/ingenico/connect/sdk/merchant/productgroups/get_productgroup_params.rb +49 -46
  535. data/lib/ingenico/connect/sdk/merchant/productgroups/productgroups_client.rb +101 -98
  536. data/lib/ingenico/connect/sdk/merchant/productgroups.rb +5 -0
  537. data/lib/ingenico/connect/sdk/merchant/products/directory_params.rb +20 -17
  538. data/lib/ingenico/connect/sdk/merchant/products/find_products_params.rb +49 -46
  539. data/lib/ingenico/connect/sdk/merchant/products/get_product_params.rb +44 -41
  540. data/lib/ingenico/connect/sdk/merchant/products/networks_params.rb +26 -23
  541. data/lib/ingenico/connect/sdk/merchant/products/products_client.rb +223 -220
  542. data/lib/ingenico/connect/sdk/merchant/products.rb +5 -0
  543. data/lib/ingenico/connect/sdk/merchant/refunds/find_refunds_params.rb +35 -32
  544. data/lib/ingenico/connect/sdk/merchant/refunds/refunds_client.rb +157 -154
  545. data/lib/ingenico/connect/sdk/merchant/refunds.rb +5 -0
  546. data/lib/ingenico/connect/sdk/merchant/riskassessments/riskassessments_client.rb +68 -65
  547. data/lib/ingenico/connect/sdk/merchant/riskassessments.rb +5 -0
  548. data/lib/ingenico/connect/sdk/merchant/services/convert_amount_params.rb +23 -20
  549. data/lib/ingenico/connect/sdk/merchant/services/privacypolicy_params.rb +20 -17
  550. data/lib/ingenico/connect/sdk/merchant/services/services_client.rb +145 -142
  551. data/lib/ingenico/connect/sdk/merchant/services.rb +5 -0
  552. data/lib/ingenico/connect/sdk/merchant/sessions/sessions_client.rb +41 -38
  553. data/lib/ingenico/connect/sdk/merchant/sessions.rb +5 -0
  554. data/lib/ingenico/connect/sdk/merchant/tokens/delete_token_params.rb +17 -14
  555. data/lib/ingenico/connect/sdk/merchant/tokens/tokens_client.rb +159 -156
  556. data/lib/ingenico/connect/sdk/merchant/tokens.rb +5 -0
  557. data/lib/ingenico/connect/sdk/merchant.rb +5 -0
  558. data/lib/ingenico/connect/sdk/meta_data_provider.rb +151 -146
  559. data/lib/ingenico/connect/sdk/multipart_form_data_object.rb +36 -33
  560. data/lib/ingenico/connect/sdk/multipart_form_data_request.rb +10 -6
  561. data/lib/ingenico/connect/sdk/not_found_exception.rb +14 -11
  562. data/lib/ingenico/connect/sdk/param_request.rb +11 -8
  563. data/lib/ingenico/connect/sdk/pooled_connection.rb +20 -15
  564. data/lib/ingenico/connect/sdk/proxy_configuration.rb +63 -61
  565. data/lib/ingenico/connect/sdk/reference_exception.rb +14 -9
  566. data/lib/ingenico/connect/sdk/request_header.rb +52 -44
  567. data/lib/ingenico/connect/sdk/request_param.rb +22 -19
  568. data/lib/ingenico/connect/sdk/response_exception.rb +46 -41
  569. data/lib/ingenico/connect/sdk/response_header.rb +63 -55
  570. data/lib/ingenico/connect/sdk/session.rb +34 -31
  571. data/lib/ingenico/connect/sdk/uploadable_file.rb +23 -20
  572. data/lib/ingenico/connect/sdk/validation_exception.rb +14 -9
  573. data/lib/ingenico/connect/sdk/webhooks/api_version_mismatch_exception.rb +19 -15
  574. data/lib/ingenico/connect/sdk/webhooks/in_memory_secret_key_store.rb +49 -44
  575. data/lib/ingenico/connect/sdk/webhooks/secret_key_not_available_exception.rb +18 -12
  576. data/lib/ingenico/connect/sdk/webhooks/secret_key_store.rb +15 -11
  577. data/lib/ingenico/connect/sdk/webhooks/signature_validation_exception.rb +17 -14
  578. data/lib/ingenico/connect/sdk/webhooks/signature_validator.rb +83 -0
  579. data/lib/ingenico/connect/sdk/webhooks/webhooks.rb +20 -15
  580. data/lib/ingenico/connect/sdk/webhooks/webhooks_event.rb +60 -50
  581. data/lib/ingenico/connect/sdk/webhooks/webhooks_helper.rb +43 -94
  582. data/lib/ingenico/connect/sdk/webhooks/webhooks_helper_builder.rb +22 -17
  583. data/lib/ingenico/connect/sdk/webhooks.rb +1 -11
  584. data/lib/ingenico/connect/sdk.rb +1 -30
  585. data/spec/integration/connection_pooling_spec.rb +1 -1
  586. data/spec/lib/defaultimpl/default_connection_logger_spec.rb +17 -17
  587. data/spec/lib/webhooks/webhooks_spec.rb +2 -1
  588. metadata +40 -2
@@ -1,55 +1,60 @@
1
1
  require 'concurrent'
2
2
  require 'singleton'
3
+ require 'ingenico/connect/sdk/webhooks/secret_key_not_available_exception'
4
+ require 'ingenico/connect/sdk/webhooks/secret_key_store'
3
5
 
4
- module Ingenico::Connect::SDK
5
- module Webhooks
6
- # An in-memory secret key store. This implementation can be used
7
- # in applications where secret keys are specified at application
8
- # startup. Thread-safe.
9
- class InMemorySecretKeyStore
6
+ module Ingenico
7
+ module Connect
8
+ module SDK
9
+ module Webhooks
10
+ # An in-memory secret key store. This implementation can be used
11
+ # in applications where secret keys are specified at application
12
+ # startup. Thread-safe.
13
+ class InMemorySecretKeyStore
14
+ include Singleton
15
+ include SecretKeyStore
10
16
 
11
- include Singleton
12
- include SecretKeyStore
17
+ # Creates new InMemorySecretKeyStore
18
+ def initialize
19
+ # NOTE: use Map instead of Hash to provide better performance
20
+ # under high concurrency.
21
+ @store = Concurrent::Map.new
22
+ end
13
23
 
14
- # Creates new InMemorySecretKeyStore
15
- def initialize
16
- # NOTE: use Map instead of Hash to provide better performance
17
- # under high concurrency.
18
- @store = Concurrent::Map.new
19
- end
24
+ # Retrieves the secret key corresponding to the given key id
25
+ #
26
+ # @param key_id [String] key id of the secret key
27
+ # @raise [Ingenico::Connect::SDK::Webhooks::SecretKeyNotAvailableException] if the secret key for the given key id is not available.
28
+ def get_secret_key(key_id)
29
+ if (secret_key = @store.get(key_id)).nil?
30
+ msg = "could not find secret key for key id " + key_id
31
+ raise SecretKeyNotAvailableException.new(message: msg, key_id: key_id)
32
+ end
33
+ secret_key
34
+ end
20
35
 
21
- # Retrieves the secret key corresponding to the given key id
22
- #
23
- # @param key_id [String] key id of the secret key
24
- # @raise [Ingenico::Connect::SDK::Webhooks::SecretKeyNotAvailableException] if the secret key for the given key id is not available.
25
- def get_secret_key(key_id)
26
- if (secret_key = @store.get(key_id)).nil?
27
- msg = "could not find secret key for key id " + key_id
28
- raise SecretKeyNotAvailableException.new(message: msg, key_id: key_id)
29
- end
30
- secret_key
31
- end
36
+ # Stores the given secret key for the given key id.
37
+ #
38
+ # @param key_id [String] key id of the secret key
39
+ # @param secret_key [String] the secret key to be stored
40
+ def store_secret_key(key_id, secret_key)
41
+ raise ArgumentError if key_id.nil? or key_id.strip.empty?
42
+ raise ArgumentError if secret_key.nil? or secret_key.strip.empty?
43
+ @store.put(key_id, secret_key)
44
+ end
32
45
 
33
- # Stores the given secret key for the given key id.
34
- #
35
- # @param key_id [String] key id of the secret key
36
- # @param secret_key [String] the secret key to be stored
37
- def store_secret_key(key_id, secret_key)
38
- raise ArgumentError if key_id.nil? or key_id.strip.empty?
39
- raise ArgumentError if secret_key.nil? or secret_key.strip.empty?
40
- @store.put(key_id, secret_key)
41
- end
46
+ # Removes the secret key for the given key id.
47
+ #
48
+ # @param key_id [String] the key id whose corresponding secret should be removed from the store
49
+ def remove_secret_key(key_id)
50
+ @store.delete(key_id)
51
+ end
42
52
 
43
- # Removes the secret key for the given key id.
44
- #
45
- # @param key_id [String] the key id whose corresponding secret should be removed from the store
46
- def remove_secret_key(key_id)
47
- @store.delete(key_id)
48
- end
49
-
50
- # Removes all stored secret keys from the store
51
- def clear
52
- @store.clear
53
+ # Removes all stored secret keys from the store
54
+ def clear
55
+ @store.clear
56
+ end
57
+ end
53
58
  end
54
59
  end
55
60
  end
@@ -1,17 +1,23 @@
1
- module Ingenico::Connect::SDK
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 'ingenico/connect/sdk/webhooks/signature_validation_exception'
7
2
 
8
- def initialize(args)
9
- raise ArgumentError if (key_id = args.delete(:key_id)).nil? # key_id is mandatory
10
- super(args)
11
- @key_id = key_id
12
- end
3
+ module Ingenico
4
+ module Connect
5
+ module SDK
6
+ module Webhooks
7
+ # Raised when an error caused a secret to become not available.
8
+ #
9
+ # @attr_reader [String] key_id
10
+ class SecretKeyNotAvailableException < SignatureValidationException
11
+
12
+ def initialize(args)
13
+ raise ArgumentError if (key_id = args.delete(:key_id)).nil? # key_id is mandatory
14
+ super(args)
15
+ @key_id = key_id
16
+ end
13
17
 
14
- attr_reader :key_id
18
+ attr_reader :key_id
19
+ end
20
+ end
15
21
  end
16
22
  end
17
23
  end
@@ -1,15 +1,19 @@
1
- module Ingenico::Connect::SDK
2
- module Webhooks
3
- # An abstract store of secret keys. Implementation can store secret keys in a database,
4
- # on disk, etc. Should be Thread-safe.
5
- module SecretKeyStore
1
+ module Ingenico
2
+ module Connect
3
+ module SDK
4
+ module Webhooks
5
+ # An abstract store of secret keys. Implementation can store secret keys in a database,
6
+ # on disk, etc. Should be Thread-safe.
7
+ module SecretKeyStore
6
8
 
7
- # Retrieve secret key for given key id
8
- #
9
- # @param key_id [String] key id of the secret key
10
- # @raise [Ingenico::Connect::SDK::Webhooks::SecretKeyNotAvailableException] if the secret key for the given key id is not available.
11
- def get_secret_key(key_id)
12
- raise NotImplementedError
9
+ # Retrieve secret key for given key id
10
+ #
11
+ # @param key_id [String] key id of the secret key
12
+ # @raise [Ingenico::Connect::SDK::Webhooks::SecretKeyNotAvailableException] if the secret key for the given key id is not available.
13
+ def get_secret_key(key_id)
14
+ raise NotImplementedError
15
+ end
16
+ end
13
17
  end
14
18
  end
15
19
  end
@@ -1,18 +1,21 @@
1
- module Ingenico::Connect::SDK
2
- module Webhooks
1
+ module Ingenico
2
+ module Connect
3
+ module SDK
4
+ module Webhooks
5
+ # Raised when an error occurred when validating Webhooks signatures
6
+ class SignatureValidationException < RuntimeError
3
7
 
4
- # Raised when an error occurred when validating Webhooks signatures
5
- class SignatureValidationException < RuntimeError
6
-
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?
8
+ # Creates a new SignatureValidationException
9
+ #
10
+ # @param [Hash] args the options to create the Exception with
11
+ # @option args [String] :message the error message
12
+ # @option args [RuntimeError] :cause an Error object that causes the Exception
13
+ def initialize(args)
14
+ super(args[:message]) # NOTE: can be nil
15
+ # store backtrace info if exception given
16
+ set_backtrace(args[:cause].backtrace) unless args[:cause].nil?
17
+ end
18
+ end
16
19
  end
17
20
  end
18
21
  end
@@ -0,0 +1,83 @@
1
+ require 'base64'
2
+ require 'openssl'
3
+ require 'ingenico/connect/sdk/webhooks/signature_validation_exception'
4
+
5
+ module Ingenico
6
+ module Connect
7
+ module SDK
8
+ module Webhooks
9
+
10
+ # Validator for webhooks signatures. Thread-safe.
11
+ class SignatureValidator
12
+ def initialize(secret_key_store)
13
+ raise ArgumentError if secret_key_store.nil?
14
+ @secret_key_store = secret_key_store
15
+ end
16
+
17
+ # Validates incoming request using request headers
18
+ #
19
+ # @param body [String] body of the request
20
+ # @param request_headers [Array<Ingenico::Connect::SDK::RequestHeader>] headers of the request
21
+ def validate(body, request_headers)
22
+ validate_body(body, request_headers)
23
+ end
24
+
25
+ private
26
+
27
+ HEADER_SIGNATURE = 'X-GCS-Signature'.freeze
28
+ HEADER_KEY_ID = 'X-GCS-KeyId'.freeze
29
+ HMAC_SCHEME = 'SHA256'.freeze
30
+
31
+ # Validates the body using given request headers
32
+ #
33
+ # @param body [String] body of the request
34
+ # @param request_headers [Array<Ingenico::Connect::SDK::RequestHeader>] headers of the request
35
+ def validate_body(body, request_headers)
36
+ signature = get_header_value(request_headers, HEADER_SIGNATURE)
37
+ key_id = get_header_value(request_headers, HEADER_KEY_ID)
38
+ secret_key = @secret_key_store.get_secret_key(key_id)
39
+ digest = OpenSSL::Digest.new(HMAC_SCHEME)
40
+ hmac = OpenSSL::HMAC.digest(digest, secret_key, body)
41
+ expected_signature = Base64.strict_encode64(hmac).strip
42
+
43
+ unless equal_signatures?(signature, expected_signature)
44
+ msg = "failed to validate signature '#{signature}'"
45
+ raise SignatureValidationException.new(message: msg)
46
+ end
47
+ end
48
+
49
+ # Checks two signatures
50
+ #
51
+ # @param signature [String]
52
+ # @param expected_signature [String]
53
+ def equal_signatures?(signature, expected_signature)
54
+ # NOTE: copy the signatures to avoid runtime tampering via references
55
+ signature = signature.dup.freeze
56
+ expected_signature = expected_signature.dup.freeze
57
+ # NOTE: do not use simple equality comparision to avoid side channel attack
58
+ limit = [signature.length, expected_signature.length, 256].max
59
+ limit.times.inject(true) do |flag, idx|
60
+ # NOTE: this block is constructed to take constant time to run
61
+ flag &= signature[idx] == expected_signature[idx]
62
+ # [] returns nil if idx >= the length of the String
63
+ end
64
+ end
65
+
66
+ # Retrieves header value from the request headers whose header name matches the given parameter
67
+ def get_header_value(request_headers, header_name)
68
+ if (right_header = request_headers.select { |h| h.name.casecmp(header_name) == 0 }).size != 1
69
+ msg = if right_header.empty?
70
+ "could not find header '#{header_name}'"
71
+ else
72
+ # more than 2 headers
73
+ "encountered multiple occurrences of header '#{header_name}'"
74
+ end
75
+ raise SignatureValidationException.new(message: msg)
76
+ end
77
+ right_header.first.value
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -1,20 +1,25 @@
1
- module Ingenico::Connect::SDK
2
- module Webhooks
3
- # Ingenico ePayments platform factory for several webhooks components
4
- module Webhooks
1
+ require 'ingenico/connect/sdk/defaultimpl/default_marshaller'
2
+ require 'ingenico/connect/sdk/webhooks/webhooks_helper_builder'
5
3
 
6
- # Creates a WebhooksHelperBuilder that uses the
7
- # given SecretkeyStore
8
- def self.create_helper_builder(secret_key_store)
9
- WebhooksHelperBuilder.new
10
- .with_marshaller(DefaultMarshaller.INSTANCE)
11
- .with_secret_key_store(secret_key_store)
12
- end
4
+ module Ingenico
5
+ module Connect
6
+ module SDK
7
+ module Webhooks
8
+ # Ingenico ePayments platform factory for several webhooks components
9
+ module Webhooks
10
+
11
+ # Creates a WebhooksHelperBuilder that uses the given SecretKeyStore
12
+ def self.create_helper_builder(secret_key_store)
13
+ WebhooksHelperBuilder.new
14
+ .with_marshaller(DefaultMarshaller.INSTANCE)
15
+ .with_secret_key_store(secret_key_store)
16
+ end
13
17
 
14
- # Creates a WebhooksHelper that uses the given
15
- # SecretkeyStore.
16
- def self.create_helper(secret_key_store)
17
- create_helper_builder(secret_key_store).build
18
+ # Creates a WebhooksHelper that uses the given SecretKeyStore.
19
+ def self.create_helper(secret_key_store)
20
+ create_helper_builder(secret_key_store).build
21
+ end
22
+ end
18
23
  end
19
24
  end
20
25
  end
@@ -1,58 +1,68 @@
1
- module Ingenico::Connect::SDK
2
- module Webhooks
1
+ require 'ingenico/connect/sdk/data_object'
2
+ require 'ingenico/connect/sdk/domain/dispute/dispute_response'
3
+ require 'ingenico/connect/sdk/domain/payment/payment_response'
4
+ require 'ingenico/connect/sdk/domain/payout/payout_response'
5
+ require 'ingenico/connect/sdk/domain/refund/refund_response'
6
+ require 'ingenico/connect/sdk/domain/token/token_response'
3
7
 
4
- # @attr [String] api_version
5
- # @attr [String] id
6
- # @attr [String] created
7
- # @attr [String] merchant_id
8
- # @attr [String] type
9
- # @attr [Ingenico::Connect::SDK::Domain::Payment::PaymentResponse] payment
10
- # @attr [Ingenico::Connect::SDK::Domain::Payout::PayoutResponse] refund
11
- # @attr [Ingenico::Connect::SDK::Domain::Refund::RefundResponse] payout
12
- # @attr [Ingenico::Connect::SDK::Domain::Token::TokenResponse] token
13
- # @attr [Ingenico::Connect::SDK::Domain::Dispute::DisputeResponse] dispute
14
- class WebhooksEvent < Ingenico::Connect::SDK::DataObject
8
+ module Ingenico
9
+ module Connect
10
+ module SDK
11
+ module Webhooks
12
+ # @attr [String] api_version
13
+ # @attr [String] id
14
+ # @attr [String] created
15
+ # @attr [String] merchant_id
16
+ # @attr [String] type
17
+ # @attr [Ingenico::Connect::SDK::Domain::Payment::PaymentResponse] payment
18
+ # @attr [Ingenico::Connect::SDK::Domain::Refund::RefundResponse] refund
19
+ # @attr [Ingenico::Connect::SDK::Domain::Payout::PayoutResponse] payout
20
+ # @attr [Ingenico::Connect::SDK::Domain::Token::TokenResponse] token
21
+ # @attr [Ingenico::Connect::SDK::Domain::Dispute::DisputeResponse] dispute
22
+ class WebhooksEvent < Ingenico::Connect::SDK::DataObject
15
23
 
16
- attr_accessor :api_version
17
- attr_accessor :id
18
- attr_accessor :created
19
- attr_accessor :merchant_id
20
- attr_accessor :type
24
+ attr_accessor :api_version
25
+ attr_accessor :id
26
+ attr_accessor :created
27
+ attr_accessor :merchant_id
28
+ attr_accessor :type
21
29
 
22
- attr_accessor :payment
23
- attr_accessor :refund
24
- attr_accessor :payout
25
- attr_accessor :token
26
- attr_accessor :dispute
30
+ attr_accessor :payment
31
+ attr_accessor :refund
32
+ attr_accessor :payout
33
+ attr_accessor :token
34
+ attr_accessor :dispute
27
35
 
28
- # @return [Hash]
29
- def to_h
30
- hash = super
31
- hash['apiVersion'] = @api_version unless @api_version.nil?
32
- hash['id'] = @id unless @id.nil?
33
- hash['created'] = @created unless @created.nil?
34
- hash['merchantId'] = @merchant_id unless @merchant_id.nil?
35
- hash['type'] = @type unless @type.nil?
36
- hash['payment'] = @payment.to_h unless @payment.nil?
37
- hash['refund'] = @refund.to_h unless @refund.nil?
38
- hash['payout'] = @payout.to_h unless @payout.nil?
39
- hash['token'] = @token.to_h unless @token.nil?
40
- hash['dispute'] = @dispute.to_h unless @dispute.nil?
41
- hash
42
- end
36
+ # @return [Hash]
37
+ def to_h
38
+ hash = super
39
+ hash['apiVersion'] = @api_version unless @api_version.nil?
40
+ hash['id'] = @id unless @id.nil?
41
+ hash['created'] = @created unless @created.nil?
42
+ hash['merchantId'] = @merchant_id unless @merchant_id.nil?
43
+ hash['type'] = @type unless @type.nil?
44
+ hash['payment'] = @payment.to_h unless @payment.nil?
45
+ hash['refund'] = @refund.to_h unless @refund.nil?
46
+ hash['payout'] = @payout.to_h unless @payout.nil?
47
+ hash['token'] = @token.to_h unless @token.nil?
48
+ hash['dispute'] = @dispute.to_h unless @dispute.nil?
49
+ hash
50
+ end
43
51
 
44
- def from_hash(hash)
45
- super
46
- @api_version = hash['apiVersion'] if hash.has_key? 'apiVersion'
47
- @id = hash['id'] if hash.has_key? 'id'
48
- @created = hash['created'] if hash.has_key? 'created'
49
- @merchant_id = hash['merchantId'] if hash.has_key? 'merchantId'
50
- @type = hash['type'] if hash.has_key? 'type'
51
- @payment = Ingenico::Connect::SDK::Domain::Payment::PaymentResponse.new_from_hash(hash['payment']) if hash.has_key? 'payment'
52
- @refund = Ingenico::Connect::SDK::Domain::Refund::RefundResponse.new_from_hash(hash['refund']) if hash.has_key? 'refund'
53
- @payout = Ingenico::Connect::SDK::Domain::Payout::PayoutResponse.new_from_hash(hash['payout']) if hash.has_key? 'payout'
54
- @token = Ingenico::Connect::SDK::Domain::Token::TokenResponse.new_from_hash(hash['token']) if hash.has_key? 'token'
55
- @dispute = Ingenico::Connect::SDK::Domain::Dispute::DisputeResponse.new_from_hash(hash['dispute']) if hash.has_key? 'dispute'
52
+ def from_hash(hash)
53
+ super
54
+ @api_version = hash['apiVersion'] if hash.has_key? 'apiVersion'
55
+ @id = hash['id'] if hash.has_key? 'id'
56
+ @created = hash['created'] if hash.has_key? 'created'
57
+ @merchant_id = hash['merchantId'] if hash.has_key? 'merchantId'
58
+ @type = hash['type'] if hash.has_key? 'type'
59
+ @payment = Ingenico::Connect::SDK::Domain::Payment::PaymentResponse.new_from_hash(hash['payment']) if hash.has_key? 'payment'
60
+ @refund = Ingenico::Connect::SDK::Domain::Refund::RefundResponse.new_from_hash(hash['refund']) if hash.has_key? 'refund'
61
+ @payout = Ingenico::Connect::SDK::Domain::Payout::PayoutResponse.new_from_hash(hash['payout']) if hash.has_key? 'payout'
62
+ @token = Ingenico::Connect::SDK::Domain::Token::TokenResponse.new_from_hash(hash['token']) if hash.has_key? 'token'
63
+ @dispute = Ingenico::Connect::SDK::Domain::Dispute::DisputeResponse.new_from_hash(hash['dispute']) if hash.has_key? 'dispute'
64
+ end
65
+ end
56
66
  end
57
67
  end
58
68
  end
@@ -1,98 +1,47 @@
1
- require 'openssl'
2
- require 'base64'
3
-
4
- module Ingenico::Connect::SDK
5
- module Webhooks
6
-
7
- # Ingenico ePayments platform webhooks Helper, Thread-safe.
8
- class WebhooksHelper
9
- def initialize(marshaller, secret_key_store)
10
- raise ArgumentError if marshaller.nil?
11
- raise ArgumentError if secret_key_store.nil?
12
- @marshaller = marshaller
13
- @secret_key_store = secret_key_store
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<Ingenico::Connect::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<Ingenico::Connect::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<Ingenico::Connect::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.new(message: msg)
58
- end
59
- end
60
-
61
- # Checks two signatures
62
- #
63
- # @param signature [String]
64
- # @param expected_signature [String]
65
- def equal_signatures?(signature, expected_signature)
66
- # NOTE: copy the signatures to avoid runtime tampering via references
67
- signature = signature.dup.freeze
68
- expected_signature = expected_signature.dup.freeze
69
- # NOTE: do not use simple equality comparision to avoid side channel attack
70
- limit = [signature.length, expected_signature.length, 256].max
71
- limit.times.inject(true) do |flag, idx|
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
75
- end
76
- end
77
-
78
- # general utility methods
79
-
80
- # Returns true if the client API version and the webhooks event API version matches
81
- def validate_api_version(event)
82
- raise ApiVersionMismatchException.new(event.api_version, Client.API_VERSION) unless Client.API_VERSION.eql?(event.api_version)
83
- end
84
-
85
- # Retrieves header value from the request headers whose header name matches the given parameter
86
- def get_header_value(request_headers, header_name)
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 # more than 2 headers
91
- "encountered multiple occurrences of header '#{header_name}'"
92
- end
93
- raise SignatureValidationException.new(message: msg)
1
+ require 'ingenico/connect/sdk/client'
2
+ require 'ingenico/connect/sdk/webhooks/api_version_mismatch_exception'
3
+ require 'ingenico/connect/sdk/webhooks/signature_validator'
4
+ require 'ingenico/connect/sdk/webhooks/webhooks_event'
5
+
6
+ module Ingenico
7
+ module Connect
8
+ module SDK
9
+ module Webhooks
10
+
11
+ # Ingenico ePayments platform webhooks Helper, Thread-safe.
12
+ class WebhooksHelper
13
+ def initialize(marshaller, secret_key_store)
14
+ raise ArgumentError if marshaller.nil?
15
+ @marshaller = marshaller
16
+ @signature_validator = SignatureValidator.new(secret_key_store)
17
+ end
18
+
19
+ # Unmarshals the given body, while also validating it using the given request headers.
20
+ #
21
+ # @param body [String] body of the request
22
+ # @param request_headers [Array<Ingenico::Connect::SDK::RequestHeader>] headers of the request
23
+ def unmarshal(body, request_headers)
24
+ validate(body, request_headers)
25
+ event = @marshaller.unmarshal(body, WebhooksEvent)
26
+ validate_api_version(event)
27
+ event
28
+ end
29
+
30
+ # Validates incoming request using request headers
31
+ #
32
+ # @param body [String] body of the request
33
+ # @param request_headers [Array<Ingenico::Connect::SDK::RequestHeader>] headers of the request
34
+ def validate(body, request_headers)
35
+ @signature_validator.validate(body, request_headers)
36
+ end
37
+
38
+ private
39
+
40
+ # Returns true if the client API version and the webhooks event API version matches
41
+ def validate_api_version(event)
42
+ raise ApiVersionMismatchException.new(event.api_version, Client.API_VERSION) unless Client.API_VERSION.eql?(event.api_version)
43
+ end
94
44
  end
95
- right_header.first.value
96
45
  end
97
46
  end
98
47
  end
@@ -1,24 +1,29 @@
1
- module Ingenico::Connect::SDK
2
- module Webhooks
1
+ require 'ingenico/connect/sdk/webhooks/webhooks_helper'
3
2
 
4
- # Builder for a WebhooksHelper object.
5
- class WebhooksHelperBuilder
3
+ module Ingenico
4
+ module Connect
5
+ module SDK
6
+ module Webhooks
7
+ # Builder for a WebhooksHelper object.
8
+ class WebhooksHelperBuilder
6
9
 
7
- # Sets the Marshaller to use.
8
- def with_marshaller(marshaller)
9
- @marshaller = marshaller
10
- self
11
- end
10
+ # Sets the Marshaller to use.
11
+ def with_marshaller(marshaller)
12
+ @marshaller = marshaller
13
+ self
14
+ end
12
15
 
13
- # Sets the SecretkeyStore to use.
14
- def with_secret_key_store(secret_key_store)
15
- @secret_key_store = secret_key_store
16
- self
17
- end
16
+ # Sets the SecretKeyStore to use.
17
+ def with_secret_key_store(secret_key_store)
18
+ @secret_key_store = secret_key_store
19
+ self
20
+ end
18
21
 
19
- # Creates a fully initialized WebhooksHelper object
20
- def build
21
- WebhooksHelper.new(@marshaller, @secret_key_store)
22
+ # Creates a fully initialized WebhooksHelper object
23
+ def build
24
+ WebhooksHelper.new(@marshaller, @secret_key_store)
25
+ end
26
+ end
22
27
  end
23
28
  end
24
29
  end