onlinepayments-sdk-python3 7.4.1__py3-none-any.whl

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 (475) hide show
  1. onlinepayments/__init__.py +0 -0
  2. onlinepayments/sdk/__init__.py +4 -0
  3. onlinepayments/sdk/api_exception.py +60 -0
  4. onlinepayments/sdk/api_resource.py +57 -0
  5. onlinepayments/sdk/authentication/__init__.py +0 -0
  6. onlinepayments/sdk/authentication/authenticator.py +24 -0
  7. onlinepayments/sdk/authentication/authorization_type.py +10 -0
  8. onlinepayments/sdk/authentication/v1hmac_authenticator.py +122 -0
  9. onlinepayments/sdk/authorization_exception.py +19 -0
  10. onlinepayments/sdk/call_context.py +72 -0
  11. onlinepayments/sdk/client.py +107 -0
  12. onlinepayments/sdk/communication/__init__.py +0 -0
  13. onlinepayments/sdk/communication/communication_exception.py +8 -0
  14. onlinepayments/sdk/communication/connection.py +84 -0
  15. onlinepayments/sdk/communication/default_connection.py +313 -0
  16. onlinepayments/sdk/communication/i_metadata_provider.py +19 -0
  17. onlinepayments/sdk/communication/metadata_provider.py +132 -0
  18. onlinepayments/sdk/communication/multipart_form_data_object.py +51 -0
  19. onlinepayments/sdk/communication/multipart_form_data_request.py +16 -0
  20. onlinepayments/sdk/communication/not_found_exception.py +10 -0
  21. onlinepayments/sdk/communication/param_request.py +17 -0
  22. onlinepayments/sdk/communication/pooled_connection.py +29 -0
  23. onlinepayments/sdk/communication/request_header.py +60 -0
  24. onlinepayments/sdk/communication/request_param.py +30 -0
  25. onlinepayments/sdk/communication/response_exception.py +58 -0
  26. onlinepayments/sdk/communication/response_header.py +50 -0
  27. onlinepayments/sdk/communicator.py +465 -0
  28. onlinepayments/sdk/communicator_configuration.py +264 -0
  29. onlinepayments/sdk/declined_payment_exception.py +46 -0
  30. onlinepayments/sdk/declined_payout_exception.py +46 -0
  31. onlinepayments/sdk/declined_refund_exception.py +46 -0
  32. onlinepayments/sdk/declined_transaction_exception.py +22 -0
  33. onlinepayments/sdk/domain/__init__.py +4 -0
  34. onlinepayments/sdk/domain/acceptance.py +56 -0
  35. onlinepayments/sdk/domain/account_on_file.py +102 -0
  36. onlinepayments/sdk/domain/account_on_file_attribute.py +97 -0
  37. onlinepayments/sdk/domain/account_on_file_display_hints.py +64 -0
  38. onlinepayments/sdk/domain/acquirer_information.py +59 -0
  39. onlinepayments/sdk/domain/acquirer_selection_information.py +73 -0
  40. onlinepayments/sdk/domain/additional_order_input.py +107 -0
  41. onlinepayments/sdk/domain/address.py +145 -0
  42. onlinepayments/sdk/domain/address_personal.py +185 -0
  43. onlinepayments/sdk/domain/airline_data.py +519 -0
  44. onlinepayments/sdk/domain/airline_flight_leg.py +386 -0
  45. onlinepayments/sdk/domain/airline_passenger.py +129 -0
  46. onlinepayments/sdk/domain/amount_breakdown.py +63 -0
  47. onlinepayments/sdk/domain/amount_of_money.py +59 -0
  48. onlinepayments/sdk/domain/api_error.py +177 -0
  49. onlinepayments/sdk/domain/apple_pay_line_item.py +145 -0
  50. onlinepayments/sdk/domain/apple_pay_recurring_payment_request.py +116 -0
  51. onlinepayments/sdk/domain/bank_account_iban.py +37 -0
  52. onlinepayments/sdk/domain/batch_metadata.py +73 -0
  53. onlinepayments/sdk/domain/browser_data.py +130 -0
  54. onlinepayments/sdk/domain/calculate_surcharge_request.py +63 -0
  55. onlinepayments/sdk/domain/calculate_surcharge_response.py +44 -0
  56. onlinepayments/sdk/domain/cancel_payment_batch_request.py +57 -0
  57. onlinepayments/sdk/domain/cancel_payment_request.py +130 -0
  58. onlinepayments/sdk/domain/cancel_payment_response.py +41 -0
  59. onlinepayments/sdk/domain/capture.py +97 -0
  60. onlinepayments/sdk/domain/capture_output.py +272 -0
  61. onlinepayments/sdk/domain/capture_payment_batch_request.py +57 -0
  62. onlinepayments/sdk/domain/capture_payment_request.py +148 -0
  63. onlinepayments/sdk/domain/capture_response.py +99 -0
  64. onlinepayments/sdk/domain/capture_status_output.py +37 -0
  65. onlinepayments/sdk/domain/captures_response.py +46 -0
  66. onlinepayments/sdk/domain/card.py +91 -0
  67. onlinepayments/sdk/domain/card_bin_details.py +384 -0
  68. onlinepayments/sdk/domain/card_data_without_cvv.py +73 -0
  69. onlinepayments/sdk/domain/card_essentials.py +438 -0
  70. onlinepayments/sdk/domain/card_fraud_results.py +112 -0
  71. onlinepayments/sdk/domain/card_info.py +55 -0
  72. onlinepayments/sdk/domain/card_payment_method_specific_input.py +608 -0
  73. onlinepayments/sdk/domain/card_payment_method_specific_input_base.py +441 -0
  74. onlinepayments/sdk/domain/card_payment_method_specific_input_for_hosted_checkout.py +105 -0
  75. onlinepayments/sdk/domain/card_payment_method_specific_output.py +467 -0
  76. onlinepayments/sdk/domain/card_payout_method_specific_input.py +99 -0
  77. onlinepayments/sdk/domain/card_recurrence_details.py +40 -0
  78. onlinepayments/sdk/domain/card_source.py +95 -0
  79. onlinepayments/sdk/domain/card_without_cvv.py +73 -0
  80. onlinepayments/sdk/domain/click_to_pay.py +37 -0
  81. onlinepayments/sdk/domain/company_information.py +37 -0
  82. onlinepayments/sdk/domain/complete_payment_card_payment_method_specific_input.py +39 -0
  83. onlinepayments/sdk/domain/complete_payment_request.py +61 -0
  84. onlinepayments/sdk/domain/complete_payment_response.py +85 -0
  85. onlinepayments/sdk/domain/contact_details.py +109 -0
  86. onlinepayments/sdk/domain/create_certificate_response.py +55 -0
  87. onlinepayments/sdk/domain/create_hosted_checkout_request.py +195 -0
  88. onlinepayments/sdk/domain/create_hosted_checkout_response.py +132 -0
  89. onlinepayments/sdk/domain/create_hosted_fields_session_request.py +37 -0
  90. onlinepayments/sdk/domain/create_hosted_fields_session_response.py +102 -0
  91. onlinepayments/sdk/domain/create_hosted_tokenization_request.py +133 -0
  92. onlinepayments/sdk/domain/create_hosted_tokenization_response.py +127 -0
  93. onlinepayments/sdk/domain/create_mandate_request.py +187 -0
  94. onlinepayments/sdk/domain/create_mandate_response.py +63 -0
  95. onlinepayments/sdk/domain/create_mandate_with_return_url.py +187 -0
  96. onlinepayments/sdk/domain/create_payment_link_request.py +344 -0
  97. onlinepayments/sdk/domain/create_payment_request.py +249 -0
  98. onlinepayments/sdk/domain/create_payment_response.py +85 -0
  99. onlinepayments/sdk/domain/create_payout_request.py +176 -0
  100. onlinepayments/sdk/domain/create_token_request.py +77 -0
  101. onlinepayments/sdk/domain/created_payment_output.py +57 -0
  102. onlinepayments/sdk/domain/created_token_response.py +142 -0
  103. onlinepayments/sdk/domain/credit_card_specific_input_hosted_tokenization.py +66 -0
  104. onlinepayments/sdk/domain/credit_card_validation_rules.py +55 -0
  105. onlinepayments/sdk/domain/credit_card_validation_rules_hosted_tokenization.py +55 -0
  106. onlinepayments/sdk/domain/crm_token.py +55 -0
  107. onlinepayments/sdk/domain/csr_request.py +37 -0
  108. onlinepayments/sdk/domain/currency_conversion.py +59 -0
  109. onlinepayments/sdk/domain/currency_conversion_input.py +55 -0
  110. onlinepayments/sdk/domain/currency_conversion_request.py +59 -0
  111. onlinepayments/sdk/domain/currency_conversion_response.py +81 -0
  112. onlinepayments/sdk/domain/currency_conversion_result.py +61 -0
  113. onlinepayments/sdk/domain/currency_conversion_specific_input.py +40 -0
  114. onlinepayments/sdk/domain/customer.py +234 -0
  115. onlinepayments/sdk/domain/customer_account.py +204 -0
  116. onlinepayments/sdk/domain/customer_account_authentication.py +81 -0
  117. onlinepayments/sdk/domain/customer_bank_account.py +73 -0
  118. onlinepayments/sdk/domain/customer_device.py +155 -0
  119. onlinepayments/sdk/domain/customer_device_output.py +37 -0
  120. onlinepayments/sdk/domain/customer_output.py +41 -0
  121. onlinepayments/sdk/domain/customer_payment_activity.py +73 -0
  122. onlinepayments/sdk/domain/customer_token.py +83 -0
  123. onlinepayments/sdk/domain/data_object.py +47 -0
  124. onlinepayments/sdk/domain/dcc_card_source.py +93 -0
  125. onlinepayments/sdk/domain/dcc_proposal.py +118 -0
  126. onlinepayments/sdk/domain/decrypted_payment_data.py +120 -0
  127. onlinepayments/sdk/domain/detokenization_response.py +46 -0
  128. onlinepayments/sdk/domain/detokenized_token_response.py +145 -0
  129. onlinepayments/sdk/domain/directory_entry.py +73 -0
  130. onlinepayments/sdk/domain/discount.py +41 -0
  131. onlinepayments/sdk/domain/empty_validator.py +16 -0
  132. onlinepayments/sdk/domain/error_response.py +64 -0
  133. onlinepayments/sdk/domain/external_cardholder_authentication_data.py +216 -0
  134. onlinepayments/sdk/domain/external_token_linked.py +75 -0
  135. onlinepayments/sdk/domain/feedbacks.py +64 -0
  136. onlinepayments/sdk/domain/fixed_list_validator.py +42 -0
  137. onlinepayments/sdk/domain/fraud_fields.py +84 -0
  138. onlinepayments/sdk/domain/fraud_results.py +43 -0
  139. onlinepayments/sdk/domain/g_pay_three_d_secure.py +159 -0
  140. onlinepayments/sdk/domain/get_batch_status_response.py +91 -0
  141. onlinepayments/sdk/domain/get_hosted_checkout_response.py +63 -0
  142. onlinepayments/sdk/domain/get_hosted_tokenization_response.py +61 -0
  143. onlinepayments/sdk/domain/get_iin_details_request.py +57 -0
  144. onlinepayments/sdk/domain/get_iin_details_response.py +450 -0
  145. onlinepayments/sdk/domain/get_mandate_response.py +41 -0
  146. onlinepayments/sdk/domain/get_payment_product_groups_response.py +44 -0
  147. onlinepayments/sdk/domain/get_payment_products_response.py +44 -0
  148. onlinepayments/sdk/domain/get_privacy_policy_response.py +37 -0
  149. onlinepayments/sdk/domain/gift_card_purchase.py +59 -0
  150. onlinepayments/sdk/domain/hosted_checkout_specific_input.py +250 -0
  151. onlinepayments/sdk/domain/hosted_checkout_specific_output.py +55 -0
  152. onlinepayments/sdk/domain/iin_detail.py +423 -0
  153. onlinepayments/sdk/domain/import_cof_series_request.py +113 -0
  154. onlinepayments/sdk/domain/import_cof_series_response.py +37 -0
  155. onlinepayments/sdk/domain/label_template_element.py +55 -0
  156. onlinepayments/sdk/domain/length_validator.py +51 -0
  157. onlinepayments/sdk/domain/line_item.py +107 -0
  158. onlinepayments/sdk/domain/line_item_detail.py +99 -0
  159. onlinepayments/sdk/domain/line_item_invoice_data.py +37 -0
  160. onlinepayments/sdk/domain/loan_recipient.py +109 -0
  161. onlinepayments/sdk/domain/lodging_data.py +37 -0
  162. onlinepayments/sdk/domain/mandate_address.py +109 -0
  163. onlinepayments/sdk/domain/mandate_address_response.py +109 -0
  164. onlinepayments/sdk/domain/mandate_contact_details.py +37 -0
  165. onlinepayments/sdk/domain/mandate_customer.py +125 -0
  166. onlinepayments/sdk/domain/mandate_customer_response.py +125 -0
  167. onlinepayments/sdk/domain/mandate_merchant_action.py +61 -0
  168. onlinepayments/sdk/domain/mandate_personal_information.py +59 -0
  169. onlinepayments/sdk/domain/mandate_personal_information_response.py +59 -0
  170. onlinepayments/sdk/domain/mandate_personal_name.py +55 -0
  171. onlinepayments/sdk/domain/mandate_personal_name_response.py +55 -0
  172. onlinepayments/sdk/domain/mandate_redirect_data.py +55 -0
  173. onlinepayments/sdk/domain/mandate_response.py +150 -0
  174. onlinepayments/sdk/domain/market_place.py +55 -0
  175. onlinepayments/sdk/domain/merchant_action.py +132 -0
  176. onlinepayments/sdk/domain/mobile_payment_data.py +55 -0
  177. onlinepayments/sdk/domain/mobile_payment_method_hosted_checkout_specific_input.py +105 -0
  178. onlinepayments/sdk/domain/mobile_payment_method_specific_input.py +202 -0
  179. onlinepayments/sdk/domain/mobile_payment_method_specific_output.py +139 -0
  180. onlinepayments/sdk/domain/mobile_payment_product302_specific_input.py +103 -0
  181. onlinepayments/sdk/domain/mobile_payment_product320_specific_input.py +103 -0
  182. onlinepayments/sdk/domain/mobile_three_d_secure_challenge_parameters.py +91 -0
  183. onlinepayments/sdk/domain/multiple_payment_information.py +57 -0
  184. onlinepayments/sdk/domain/network_token_data.py +127 -0
  185. onlinepayments/sdk/domain/network_token_essentials.py +134 -0
  186. onlinepayments/sdk/domain/network_token_linked.py +80 -0
  187. onlinepayments/sdk/domain/omnichannel_payment_specific_input.py +37 -0
  188. onlinepayments/sdk/domain/omnichannel_payout_specific_input.py +55 -0
  189. onlinepayments/sdk/domain/omnichannel_refund_specific_input.py +37 -0
  190. onlinepayments/sdk/domain/omnichannel_subsequent_specific_input.py +37 -0
  191. onlinepayments/sdk/domain/operation_output.py +161 -0
  192. onlinepayments/sdk/domain/operation_payment_references.py +55 -0
  193. onlinepayments/sdk/domain/order.py +213 -0
  194. onlinepayments/sdk/domain/order_line_details.py +189 -0
  195. onlinepayments/sdk/domain/order_references.py +120 -0
  196. onlinepayments/sdk/domain/order_status_output.py +119 -0
  197. onlinepayments/sdk/domain/order_type_information.py +64 -0
  198. onlinepayments/sdk/domain/other_details.py +55 -0
  199. onlinepayments/sdk/domain/payment_account_on_file.py +57 -0
  200. onlinepayments/sdk/domain/payment_context.py +77 -0
  201. onlinepayments/sdk/domain/payment_creation_output.py +94 -0
  202. onlinepayments/sdk/domain/payment_details_response.py +148 -0
  203. onlinepayments/sdk/domain/payment_error_response.py +84 -0
  204. onlinepayments/sdk/domain/payment_link_event.py +73 -0
  205. onlinepayments/sdk/domain/payment_link_order_input.py +84 -0
  206. onlinepayments/sdk/domain/payment_link_order_output.py +81 -0
  207. onlinepayments/sdk/domain/payment_link_response.py +216 -0
  208. onlinepayments/sdk/domain/payment_link_specific_input.py +74 -0
  209. onlinepayments/sdk/domain/payment_links_response.py +44 -0
  210. onlinepayments/sdk/domain/payment_output.py +335 -0
  211. onlinepayments/sdk/domain/payment_product.py +296 -0
  212. onlinepayments/sdk/domain/payment_product130_specific_input.py +41 -0
  213. onlinepayments/sdk/domain/payment_product130_specific_three_d_secure.py +91 -0
  214. onlinepayments/sdk/domain/payment_product3012.py +55 -0
  215. onlinepayments/sdk/domain/payment_product3012_specific_input.py +100 -0
  216. onlinepayments/sdk/domain/payment_product3013_specific_input.py +73 -0
  217. onlinepayments/sdk/domain/payment_product302_specific_data.py +44 -0
  218. onlinepayments/sdk/domain/payment_product3203_specific_output.py +62 -0
  219. onlinepayments/sdk/domain/payment_product3204_specific_output.py +37 -0
  220. onlinepayments/sdk/domain/payment_product3208_specific_input.py +37 -0
  221. onlinepayments/sdk/domain/payment_product3208_specific_output.py +37 -0
  222. onlinepayments/sdk/domain/payment_product3209_specific_input.py +37 -0
  223. onlinepayments/sdk/domain/payment_product3209_specific_output.py +37 -0
  224. onlinepayments/sdk/domain/payment_product320_specific_data.py +62 -0
  225. onlinepayments/sdk/domain/payment_product350.py +55 -0
  226. onlinepayments/sdk/domain/payment_product5001.py +58 -0
  227. onlinepayments/sdk/domain/payment_product5001_specific_output.py +112 -0
  228. onlinepayments/sdk/domain/payment_product5100_specific_input.py +37 -0
  229. onlinepayments/sdk/domain/payment_product5402_specific_output.py +37 -0
  230. onlinepayments/sdk/domain/payment_product5404.py +55 -0
  231. onlinepayments/sdk/domain/payment_product5407.py +55 -0
  232. onlinepayments/sdk/domain/payment_product5500_specific_output.py +91 -0
  233. onlinepayments/sdk/domain/payment_product771_specific_output.py +37 -0
  234. onlinepayments/sdk/domain/payment_product840.py +37 -0
  235. onlinepayments/sdk/domain/payment_product840_customer_account.py +170 -0
  236. onlinepayments/sdk/domain/payment_product840_specific_output.py +167 -0
  237. onlinepayments/sdk/domain/payment_product_display_hints.py +73 -0
  238. onlinepayments/sdk/domain/payment_product_field.py +95 -0
  239. onlinepayments/sdk/domain/payment_product_field_data_restrictions.py +60 -0
  240. onlinepayments/sdk/domain/payment_product_field_display_element.py +97 -0
  241. onlinepayments/sdk/domain/payment_product_field_display_hints.py +218 -0
  242. onlinepayments/sdk/domain/payment_product_field_form_element.py +72 -0
  243. onlinepayments/sdk/domain/payment_product_field_tooltip.py +57 -0
  244. onlinepayments/sdk/domain/payment_product_field_validators.py +195 -0
  245. onlinepayments/sdk/domain/payment_product_filter.py +67 -0
  246. onlinepayments/sdk/domain/payment_product_filter_hosted_tokenization.py +42 -0
  247. onlinepayments/sdk/domain/payment_product_filters_hosted_checkout.py +62 -0
  248. onlinepayments/sdk/domain/payment_product_filters_hosted_tokenization.py +62 -0
  249. onlinepayments/sdk/domain/payment_product_group.py +103 -0
  250. onlinepayments/sdk/domain/payment_product_networks_response.py +42 -0
  251. onlinepayments/sdk/domain/payment_references.py +73 -0
  252. onlinepayments/sdk/domain/payment_response.py +143 -0
  253. onlinepayments/sdk/domain/payment_status_output.py +152 -0
  254. onlinepayments/sdk/domain/payout_error_response.py +80 -0
  255. onlinepayments/sdk/domain/payout_output.py +63 -0
  256. onlinepayments/sdk/domain/payout_response.py +93 -0
  257. onlinepayments/sdk/domain/payout_result.py +93 -0
  258. onlinepayments/sdk/domain/payout_status_output.py +76 -0
  259. onlinepayments/sdk/domain/pending_authentication.py +37 -0
  260. onlinepayments/sdk/domain/personal_information.py +77 -0
  261. onlinepayments/sdk/domain/personal_information_token.py +39 -0
  262. onlinepayments/sdk/domain/personal_name.py +73 -0
  263. onlinepayments/sdk/domain/personal_name_token.py +51 -0
  264. onlinepayments/sdk/domain/product302_recurring.py +37 -0
  265. onlinepayments/sdk/domain/product320_recurring.py +37 -0
  266. onlinepayments/sdk/domain/product_directory.py +46 -0
  267. onlinepayments/sdk/domain/protection_eligibility.py +59 -0
  268. onlinepayments/sdk/domain/range_validator.py +51 -0
  269. onlinepayments/sdk/domain/rate_details.py +109 -0
  270. onlinepayments/sdk/domain/reattempt_instructions.py +82 -0
  271. onlinepayments/sdk/domain/reattempt_instructions_conditions.py +55 -0
  272. onlinepayments/sdk/domain/redirect_data.py +55 -0
  273. onlinepayments/sdk/domain/redirect_payment_method_specific_input.py +575 -0
  274. onlinepayments/sdk/domain/redirect_payment_method_specific_output.py +267 -0
  275. onlinepayments/sdk/domain/redirect_payment_product11_specific_input.py +38 -0
  276. onlinepayments/sdk/domain/redirect_payment_product3103_specific_input.py +40 -0
  277. onlinepayments/sdk/domain/redirect_payment_product3112_specific_input.py +40 -0
  278. onlinepayments/sdk/domain/redirect_payment_product3116_specific_input.py +40 -0
  279. onlinepayments/sdk/domain/redirect_payment_product3203_specific_input.py +40 -0
  280. onlinepayments/sdk/domain/redirect_payment_product3204_specific_input.py +55 -0
  281. onlinepayments/sdk/domain/redirect_payment_product3302_specific_input.py +73 -0
  282. onlinepayments/sdk/domain/redirect_payment_product3306_specific_input.py +37 -0
  283. onlinepayments/sdk/domain/redirect_payment_product3307_specific_input.py +16 -0
  284. onlinepayments/sdk/domain/redirect_payment_product5001_specific_input.py +62 -0
  285. onlinepayments/sdk/domain/redirect_payment_product5300_specific_input.py +163 -0
  286. onlinepayments/sdk/domain/redirect_payment_product5402_specific_input.py +40 -0
  287. onlinepayments/sdk/domain/redirect_payment_product5403_specific_input.py +40 -0
  288. onlinepayments/sdk/domain/redirect_payment_product5406_specific_input.py +41 -0
  289. onlinepayments/sdk/domain/redirect_payment_product5408_specific_input.py +60 -0
  290. onlinepayments/sdk/domain/redirect_payment_product5410_specific_input.py +38 -0
  291. onlinepayments/sdk/domain/redirect_payment_product5412_specific_input.py +55 -0
  292. onlinepayments/sdk/domain/redirect_payment_product5601_specific_input.py +40 -0
  293. onlinepayments/sdk/domain/redirect_payment_product809_specific_input.py +40 -0
  294. onlinepayments/sdk/domain/redirect_payment_product840_specific_input.py +100 -0
  295. onlinepayments/sdk/domain/redirection_data.py +37 -0
  296. onlinepayments/sdk/domain/refund_card_method_specific_output.py +71 -0
  297. onlinepayments/sdk/domain/refund_e_wallet_method_specific_output.py +71 -0
  298. onlinepayments/sdk/domain/refund_error_response.py +82 -0
  299. onlinepayments/sdk/domain/refund_mobile_method_specific_output.py +69 -0
  300. onlinepayments/sdk/domain/refund_output.py +217 -0
  301. onlinepayments/sdk/domain/refund_payment_batch_request.py +57 -0
  302. onlinepayments/sdk/domain/refund_payment_product840_customer_account.py +69 -0
  303. onlinepayments/sdk/domain/refund_payment_product840_specific_output.py +39 -0
  304. onlinepayments/sdk/domain/refund_redirect_method_specific_output.py +51 -0
  305. onlinepayments/sdk/domain/refund_redirect_payment_method_specific_input.py +41 -0
  306. onlinepayments/sdk/domain/refund_redirect_payment_product900_specific_input.py +37 -0
  307. onlinepayments/sdk/domain/refund_request.py +210 -0
  308. onlinepayments/sdk/domain/refund_response.py +97 -0
  309. onlinepayments/sdk/domain/refunds_response.py +46 -0
  310. onlinepayments/sdk/domain/regular_expression_validator.py +35 -0
  311. onlinepayments/sdk/domain/revoke_mandate_request.py +48 -0
  312. onlinepayments/sdk/domain/send_test_request.py +37 -0
  313. onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_input.py +59 -0
  314. onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_input_base.py +59 -0
  315. onlinepayments/sdk/domain/sepa_direct_debit_payment_method_specific_output.py +81 -0
  316. onlinepayments/sdk/domain/sepa_direct_debit_payment_product771_specific_input.py +59 -0
  317. onlinepayments/sdk/domain/sepa_direct_debit_payment_product771_specific_input_base.py +59 -0
  318. onlinepayments/sdk/domain/session_data.py +116 -0
  319. onlinepayments/sdk/domain/session_details.py +55 -0
  320. onlinepayments/sdk/domain/session_request.py +44 -0
  321. onlinepayments/sdk/domain/session_response.py +114 -0
  322. onlinepayments/sdk/domain/shipping.py +214 -0
  323. onlinepayments/sdk/domain/shipping_detail.py +63 -0
  324. onlinepayments/sdk/domain/shipping_method.py +91 -0
  325. onlinepayments/sdk/domain/shopping_cart.py +155 -0
  326. onlinepayments/sdk/domain/shopping_cart_extension.py +77 -0
  327. onlinepayments/sdk/domain/shopping_cart_output.py +46 -0
  328. onlinepayments/sdk/domain/show_form_data.py +173 -0
  329. onlinepayments/sdk/domain/show_instructions_data.py +37 -0
  330. onlinepayments/sdk/domain/split_payment_product_filter.py +42 -0
  331. onlinepayments/sdk/domain/split_payment_product_filters_hosted_checkout.py +62 -0
  332. onlinepayments/sdk/domain/submit_batch_request_body.py +230 -0
  333. onlinepayments/sdk/domain/submit_batch_response.py +55 -0
  334. onlinepayments/sdk/domain/subsequent_card_payment_method_specific_input.py +175 -0
  335. onlinepayments/sdk/domain/subsequent_payment_batch_request.py +57 -0
  336. onlinepayments/sdk/domain/subsequent_payment_product5001_specific_input.py +41 -0
  337. onlinepayments/sdk/domain/subsequent_payment_request.py +107 -0
  338. onlinepayments/sdk/domain/subsequent_payment_response.py +41 -0
  339. onlinepayments/sdk/domain/surcharge.py +141 -0
  340. onlinepayments/sdk/domain/surcharge_calculation_card.py +55 -0
  341. onlinepayments/sdk/domain/surcharge_for_payment_link.py +40 -0
  342. onlinepayments/sdk/domain/surcharge_rate.py +91 -0
  343. onlinepayments/sdk/domain/surcharge_specific_input.py +62 -0
  344. onlinepayments/sdk/domain/surcharge_specific_output.py +84 -0
  345. onlinepayments/sdk/domain/test_connection.py +35 -0
  346. onlinepayments/sdk/domain/three_d_secure.py +281 -0
  347. onlinepayments/sdk/domain/three_d_secure_base.py +219 -0
  348. onlinepayments/sdk/domain/three_d_secure_data.py +78 -0
  349. onlinepayments/sdk/domain/three_d_secure_results.py +266 -0
  350. onlinepayments/sdk/domain/token_card.py +57 -0
  351. onlinepayments/sdk/domain/token_card_data.py +83 -0
  352. onlinepayments/sdk/domain/token_card_specific_input.py +41 -0
  353. onlinepayments/sdk/domain/token_data.py +63 -0
  354. onlinepayments/sdk/domain/token_e_wallet.py +59 -0
  355. onlinepayments/sdk/domain/token_response.py +181 -0
  356. onlinepayments/sdk/domain/transaction.py +41 -0
  357. onlinepayments/sdk/domain/uploadable_file.py +51 -0
  358. onlinepayments/sdk/domain/validate_credentials_request.py +55 -0
  359. onlinepayments/sdk/domain/validate_credentials_response.py +37 -0
  360. onlinepayments/sdk/domain/value_mapping_element.py +62 -0
  361. onlinepayments/sdk/domain/web_hooks_event.py +214 -0
  362. onlinepayments/sdk/exception_factory.py +75 -0
  363. onlinepayments/sdk/factory.py +127 -0
  364. onlinepayments/sdk/i_client.py +78 -0
  365. onlinepayments/sdk/i_communicator.py +180 -0
  366. onlinepayments/sdk/idempotence_exception.py +36 -0
  367. onlinepayments/sdk/json/__init__.py +0 -0
  368. onlinepayments/sdk/json/default_marshaller.py +60 -0
  369. onlinepayments/sdk/json/marshaller.py +32 -0
  370. onlinepayments/sdk/json/marshaller_syntax_exception.py +13 -0
  371. onlinepayments/sdk/log/__init__.py +0 -0
  372. onlinepayments/sdk/log/body_obfuscator.py +113 -0
  373. onlinepayments/sdk/log/communicator_logger.py +35 -0
  374. onlinepayments/sdk/log/header_obfuscator.py +49 -0
  375. onlinepayments/sdk/log/log_message.py +94 -0
  376. onlinepayments/sdk/log/logging_capable.py +26 -0
  377. onlinepayments/sdk/log/obfuscation_capable.py +24 -0
  378. onlinepayments/sdk/log/obfuscation_rule.py +50 -0
  379. onlinepayments/sdk/log/python_communicator_logger.py +54 -0
  380. onlinepayments/sdk/log/request_log_message.py +28 -0
  381. onlinepayments/sdk/log/response_log_message.py +37 -0
  382. onlinepayments/sdk/log/sys_out_communicator_logger.py +36 -0
  383. onlinepayments/sdk/merchant/__init__.py +4 -0
  384. onlinepayments/sdk/merchant/captures/__init__.py +4 -0
  385. onlinepayments/sdk/merchant/captures/captures_client.py +63 -0
  386. onlinepayments/sdk/merchant/captures/i_captures_client.py +34 -0
  387. onlinepayments/sdk/merchant/cofseries/__init__.py +4 -0
  388. onlinepayments/sdk/merchant/cofseries/cof_series_client.py +62 -0
  389. onlinepayments/sdk/merchant/cofseries/i_cof_series_client.py +35 -0
  390. onlinepayments/sdk/merchant/complete/__init__.py +4 -0
  391. onlinepayments/sdk/merchant/complete/complete_client.py +67 -0
  392. onlinepayments/sdk/merchant/complete/i_complete_client.py +37 -0
  393. onlinepayments/sdk/merchant/hostedcheckout/__init__.py +4 -0
  394. onlinepayments/sdk/merchant/hostedcheckout/hosted_checkout_client.py +99 -0
  395. onlinepayments/sdk/merchant/hostedcheckout/i_hosted_checkout_client.py +55 -0
  396. onlinepayments/sdk/merchant/hostedfields/__init__.py +4 -0
  397. onlinepayments/sdk/merchant/hostedfields/hosted_fields_client.py +62 -0
  398. onlinepayments/sdk/merchant/hostedfields/i_hosted_fields_client.py +35 -0
  399. onlinepayments/sdk/merchant/hostedtokenization/__init__.py +4 -0
  400. onlinepayments/sdk/merchant/hostedtokenization/hosted_tokenization_client.py +99 -0
  401. onlinepayments/sdk/merchant/hostedtokenization/i_hosted_tokenization_client.py +55 -0
  402. onlinepayments/sdk/merchant/i_merchant_client.py +202 -0
  403. onlinepayments/sdk/merchant/mandates/__init__.py +4 -0
  404. onlinepayments/sdk/merchant/mandates/i_mandates_client.py +114 -0
  405. onlinepayments/sdk/merchant/mandates/mandates_client.py +212 -0
  406. onlinepayments/sdk/merchant/merchant_client.py +232 -0
  407. onlinepayments/sdk/merchant/merchantbatch/__init__.py +4 -0
  408. onlinepayments/sdk/merchant/merchantbatch/i_merchant_batch_client.py +74 -0
  409. onlinepayments/sdk/merchant/merchantbatch/merchant_batch_client.py +138 -0
  410. onlinepayments/sdk/merchant/paymentlinks/__init__.py +4 -0
  411. onlinepayments/sdk/merchant/paymentlinks/get_payment_links_in_bulk_params.py +36 -0
  412. onlinepayments/sdk/merchant/paymentlinks/i_payment_links_client.py +73 -0
  413. onlinepayments/sdk/merchant/paymentlinks/payment_links_client.py +135 -0
  414. onlinepayments/sdk/merchant/payments/__init__.py +4 -0
  415. onlinepayments/sdk/merchant/payments/i_payments_client.py +143 -0
  416. onlinepayments/sdk/merchant/payments/payments_client.py +260 -0
  417. onlinepayments/sdk/merchant/payouts/__init__.py +4 -0
  418. onlinepayments/sdk/merchant/payouts/i_payouts_client.py +55 -0
  419. onlinepayments/sdk/merchant/payouts/payouts_client.py +100 -0
  420. onlinepayments/sdk/merchant/privacypolicy/__init__.py +4 -0
  421. onlinepayments/sdk/merchant/privacypolicy/get_privacy_policy_params.py +54 -0
  422. onlinepayments/sdk/merchant/privacypolicy/i_privacy_policy_client.py +36 -0
  423. onlinepayments/sdk/merchant/privacypolicy/privacy_policy_client.py +61 -0
  424. onlinepayments/sdk/merchant/productgroups/__init__.py +4 -0
  425. onlinepayments/sdk/merchant/productgroups/get_product_group_params.py +140 -0
  426. onlinepayments/sdk/merchant/productgroups/get_product_groups_params.py +140 -0
  427. onlinepayments/sdk/merchant/productgroups/i_product_groups_client.py +58 -0
  428. onlinepayments/sdk/merchant/productgroups/product_groups_client.py +100 -0
  429. onlinepayments/sdk/merchant/products/__init__.py +4 -0
  430. onlinepayments/sdk/merchant/products/get_payment_product_networks_params.py +89 -0
  431. onlinepayments/sdk/merchant/products/get_payment_product_params.py +138 -0
  432. onlinepayments/sdk/merchant/products/get_payment_products_params.py +138 -0
  433. onlinepayments/sdk/merchant/products/get_product_directory_params.py +54 -0
  434. onlinepayments/sdk/merchant/products/i_products_client.py +102 -0
  435. onlinepayments/sdk/merchant/products/products_client.py +178 -0
  436. onlinepayments/sdk/merchant/refunds/__init__.py +4 -0
  437. onlinepayments/sdk/merchant/refunds/i_refunds_client.py +34 -0
  438. onlinepayments/sdk/merchant/refunds/refunds_client.py +63 -0
  439. onlinepayments/sdk/merchant/services/__init__.py +4 -0
  440. onlinepayments/sdk/merchant/services/i_services_client.py +96 -0
  441. onlinepayments/sdk/merchant/services/services_client.py +167 -0
  442. onlinepayments/sdk/merchant/sessions/__init__.py +4 -0
  443. onlinepayments/sdk/merchant/sessions/i_sessions_client.py +35 -0
  444. onlinepayments/sdk/merchant/sessions/sessions_client.py +62 -0
  445. onlinepayments/sdk/merchant/subsequent/__init__.py +4 -0
  446. onlinepayments/sdk/merchant/subsequent/i_subsequent_client.py +37 -0
  447. onlinepayments/sdk/merchant/subsequent/subsequent_client.py +67 -0
  448. onlinepayments/sdk/merchant/tokenization/__init__.py +4 -0
  449. onlinepayments/sdk/merchant/tokenization/get_card_data_by_payments_params.py +48 -0
  450. onlinepayments/sdk/merchant/tokenization/get_card_data_by_tokens_params.py +48 -0
  451. onlinepayments/sdk/merchant/tokenization/i_tokenization_client.py +77 -0
  452. onlinepayments/sdk/merchant/tokenization/tokenization_client.py +131 -0
  453. onlinepayments/sdk/merchant/tokens/__init__.py +4 -0
  454. onlinepayments/sdk/merchant/tokens/i_tokens_client.py +74 -0
  455. onlinepayments/sdk/merchant/tokens/tokens_client.py +135 -0
  456. onlinepayments/sdk/merchant/webhooks/__init__.py +4 -0
  457. onlinepayments/sdk/merchant/webhooks/i_webhooks_client.py +55 -0
  458. onlinepayments/sdk/merchant/webhooks/webhooks_client.py +97 -0
  459. onlinepayments/sdk/platform_exception.py +19 -0
  460. onlinepayments/sdk/proxy_configuration.py +102 -0
  461. onlinepayments/sdk/reference_exception.py +19 -0
  462. onlinepayments/sdk/validation_exception.py +19 -0
  463. onlinepayments/sdk/webhooks/__init__.py +0 -0
  464. onlinepayments/sdk/webhooks/api_version_mismatch_exception.py +24 -0
  465. onlinepayments/sdk/webhooks/in_memory_secret_key_store.py +48 -0
  466. onlinepayments/sdk/webhooks/secret_key_not_available_exception.py +18 -0
  467. onlinepayments/sdk/webhooks/secret_key_store.py +15 -0
  468. onlinepayments/sdk/webhooks/signature_validation_exception.py +17 -0
  469. onlinepayments/sdk/webhooks/signature_validator.py +56 -0
  470. onlinepayments/sdk/webhooks/webhooks_helper.py +52 -0
  471. onlinepayments_sdk_python3-7.4.1.dist-info/METADATA +154 -0
  472. onlinepayments_sdk_python3-7.4.1.dist-info/RECORD +475 -0
  473. onlinepayments_sdk_python3-7.4.1.dist-info/WHEEL +5 -0
  474. onlinepayments_sdk_python3-7.4.1.dist-info/licenses/LICENSE.txt +52 -0
  475. onlinepayments_sdk_python3-7.4.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,55 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # This file was automatically generated.
