onlinepayments-sdk-ruby 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +2 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +140 -0
  5. data/Rakefile +34 -0
  6. data/lib/onlinepayments/sdk/api_exception.rb +42 -0
  7. data/lib/onlinepayments/sdk/api_resource.rb +115 -0
  8. data/lib/onlinepayments/sdk/authenticator.rb +16 -0
  9. data/lib/onlinepayments/sdk/authorization_exception.rb +13 -0
  10. data/lib/onlinepayments/sdk/call_context.rb +26 -0
  11. data/lib/onlinepayments/sdk/client.rb +82 -0
  12. data/lib/onlinepayments/sdk/communication_exception.rb +16 -0
  13. data/lib/onlinepayments/sdk/communicator.rb +300 -0
  14. data/lib/onlinepayments/sdk/communicator_configuration.rb +59 -0
  15. data/lib/onlinepayments/sdk/connection.rb +41 -0
  16. data/lib/onlinepayments/sdk/data_object.rb +31 -0
  17. data/lib/onlinepayments/sdk/declined_payment_exception.rb +30 -0
  18. data/lib/onlinepayments/sdk/declined_payout_exception.rb +32 -0
  19. data/lib/onlinepayments/sdk/declined_refund_exception.rb +32 -0
  20. data/lib/onlinepayments/sdk/declined_transaction_exception.rb +16 -0
  21. data/lib/onlinepayments/sdk/defaultimpl/authorization_type.rb +24 -0
  22. data/lib/onlinepayments/sdk/defaultimpl/default_authenticator.rb +108 -0
  23. data/lib/onlinepayments/sdk/defaultimpl/default_connection.rb +295 -0
  24. data/lib/onlinepayments/sdk/defaultimpl/default_marshaller.rb +32 -0
  25. data/lib/onlinepayments/sdk/defaultimpl.rb +6 -0
  26. data/lib/onlinepayments/sdk/domain/account_on_file.rb +49 -0
  27. data/lib/onlinepayments/sdk/domain/account_on_file_attribute.rb +38 -0
  28. data/lib/onlinepayments/sdk/domain/account_on_file_display_hints.rb +37 -0
  29. data/lib/onlinepayments/sdk/domain/additional_order_input.rb +54 -0
  30. data/lib/onlinepayments/sdk/domain/address.rb +50 -0
  31. data/lib/onlinepayments/sdk/domain/address_personal.rb +58 -0
  32. data/lib/onlinepayments/sdk/domain/airline_data.rb +128 -0
  33. data/lib/onlinepayments/sdk/domain/airline_flight_leg.rb +102 -0
  34. data/lib/onlinepayments/sdk/domain/airline_passenger.rb +38 -0
  35. data/lib/onlinepayments/sdk/domain/amount_breakdown.rb +30 -0
  36. data/lib/onlinepayments/sdk/domain/amount_of_money.rb +30 -0
  37. data/lib/onlinepayments/sdk/domain/api_error.rb +46 -0
  38. data/lib/onlinepayments/sdk/domain/bank_account_iban.rb +26 -0
  39. data/lib/onlinepayments/sdk/domain/browser_data.rb +42 -0
  40. data/lib/onlinepayments/sdk/domain/cancel_payment_response.rb +30 -0
  41. data/lib/onlinepayments/sdk/domain/capture.rb +46 -0
  42. data/lib/onlinepayments/sdk/domain/capture_output.rb +82 -0
  43. data/lib/onlinepayments/sdk/domain/capture_payment_request.rb +38 -0
  44. data/lib/onlinepayments/sdk/domain/capture_response.rb +46 -0
  45. data/lib/onlinepayments/sdk/domain/capture_status_output.rb +26 -0
  46. data/lib/onlinepayments/sdk/domain/captures_response.rb +33 -0
  47. data/lib/onlinepayments/sdk/domain/card.rb +38 -0
  48. data/lib/onlinepayments/sdk/domain/card_essentials.rb +34 -0
  49. data/lib/onlinepayments/sdk/domain/card_fraud_results.rb +34 -0
  50. data/lib/onlinepayments/sdk/domain/card_payment_method_specific_input.rb +98 -0
  51. data/lib/onlinepayments/sdk/domain/card_payment_method_specific_input_base.rb +86 -0
  52. data/lib/onlinepayments/sdk/domain/card_payment_method_specific_input_for_hosted_checkout.rb +26 -0
  53. data/lib/onlinepayments/sdk/domain/card_payment_method_specific_output.rb +78 -0
  54. data/lib/onlinepayments/sdk/domain/card_payout_method_specific_input.rb +38 -0
  55. data/lib/onlinepayments/sdk/domain/card_recurrence_details.rb +26 -0
  56. data/lib/onlinepayments/sdk/domain/card_without_cvv.rb +34 -0
  57. data/lib/onlinepayments/sdk/domain/company_information.rb +26 -0
  58. data/lib/onlinepayments/sdk/domain/complete_payment_card_payment_method_specific_input.rb +30 -0
  59. data/lib/onlinepayments/sdk/domain/complete_payment_request.rb +38 -0
  60. data/lib/onlinepayments/sdk/domain/complete_payment_response.rb +46 -0
  61. data/lib/onlinepayments/sdk/domain/contact_details.rb +42 -0
  62. data/lib/onlinepayments/sdk/domain/create_hosted_checkout_request.rb +78 -0
  63. data/lib/onlinepayments/sdk/domain/create_hosted_checkout_response.rb +48 -0
  64. data/lib/onlinepayments/sdk/domain/create_hosted_tokenization_request.rb +38 -0
  65. data/lib/onlinepayments/sdk/domain/create_hosted_tokenization_response.rb +50 -0
  66. data/lib/onlinepayments/sdk/domain/create_mandate_request.rb +58 -0
  67. data/lib/onlinepayments/sdk/domain/create_mandate_response.rb +38 -0
  68. data/lib/onlinepayments/sdk/domain/create_mandate_with_return_url.rb +58 -0
  69. data/lib/onlinepayments/sdk/domain/create_payment_request.rb +74 -0
  70. data/lib/onlinepayments/sdk/domain/create_payment_response.rb +46 -0
  71. data/lib/onlinepayments/sdk/domain/create_payout_request.rb +46 -0
  72. data/lib/onlinepayments/sdk/domain/create_token_request.rb +34 -0
  73. data/lib/onlinepayments/sdk/domain/created_payment_output.rb +34 -0
  74. data/lib/onlinepayments/sdk/domain/created_token_response.rb +50 -0
  75. data/lib/onlinepayments/sdk/domain/customer.rb +86 -0
  76. data/lib/onlinepayments/sdk/domain/customer_account.rb +70 -0
  77. data/lib/onlinepayments/sdk/domain/customer_account_authentication.rb +30 -0
  78. data/lib/onlinepayments/sdk/domain/customer_device.rb +50 -0
  79. data/lib/onlinepayments/sdk/domain/customer_payment_activity.rb +34 -0
  80. data/lib/onlinepayments/sdk/domain/customer_token.rb +46 -0
  81. data/lib/onlinepayments/sdk/domain/decrypted_payment_data.rb +42 -0
  82. data/lib/onlinepayments/sdk/domain/directory_entry.rb +34 -0
  83. data/lib/onlinepayments/sdk/domain/empty_validator.rb +12 -0
  84. data/lib/onlinepayments/sdk/domain/error_response.rb +37 -0
  85. data/lib/onlinepayments/sdk/domain/external_cardholder_authentication_data.rb +58 -0
  86. data/lib/onlinepayments/sdk/domain/external_token_linked.rb +34 -0
  87. data/lib/onlinepayments/sdk/domain/fixed_list_validator.rb +32 -0
  88. data/lib/onlinepayments/sdk/domain/fraud_fields.rb +30 -0
  89. data/lib/onlinepayments/sdk/domain/fraud_results.rb +26 -0
  90. data/lib/onlinepayments/sdk/domain/g_pay_three_d_secure.rb +46 -0
  91. data/lib/onlinepayments/sdk/domain/get_hosted_checkout_response.rb +34 -0
  92. data/lib/onlinepayments/sdk/domain/get_hosted_tokenization_response.rb +34 -0
  93. data/lib/onlinepayments/sdk/domain/get_iin_details_request.rb +34 -0
  94. data/lib/onlinepayments/sdk/domain/get_iin_details_response.rb +45 -0
  95. data/lib/onlinepayments/sdk/domain/get_mandate_response.rb +30 -0
  96. data/lib/onlinepayments/sdk/domain/get_payment_product_groups_response.rb +33 -0
  97. data/lib/onlinepayments/sdk/domain/get_payment_products_response.rb +33 -0
  98. data/lib/onlinepayments/sdk/domain/gift_card_purchase.rb +34 -0
  99. data/lib/onlinepayments/sdk/domain/hosted_checkout_specific_input.rb +66 -0
  100. data/lib/onlinepayments/sdk/domain/hosted_checkout_specific_output.rb +30 -0
  101. data/lib/onlinepayments/sdk/domain/iin_detail.rb +30 -0
  102. data/lib/onlinepayments/sdk/domain/label_template_element.rb +30 -0
  103. data/lib/onlinepayments/sdk/domain/length_validator.rb +30 -0
  104. data/lib/onlinepayments/sdk/domain/line_item.rb +46 -0
  105. data/lib/onlinepayments/sdk/domain/line_item_invoice_data.rb +26 -0
  106. data/lib/onlinepayments/sdk/domain/loan_recipient.rb +42 -0
  107. data/lib/onlinepayments/sdk/domain/lodging_data.rb +26 -0
  108. data/lib/onlinepayments/sdk/domain/mandate_address.rb +42 -0
  109. data/lib/onlinepayments/sdk/domain/mandate_contact_details.rb +26 -0
  110. data/lib/onlinepayments/sdk/domain/mandate_customer.rb +58 -0
  111. data/lib/onlinepayments/sdk/domain/mandate_merchant_action.rb +34 -0
  112. data/lib/onlinepayments/sdk/domain/mandate_personal_information.rb +34 -0
  113. data/lib/onlinepayments/sdk/domain/mandate_personal_name.rb +30 -0
  114. data/lib/onlinepayments/sdk/domain/mandate_redirect_data.rb +30 -0
  115. data/lib/onlinepayments/sdk/domain/mandate_response.rb +50 -0
  116. data/lib/onlinepayments/sdk/domain/merchant_action.rb +34 -0
  117. data/lib/onlinepayments/sdk/domain/mobile_payment_data.rb +30 -0
  118. data/lib/onlinepayments/sdk/domain/mobile_payment_method_hosted_checkout_specific_input.rb +30 -0
  119. data/lib/onlinepayments/sdk/domain/mobile_payment_method_specific_input.rb +62 -0
  120. data/lib/onlinepayments/sdk/domain/mobile_payment_method_specific_output.rb +58 -0
  121. data/lib/onlinepayments/sdk/domain/mobile_payment_product320_specific_input.rb +30 -0
  122. data/lib/onlinepayments/sdk/domain/operation_output.rb +58 -0
  123. data/lib/onlinepayments/sdk/domain/order.rb +70 -0
  124. data/lib/onlinepayments/sdk/domain/order_line_details.rb +54 -0
  125. data/lib/onlinepayments/sdk/domain/order_references.rb +34 -0
  126. data/lib/onlinepayments/sdk/domain/order_status_output.rb +49 -0
  127. data/lib/onlinepayments/sdk/domain/order_type_information.rb +30 -0
  128. data/lib/onlinepayments/sdk/domain/payment_account_on_file.rb +30 -0
  129. data/lib/onlinepayments/sdk/domain/payment_context.rb +38 -0
  130. data/lib/onlinepayments/sdk/domain/payment_creation_output.rb +38 -0
  131. data/lib/onlinepayments/sdk/domain/payment_details_response.rb +65 -0
  132. data/lib/onlinepayments/sdk/domain/payment_error_response.rb +45 -0
  133. data/lib/onlinepayments/sdk/domain/payment_output.rb +82 -0
  134. data/lib/onlinepayments/sdk/domain/payment_product.rb +102 -0
  135. data/lib/onlinepayments/sdk/domain/payment_product130_specific_input.rb +30 -0
  136. data/lib/onlinepayments/sdk/domain/payment_product130_specific_three_d_secure.rb +38 -0
  137. data/lib/onlinepayments/sdk/domain/payment_product302_specific_data.rb +32 -0
  138. data/lib/onlinepayments/sdk/domain/payment_product320_specific_data.rb +36 -0
  139. data/lib/onlinepayments/sdk/domain/payment_product5100_specific_input.rb +26 -0
  140. data/lib/onlinepayments/sdk/domain/payment_product5402_specific_output.rb +26 -0
  141. data/lib/onlinepayments/sdk/domain/payment_product5500_specific_output.rb +34 -0
  142. data/lib/onlinepayments/sdk/domain/payment_product771_specific_output.rb +26 -0
  143. data/lib/onlinepayments/sdk/domain/payment_product840_customer_account.rb +54 -0
  144. data/lib/onlinepayments/sdk/domain/payment_product840_specific_output.rb +53 -0
  145. data/lib/onlinepayments/sdk/domain/payment_product_display_hints.rb +34 -0
  146. data/lib/onlinepayments/sdk/domain/payment_product_field.rb +46 -0
  147. data/lib/onlinepayments/sdk/domain/payment_product_field_data_restrictions.rb +34 -0
  148. data/lib/onlinepayments/sdk/domain/payment_product_field_display_element.rb +38 -0
  149. data/lib/onlinepayments/sdk/domain/payment_product_field_display_hints.rb +70 -0
  150. data/lib/onlinepayments/sdk/domain/payment_product_field_form_element.rb +37 -0
  151. data/lib/onlinepayments/sdk/domain/payment_product_field_tooltip.rb +30 -0
  152. data/lib/onlinepayments/sdk/domain/payment_product_field_validators.rb +90 -0
  153. data/lib/onlinepayments/sdk/domain/payment_product_filter.rb +42 -0
  154. data/lib/onlinepayments/sdk/domain/payment_product_filters_hosted_checkout.rb +37 -0
  155. data/lib/onlinepayments/sdk/domain/payment_product_group.rb +52 -0
  156. data/lib/onlinepayments/sdk/domain/payment_product_networks_response.rb +32 -0
  157. data/lib/onlinepayments/sdk/domain/payment_references.rb +30 -0
  158. data/lib/onlinepayments/sdk/domain/payment_response.rb +54 -0
  159. data/lib/onlinepayments/sdk/domain/payment_status_output.rb +57 -0
  160. data/lib/onlinepayments/sdk/domain/payout_error_response.rb +45 -0
  161. data/lib/onlinepayments/sdk/domain/payout_output.rb +30 -0
  162. data/lib/onlinepayments/sdk/domain/payout_response.rb +46 -0
  163. data/lib/onlinepayments/sdk/domain/payout_result.rb +46 -0
  164. data/lib/onlinepayments/sdk/domain/payout_status_output.rb +34 -0
  165. data/lib/onlinepayments/sdk/domain/personal_information.rb +38 -0
  166. data/lib/onlinepayments/sdk/domain/personal_information_token.rb +30 -0
  167. data/lib/onlinepayments/sdk/domain/personal_name.rb +34 -0
  168. data/lib/onlinepayments/sdk/domain/personal_name_token.rb +30 -0
  169. data/lib/onlinepayments/sdk/domain/product_directory.rb +33 -0
  170. data/lib/onlinepayments/sdk/domain/protection_eligibility.rb +30 -0
  171. data/lib/onlinepayments/sdk/domain/range_validator.rb +30 -0
  172. data/lib/onlinepayments/sdk/domain/redirect_data.rb +30 -0
  173. data/lib/onlinepayments/sdk/domain/redirect_payment_method_specific_input.rb +66 -0
  174. data/lib/onlinepayments/sdk/domain/redirect_payment_method_specific_output.rb +66 -0
  175. data/lib/onlinepayments/sdk/domain/redirect_payment_product809_specific_input.rb +26 -0
  176. data/lib/onlinepayments/sdk/domain/redirect_payment_product840_specific_input.rb +26 -0
  177. data/lib/onlinepayments/sdk/domain/redirection_data.rb +26 -0
  178. data/lib/onlinepayments/sdk/domain/refund_card_method_specific_output.rb +30 -0
  179. data/lib/onlinepayments/sdk/domain/refund_e_wallet_method_specific_output.rb +38 -0
  180. data/lib/onlinepayments/sdk/domain/refund_error_response.rb +45 -0
  181. data/lib/onlinepayments/sdk/domain/refund_mobile_method_specific_output.rb +34 -0
  182. data/lib/onlinepayments/sdk/domain/refund_output.rb +82 -0
  183. data/lib/onlinepayments/sdk/domain/refund_payment_product840_customer_account.rb +34 -0
  184. data/lib/onlinepayments/sdk/domain/refund_payment_product840_specific_output.rb +30 -0
  185. data/lib/onlinepayments/sdk/domain/refund_redirect_method_specific_output.rb +30 -0
  186. data/lib/onlinepayments/sdk/domain/refund_request.rb +38 -0
  187. data/lib/onlinepayments/sdk/domain/refund_response.rb +46 -0
  188. data/lib/onlinepayments/sdk/domain/refunds_response.rb +33 -0
  189. data/lib/onlinepayments/sdk/domain/regular_expression_validator.rb +26 -0
  190. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_input.rb +34 -0
  191. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_input_base.rb +34 -0
  192. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_output.rb +42 -0
  193. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_product771_specific_input.rb +34 -0
  194. data/lib/onlinepayments/sdk/domain/sepa_direct_debit_payment_product771_specific_input_base.rb +34 -0
  195. data/lib/onlinepayments/sdk/domain/session_request.rb +32 -0
  196. data/lib/onlinepayments/sdk/domain/session_response.rb +48 -0
  197. data/lib/onlinepayments/sdk/domain/shipping.rb +58 -0
  198. data/lib/onlinepayments/sdk/domain/shopping_cart.rb +64 -0
  199. data/lib/onlinepayments/sdk/domain/shopping_cart_extension.rb +52 -0
  200. data/lib/onlinepayments/sdk/domain/test_connection.rb +26 -0
  201. data/lib/onlinepayments/sdk/domain/three_d_secure.rb +78 -0
  202. data/lib/onlinepayments/sdk/domain/three_d_secure_base.rb +58 -0
  203. data/lib/onlinepayments/sdk/domain/three_d_secure_data.rb +34 -0
  204. data/lib/onlinepayments/sdk/domain/three_d_secure_results.rb +30 -0
  205. data/lib/onlinepayments/sdk/domain/token_card.rb +34 -0
  206. data/lib/onlinepayments/sdk/domain/token_card_data.rb +30 -0
  207. data/lib/onlinepayments/sdk/domain/token_card_specific_input.rb +30 -0
  208. data/lib/onlinepayments/sdk/domain/token_data.rb +30 -0
  209. data/lib/onlinepayments/sdk/domain/token_e_wallet.rb +34 -0
  210. data/lib/onlinepayments/sdk/domain/token_response.rb +58 -0
  211. data/lib/onlinepayments/sdk/domain/value_mapping_element.rb +37 -0
  212. data/lib/onlinepayments/sdk/endpoint_configuration.rb +127 -0
  213. data/lib/onlinepayments/sdk/exceptions.rb +8 -0
  214. data/lib/onlinepayments/sdk/factory.rb +136 -0
  215. data/lib/onlinepayments/sdk/idempotence_exception.rb +24 -0
  216. data/lib/onlinepayments/sdk/logging/communicator_logger.rb +22 -0
  217. data/lib/onlinepayments/sdk/logging/log_message_builder.rb +56 -0
  218. data/lib/onlinepayments/sdk/logging/logging_capable.rb +17 -0
  219. data/lib/onlinepayments/sdk/logging/logging_util.rb +286 -0
  220. data/lib/onlinepayments/sdk/logging/request_log_message_builder.rb +39 -0
  221. data/lib/onlinepayments/sdk/logging/response_log_message_builder.rb +34 -0
  222. data/lib/onlinepayments/sdk/logging/ruby_communicator_logger.rb +57 -0
  223. data/lib/onlinepayments/sdk/logging/stdout_communicator_logger.rb +34 -0
  224. data/lib/onlinepayments/sdk/logging.rb +10 -0
  225. data/lib/onlinepayments/sdk/marshaller.rb +24 -0
  226. data/lib/onlinepayments/sdk/marshaller_syntax_exception.rb +6 -0
  227. data/lib/onlinepayments/sdk/merchant/hostedcheckout/hosted_checkout_client.rb +86 -0
  228. data/lib/onlinepayments/sdk/merchant/hostedtokenization/hosted_tokenization_client.rb +86 -0
  229. data/lib/onlinepayments/sdk/merchant/mandates/mandates_client.rb +182 -0
  230. data/lib/onlinepayments/sdk/merchant/merchant_client.rb +89 -0
  231. data/lib/onlinepayments/sdk/merchant/payments/payments_client.rb +322 -0
  232. data/lib/onlinepayments/sdk/merchant/payouts/payouts_client.rb +86 -0
  233. data/lib/onlinepayments/sdk/merchant/productgroups/get_product_group_params.rb +57 -0
  234. data/lib/onlinepayments/sdk/merchant/productgroups/get_product_groups_params.rb +57 -0
  235. data/lib/onlinepayments/sdk/merchant/productgroups/product_groups_client.rb +87 -0
  236. data/lib/onlinepayments/sdk/merchant/products/get_payment_product_networks_params.rb +38 -0
  237. data/lib/onlinepayments/sdk/merchant/products/get_payment_product_params.rb +57 -0
  238. data/lib/onlinepayments/sdk/merchant/products/get_payment_products_params.rb +57 -0
  239. data/lib/onlinepayments/sdk/merchant/products/get_product_directory_params.rb +30 -0
  240. data/lib/onlinepayments/sdk/merchant/products/products_client.rb +155 -0
  241. data/lib/onlinepayments/sdk/merchant/services/services_client.rb +82 -0
  242. data/lib/onlinepayments/sdk/merchant/sessions/sessions_client.rb +54 -0
  243. data/lib/onlinepayments/sdk/merchant/tokens/tokens_client.rb +116 -0
  244. data/lib/onlinepayments/sdk/meta_data_provider.rb +150 -0
  245. data/lib/onlinepayments/sdk/modules.rb +62 -0
  246. data/lib/onlinepayments/sdk/not_found_exception.rb +16 -0
  247. data/lib/onlinepayments/sdk/param_request.rb +11 -0
  248. data/lib/onlinepayments/sdk/payment_platform_exception.rb +15 -0
  249. data/lib/onlinepayments/sdk/pooled_connection.rb +21 -0
  250. data/lib/onlinepayments/sdk/proxy_configuration.rb +74 -0
  251. data/lib/onlinepayments/sdk/reference_exception.rb +14 -0
  252. data/lib/onlinepayments/sdk/request_header.rb +50 -0
  253. data/lib/onlinepayments/sdk/request_param.rb +23 -0
  254. data/lib/onlinepayments/sdk/response_exception.rb +47 -0
  255. data/lib/onlinepayments/sdk/response_header.rb +42 -0
  256. data/lib/onlinepayments/sdk/validation_exception.rb +14 -0
  257. data/lib/onlinepayments/sdk/webhooks/api_version_mismatch_exception.rb +20 -0
  258. data/lib/onlinepayments/sdk/webhooks/in_memory_secret_key_store.rb +56 -0
  259. data/lib/onlinepayments/sdk/webhooks/secret_key_not_available_exception.rb +17 -0
  260. data/lib/onlinepayments/sdk/webhooks/secret_key_store.rb +16 -0
  261. data/lib/onlinepayments/sdk/webhooks/signature_validation_exception.rb +19 -0
  262. data/lib/onlinepayments/sdk/webhooks/webhooks.rb +22 -0
  263. data/lib/onlinepayments/sdk/webhooks/webhooks_event.rb +58 -0
  264. data/lib/onlinepayments/sdk/webhooks/webhooks_helper.rb +100 -0
  265. data/lib/onlinepayments/sdk/webhooks/webhooks_helper_builder.rb +25 -0
  266. data/lib/onlinepayments/sdk/webhooks.rb +11 -0
  267. data/lib/onlinepayments/sdk.rb +26 -0
  268. data/onlinepayments-sdk-ruby.gemspec +28 -0
  269. metadata +416 -0
