onlinepayments-sdk-ruby 4.23.0 → 5.1.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 (414) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -0
  3. data/LICENSE.txt +0 -0
  4. data/README.md +5 -6
  5. data/Rakefile +0 -0
  6. data/lib/onlinepayments/sdk/api_exception.rb +47 -35
  7. data/lib/onlinepayments/sdk/api_resource.rb +49 -97
  8. data/lib/onlinepayments/sdk/authentication/authenticator.rb +19 -0
  9. data/lib/onlinepayments/sdk/authentication/authorization_type.rb +15 -0
  10. data/lib/onlinepayments/sdk/authentication/v1hmac_authenticator.rb +109 -0
  11. data/lib/onlinepayments/sdk/authentication.rb +1 -0
  12. data/lib/onlinepayments/sdk/authorization_exception.rb +14 -8
  13. data/lib/onlinepayments/sdk/call_context.rb +30 -21
  14. data/lib/onlinepayments/sdk/client.rb +36 -18
  15. data/lib/onlinepayments/sdk/communication/communication_exception.rb +19 -0
  16. data/lib/onlinepayments/sdk/communication/connection.rb +48 -0
  17. data/lib/onlinepayments/sdk/communication/default_connection.rb +427 -0
  18. data/lib/onlinepayments/sdk/communication/metadata_provider.rb +160 -0
  19. data/lib/onlinepayments/sdk/communication/multipart_form_data_object.rb +52 -0
  20. data/lib/onlinepayments/sdk/communication/multipart_form_data_request.rb +13 -0
  21. data/lib/onlinepayments/sdk/communication/not_found_exception.rb +19 -0
  22. data/lib/onlinepayments/sdk/communication/param_request.rb +14 -0
  23. data/lib/onlinepayments/sdk/communication/pooled_connection.rb +26 -0
  24. data/lib/onlinepayments/sdk/communication/request_header.rb +62 -0
  25. data/lib/onlinepayments/sdk/communication/request_param.rb +28 -0
  26. data/lib/onlinepayments/sdk/communication/response_exception.rb +56 -0
  27. data/lib/onlinepayments/sdk/communication/response_header.rb +78 -0
  28. data/lib/onlinepayments/sdk/communication.rb +1 -0
  29. data/lib/onlinepayments/sdk/communicator.rb +475 -268
  30. data/lib/onlinepayments/sdk/communicator_configuration.rb +162 -53
  31. data/lib/onlinepayments/sdk/declined_payment_exception.rb +28 -21
  32. data/lib/onlinepayments/sdk/declined_payout_exception.rb +28 -23
  33. data/lib/onlinepayments/sdk/declined_refund_exception.rb +28 -23
  34. data/lib/onlinepayments/sdk/declined_transaction_exception.rb +16 -10
  35. data/lib/onlinepayments/sdk/domain/account_on_file.rb +44 -35
  36. data/lib/onlinepayments/sdk/domain/account_on_file_attribute.rb +42 -28
  37. data/lib/onlinepayments/sdk/domain/account_on_file_display_hints.rb +29 -24
  38. data/lib/onlinepayments/sdk/domain/acquirer_information.rb +27 -22
  39. data/lib/onlinepayments/sdk/domain/acquirer_selection_information.rb +34 -24
  40. data/lib/onlinepayments/sdk/domain/additional_order_input.rb +43 -38
  41. data/lib/onlinepayments/sdk/domain/address.rb +65 -43
  42. data/lib/onlinepayments/sdk/domain/address_personal.rb +78 -52
  43. data/lib/onlinepayments/sdk/domain/airline_data.rb +204 -123
  44. data/lib/onlinepayments/sdk/domain/airline_flight_leg.rb +158 -95
  45. data/lib/onlinepayments/sdk/domain/airline_passenger.rb +59 -39
  46. data/lib/onlinepayments/sdk/domain/amount_breakdown.rb +27 -20
  47. data/lib/onlinepayments/sdk/domain/amount_of_money.rb +27 -20
  48. data/lib/onlinepayments/sdk/domain/api_error.rb +73 -47
  49. data/lib/onlinepayments/sdk/domain/apple_pay_line_item.rb +72 -0
  50. data/lib/onlinepayments/sdk/domain/apple_pay_recurring_payment_request.rb +61 -0
  51. data/lib/onlinepayments/sdk/domain/bank_account_iban.rb +20 -16
  52. data/lib/onlinepayments/sdk/domain/browser_data.rb +51 -35
  53. data/lib/onlinepayments/sdk/domain/calculate_surcharge_request.rb +27 -24
  54. data/lib/onlinepayments/sdk/domain/calculate_surcharge_response.rb +22 -20
  55. data/lib/onlinepayments/sdk/domain/cancel_payment_request.rb +27 -22
  56. data/lib/onlinepayments/sdk/domain/cancel_payment_response.rb +20 -18
  57. data/lib/onlinepayments/sdk/domain/capture.rb +41 -32
  58. data/lib/onlinepayments/sdk/domain/capture_output.rb +106 -78
  59. data/lib/onlinepayments/sdk/domain/capture_payment_request.rb +43 -26
  60. data/lib/onlinepayments/sdk/domain/capture_response.rb +41 -32
  61. data/lib/onlinepayments/sdk/domain/capture_status_output.rb +20 -16
  62. data/lib/onlinepayments/sdk/domain/captures_response.rb +22 -20
  63. data/lib/onlinepayments/sdk/domain/card.rb +41 -28
  64. data/lib/onlinepayments/sdk/domain/card_essentials.rb +41 -28
  65. data/lib/onlinepayments/sdk/domain/card_fraud_results.rb +34 -24
  66. data/lib/onlinepayments/sdk/domain/card_info.rb +27 -20
  67. data/lib/onlinepayments/sdk/domain/card_payment_method_specific_input.rb +199 -128
  68. data/lib/onlinepayments/sdk/domain/card_payment_method_specific_input_base.rb +149 -104
  69. data/lib/onlinepayments/sdk/domain/card_payment_method_specific_input_for_hosted_checkout.rb +36 -28
  70. data/lib/onlinepayments/sdk/domain/card_payment_method_specific_output.rb +142 -100
  71. data/lib/onlinepayments/sdk/domain/card_payout_method_specific_input.rb +41 -30
  72. data/lib/onlinepayments/sdk/domain/card_recurrence_details.rb +20 -16
  73. data/lib/onlinepayments/sdk/domain/card_source.rb +41 -30
  74. data/lib/onlinepayments/sdk/domain/card_without_cvv.rb +34 -24
  75. data/lib/onlinepayments/sdk/domain/company_information.rb +20 -16
  76. data/lib/onlinepayments/sdk/domain/complete_payment_card_payment_method_specific_input.rb +20 -18
  77. data/lib/onlinepayments/sdk/domain/complete_payment_request.rb +27 -24
  78. data/lib/onlinepayments/sdk/domain/complete_payment_response.rb +35 -31
  79. data/lib/onlinepayments/sdk/domain/contact_details.rb +51 -35
  80. data/lib/onlinepayments/sdk/domain/create_hosted_checkout_request.rb +76 -59
  81. data/lib/onlinepayments/sdk/domain/create_hosted_checkout_response.rb +60 -43
  82. data/lib/onlinepayments/sdk/domain/create_hosted_tokenization_request.rb +57 -42
  83. data/lib/onlinepayments/sdk/domain/create_hosted_tokenization_response.rb +57 -44
  84. data/lib/onlinepayments/sdk/domain/create_mandate_request.rb +71 -48
  85. data/lib/onlinepayments/sdk/domain/create_mandate_response.rb +27 -24
  86. data/lib/onlinepayments/sdk/domain/create_mandate_with_return_url.rb +71 -48
  87. data/lib/onlinepayments/sdk/domain/create_payment_link_request.rb +127 -87
  88. data/lib/onlinepayments/sdk/domain/create_payment_request.rb +82 -60
  89. data/lib/onlinepayments/sdk/domain/create_payment_response.rb +35 -31
  90. data/lib/onlinepayments/sdk/domain/create_payout_request.rb +61 -40
  91. data/lib/onlinepayments/sdk/domain/create_token_request.rb +27 -22
  92. data/lib/onlinepayments/sdk/domain/created_payment_output.rb +27 -22
  93. data/lib/onlinepayments/sdk/domain/created_token_response.rb +50 -38
  94. data/lib/onlinepayments/sdk/domain/credit_card_specific_input_hosted_tokenization.rb +29 -26
  95. data/lib/onlinepayments/sdk/domain/credit_card_validation_rules_hosted_tokenization.rb +27 -20
  96. data/lib/onlinepayments/sdk/domain/currency_conversion.rb +27 -22
  97. data/lib/onlinepayments/sdk/domain/currency_conversion_input.rb +27 -20
  98. data/lib/onlinepayments/sdk/domain/currency_conversion_request.rb +27 -24
  99. data/lib/onlinepayments/sdk/domain/currency_conversion_response.rb +34 -28
  100. data/lib/onlinepayments/sdk/domain/currency_conversion_result.rb +27 -20
  101. data/lib/onlinepayments/sdk/domain/currency_conversion_specific_input.rb +20 -16
  102. data/lib/onlinepayments/sdk/domain/customer.rb +87 -68
  103. data/lib/onlinepayments/sdk/domain/customer_account.rb +77 -55
  104. data/lib/onlinepayments/sdk/domain/customer_account_authentication.rb +34 -20
  105. data/lib/onlinepayments/sdk/domain/customer_bank_account.rb +34 -24
  106. data/lib/onlinepayments/sdk/domain/customer_device.rb +64 -44
  107. data/lib/onlinepayments/sdk/domain/customer_device_output.rb +20 -16
  108. data/lib/onlinepayments/sdk/domain/customer_output.rb +20 -18
  109. data/lib/onlinepayments/sdk/domain/customer_payment_activity.rb +34 -24
  110. data/lib/onlinepayments/sdk/domain/customer_token.rb +35 -31
  111. data/lib/onlinepayments/sdk/domain/data_object.rb +32 -0
  112. data/lib/onlinepayments/sdk/domain/dcc_card_source.rb +41 -30
  113. data/lib/onlinepayments/sdk/domain/dcc_proposal.rb +51 -41
  114. data/lib/onlinepayments/sdk/domain/decrypted_payment_data.rb +51 -35
  115. data/lib/onlinepayments/sdk/domain/directory_entry.rb +34 -24
  116. data/lib/onlinepayments/sdk/domain/discount.rb +20 -16
  117. data/lib/onlinepayments/sdk/domain/empty_validator.rb +7 -6
  118. data/lib/onlinepayments/sdk/domain/error_response.rb +29 -24
  119. data/lib/onlinepayments/sdk/domain/external_cardholder_authentication_data.rb +86 -55
  120. data/lib/onlinepayments/sdk/domain/external_token_linked.rb +35 -24
  121. data/lib/onlinepayments/sdk/domain/feedbacks.rb +42 -0
  122. data/lib/onlinepayments/sdk/domain/fixed_list_validator.rb +22 -20
  123. data/lib/onlinepayments/sdk/domain/fraud_fields.rb +37 -28
  124. data/lib/onlinepayments/sdk/domain/fraud_results.rb +20 -16
  125. data/lib/onlinepayments/sdk/domain/g_pay_three_d_secure.rb +50 -36
  126. data/lib/onlinepayments/sdk/domain/get_hosted_checkout_response.rb +27 -22
  127. data/lib/onlinepayments/sdk/domain/get_hosted_tokenization_response.rb +27 -22
  128. data/lib/onlinepayments/sdk/domain/get_iin_details_request.rb +27 -22
  129. data/lib/onlinepayments/sdk/domain/get_iin_details_response.rb +52 -38
  130. data/lib/onlinepayments/sdk/domain/get_mandate_response.rb +20 -18
  131. data/lib/onlinepayments/sdk/domain/get_payment_product_groups_response.rb +22 -20
  132. data/lib/onlinepayments/sdk/domain/get_payment_products_response.rb +22 -20
  133. data/lib/onlinepayments/sdk/domain/get_privacy_policy_response.rb +20 -16
  134. data/lib/onlinepayments/sdk/domain/gift_card_purchase.rb +27 -22
  135. data/lib/onlinepayments/sdk/domain/hosted_checkout_specific_input.rb +83 -56
  136. data/lib/onlinepayments/sdk/domain/hosted_checkout_specific_output.rb +27 -20
  137. data/lib/onlinepayments/sdk/domain/iin_detail.rb +34 -24
  138. data/lib/onlinepayments/sdk/domain/label_template_element.rb +27 -20
  139. data/lib/onlinepayments/sdk/domain/length_validator.rb +27 -20
  140. data/lib/onlinepayments/sdk/domain/line_item.rb +44 -31
  141. data/lib/onlinepayments/sdk/domain/line_item_invoice_data.rb +20 -16
  142. data/lib/onlinepayments/sdk/domain/loan_recipient.rb +51 -35
  143. data/lib/onlinepayments/sdk/domain/lodging_data.rb +20 -16
  144. data/lib/onlinepayments/sdk/domain/mandate_address.rb +51 -35
  145. data/lib/onlinepayments/sdk/domain/mandate_address_response.rb +51 -35
  146. data/lib/onlinepayments/sdk/domain/mandate_contact_details.rb +20 -16
  147. data/lib/onlinepayments/sdk/domain/mandate_customer.rb +52 -44
  148. data/lib/onlinepayments/sdk/domain/mandate_customer_response.rb +52 -44
  149. data/lib/onlinepayments/sdk/domain/mandate_merchant_action.rb +27 -22
  150. data/lib/onlinepayments/sdk/domain/mandate_personal_information.rb +27 -22
  151. data/lib/onlinepayments/sdk/domain/mandate_personal_information_response.rb +27 -22
  152. data/lib/onlinepayments/sdk/domain/mandate_personal_name.rb +27 -20
  153. data/lib/onlinepayments/sdk/domain/mandate_personal_name_response.rb +27 -20
  154. data/lib/onlinepayments/sdk/domain/mandate_redirect_data.rb +27 -20
  155. data/lib/onlinepayments/sdk/domain/mandate_response.rb +64 -44
  156. data/lib/onlinepayments/sdk/domain/merchant_action.rb +54 -30
  157. data/lib/onlinepayments/sdk/domain/mobile_payment_data.rb +27 -20
  158. data/lib/onlinepayments/sdk/domain/mobile_payment_method_hosted_checkout_specific_input.rb +43 -26
  159. data/lib/onlinepayments/sdk/domain/mobile_payment_method_specific_input.rb +71 -50
  160. data/lib/onlinepayments/sdk/domain/mobile_payment_method_specific_output.rb +58 -45
  161. data/lib/onlinepayments/sdk/domain/mobile_payment_product302_specific_input.rb +32 -0
  162. data/lib/onlinepayments/sdk/domain/mobile_payment_product320_specific_input.rb +20 -18
  163. data/lib/onlinepayments/sdk/domain/mobile_three_d_secure_challenge_parameters.rb +51 -0
  164. data/lib/onlinepayments/sdk/domain/multiple_payment_information.rb +27 -20
  165. data/lib/onlinepayments/sdk/domain/omnichannel_payout_specific_input.rb +20 -16
  166. data/lib/onlinepayments/sdk/domain/operation_output.rb +67 -45
  167. data/lib/onlinepayments/sdk/domain/operation_payment_references.rb +30 -0
  168. data/lib/onlinepayments/sdk/domain/order.rb +75 -66
  169. data/lib/onlinepayments/sdk/domain/order_line_details.rb +79 -47
  170. data/lib/onlinepayments/sdk/domain/order_references.rb +34 -24
  171. data/lib/onlinepayments/sdk/domain/order_status_output.rb +52 -38
  172. data/lib/onlinepayments/sdk/domain/order_type_information.rb +27 -20
  173. data/lib/onlinepayments/sdk/domain/other_details.rb +37 -0
  174. data/lib/onlinepayments/sdk/domain/payment_account_on_file.rb +27 -20
  175. data/lib/onlinepayments/sdk/domain/payment_context.rb +34 -26
  176. data/lib/onlinepayments/sdk/domain/payment_creation_output.rb +41 -28
  177. data/lib/onlinepayments/sdk/domain/payment_details_response.rb +60 -49
  178. data/lib/onlinepayments/sdk/domain/payment_error_response.rb +37 -31
  179. data/lib/onlinepayments/sdk/domain/payment_link_event.rb +34 -24
  180. data/lib/onlinepayments/sdk/domain/payment_link_order_input.rb +34 -28
  181. data/lib/onlinepayments/sdk/domain/payment_link_order_output.rb +34 -28
  182. data/lib/onlinepayments/sdk/domain/payment_link_response.rb +81 -51
  183. data/lib/onlinepayments/sdk/domain/payment_link_specific_input.rb +36 -24
  184. data/lib/onlinepayments/sdk/domain/payment_output.rb +115 -94
  185. data/lib/onlinepayments/sdk/domain/payment_product.rb +117 -85
  186. data/lib/onlinepayments/sdk/domain/payment_product130_specific_input.rb +20 -18
  187. data/lib/onlinepayments/sdk/domain/payment_product130_specific_three_d_secure.rb +41 -28
  188. data/lib/onlinepayments/sdk/domain/payment_product3012.rb +27 -20
  189. data/lib/onlinepayments/sdk/domain/payment_product3012_specific_input.rb +51 -0
  190. data/lib/onlinepayments/sdk/domain/payment_product302_specific_data.rb +22 -20
  191. data/lib/onlinepayments/sdk/domain/payment_product3203_specific_output.rb +27 -24
  192. data/lib/onlinepayments/sdk/domain/payment_product3208_specific_input.rb +20 -16
  193. data/lib/onlinepayments/sdk/domain/payment_product3208_specific_output.rb +20 -16
  194. data/lib/onlinepayments/sdk/domain/payment_product3209_specific_input.rb +20 -16
  195. data/lib/onlinepayments/sdk/domain/payment_product3209_specific_output.rb +20 -16
  196. data/lib/onlinepayments/sdk/domain/payment_product320_specific_data.rb +29 -24
  197. data/lib/onlinepayments/sdk/domain/payment_product5001_specific_output.rb +48 -16
  198. data/lib/onlinepayments/sdk/domain/payment_product5100_specific_input.rb +20 -16
  199. data/lib/onlinepayments/sdk/domain/payment_product5402_specific_output.rb +20 -16
  200. data/lib/onlinepayments/sdk/domain/payment_product5404.rb +27 -20
  201. data/lib/onlinepayments/sdk/domain/payment_product5407.rb +27 -20
  202. data/lib/onlinepayments/sdk/domain/payment_product5500_specific_output.rb +41 -24
  203. data/lib/onlinepayments/sdk/domain/payment_product771_specific_output.rb +20 -16
  204. data/lib/onlinepayments/sdk/domain/payment_product840_customer_account.rb +72 -47
  205. data/lib/onlinepayments/sdk/domain/payment_product840_specific_output.rb +43 -38
  206. data/lib/onlinepayments/sdk/domain/payment_product_display_hints.rb +34 -24
  207. data/lib/onlinepayments/sdk/domain/payment_product_field.rb +41 -32
  208. data/lib/onlinepayments/sdk/domain/payment_product_field_data_restrictions.rb +27 -22
  209. data/lib/onlinepayments/sdk/domain/payment_product_field_display_element.rb +41 -28
  210. data/lib/onlinepayments/sdk/domain/payment_product_field_display_hints.rb +84 -56
  211. data/lib/onlinepayments/sdk/domain/payment_product_field_form_element.rb +30 -24
  212. data/lib/onlinepayments/sdk/domain/payment_product_field_tooltip.rb +28 -20
  213. data/lib/onlinepayments/sdk/domain/payment_product_field_validators.rb +83 -73
  214. data/lib/onlinepayments/sdk/domain/payment_product_filter.rb +32 -29
  215. data/lib/onlinepayments/sdk/domain/payment_product_filter_hosted_tokenization.rb +22 -20
  216. data/lib/onlinepayments/sdk/domain/payment_product_filters_hosted_checkout.rb +27 -24
  217. data/lib/onlinepayments/sdk/domain/payment_product_filters_hosted_tokenization.rb +27 -24
  218. data/lib/onlinepayments/sdk/domain/payment_product_group.rb +44 -37
  219. data/lib/onlinepayments/sdk/domain/payment_product_networks_response.rb +22 -20
  220. data/lib/onlinepayments/sdk/domain/payment_references.rb +27 -20
  221. data/lib/onlinepayments/sdk/domain/payment_response.rb +51 -41
  222. data/lib/onlinepayments/sdk/domain/payment_status_output.rb +66 -46
  223. data/lib/onlinepayments/sdk/domain/payout_error_response.rb +37 -31
  224. data/lib/onlinepayments/sdk/domain/payout_output.rb +27 -22
  225. data/lib/onlinepayments/sdk/domain/payout_response.rb +41 -32
  226. data/lib/onlinepayments/sdk/domain/payout_result.rb +41 -32
  227. data/lib/onlinepayments/sdk/domain/payout_status_output.rb +34 -24
  228. data/lib/onlinepayments/sdk/domain/personal_information.rb +34 -26
  229. data/lib/onlinepayments/sdk/domain/personal_information_token.rb +20 -18
  230. data/lib/onlinepayments/sdk/domain/personal_name.rb +34 -24
  231. data/lib/onlinepayments/sdk/domain/personal_name_token.rb +27 -20
  232. data/lib/onlinepayments/sdk/domain/product_directory.rb +22 -20
  233. data/lib/onlinepayments/sdk/domain/protection_eligibility.rb +27 -20
  234. data/lib/onlinepayments/sdk/domain/range_validator.rb +27 -20
  235. data/lib/onlinepayments/sdk/domain/rate_details.rb +51 -35
  236. data/lib/onlinepayments/sdk/domain/reattempt_instructions.rb +46 -0
  237. data/lib/onlinepayments/sdk/domain/reattempt_instructions_conditions.rb +37 -0
  238. data/lib/onlinepayments/sdk/domain/redirect_data.rb +27 -20
  239. data/lib/onlinepayments/sdk/domain/redirect_payment_method_specific_input.rb +166 -88
  240. data/lib/onlinepayments/sdk/domain/redirect_payment_method_specific_output.rb +95 -75
  241. data/lib/onlinepayments/sdk/domain/redirect_payment_product3203_specific_input.rb +20 -16
  242. data/lib/onlinepayments/sdk/domain/redirect_payment_product3204_specific_input.rb +30 -0
  243. data/lib/onlinepayments/sdk/domain/redirect_payment_product3302_specific_input.rb +44 -0
  244. data/lib/onlinepayments/sdk/domain/redirect_payment_product3306_specific_input.rb +20 -16
  245. data/lib/onlinepayments/sdk/domain/redirect_payment_product5001_specific_input.rb +27 -16
  246. data/lib/onlinepayments/sdk/domain/redirect_payment_product5300_specific_input.rb +72 -0
  247. data/lib/onlinepayments/sdk/domain/redirect_payment_product5402_specific_input.rb +30 -0
  248. data/lib/onlinepayments/sdk/domain/redirect_payment_product5403_specific_input.rb +30 -0
  249. data/lib/onlinepayments/sdk/domain/redirect_payment_product5406_specific_input.rb +20 -18
  250. data/lib/onlinepayments/sdk/domain/redirect_payment_product5408_specific_input.rb +27 -22
  251. data/lib/onlinepayments/sdk/domain/redirect_payment_product5410_specific_input.rb +32 -0
  252. data/lib/onlinepayments/sdk/domain/redirect_payment_product809_specific_input.rb +20 -16
  253. data/lib/onlinepayments/sdk/domain/redirect_payment_product840_specific_input.rb +41 -20
  254. data/lib/onlinepayments/sdk/domain/redirection_data.rb +20 -16
  255. data/lib/onlinepayments/sdk/domain/refund_card_method_specific_output.rb +34 -26
  256. data/lib/onlinepayments/sdk/domain/refund_e_wallet_method_specific_output.rb +34 -26
  257. data/lib/onlinepayments/sdk/domain/refund_error_response.rb +37 -31
  258. data/lib/onlinepayments/sdk/domain/refund_mobile_method_specific_output.rb +34 -24
  259. data/lib/onlinepayments/sdk/domain/refund_output.rb +89 -64
  260. data/lib/onlinepayments/sdk/domain/refund_payment_product840_customer_account.rb +34 -24
  261. data/lib/onlinepayments/sdk/domain/refund_payment_product840_specific_output.rb +20 -18
  262. data/lib/onlinepayments/sdk/domain/refund_redirect_method_specific_output.rb +27 -20
  263. data/lib/onlinepayments/sdk/domain/refund_request.rb +43 -24
  264. data/lib/onlinepayments/sdk/domain/refund_response.rb +41 -32
  265. data/lib/onlinepayments/sdk/domain/refunds_response.rb +22 -20
  266. data/lib/onlinepayments/sdk/domain/regular_expression_validator.rb +20 -16
  267. data/lib/onlinepayments/sdk/domain/send_test_request.rb +30 -0
  268. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_input.rb +27 -22
  269. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_input_base.rb +27 -22
  270. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_output.rb +34 -28
  271. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_product771_specific_input.rb +27 -22
  272. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_product771_specific_input_base.rb +27 -22
  273. data/lib/onlinepayments/sdk/domain/session_request.rb +22 -20
  274. data/lib/onlinepayments/sdk/domain/session_response.rb +53 -39
  275. data/lib/onlinepayments/sdk/domain/shipping.rb +76 -52
  276. data/lib/onlinepayments/sdk/domain/shipping_method.rb +41 -28
  277. data/lib/onlinepayments/sdk/domain/shopping_cart.rb +62 -48
  278. data/lib/onlinepayments/sdk/domain/shopping_cart_extension.rb +51 -43
  279. data/lib/onlinepayments/sdk/domain/show_form_data.rb +35 -31
  280. data/lib/onlinepayments/sdk/domain/show_instructions_data.rb +30 -0
  281. data/lib/onlinepayments/sdk/domain/subsequent_card_payment_method_specific_input.rb +60 -39
  282. data/lib/onlinepayments/sdk/domain/subsequent_payment_product5001_specific_input.rb +20 -16
  283. data/lib/onlinepayments/sdk/domain/subsequent_payment_request.rb +35 -31
  284. data/lib/onlinepayments/sdk/domain/subsequent_payment_response.rb +20 -18
  285. data/lib/onlinepayments/sdk/domain/surcharge.rb +59 -48
  286. data/lib/onlinepayments/sdk/domain/surcharge_calculation_card.rb +27 -20
  287. data/lib/onlinepayments/sdk/domain/surcharge_for_payment_link.rb +20 -16
  288. data/lib/onlinepayments/sdk/domain/surcharge_rate.rb +41 -28
  289. data/lib/onlinepayments/sdk/domain/surcharge_specific_input.rb +27 -22
  290. data/lib/onlinepayments/sdk/domain/surcharge_specific_output.rb +34 -28
  291. data/lib/onlinepayments/sdk/domain/test_connection.rb +20 -16
  292. data/lib/onlinepayments/sdk/domain/three_d_secure.rb +98 -63
  293. data/lib/onlinepayments/sdk/domain/three_d_secure_base.rb +78 -52
  294. data/lib/onlinepayments/sdk/domain/three_d_secure_data.rb +34 -24
  295. data/lib/onlinepayments/sdk/domain/three_d_secure_results.rb +107 -67
  296. data/lib/onlinepayments/sdk/domain/token_card.rb +27 -22
  297. data/lib/onlinepayments/sdk/domain/token_card_data.rb +27 -18
  298. data/lib/onlinepayments/sdk/domain/token_card_specific_input.rb +20 -18
  299. data/lib/onlinepayments/sdk/domain/token_data.rb +27 -18
  300. data/lib/onlinepayments/sdk/domain/token_e_wallet.rb +28 -22
  301. data/lib/onlinepayments/sdk/domain/token_response.rb +58 -45
  302. data/lib/onlinepayments/sdk/domain/transaction.rb +20 -18
  303. data/lib/onlinepayments/sdk/domain/uploadable_file.rb +33 -0
  304. data/lib/onlinepayments/sdk/domain/validate_credentials_request.rb +37 -0
  305. data/lib/onlinepayments/sdk/domain/validate_credentials_response.rb +30 -0
  306. data/lib/onlinepayments/sdk/domain/value_mapping_element.rb +29 -24
  307. data/lib/onlinepayments/sdk/domain.rb +4 -0
  308. data/lib/onlinepayments/sdk/exception_factory.rb +76 -0
  309. data/lib/onlinepayments/sdk/factory.rb +163 -118
  310. data/lib/onlinepayments/sdk/idempotence_exception.rb +23 -19
  311. data/lib/onlinepayments/sdk/json/default_marshaller.rb +34 -0
  312. data/lib/onlinepayments/sdk/json/marshaller.rb +27 -0
  313. data/lib/onlinepayments/sdk/json/marshaller_syntax_exception.rb +9 -0
  314. data/lib/onlinepayments/sdk/json.rb +1 -0
  315. data/lib/onlinepayments/sdk/logging/communicator_logger.rb +18 -16
  316. data/lib/onlinepayments/sdk/logging/log_message_builder.rb +80 -47
  317. data/lib/onlinepayments/sdk/logging/logging_capable.rb +1 -1
  318. data/lib/onlinepayments/sdk/logging/obfuscation/body_obfuscator.rb +113 -0
  319. data/lib/onlinepayments/sdk/logging/obfuscation/header_obfuscator.rb +54 -0
  320. data/lib/onlinepayments/sdk/logging/obfuscation/obfuscation_capable.rb +21 -0
  321. data/lib/onlinepayments/sdk/logging/obfuscation/obfuscation_rule.rb +47 -0
  322. data/lib/onlinepayments/sdk/logging/obfuscation.rb +1 -0
  323. data/lib/onlinepayments/sdk/logging/request_log_message_builder.rb +40 -29
  324. data/lib/onlinepayments/sdk/logging/response_log_message_builder.rb +30 -23
  325. data/lib/onlinepayments/sdk/logging/ruby_communicator_logger.rb +49 -45
  326. data/lib/onlinepayments/sdk/logging/stdout_communicator_logger.rb +20 -23
  327. data/lib/onlinepayments/sdk/logging.rb +1 -10
  328. data/lib/onlinepayments/sdk/merchant/captures/captures_client.rb +57 -0
  329. data/lib/onlinepayments/sdk/merchant/captures.rb +4 -0
  330. data/lib/onlinepayments/sdk/merchant/complete/complete_client.rb +60 -0
  331. data/lib/onlinepayments/sdk/merchant/complete.rb +4 -0
  332. data/lib/onlinepayments/sdk/merchant/hostedcheckout/hosted_checkout_client.rb +72 -71
  333. data/lib/onlinepayments/sdk/merchant/hostedcheckout.rb +4 -0
  334. data/lib/onlinepayments/sdk/merchant/hostedtokenization/hosted_tokenization_client.rb +72 -71
  335. data/lib/onlinepayments/sdk/merchant/hostedtokenization.rb +4 -0
  336. data/lib/onlinepayments/sdk/merchant/mandates/mandates_client.rb +165 -164
  337. data/lib/onlinepayments/sdk/merchant/mandates.rb +4 -0
  338. data/lib/onlinepayments/sdk/merchant/merchant_client.rb +116 -64
  339. data/lib/onlinepayments/sdk/merchant/paymentlinks/payment_links_client.rb +102 -101
  340. data/lib/onlinepayments/sdk/merchant/paymentlinks.rb +4 -0
  341. data/lib/onlinepayments/sdk/merchant/payments/payments_client.rb +233 -332
  342. data/lib/onlinepayments/sdk/merchant/payments.rb +4 -0
  343. data/lib/onlinepayments/sdk/merchant/payouts/payouts_client.rb +73 -71
  344. data/lib/onlinepayments/sdk/merchant/payouts.rb +4 -0
  345. data/lib/onlinepayments/sdk/merchant/privacypolicy/get_privacy_policy_params.rb +32 -0
  346. data/lib/onlinepayments/sdk/merchant/privacypolicy/privacy_policy_client.rb +54 -0
  347. data/lib/onlinepayments/sdk/merchant/privacypolicy.rb +4 -0
  348. data/lib/onlinepayments/sdk/merchant/productgroups/get_product_group_params.rb +50 -47
  349. data/lib/onlinepayments/sdk/merchant/productgroups/get_product_groups_params.rb +50 -47
  350. data/lib/onlinepayments/sdk/merchant/productgroups/product_groups_client.rb +72 -72
  351. data/lib/onlinepayments/sdk/merchant/productgroups.rb +4 -0
  352. data/lib/onlinepayments/sdk/merchant/products/get_payment_product_networks_params.rb +27 -25
  353. data/lib/onlinepayments/sdk/merchant/products/get_payment_product_params.rb +50 -47
  354. data/lib/onlinepayments/sdk/merchant/products/get_payment_products_params.rb +50 -47
  355. data/lib/onlinepayments/sdk/merchant/products/get_product_directory_params.rb +21 -19
  356. data/lib/onlinepayments/sdk/merchant/products/products_client.rb +134 -136
  357. data/lib/onlinepayments/sdk/merchant/products.rb +4 -0
  358. data/lib/onlinepayments/sdk/merchant/refunds/refunds_client.rb +57 -0
  359. data/lib/onlinepayments/sdk/merchant/refunds.rb +4 -0
  360. data/lib/onlinepayments/sdk/merchant/services/services_client.rb +124 -155
  361. data/lib/onlinepayments/sdk/merchant/services.rb +4 -0
  362. data/lib/onlinepayments/sdk/merchant/sessions/sessions_client.rb +42 -41
  363. data/lib/onlinepayments/sdk/merchant/sessions.rb +4 -0
  364. data/lib/onlinepayments/sdk/merchant/tokens/tokens_client.rb +101 -100
  365. data/lib/onlinepayments/sdk/merchant/tokens.rb +4 -0
  366. data/lib/onlinepayments/sdk/merchant/webhooks/webhooks_client.rb +83 -0
  367. data/lib/onlinepayments/sdk/merchant/webhooks.rb +4 -0
  368. data/lib/onlinepayments/sdk/merchant.rb +4 -0
  369. data/lib/onlinepayments/sdk/platform_exception.rb +19 -0
  370. data/lib/onlinepayments/sdk/proxy_configuration.rb +60 -60
  371. data/lib/onlinepayments/sdk/reference_exception.rb +14 -9
  372. data/lib/onlinepayments/sdk/validation_exception.rb +14 -9
  373. data/lib/onlinepayments/sdk/webhooks/api_version_mismatch_exception.rb +17 -15
  374. data/lib/onlinepayments/sdk/webhooks/in_memory_secret_key_store.rb +46 -43
  375. data/lib/onlinepayments/sdk/webhooks/secret_key_not_available_exception.rb +16 -12
  376. data/lib/onlinepayments/sdk/webhooks/secret_key_store.rb +13 -11
  377. data/lib/onlinepayments/sdk/webhooks/signature_validation_exception.rb +15 -14
  378. data/lib/onlinepayments/sdk/webhooks/signature_validator.rb +81 -0
  379. data/lib/onlinepayments/sdk/webhooks/webhooks_event.rb +84 -53
  380. data/lib/onlinepayments/sdk/webhooks/webhooks_helper.rb +28 -90
  381. data/lib/onlinepayments/sdk/webhooks.rb +1 -11
  382. data/lib/onlinepayments/sdk.rb +4 -26
  383. data/onlinepayments-sdk-ruby.gemspec +3 -2
  384. metadata +95 -35
  385. data/lib/onlinepayments/sdk/authenticator.rb +0 -16
  386. data/lib/onlinepayments/sdk/communication_exception.rb +0 -16
  387. data/lib/onlinepayments/sdk/connection.rb +0 -41
  388. data/lib/onlinepayments/sdk/data_object.rb +0 -31
  389. data/lib/onlinepayments/sdk/defaultimpl/authorization_type.rb +0 -24
  390. data/lib/onlinepayments/sdk/defaultimpl/default_authenticator.rb +0 -108
  391. data/lib/onlinepayments/sdk/defaultimpl/default_connection.rb +0 -365
  392. data/lib/onlinepayments/sdk/defaultimpl/default_marshaller.rb +0 -32
  393. data/lib/onlinepayments/sdk/defaultimpl.rb +0 -6
  394. data/lib/onlinepayments/sdk/endpoint_configuration.rb +0 -127
  395. data/lib/onlinepayments/sdk/exceptions.rb +0 -8
  396. data/lib/onlinepayments/sdk/logging/logging_util.rb +0 -286
  397. data/lib/onlinepayments/sdk/marshaller.rb +0 -24
  398. data/lib/onlinepayments/sdk/marshaller_syntax_exception.rb +0 -6
  399. data/lib/onlinepayments/sdk/merchant/services/get_privacy_policy_params.rb +0 -30
  400. data/lib/onlinepayments/sdk/meta_data_provider.rb +0 -150
  401. data/lib/onlinepayments/sdk/modules.rb +0 -62
  402. data/lib/onlinepayments/sdk/multipart_form_data_object.rb +0 -44
  403. data/lib/onlinepayments/sdk/multipart_form_data_request.rb +0 -9
  404. data/lib/onlinepayments/sdk/not_found_exception.rb +0 -16
  405. data/lib/onlinepayments/sdk/param_request.rb +0 -11
  406. data/lib/onlinepayments/sdk/payment_platform_exception.rb +0 -15
  407. data/lib/onlinepayments/sdk/pooled_connection.rb +0 -21
  408. data/lib/onlinepayments/sdk/request_header.rb +0 -50
  409. data/lib/onlinepayments/sdk/request_param.rb +0 -23
  410. data/lib/onlinepayments/sdk/response_exception.rb +0 -47
  411. data/lib/onlinepayments/sdk/response_header.rb +0 -42
  412. data/lib/onlinepayments/sdk/uploadable_file.rb +0 -30
  413. data/lib/onlinepayments/sdk/webhooks/webhooks.rb +0 -22
  414. data/lib/onlinepayments/sdk/webhooks/webhooks_helper_builder.rb +0 -25