4
+ #
5
+ from abc import ABC, abstractmethod
6
+ from typing import Optional
7
+
8
+ from onlinepayments.sdk.call_context import CallContext
9
+ from onlinepayments.sdk.domain.send_test_request import SendTestRequest
10
+ from onlinepayments.sdk.domain.validate_credentials_request import ValidateCredentialsRequest
11
+ from onlinepayments.sdk.domain.validate_credentials_response import ValidateCredentialsResponse
12
+
13
+
14
+ class IWebhooksClient(ABC):
15
+ """
16
+ Webhooks client interface. Thread-safe.
17
+ """
18
+
19
+ @abstractmethod
20
+ def validate_webhook_credentials(self, body: ValidateCredentialsRequest, context: Optional[CallContext] = None) -> ValidateCredentialsResponse:
21
+ """
22
+ Resource /v2/{merchantId}/webhooks/validateCredentials - Validate credentials
23
+
24
+ :param body: :class:`onlinepayments.sdk.domain.validate_credentials_request.ValidateCredentialsRequest`
25
+ :param context: :class:`onlinepayments.sdk.call_context.CallContext`
26
+ :return: :class:`onlinepayments.sdk.domain.validate_credentials_response.ValidateCredentialsResponse`
27
+ :raise IdempotenceException: if an idempotent request caused a conflict (HTTP status code 409)
28
+ :raise ValidationException: if the request was not correct and couldn't be processed (HTTP status code 400)
29
+ :raise AuthorizationException: if the request was not allowed (HTTP status code 403)
30
+ :raise ReferenceException: if an object was attempted to be referenced that doesn't exist or has been removed,
31
+ or there was a conflict (HTTP status code 404, 409 or 410)
32
+ :raise PlatformException: if something went wrong at the payment platform,
33
+ the payment platform was unable to process a message from a downstream partner/acquirer,
34
+ or the service that you're trying to reach is temporary unavailable (HTTP status code 500, 502 or 503)
35
+ :raise ApiException: if the payment platform returned any other error
36
+ """
37
+
38
+ @abstractmethod
39
+ def send_test_webhook(self, body: SendTestRequest, context: Optional[CallContext] = None) -> None:
40
+ """
41
+ Resource /v2/{merchantId}/webhooks/sendtest - Send test
42
+
43
+ :param body: :class:`onlinepayments.sdk.domain.send_test_request.SendTestRequest`
44
+ :param context: :class:`onlinepayments.sdk.call_context.CallContext`
45
+ :return: None
46
+ :raise IdempotenceException: if an idempotent request caused a conflict (HTTP status code 409)
47
+ :raise ValidationException: if the request was not correct and couldn't be processed (HTTP status code 400)
48
+ :raise AuthorizationException: if the request was not allowed (HTTP status code 403)
49
+ :raise ReferenceException: if an object was attempted to be referenced that doesn't exist or has been removed,
50
+ or there was a conflict (HTTP status code 404, 409 or 410)
51
+ :raise PlatformException: if something went wrong at the payment platform,
52
+ the payment platform was unable to process a message from a downstream partner/acquirer,
53
+ or the service that you're trying to reach is temporary unavailable (HTTP status code 500, 502 or 503)
54
+ :raise ApiException: if the payment platform returned any other error
55
+ """
@@ -0,0 +1,97 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # This file was automatically generated.
4
+ #
5
+ from typing import Mapping, Optional
6
+
7
+ from .i_webhooks_client import IWebhooksClient
8
+
9
+ from onlinepayments.sdk.api_resource import ApiResource
10
+ from onlinepayments.sdk.call_context import CallContext
11
+ from onlinepayments.sdk.communication.response_exception import ResponseException
12
+ from onlinepayments.sdk.domain.error_response import ErrorResponse
13
+ from onlinepayments.sdk.domain.send_test_request import SendTestRequest
14
+ from onlinepayments.sdk.domain.validate_credentials_request import ValidateCredentialsRequest
15
+ from onlinepayments.sdk.domain.validate_credentials_response import ValidateCredentialsResponse
16
+ from onlinepayments.sdk.exception_factory import create_exception
17
+
18
+
19
+ class WebhooksClient(ApiResource, IWebhooksClient):
20
+ """
21
+ Webhooks client. Thread-safe.
22
+ """
23
+
24
+ def __init__(self, parent: ApiResource, path_context: Optional[Mapping[str, str]]):
25
+ """
26
+ :param parent: :class:`onlinepayments.sdk.api_resource.ApiResource`
27
+ :param path_context: Mapping[str, str]
28
+ """
29
+ super(WebhooksClient, self).__init__(parent=parent, path_context=path_context)
30
+
31
+ def validate_webhook_credentials(self, body: ValidateCredentialsRequest, context: Optional[CallContext] = None) -> ValidateCredentialsResponse:
32
+ """
33
+ Resource /v2/{merchantId}/webhooks/validateCredentials - Validate credentials
34
+
35
+ :param body: :class:`onlinepayments.sdk.domain.validate_credentials_request.ValidateCredentialsRequest`
36
+ :param context: :class:`onlinepayments.sdk.call_context.CallContext`
37
+ :return: :class:`onlinepayments.sdk.domain.validate_credentials_response.ValidateCredentialsResponse`
38
+ :raise IdempotenceException: if an idempotent request caused a conflict (HTTP status code 409)
39
+ :raise ValidationException: if the request was not correct and couldn't be processed (HTTP status code 400)
40
+ :raise AuthorizationException: if the request was not allowed (HTTP status code 403)
41
+ :raise ReferenceException: if an object was attempted to be referenced that doesn't exist or has been removed,
42
+ or there was a conflict (HTTP status code 404, 409 or 410)
43
+ :raise PlatformException: if something went wrong at the payment platform,
44
+ the payment platform was unable to process a message from a downstream partner/acquirer,
45
+ or the service that you're trying to reach is temporary unavailable (HTTP status code 500, 502 or 503)
46
+ :raise ApiException: if the payment platform returned any other error
47
+ """
48
+ uri = self._instantiate_uri("/v2/{merchantId}/webhooks/validateCredentials", None)
49
+
50
+
51
+ try:
52
+ return self._communicator.post(
53
+ uri,
54
+ self._client_headers,
55
+ None,
56
+ body,
57
+ ValidateCredentialsResponse,
58
+ context)
59
+
60
+ except ResponseException as e:
61
+ error_type = ErrorResponse
62
+ error_object = self._communicator.marshaller.unmarshal(e.body, error_type)
63
+ raise create_exception(e.status_code, e.body, error_object, context)
64
+
65
+ def send_test_webhook(self, body: SendTestRequest, context: Optional[CallContext] = None) -> None:
66
+ """
67
+ Resource /v2/{merchantId}/webhooks/sendtest - Send test
68
+
69
+ :param body: :class:`onlinepayments.sdk.domain.send_test_request.SendTestRequest`
70
+ :param context: :class:`onlinepayments.sdk.call_context.CallContext`
71
+ :return: None
72
+ :raise IdempotenceException: if an idempotent request caused a conflict (HTTP status code 409)
73
+ :raise ValidationException: if the request was not correct and couldn't be processed (HTTP status code 400)
74
+ :raise AuthorizationException: if the request was not allowed (HTTP status code 403)
75
+ :raise ReferenceException: if an object was attempted to be referenced that doesn't exist or has been removed,
76
+ or there was a conflict (HTTP status code 404, 409 or 410)
77
+ :raise PlatformException: if something went wrong at the payment platform,
78
+ the payment platform was unable to process a message from a downstream partner/acquirer,
79
+ or the service that you're trying to reach is temporary unavailable (HTTP status code 500, 502 or 503)
80
+ :raise ApiException: if the payment platform returned any other error
81
+ """
82
+ uri = self._instantiate_uri("/v2/{merchantId}/webhooks/sendtest", None)
83
+
84
+
85
+ try:
86
+ return self._communicator.post(
87
+ uri,
88
+ self._client_headers,
89
+ None,
90
+ body,
91
+ None,
92
+ context)
93
+
94
+ except ResponseException as e:
95
+ error_type = ErrorResponse
96
+ error_object = self._communicator.marshaller.unmarshal(e.body, error_type)
97
+ raise create_exception(e.status_code, e.body, error_object, context)
@@ -0,0 +1,19 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # This file was automatically generated.
4
+ #
5
+ from typing import List, Optional
6
+
7
+ from .api_exception import ApiException
8
+
9
+ from onlinepayments.sdk.domain.api_error import APIError
10
+
11
+
12
+ class PlatformException(ApiException):
13
+ """
14
+ Represents an error response from the payment platform when something went wrong at the payment platform or further downstream.
15
+ """
16
+
17
+ def __init__(self, status_code: int, response_body: str, error_id: Optional[str], errors: Optional[List[APIError]],
18
+ message: str = "the payment platform returned an error response"):
19
+ super(PlatformException, self).__init__(status_code, response_body, error_id, errors, message)
@@ -0,0 +1,102 @@
1
+ from typing import Optional
2
+ from urllib.parse import urlparse
3
+
4
+
5
+ class ProxyConfiguration(object):
6
+ """
7
+ HTTP proxy configuration.
8
+
9
+ Can be initialised directly from a host and port or can be constructed from a uri using fromuri
10
+ """
11
+
12
+ def __init__(self, host: str, port: int, scheme: str = "http", username: Optional[str] = None, password: Optional[str] = None):
13
+ if not host:
14
+ raise ValueError("host is required")
15
+ if not port:
16
+ raise ValueError("port is required")
17
+ if port <= 0 or port > 65535:
18
+ raise ValueError("""port "{}" is invalid""".format(port))
19
+ self.__scheme = scheme
20
+ self.__host = host
21
+ self.__port = port
22
+ self.__username = username
23
+ self.__password = password
24
+
25
+ @staticmethod
26
+ def from_uri(uri: str, username: Optional[str] = None, password: Optional[str] = None) -> 'ProxyConfiguration':
27
+ """
28
+ Constructs a ProxyConfiguration from a URI; if username and/or password
29
+ are given they will be used instead of corresponding data in the URI
30
+ """
31
+ parsed = urlparse(uri)
32
+ scheme = parsed.scheme
33
+ host = parsed.hostname + parsed.path
34
+ port = parsed.port
35
+ if username is None:
36
+ username = parsed.username
37
+ if password is None:
38
+ password = parsed.password
39
+ if port is None:
40
+ if scheme == "http":
41
+ port = 80
42
+ elif scheme == "https":
43
+ port = 443
44
+ else:
45
+ raise ValueError("unsupported scheme: " + scheme)
46
+ return ProxyConfiguration(scheme=scheme,
47
+ host=host,
48
+ port=port,
49
+ username=username,
50
+ password=password)
51
+
52
+ @property
53
+ def scheme(self) -> str:
54
+ return self.__scheme
55
+
56
+ @scheme.setter
57
+ def scheme(self, scheme: str) -> None:
58
+ self.__scheme = scheme
59
+
60
+ @property
61
+ def host(self) -> str:
62
+ return self.__host
63
+
64
+ @host.setter
65
+ def host(self, host: str) -> None:
66
+ self.__host = host
67
+
68
+ @property
69
+ def port(self) -> int:
70
+ return self.__port
71
+
72
+ @port.setter
73
+ def port(self, port: int) -> None:
74
+ self.__port = port
75
+
76
+ @property
77
+ def username(self) -> Optional[str]:
78
+ return self.__username
79
+
80
+ @username.setter
81
+ def username(self, username: Optional[str]) -> None:
82
+ self.__username = username
83
+
84
+ @property
85
+ def password(self) -> Optional[str]:
86
+ return self.__password
87
+
88
+ @password.setter
89
+ def password(self, password: Optional[str]) -> None:
90
+ self.__password = password
91
+
92
+ def __str__(self):
93
+ """
94
+ Return a proxy string in the form scheme://username:password@host:port
95
+ or scheme://host:port if authentication is absent
96
+
97
+ Supports HTTP Basic Auth
98
+ """
99
+ if self.username is None or self.password is None:
100
+ return r"{0}://{1}:{2}".format(self.scheme, self.host, self.port)
101
+ else:
102
+ return r"{0}://{3}:{4}@{1}:{2}".format(self.scheme, self.host, self.port, self.username, self.password)
@@ -0,0 +1,19 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # This file was automatically generated.
4
+ #
5
+ from typing import List, Optional
6
+
7
+ from .api_exception import ApiException
8
+
9
+ from onlinepayments.sdk.domain.api_error import APIError
10
+
11
+
12
+ class ReferenceException(ApiException):
13
+ """
14
+ Represents an error response from the payment platform when a non-existing or removed object is trying to be accessed.
15
+ """
16
+
17
+ def __init__(self, status_code: int, response_body: str, error_id: Optional[str], errors: Optional[List[APIError]],
18
+ message: str = "the payment platform returned a reference error response"):
19
+ super(ReferenceException, self).__init__(status_code, response_body, error_id, errors, message)
@@ -0,0 +1,19 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # This file was automatically generated.
4
+ #
5
+ from typing import List, Optional
6
+
7
+ from .api_exception import ApiException
8
+
9
+ from onlinepayments.sdk.domain.api_error import APIError
10
+
11
+
12
+ class ValidationException(ApiException):
13
+ """
14
+ Represents an error response from the payment platform when validation of requests failed.
15
+ """
16
+
17
+ def __init__(self, status_code: int, response_body: str, error_id: Optional[str], errors: Optional[List[APIError]],
18
+ message: str = "the payment platform returned an incorrect request error response"):
19
+ super(ValidationException, self).__init__(status_code, response_body, error_id, errors, message)
File without changes
@@ -0,0 +1,24 @@
1
+ class ApiVersionMismatchException(RuntimeError):
2
+ """
3
+ Represents an error because a webhooks event has an API version that this version of the SDK does not support.
4
+ """
5
+
6
+ def __init__(self, event_api_version: str, sdk_api_version: str):
7
+ super(ApiVersionMismatchException, self).__init__(
8
+ "event API version" + event_api_version + " is not compatible with SDK API version" + sdk_api_version)
9
+ self.__event_api_version = event_api_version
10
+ self.__sdk_api_version = sdk_api_version
11
+
12
+ @property
13
+ def event_api_version(self) -> str:
14
+ """
15
+ :return: The API version from the webhooks event.
16
+ """
17
+ return self.__event_api_version
18
+
19
+ @property
20
+ def sdk_api_version(self) -> str:
21
+ """
22
+ :return: The API version that this version of the SDK supports.
23
+ """
24
+ return self.__sdk_api_version
@@ -0,0 +1,48 @@
1
+ from .secret_key_not_available_exception import SecretKeyNotAvailableException
2
+ from .secret_key_store import SecretKeyStore
3
+
4
+
5
+ class InMemorySecretKeyStore(SecretKeyStore):
6
+ """
7
+ An in-memory secret key store.
8
+ This implementation can be used in applications where secret keys can be
9
+ specified at application startup.
10
+ """
11
+
12
+ @staticmethod
13
+ def instance() -> 'InMemorySecretKeyStore':
14
+ return _IN_MEMORY_SECRET_KEY_CACHE_INSTANCE
15
+
16
+ __store = {}
17
+
18
+ def get_secret_key(self, key_id: str) -> str:
19
+ try:
20
+ secret_key = self.__store[key_id]
21
+ except KeyError:
22
+ raise SecretKeyNotAvailableException("could not find secret key for key id " + key_id, key_id)
23
+ return secret_key
24
+
25
+ def store_secret_key(self, key_id: str, secret_key: str) -> None:
26
+ """
27
+ Stores the given secret key for the given key ID.
28
+ """
29
+ if key_id is None or not key_id.strip():
30
+ raise ValueError("key_id is required")
31
+ elif secret_key is None or not secret_key.strip():
32
+ raise ValueError("secret_key is required")
33
+ self.__store[key_id] = secret_key
34
+
35
+ def remove_secret_key(self, key_id: str) -> None:
36
+ """
37
+ Removes the secret key for the given key ID.
38
+ """
39
+ self.__store.pop(key_id)
40
+
41
+ def clear(self) -> None:
42
+ """
43
+ Removes all stored secret keys.
44
+ """
45
+ self.__store.clear()
46
+
47
+
48
+ _IN_MEMORY_SECRET_KEY_CACHE_INSTANCE = InMemorySecretKeyStore()
@@ -0,0 +1,18 @@
1
+ from typing import Optional
2
+
3
+ from .signature_validation_exception import SignatureValidationException
4
+
5
+
6
+ class SecretKeyNotAvailableException(SignatureValidationException):
7
+ """
8
+ Represents an error that causes a secret key to not be available.
9
+ """
10
+
11
+ def __init__(self, key_id: str, message: Optional[str] = None, cause: Optional[Exception] = None):
12
+ super(SecretKeyNotAvailableException, self).__init__(message=message,
13
+ cause=cause)
14
+ self.__key_id = key_id
15
+
16
+ @property
17
+ def key_id(self) -> str:
18
+ return self.__key_id
@@ -0,0 +1,15 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class SecretKeyStore(ABC):
5
+ """
6
+ A store of secret keys. Implementations could store secret keys in a database, on disk, etc.
7
+ """
8
+
9
+ @abstractmethod
10
+ def get_secret_key(self, key_id: str) -> str:
11
+ """
12
+ :return: The secret key for the given key ID. Never None.
13
+ :raise SecretKeyNotAvailableException: If the secret key for the given key ID is not available.
14
+ """
15
+ raise NotImplementedError
@@ -0,0 +1,17 @@
1
+ from typing import Optional
2
+
3
+
4
+ class SignatureValidationException(RuntimeError):
5
+ """
6
+ Represents an error while validating webhooks signatures.
7
+ """
8
+
9
+ def __init__(self, message: Optional[str] = None, cause: Optional[Exception] = None):
10
+ if message and cause:
11
+ super(SignatureValidationException, self).__init__(message, cause)
12
+ elif message:
13
+ super(SignatureValidationException, self).__init__(message)
14
+ elif cause:
15
+ super(SignatureValidationException, self).__init__(cause)
16
+ else:
17
+ super(SignatureValidationException, self).__init__()
@@ -0,0 +1,56 @@
1
+ import hmac
2
+ import hashlib
3
+ from base64 import b64encode
4
+ from typing import Union, Sequence
5
+
6
+ from .secret_key_store import SecretKeyStore
7
+ from .signature_validation_exception import SignatureValidationException
8
+
9
+ from onlinepayments.sdk.communication.request_header import RequestHeader
10
+
11
+
12
+ class SignatureValidator(object):
13
+ """
14
+ Validator for webhooks signatures.
15
+ """
16
+
17
+ def __init__(self, secret_key_store: SecretKeyStore):
18
+ if secret_key_store is None:
19
+ raise ValueError("secret_key_store is required")
20
+ self.__secret_key_store = secret_key_store
21
+
22
+ def validate(self, body: Union[str, bytes], request_headers: Sequence[RequestHeader]) -> None:
23
+ """
24
+ Validates the given body using the given request headers.
25
+
26
+ :raise SignatureValidationException: If the body could not be validated successfully.
27
+ """
28
+ self.__validate_body(body, request_headers)
29
+
30
+ def __validate_body(self, body: Union[str, bytes], request_headers: Sequence[RequestHeader]) -> None:
31
+ signature = self.__get_header_value(request_headers, "X-GCS-Signature")
32
+ key_id = self.__get_header_value(request_headers, "X-GCS-KeyId")
33
+ secret_key = self.__secret_key_store.get_secret_key(key_id)
34
+ unencoded_result = hmac.new(secret_key.encode("utf-8"), body, hashlib.sha256).digest()
35
+ expected_signature = b64encode(unencoded_result)
36
+ is_valid = hmac.compare_digest(signature.encode("utf-8"), expected_signature)
37
+ if is_valid is False:
38
+ raise SignatureValidationException("failed to validate signature: " + signature)
39
+
40
+ @staticmethod
41
+ def __get_header_value(request_headers: Sequence[RequestHeader], header_name: str) -> str:
42
+ value = None
43
+ for header in request_headers:
44
+ if header_name.lower() == header.name.lower():
45
+ if value is None:
46
+ value = header.value
47
+ else:
48
+ raise SignatureValidationException("encountered multiple occurrences of header '" + header_name + "'")
49
+ if value is None:
50
+ raise SignatureValidationException("could not find header '" + header_name + "'")
51
+ return value
52
+
53
+ # Used for unit tests
54
+ @property
55
+ def secret_key_store(self) -> SecretKeyStore:
56
+ return self.__secret_key_store
@@ -0,0 +1,52 @@
1
+ #
2
+ # This file was automatically generated.
3
+ #
4
+ from typing import Sequence, Union
5
+
6
+ from onlinepayments.sdk.communication.request_header import RequestHeader
7
+ from onlinepayments.sdk.domain.web_hooks_event import WebhooksEvent
8
+ from onlinepayments.sdk.json.marshaller import Marshaller
9
+ from .api_version_mismatch_exception import ApiVersionMismatchException
10
+ from .secret_key_store import SecretKeyStore
11
+ from .signature_validator import SignatureValidator
12
+
13
+
14
+ class WebhooksHelper(object):
15
+ """
16
+ Online Payments platform v1 webhooks helper.
17
+ """
18
+
19
+ def __init__(self, marshaller: Marshaller, secret_key_store: SecretKeyStore):
20
+ if marshaller is None:
21
+ raise ValueError("marshaller is required")
22
+ self.__marshaller = marshaller
23
+ self.__signature_validator = SignatureValidator(secret_key_store)
24
+
25
+ def unmarshal(self, body: Union[str, bytes], request_headers: Sequence[RequestHeader]) -> WebhooksEvent:
26
+ """
27
+ Unmarshals the given body, while also validating it using the given request headers.
28
+
29
+ :raise SignatureValidationException: If the body could not be validated successfully.
30
+ :raise ApiVersionMismatchException: If the resulting event has an API
31
+ version that this version of the SDK does not support.
32
+ :return: The body unmarshalled as a WebhooksEvent.
33
+ """
34
+ self.__signature_validator.validate(body, request_headers)
35
+
36
+ event = self.__marshaller.unmarshal(body.decode('utf-8'), WebhooksEvent)
37
+ self.__validate_api_version(event)
38
+ return event
39
+
40
+ @staticmethod
41
+ def __validate_api_version(event: WebhooksEvent) -> None:
42
+ if "v1" != event.api_version:
43
+ raise ApiVersionMismatchException(event.api_version, "v1")
44
+
45
+ # Used for unit tests
46
+ @property
47
+ def marshaller(self) -> Marshaller:
48
+ return self.__marshaller
49
+
50
+ @property
51
+ def secret_key_store(self) -> SecretKeyStore:
52
+ return self.__signature_validator.secret_key_store