@@ -0,0 +1,19 @@
1
+ module OnlinePayments::SDK
2
+ module Webhooks
3
+
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) if args[:cause]
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ module OnlinePayments::SDK
2
+ module Webhooks
3
+ # Online Payments platform factory for several webhooks components
4
+ module Webhooks
5
+ DefaultMarshaller ||= OnlinePayments::SDK::DefaultImpl::DefaultMarshaller
6
+
7
+ # Creates a WebhooksHelperBuilder that uses the
8
+ # given SecretkeyStore
9
+ def self.create_helper_builder(secret_key_store)
10
+ WebhooksHelperBuilder.new
11
+ .with_marshaller(DefaultMarshaller.INSTANCE)
12
+ .with_secret_key_store(secret_key_store)
13
+ end
14
+
15
+ # Creates a WebhooksHelper that uses the given
16
+ # SecretkeyStore.
17
+ def self.create_helper(secret_key_store)
18
+ create_helper_builder(secret_key_store).build
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,58 @@
1
+ module OnlinePayments::SDK
2
+ module Webhooks
3
+
4
+ # @attr [String] api_version
5
+ # @attr [String] id
6
+ # @attr [String] created
7
+ # @attr [String] merchant_id
8
+ # @attr [String] type
9
+ # @attr [OnlinePayments::SDK::Domain::PaymentResponse] payment
10
+ # @attr [OnlinePayments::SDK::Domain::PayoutResponse] refund
11
+ # @attr [OnlinePayments::SDK::Domain::RefundResponse] payout
12
+ # @attr [OnlinePayments::SDK::Domain::TokenResponse] token
13
+ # @attr [OnlinePayments::SDK::Domain::DisputeResponse] dispute
14
+ class WebhooksEvent < OnlinePayments::SDK::DataObject
15
+
16
+ attr_accessor :api_version
17
+ attr_accessor :id
18
+ attr_accessor :created
19
+ attr_accessor :merchant_id
20
+ attr_accessor :type
21
+
22
+ attr_accessor :payment
23
+ attr_accessor :refund
24
+ attr_accessor :payout
25
+ attr_accessor :token
26
+ attr_accessor :dispute
27
+
28
+ # @return [Hash]
29
+ def to_h
30
+ hash = super
31
+ hash['apiVersion'] = @api_version if @api_version
32
+ hash['id'] = @id if @id
33
+ hash['created'] = @created if @created
34
+ hash['merchantId'] = @merchant_id if @merchant_id
35
+ hash['type'] = @type if @type
36
+ hash['payment'] = @payment.to_h if @payment
37
+ hash['refund'] = @refund.to_h if @refund
38
+ hash['payout'] = @payout.to_h if @payout
39
+ hash['token'] = @token.to_h if @token
40
+ hash['dispute'] = @dispute.to_h if @dispute
41
+ hash
42
+ end
43
+
44
+ def from_hash(hash)
45
+ super
46
+ @api_version = hash['apiVersion'] if hash.key? 'apiVersion'
47
+ @id = hash['id'] if hash.key? 'id'
48
+ @created = hash['created'] if hash.key? 'created'
49
+ @merchant_id = hash['merchantId'] if hash.key? 'merchantId'
50
+ @type = hash['type'] if hash.key? 'type'
51
+ @payment = OnlinePayments::SDK::Domain::PaymentResponse.new_from_hash(hash['payment']) if hash.key? 'payment'
52
+ @refund = OnlinePayments::SDK::Domain::RefundResponse.new_from_hash(hash['refund']) if hash.key? 'refund'
53
+ @payout = OnlinePayments::SDK::Domain::PayoutResponse.new_from_hash(hash['payout']) if hash.key? 'payout'
54
+ @token = OnlinePayments::SDK::Domain::TokenResponse.new_from_hash(hash['token']) if hash.key? 'token'
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,100 @@
1
+ require 'openssl'
2
+ require 'base64'
3
+
4
+ module OnlinePayments::SDK
5
+ module Webhooks
6
+
7
+ # Online Payments platform webhooks Helper, Thread-safe.
8
+ class WebhooksHelper
9
+ def initialize(marshaller, secret_key_store)
10
+ raise ArgumentError unless marshaller
11
+ raise ArgumentError unless secret_key_store
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<OnlinePayments::SDK::RequestHeader>] headers of the request
20
+ def unmarshal(body, request_headers)
21
+ validate(body, request_headers)
22
+ event = @marshaller.unmarshal(body, WebhooksEvent)
23
+ validate_api_version(event)
24
+ event
25
+ end
26
+
27
+ # Validates incoming request using request headers
28
+ #
29
+ # @param body [String] body of the request
30
+ # @param request_headers [Array<OnlinePayments::SDK::RequestHeader>] headers of the request
31
+ def validate(body, request_headers)
32
+ validate_body(body, request_headers)
33
+ end
34
+
35
+ private
36
+
37
+ HEADER_SIGNATURE = 'X-GCS-Signature'.freeze
38
+ HEADER_KEY_ID = 'X-GCS-KeyId'.freeze
39
+ HMAC_SCHEME = 'SHA256'.freeze
40
+
41
+ # validation utility methods
42
+
43
+ # Validates the body using given request headers
44
+ #
45
+ # @param body [String] body of the request
46
+ # @param request_headers [Array<OnlinePayments::SDK::RequestHeader>] headers of the request
47
+ def validate_body(body, request_headers)
48
+ signature = get_header_value(request_headers, HEADER_SIGNATURE)
49
+ key_id = get_header_value(request_headers, HEADER_KEY_ID)
50
+ secret_key = @secret_key_store.get_secret_key(key_id)
51
+ digest = OpenSSL::Digest.new(HMAC_SCHEME)
52
+ hmac = OpenSSL::HMAC.digest(digest, secret_key, body)
53
+ expected_signature = Base64.strict_encode64(hmac).strip
54
+
55
+ unless equal_signatures?(signature, expected_signature)
56
+ msg = "failed to validate signature '#{signature}'"
57
+ raise SignatureValidationException, message: msg
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, 'v1' unless 'v1'.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
91
+ # more than 2 headers
92
+ "encountered multiple occurrences of header '#{header_name}'"
93
+ end
94
+ raise SignatureValidationException, message: msg
95
+ end
96
+ right_header.first.value
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,25 @@
1
+ module OnlinePayments::SDK
2
+ module Webhooks
3
+
4
+ # Builder for a WebhooksHelper object.
5
+ class WebhooksHelperBuilder
6
+
7
+ # Sets the Marshaller to use.
8
+ def with_marshaller(marshaller)
9
+ @marshaller = marshaller
10
+ self
11
+ end
12
+
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
18
+
19
+ # Creates a fully initialized WebhooksHelper object
20
+ def build
21
+ WebhooksHelper.new(@marshaller, @secret_key_store)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,11 @@
1
+ prefix = 'onlinepayments/sdk/webhooks'
2
+
3
+ require "#{prefix}/api_version_mismatch_exception"
4
+ require "#{prefix}/signature_validation_exception"
5
+ require "#{prefix}/secret_key_not_available_exception"
6
+ require "#{prefix}/secret_key_store"
7
+ require "#{prefix}/in_memory_secret_key_store"
8
+ require "#{prefix}/webhooks_event"
9
+ require "#{prefix}/webhooks_helper"
10
+ require "#{prefix}/webhooks_helper_builder"
11
+ require "#{prefix}/webhooks"
@@ -0,0 +1,26 @@
1
+ prefix = 'onlinepayments/sdk'
2
+
3
+ require "#{prefix}/logging"
4
+ require "#{prefix}/exceptions"
5
+
6
+ require "#{prefix}/marshaller"
7
+ require "#{prefix}/response_header"
8
+ require "#{prefix}/authenticator"
9
+ require "#{prefix}/data_object"
10
+ require "#{prefix}/proxy_configuration"
11
+ require "#{prefix}/connection"
12
+ require "#{prefix}/pooled_connection"
13
+ require "#{prefix}/communicator"
14
+ require "#{prefix}/endpoint_configuration"
15
+ require "#{prefix}/communicator_configuration"
16
+ require "#{prefix}/client"
17
+ require "#{prefix}/call_context"
18
+ require "#{prefix}/api_resource"
19
+ require "#{prefix}/request_param"
20
+ require "#{prefix}/request_header"
21
+ require "#{prefix}/param_request"
22
+ require "#{prefix}/meta_data_provider"
23
+ require "#{prefix}/factory"
24
+
25
+ require "#{prefix}/defaultimpl"
26
+ require "#{prefix}/webhooks"
@@ -0,0 +1,28 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = 'onlinepayments-sdk-ruby'
3
+ spec.version = '3.0.0'
4
+ spec.authors = ['Worldline Direct support team']
5
+ spec.email = ['82139942+worldline-direct-support-team@users.noreply.github.com']
6
+ spec.summary = %q{SDK to communicate with the Online Payments platform using the Online Payments Server API}
7
+ spec.description = %q{SDK to communicate with the Online Payments platform using the Online Payments Server API}
8
+ spec.homepage = %q{https://github.com/wl-online-payments-direct/sdk-ruby}
9
+ spec.license = 'MIT'
10
+
11
+ # exclude hidden files like .gitignore
12
+ spec.files = Dir['lib/**/*'] + %w[onlinepayments-sdk-ruby.gemspec Gemfile LICENSE.txt Rakefile README.md]
13
+ spec.executables = spec.files.grep(%r{^bin\/}) { |f| File.basename(f) }
14
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)\/})
15
+ spec.require_paths = ['lib']
16
+
17
+ spec.required_ruby_version = '>= 2.0'
18
+
19
+ spec.add_dependency 'httpclient', '~> 2.8'
20
+ spec.add_dependency 'concurrent-ruby', '~>1.0'
21
+
22
+ spec.add_development_dependency 'yard', '~> 0.9'
23
+ spec.add_development_dependency 'rspec', '~> 3.5'
24
+ spec.add_development_dependency 'webmock', '~> 2.1'
25
+ spec.add_development_dependency 'sinatra', '~> 1.4'
26
+ spec.add_development_dependency 'rake', '~> 12.3', '>= 12.3.3'
27
+ # spec.metadata['yard.run'] = 'yri' # compiles yard doc on install
28
+ end