@@ -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
- module OnlinePayments::SDK
2
- module Logging
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
- # Class that converts data about a request into a properly formatted log message.
5
- # Formats request id, http method, uri, headers and body into a helpful message.
6
- class RequestLogMessageBuilder < OnlinePayments::SDK::Logging::LogMessageBuilder
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
- def initialize(request_id, method, uri)
9
- super(request_id)
10
- @method = method
11
- @uri = uri
12
- end
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
- # Constructs and returns a log message based on the request data. The log message is a string.
15
- def get_message
16
- @body ?
17
- sprintf(MSG_TEMPLATE_WITH_BODY, @request_id, empty_if_null(@method),
18
- format_uri, @headers, empty_if_null(@content_type), @body) :
19
- sprintf(MSG_TEMPLATE_WITHOUT_BODY, @request_id, empty_if_null(@method), format_uri, @headers)
20
- end
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
- private
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
- MSG_TEMPLATE_WITHOUT_BODY = "Outgoing request (requestId=\"%s\"):\n"\
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
- def format_uri
33
- return '' unless @uri && @uri.path
34
- return @uri.path unless @uri.query
35
- "#{@uri.path}?#{@uri.query}"
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
- module OnlinePayments::SDK
2
- module Logging
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
- # @param request_id [String] identifier of the request corresponding to this response.
10
- # @param status_code [Integer] HTTP status code of the response.
11
- # @param duration [Float] time elapsed between request and response.
12
- def initialize(request_id, status_code, duration = -1)
13
- super(request_id)
14
- @status_code = status_code
15
- @duration = duration
16
- end
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
- # Constructs and returns a log message based on the request data. The log message is a string.
19
- def get_message
20
- msg_template = "Incoming response (requestId=\"%s\"#{(@duration.positive?) ? ", %.3f ms" : ""}):\n" +
21
- " status-code: \"%s\"\n" +
22
- " headers: \"%s\"\n" +
23
- " content-type: \"%s\"\n" +
24
- " body: \"%s\""
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
- @duration.positive? ?
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
@@ -1,56 +1,60 @@
1
1
  require 'English'
2
+ require 'onlinepayments/sdk/logging/communicator_logger'
2
3
 
3
- module OnlinePayments::SDK
4
- module Logging
4
+ module OnlinePayments
5
+ module SDK
6
+ module Logging
7
+ # Logging class that Logs messages and errors to a logger.
8
+ # Errors can be logged at a separate level compared to regular messages.
9
+ class RubyCommunicatorLogger < CommunicatorLogger
5
10
 
6
- # Logging class that Logs messages and errors to a logger.
7
- # Errors can be logged at a separate level compared to regular messages.
8
- class RubyCommunicatorLogger < CommunicatorLogger
11
+ # Creates a new RubyCommunicatorLogger instance.
12
+ #
13
+ # @param logger [Logger] the logger to log messages to. Messages to log will be provided using logger#log(message level, message)
14
+ # @param log_level [String] log level to use for non-error messages.
15
+ # @param error_level [String, nil] error logging level to use.
16
+ def initialize(logger, log_level, error_level = nil)
17
+ # implement the interface
18
+ error_level ||= log_level
19
+ raise ArgumentError unless logger
20
+ raise ArgumentError unless log_level
21
+ raise ArgumentError unless error_level
9
22
 
10
- # Creates a new RubyCommunicatorLogger instance.
11
- #
12
- # @param logger [Logger] the logger to log messages to. Messages to log will be provided using logger#log(message level, message)
13
- # @param log_level [String] log level to use for non-error messages.
14
- # @param error_level [String] error logging level to use.
15
- def initialize(logger, log_level, error_level = false)
16
- # implement the interface
17
- error_level ||= log_level
18
- raise ArgumentError unless logger
19
- raise ArgumentError unless log_level
20
- raise ArgumentError unless error_level
21
-
22
- @logger = logger
23
- @log_level = log_level
24
- @errorLevel = error_level
25
- end
23
+ @logger = logger
24
+ @log_level = log_level
25
+ @error_level = error_level
26
+ end
26
27
 
27
- # Logs a single error or non-error message to the logger.
28
- def log(msg, thrown = nil)
29
- # use Ruby Logger
30
- if thrown
31
- @logger.log(@errorLevel) { msg + $RS + thrown.to_s + $RS + thrown.backtrace.join($RS) }
32
- else
33
- @logger.log(@log_level, msg)
28
+ # Logs a single error or non-error message to the logger.
29
+ def log(msg, thrown = nil)
30
+ # use Ruby Logger
31
+ if thrown
32
+ @logger.log(@error_level) { msg + $RS + thrown.to_s + $RS + thrown.backtrace.join($RS) }
33
+ else
34
+ @logger.log(@log_level, msg)
35
+ end
34
36
  end
35
- end
36
37
 
37
- # Opens or creates a new file in write-only mode with _filename_.
38
- def self.create_logfile(filename)
39
- logdev = begin
40
- open(filename, (File::WRONLY | File::APPEND | File::CREAT | File::EXCL))
41
- rescue Errno::EEXIST
42
- # file is created by another process
43
- open_logfile(filename)
44
- end
45
- logdev.sync = true
46
- logdev
47
- end
38
+ # Opens or creates a new file in write-only mode with _filename_.
39
+ def self.create_logfile(filename)
40
+ logdev = begin
41
+ open(filename, (File::WRONLY | File::APPEND | File::CREAT | File::EXCL))
42
+ rescue Errno::EEXIST
43
+ # file is created by another process
44
+ open_logfile(filename)
45
+ end
46
+ logdev.sync = true
47
+ logdev
48
+ end
48
49
 
49
- # Opens or creates a new file in write-only mode with _filename_.
50
- def self.open_logfile(filename)
51
- open(filename, (File::WRONLY | File::APPEND))
52
- rescue Errno::ENOENT
53
- create_logfile(filename)
50
+ # Opens or creates a new file in write-only mode with _filename_.
51
+ def self.open_logfile(filename)
52
+ begin
53
+ open(filename, (File::WRONLY | File::APPEND))
54
+ rescue Errno::ENOENT
55
+ create_logfile(filename)
56
+ end
57
+ end
54
58
  end
55
59
  end
56
60
  end
@@ -1,33 +1,30 @@
1
1
  require 'English'
2
2
  require 'singleton'
3
+ require 'onlinepayments/sdk/logging/communicator_logger'
3
4
 
4
- module OnlinePayments::SDK
5
- module Logging
5
+ module OnlinePayments
6
+ module SDK
7
+ module Logging
8
+ # Logging class that logs the messages to $stdout.
9
+ class StdoutCommunicatorLogger < CommunicatorLogger
10
+ include Singleton
6
11
 
7
- # {OnlinePayments::SDK::Logging::CommunicatorLogger} that logs the messages to $stdout.
8
- class StdoutCommunicatorLogger < CommunicatorLogger
9
- include Singleton
12
+ def initialize
13
+ # implement the interface
14
+ end
10
15
 
11
- def initialize
12
- # implement the interface
13
- end
14
-
15
- # NOTE: this alias is needed to not break existing method calls depending on old interface
16
- class << self
17
- alias_method :INSTANCE, :instance
18
- end
19
-
20
- # Logs a single error or non-error message to $stdout.
21
- def log(msg, thrown = nil)
22
- $stdout.puts get_date_prefix + msg
23
- $stdout.puts thrown.to_s if thrown
24
- $stdout.puts thrown.backtrace.join($RS) if thrown
25
- end
16
+ # Logs a single error or non-error message to $stdout.
17
+ def log(msg, thrown = nil)
18
+ $stdout.puts get_date_prefix + msg
19
+ $stdout.puts thrown.to_s if thrown
20
+ $stdout.puts thrown.backtrace.join($RS) if thrown
21
+ end
26
22
 
27
- private
23
+ private
28
24
 
29
- def get_date_prefix
30
- Time.now.strftime("%Y-%m-%dT%H:%M:%S ")
25
+ def get_date_prefix
26
+ Time.now.strftime("%Y-%m-%dT%H:%M:%S ")
27
+ end
31
28
  end
32
29
  end
33
30
  end
@@ -1,10 +1 @@
1
- prefix = 'onlinepayments/sdk/logging'
2
-
3
- require "#{prefix}/logging_capable"
4
- require "#{prefix}/log_message_builder"
5
- require "#{prefix}/request_log_message_builder"
6
- require "#{prefix}/response_log_message_builder"
7
- require "#{prefix}/logging_util"
8
- require "#{prefix}/communicator_logger"
9
- require "#{prefix}/ruby_communicator_logger"
10
- require "#{prefix}/stdout_communicator_logger"
1
+ Dir[File.join(__dir__, 'logging', '*.rb')].each { |f| require f }
@@ -0,0 +1,57 @@
1
+ #
2
+ # This file was automatically generated.
3
+ #
4
+ require 'onlinepayments/sdk/api_resource'
5
+ require 'onlinepayments/sdk/exception_factory'
6
+ require 'onlinepayments/sdk/communication/response_exception'
7
+ require 'onlinepayments/sdk/domain/captures_response'
8
+ require 'onlinepayments/sdk/domain/error_response'
9
+
10
+ module OnlinePayments
11
+ module SDK
12
+ module Merchant
13
+ module Captures
14
+ # Captures client. Thread-safe.
15
+ class CapturesClient < OnlinePayments::SDK::ApiResource
16
+
17
+ # @param parent [OnlinePayments::SDK::ApiResource]
18
+ # @param path_context [Hash, nil]
19
+ def initialize(parent, path_context)
20
+ super(parent: parent, path_context: path_context)
21
+ end
22
+
23
+ # Resource /v2/!{merchantId}/payments/!{paymentId}/captures - Get captures of payment
24
+ #
25
+ # @param payment_id [String]
26
+ # @param context [OnlinePayments::SDK::CallContext, nil]
27
+ # @return [OnlinePayments::SDK::Domain::CapturesResponse]
28
+ # @raise [OnlinePayments::SDK::IdempotenceException] if an idempotent request caused a conflict (HTTP status code 409)
29
+ # @raise [OnlinePayments::SDK::ValidationException] if the request was not correct and couldn't be processed (HTTP status code 400)
30
+ # @raise [OnlinePayments::SDK::AuthorizationException] if the request was not allowed (HTTP status code 403)
31
+ # @raise [OnlinePayments::SDK::ReferenceException] if an object was attempted to be referenced that doesn't exist or has been removed,
32
+ # or there was a conflict (HTTP status code 404, 409 or 410)
33
+ # @raise [OnlinePayments::SDK::PlatformException] if something went wrong at the payment platform,
34
+ # the payment platform was unable to process a message from a downstream partner/acquirer,
35
+ # or the service that you're trying to reach is temporary unavailable (HTTP status code 500, 502 or 503)
36
+ # @raise [OnlinePayments::SDK::ApiException] if the payment platform returned any other error
37
+ def get_captures(payment_id, context = nil)
38
+ path_context = {
39
+ 'paymentId'.freeze => payment_id,
40
+ }
41
+ uri = instantiate_uri('/v2/{merchantId}/payments/{paymentId}/captures', path_context)
42
+ @communicator.get(
43
+ uri,
44
+ client_headers,
45
+ nil,
46
+ OnlinePayments::SDK::Domain::CapturesResponse,
47
+ context)
48
+ rescue OnlinePayments::SDK::Communication::ResponseException => e
49
+ error_type = OnlinePayments::SDK::Domain::ErrorResponse
50
+ error_object = @communicator.marshaller.unmarshal(e.body, error_type)
51
+ raise OnlinePayments::SDK.create_exception(e.status_code, e.body, error_object, context)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,4 @@
1
+ #
2
+ # This file was automatically generated.
3
+ #
4
+ Dir[File.join(__dir__, 'captures', '*.rb')].each { |f| require f }