mangopay-v4 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +30 -0
- data/.rspec +4 -0
- data/.rubocop.yml +2 -0
- data/.travis.yml +13 -0
- data/Gemfile +2 -0
- data/LICENSE +20 -0
- data/README.md +380 -0
- data/bin/mangopay +9 -0
- data/lib/mangopay.rb +133 -0
- data/lib/mangopay/api/api.rb +9 -0
- data/lib/mangopay/api/api_methods.rb +137 -0
- data/lib/mangopay/api/auth_token_manager.rb +173 -0
- data/lib/mangopay/api/http_client.rb +325 -0
- data/lib/mangopay/api/service/bank_accounts.rb +146 -0
- data/lib/mangopay/api/service/cards.rb +152 -0
- data/lib/mangopay/api/service/client_wallets.rb +89 -0
- data/lib/mangopay/api/service/clients.rb +68 -0
- data/lib/mangopay/api/service/dispute_documents.rb +158 -0
- data/lib/mangopay/api/service/disputes.rb +187 -0
- data/lib/mangopay/api/service/e_money.rb +42 -0
- data/lib/mangopay/api/service/events.rb +47 -0
- data/lib/mangopay/api/service/hooks.rb +93 -0
- data/lib/mangopay/api/service/kyc_documents.rb +153 -0
- data/lib/mangopay/api/service/mandates.rb +142 -0
- data/lib/mangopay/api/service/oauth_tokens.rb +25 -0
- data/lib/mangopay/api/service/pay_ins.rb +260 -0
- data/lib/mangopay/api/service/pay_outs.rb +54 -0
- data/lib/mangopay/api/service/pre_authorizations.rb +69 -0
- data/lib/mangopay/api/service/refunds.rb +62 -0
- data/lib/mangopay/api/service/reports.rb +151 -0
- data/lib/mangopay/api/service/repudiations.rb +32 -0
- data/lib/mangopay/api/service/responses.rb +102 -0
- data/lib/mangopay/api/service/settlement_transfers.rb +55 -0
- data/lib/mangopay/api/service/transactions.rb +183 -0
- data/lib/mangopay/api/service/transfers.rb +54 -0
- data/lib/mangopay/api/service/ubo_declarations.rb +70 -0
- data/lib/mangopay/api/service/users.rb +163 -0
- data/lib/mangopay/api/service/wallets.rb +99 -0
- data/lib/mangopay/api/uri_provider.rb +35 -0
- data/lib/mangopay/common/json_tag_converter.rb +68 -0
- data/lib/mangopay/common/jsonifier.rb +249 -0
- data/lib/mangopay/common/log_provider.rb +34 -0
- data/lib/mangopay/common/rate_limit_interval.rb +17 -0
- data/lib/mangopay/common/read_only_fields.rb +27 -0
- data/lib/mangopay/common/response_error.rb +61 -0
- data/lib/mangopay/common/sort_direction.rb +15 -0
- data/lib/mangopay/common/sort_field.rb +13 -0
- data/lib/mangopay/common/template_url_options.rb +9 -0
- data/lib/mangopay/configuration.rb +39 -0
- data/lib/mangopay/environment.rb +66 -0
- data/lib/mangopay/model/address.rb +27 -0
- data/lib/mangopay/model/declared_ubo.rb +21 -0
- data/lib/mangopay/model/dispute_reason.rb +15 -0
- data/lib/mangopay/model/document_page_consult.rb +15 -0
- data/lib/mangopay/model/e_money.rb +18 -0
- data/lib/mangopay/model/entity/account/bank_account.rb +26 -0
- data/lib/mangopay/model/entity/account/ca_bank_account.rb +27 -0
- data/lib/mangopay/model/entity/account/gb_bank_account.rb +21 -0
- data/lib/mangopay/model/entity/account/iban_bank_account.rb +21 -0
- data/lib/mangopay/model/entity/account/other_bank_account.rb +24 -0
- data/lib/mangopay/model/entity/account/us_bank_account.rb +24 -0
- data/lib/mangopay/model/entity/card.rb +45 -0
- data/lib/mangopay/model/entity/card_registration.rb +43 -0
- data/lib/mangopay/model/entity/client.rb +63 -0
- data/lib/mangopay/model/entity/client_wallet.rb +23 -0
- data/lib/mangopay/model/entity/dispute.rb +50 -0
- data/lib/mangopay/model/entity/dispute_document.rb +29 -0
- data/lib/mangopay/model/entity/entity_base.rb +18 -0
- data/lib/mangopay/model/entity/hook.rb +26 -0
- data/lib/mangopay/model/entity/kyc_document.rb +28 -0
- data/lib/mangopay/model/entity/mandate.rb +51 -0
- data/lib/mangopay/model/entity/pay_in/bank_wire_direct_pay_in.rb +22 -0
- data/lib/mangopay/model/entity/pay_in/card_direct_pay_in.rb +33 -0
- data/lib/mangopay/model/entity/pay_in/card_pre_authorized_pay_in.rb +13 -0
- data/lib/mangopay/model/entity/pay_in/card_web_pay_in.rb +40 -0
- data/lib/mangopay/model/entity/pay_in/direct_debit_direct_pay_in.rb +23 -0
- data/lib/mangopay/model/entity/pay_in/direct_debit_web_pay_in.rb +38 -0
- data/lib/mangopay/model/entity/pay_in/pay_in.rb +16 -0
- data/lib/mangopay/model/entity/pay_out.rb +22 -0
- data/lib/mangopay/model/entity/pre_authorization.rb +68 -0
- data/lib/mangopay/model/entity/refund.rb +18 -0
- data/lib/mangopay/model/entity/report.rb +51 -0
- data/lib/mangopay/model/entity/repudiation.rb +18 -0
- data/lib/mangopay/model/entity/settlement_transfer.rb +17 -0
- data/lib/mangopay/model/entity/transaction.rb +52 -0
- data/lib/mangopay/model/entity/transfer.rb +13 -0
- data/lib/mangopay/model/entity/ubo_declaration.rb +32 -0
- data/lib/mangopay/model/entity/user/legal_user.rb +53 -0
- data/lib/mangopay/model/entity/user/natural_user.rb +50 -0
- data/lib/mangopay/model/entity/user/user.rb +18 -0
- data/lib/mangopay/model/entity/wallet.rb +28 -0
- data/lib/mangopay/model/enum/account_type.rb +24 -0
- data/lib/mangopay/model/enum/card_status.rb +15 -0
- data/lib/mangopay/model/enum/card_type.rb +33 -0
- data/lib/mangopay/model/enum/card_validity.rb +19 -0
- data/lib/mangopay/model/enum/country_iso.rb +759 -0
- data/lib/mangopay/model/enum/culture_code.rb +44 -0
- data/lib/mangopay/model/enum/currency_iso.rb +552 -0
- data/lib/mangopay/model/enum/declared_ubo_refused_reason_type.rb +16 -0
- data/lib/mangopay/model/enum/declared_ubo_status.rb +18 -0
- data/lib/mangopay/model/enum/deposit_type.rb +15 -0
- data/lib/mangopay/model/enum/direct_debit_type.rb +13 -0
- data/lib/mangopay/model/enum/dispute_doc_refused_reason_type.rb +25 -0
- data/lib/mangopay/model/enum/dispute_document_type.rb +23 -0
- data/lib/mangopay/model/enum/dispute_reason_type.rb +33 -0
- data/lib/mangopay/model/enum/dispute_status.rb +21 -0
- data/lib/mangopay/model/enum/dispute_type.rb +15 -0
- data/lib/mangopay/model/enum/document_status.rb +21 -0
- data/lib/mangopay/model/enum/download_format.rb +11 -0
- data/lib/mangopay/model/enum/event_type.rb +74 -0
- data/lib/mangopay/model/enum/funds_type.rb +15 -0
- data/lib/mangopay/model/enum/hook_status.rb +13 -0
- data/lib/mangopay/model/enum/hook_validity.rb +15 -0
- data/lib/mangopay/model/enum/income_range.rb +21 -0
- data/lib/mangopay/model/enum/kyc_doc_refused_reason_type.rb +37 -0
- data/lib/mangopay/model/enum/kyc_document_type.rb +19 -0
- data/lib/mangopay/model/enum/kyc_level.rb +13 -0
- data/lib/mangopay/model/enum/legal_person_type.rb +15 -0
- data/lib/mangopay/model/enum/mandate_culture_code.rb +23 -0
- data/lib/mangopay/model/enum/mandate_execution_type.rb +11 -0
- data/lib/mangopay/model/enum/mandate_scheme.rb +13 -0
- data/lib/mangopay/model/enum/mandate_status.rb +24 -0
- data/lib/mangopay/model/enum/mandate_type.rb +11 -0
- data/lib/mangopay/model/enum/natural_user_capacity.rb +15 -0
- data/lib/mangopay/model/enum/pay_in_execution_type.rb +18 -0
- data/lib/mangopay/model/enum/pay_in_payment_type.rb +21 -0
- data/lib/mangopay/model/enum/pay_out_payment_type.rb +11 -0
- data/lib/mangopay/model/enum/payment_status.rb +21 -0
- data/lib/mangopay/model/enum/person_type.rb +15 -0
- data/lib/mangopay/model/enum/platform_type.rb +23 -0
- data/lib/mangopay/model/enum/pre_authorization_execution_type.rb +11 -0
- data/lib/mangopay/model/enum/pre_authorization_status.rb +18 -0
- data/lib/mangopay/model/enum/refund_reason_type.rb +21 -0
- data/lib/mangopay/model/enum/report_status.rb +17 -0
- data/lib/mangopay/model/enum/report_type.rb +13 -0
- data/lib/mangopay/model/enum/secure_mode.rb +16 -0
- data/lib/mangopay/model/enum/transaction_nature.rb +17 -0
- data/lib/mangopay/model/enum/transaction_status.rb +15 -0
- data/lib/mangopay/model/enum/transaction_type.rb +15 -0
- data/lib/mangopay/model/enum/ubo_declaration_refused_reason_type.rb +19 -0
- data/lib/mangopay/model/enum/ubo_declaration_status.rb +21 -0
- data/lib/mangopay/model/event.rb +18 -0
- data/lib/mangopay/model/model.rb +194 -0
- data/lib/mangopay/model/money.rb +17 -0
- data/lib/mangopay/model/pay_in_web_extended_view.rb +31 -0
- data/lib/mangopay/model/refund_reason.rb +15 -0
- data/lib/mangopay/model/report_filter.rb +83 -0
- data/lib/mangopay/model/request/cancel_request.rb +16 -0
- data/lib/mangopay/model/request/complete_registration_request.rb +13 -0
- data/lib/mangopay/model/request/currency_request.rb +13 -0
- data/lib/mangopay/model/request/deactivation_request.rb +10 -0
- data/lib/mangopay/model/request/filter_request.rb +38 -0
- data/lib/mangopay/model/request/submit_document_request.rb +14 -0
- data/lib/mangopay/model/request/submit_ubo_declaration_request.rb +14 -0
- data/lib/mangopay/model/request/upload_file_request.rb +9 -0
- data/lib/mangopay/model/response_replica.rb +27 -0
- data/lib/mangopay/util/custom_formatter.rb +12 -0
- data/lib/mangopay/util/custom_logger.rb +34 -0
- data/lib/mangopay/util/enum.rb +52 -0
- data/lib/mangopay/util/file_encoder.rb +16 -0
- data/lib/mangopay/util/non_instantiable.rb +6 -0
- data/lib/mangopay/util/storage_strategy.rb +10 -0
- data/lib/mangopay/util/void_logger.rb +6 -0
- data/mangopay.gemspec +32 -0
- data/spec/context/address_context.rb +25 -0
- data/spec/context/bank_account_context.rb +138 -0
- data/spec/context/card_context.rb +46 -0
- data/spec/context/client_context.rb +45 -0
- data/spec/context/dispute_context.rb +37 -0
- data/spec/context/dispute_document_context.rb +20 -0
- data/spec/context/hook_context.rb +16 -0
- data/spec/context/kyc_document_context.rb +23 -0
- data/spec/context/mandate_context.rb +27 -0
- data/spec/context/pay_in_context.rb +225 -0
- data/spec/context/pay_out_context.rb +39 -0
- data/spec/context/pre_authorization_context.rb +41 -0
- data/spec/context/refund_context.rb +33 -0
- data/spec/context/report_context.rb +22 -0
- data/spec/context/repudiation_context.rb +19 -0
- data/spec/context/settlement_transfer_context.rb +28 -0
- data/spec/context/transfer_context.rb +51 -0
- data/spec/context/ubo_declaration_context.rb +25 -0
- data/spec/context/user_context.rb +83 -0
- data/spec/context/wallet_context.rb +53 -0
- data/spec/mangopay/bank_accounts_spec.rb +229 -0
- data/spec/mangopay/cards_spec.rb +135 -0
- data/spec/mangopay/client_wallets_spec.rb +148 -0
- data/spec/mangopay/clients_spec.rb +55 -0
- data/spec/mangopay/configuration_spec.rb +126 -0
- data/spec/mangopay/dispute_documents_spec.rb +174 -0
- data/spec/mangopay/disputes_spec.rb +265 -0
- data/spec/mangopay/e_money_spec.rb +38 -0
- data/spec/mangopay/events_spec.rb +50 -0
- data/spec/mangopay/hooks_spec.rb +71 -0
- data/spec/mangopay/kyc_documents_spec.rb +180 -0
- data/spec/mangopay/mandates_spec.rb +219 -0
- data/spec/mangopay/oauth_tokens_spec.rb +41 -0
- data/spec/mangopay/pay_ins_spec.rb +181 -0
- data/spec/mangopay/pay_outs_spec.rb +39 -0
- data/spec/mangopay/pre_authorizations_spec.rb +58 -0
- data/spec/mangopay/refunds_spec.rb +40 -0
- data/spec/mangopay/reports_spec.rb +121 -0
- data/spec/mangopay/responses_spec.rb +295 -0
- data/spec/mangopay/settlement_transfers_spec.rb +37 -0
- data/spec/mangopay/transactions_spec.rb +233 -0
- data/spec/mangopay/transfers_spec.rb +38 -0
- data/spec/mangopay/ubo_declarations_spec.rb +65 -0
- data/spec/mangopay/users_spec.rb +146 -0
- data/spec/mangopay/wallets_spec.rb +104 -0
- data/spec/resources/logo.png +0 -0
- data/spec/resources/test_pdf.pdf +0 -0
- data/spec/spec_helper.rb +72 -0
- metadata +349 -0
data/bin/mangopay
ADDED
data/lib/mangopay.rb
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
require_relative '../lib/mangopay/common/log_provider'
|
2
|
+
require_relative 'mangopay/environment'
|
3
|
+
require_relative 'mangopay/configuration'
|
4
|
+
require_relative 'mangopay/model/model'
|
5
|
+
require_relative 'mangopay/api/api'
|
6
|
+
|
7
|
+
# Holds top-level configuration.
|
8
|
+
module MangoPay
|
9
|
+
LOG = LogProvider.provide(self)
|
10
|
+
|
11
|
+
VERSION = '4.0.0'.freeze
|
12
|
+
|
13
|
+
SANDBOX_API_URL = 'https://api.sandbox.mangopay.com'.freeze
|
14
|
+
MAIN_API_URL = 'https://api.mangopay.com'.freeze
|
15
|
+
|
16
|
+
# ID of the environment in which to run MangoPay operations
|
17
|
+
@global_env_id = :default
|
18
|
+
# Mapping of MangoPay environments by ID
|
19
|
+
@environments = {
|
20
|
+
default: MangoPay::Environment.new(:default)
|
21
|
+
}
|
22
|
+
# Mapping of thread object IDs to MangoPay environment IDs
|
23
|
+
@env_id = {}
|
24
|
+
|
25
|
+
class << self
|
26
|
+
|
27
|
+
# Allows to specify environment in which to run MangoPay operations.
|
28
|
+
# All subsequent threads will automatically run in that environment.
|
29
|
+
#
|
30
|
+
# @param +env_id+ ID of the required environment
|
31
|
+
#
|
32
|
+
# noinspection RubyResolve
|
33
|
+
def use_environment(env_id)
|
34
|
+
@global_env_id = env_id || :default
|
35
|
+
unless @environments[@global_env_id]
|
36
|
+
LOG.debug 'Creating new environment :{}', env_id
|
37
|
+
env = MangoPay::Environment.new(@global_env_id)
|
38
|
+
@environments[@global_env_id] = env
|
39
|
+
end
|
40
|
+
LOG.info 'Using environment :{}', env_id
|
41
|
+
put_thread_local_environment
|
42
|
+
end
|
43
|
+
|
44
|
+
# Sets MangoPay to run under the default environment.
|
45
|
+
def use_default
|
46
|
+
use_environment :default
|
47
|
+
end
|
48
|
+
|
49
|
+
# Returns the environment currently being used.
|
50
|
+
#
|
51
|
+
# noinspection RubyResolve
|
52
|
+
def environment
|
53
|
+
@environments[thread_local_env_id]
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
# Returns the ID of the environment to be used for current thread.
|
59
|
+
#
|
60
|
+
# noinspection RubyResolve
|
61
|
+
def thread_local_env_id
|
62
|
+
thread_id = Thread.current.object_id
|
63
|
+
@env_id[thread_id] || put_thread_local_environment
|
64
|
+
end
|
65
|
+
|
66
|
+
# Saves currently-set global environment as the one to be used
|
67
|
+
# for current thread.
|
68
|
+
#
|
69
|
+
# noinspection RubyResolve
|
70
|
+
def put_thread_local_environment
|
71
|
+
thread = Thread.current
|
72
|
+
thread_id = thread.object_id
|
73
|
+
LOG.debug 'Mapping thread {} to environment :{}',
|
74
|
+
thread_id, @global_env_id
|
75
|
+
initiate_mapping_removal(thread) unless @env_id[thread_id]
|
76
|
+
@env_id[thread_id] = @global_env_id
|
77
|
+
end
|
78
|
+
|
79
|
+
# Starts another thread which will delete current thread's
|
80
|
+
# environment hash entry as soon as current thread terminates.
|
81
|
+
#
|
82
|
+
# noinspection RubyResolve
|
83
|
+
def initiate_mapping_removal(thread)
|
84
|
+
thread_id = thread.object_id
|
85
|
+
LOG.debug 'Initiating removal task for thread-to-environment mapping '\
|
86
|
+
'{ {} => :{} }', thread_id, @global_env_id
|
87
|
+
Thread.new do
|
88
|
+
thread.join
|
89
|
+
deleted = @env_id.delete thread_id
|
90
|
+
LOG.debug 'Removed thread-to-environment mapping '\
|
91
|
+
'{ {} => :{} }', thread_id, deleted
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
public
|
96
|
+
|
97
|
+
# Provides MangoPay configuration object for current environment.
|
98
|
+
#
|
99
|
+
# noinspection RubyResolve
|
100
|
+
def configuration
|
101
|
+
env = environment
|
102
|
+
env.configuration ||
|
103
|
+
raise("MangoPay.configure() was not called for environment #{env.id}")
|
104
|
+
end
|
105
|
+
|
106
|
+
# Allows configuration of the current MangoPay environment.
|
107
|
+
# Yields configuration object to a provided block.
|
108
|
+
#
|
109
|
+
# noinspection RubyResolve
|
110
|
+
def configure
|
111
|
+
env = environment
|
112
|
+
LOG.info 'Configuring environment :{}', env.id
|
113
|
+
config = env.configuration || MangoPay::Configuration.new
|
114
|
+
yield config
|
115
|
+
validate config
|
116
|
+
LOG.info 'Successfully configured environment :{} for client {}',
|
117
|
+
env.id, config.client_id
|
118
|
+
env.configuration = config
|
119
|
+
end
|
120
|
+
|
121
|
+
private
|
122
|
+
|
123
|
+
# Validates a provided MangoPay configuration.
|
124
|
+
def validate(config)
|
125
|
+
cause_message = 'You must specify your client ID'
|
126
|
+
raise cause_message unless config.client_id
|
127
|
+
cause_message = 'You must specify your client passphrase'
|
128
|
+
raise cause_message unless config.client_passphrase
|
129
|
+
config.root_url = config.preproduction? ? SANDBOX_API_URL : MAIN_API_URL\
|
130
|
+
unless config.root_url
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module MangoApi
|
4
|
+
|
5
|
+
# Declares API method URLs.
|
6
|
+
class ApiMethods
|
7
|
+
class << self
|
8
|
+
extend Forwardable
|
9
|
+
|
10
|
+
@hash = {
|
11
|
+
create_token: %w[POST oauth/token],
|
12
|
+
|
13
|
+
create_user: %w[POST %(users/#{_param1.person_type.to_s.downcase})],
|
14
|
+
update_user: %w[PUT %(users/#{_param1}/#{_param2})],
|
15
|
+
get_user: %w[GET %(users/#{_param1})],
|
16
|
+
get_users: %w[GET users],
|
17
|
+
|
18
|
+
create_account: %w[POST %(users/#{_param1.user_id}/bankaccounts/#{_param1.type.to_s.downcase})],
|
19
|
+
deactivate_account: %w[PUT %(users/#{_param1}/bankaccounts/#{_param2})],
|
20
|
+
get_account: %w[GET %(users/#{_param1}/bankaccounts/#{_param2})],
|
21
|
+
get_accounts: %w[GET %(users/#{_param1}/bankaccounts)],
|
22
|
+
|
23
|
+
create_wallet: %w[POST wallets],
|
24
|
+
update_wallet: %w[PUT %(wallets/#{_param1.id})],
|
25
|
+
get_wallet: %w[GET %(wallets/#{_param1})],
|
26
|
+
get_users_wallets: %w[GET %(users/#{_param1}/wallets)],
|
27
|
+
|
28
|
+
update_client: %w[PUT clients],
|
29
|
+
get_client: %w[GET clients],
|
30
|
+
upload_client_logo: %w[PUT clients/logo],
|
31
|
+
|
32
|
+
get_client_wallet: %w[GET %(clients/wallets/#{_param1.to_s}/#{_param2.to_s})],
|
33
|
+
get_client_wallets: %w[GET clients/wallets],
|
34
|
+
get_client_wallets_funds_type: %w[GET %(clients/wallets/#{_param1.to_s})],
|
35
|
+
|
36
|
+
get_users_e_money: %w[GET %(users/#{_param1}/emoney)],
|
37
|
+
|
38
|
+
create_transfer: %w[POST transfers],
|
39
|
+
get_transfer: %w[POST %(transfers/#{_param1})],
|
40
|
+
|
41
|
+
create_card_web_pay_in: %w[POST payins/card/web],
|
42
|
+
create_card_direct_pay_in: %w[POST payins/card/direct],
|
43
|
+
create_card_pre_authorized_pay_in: %w[POST payins/preauthorized/direct],
|
44
|
+
create_bank_wire_direct_pay_in: %w[POST payins/bankwire/direct],
|
45
|
+
create_client_bank_wire_direct_pay_in: %w[POST clients/payins/bankwire/direct],
|
46
|
+
create_direct_debit_web_pay_in: %w[POST payins/directdebit/web],
|
47
|
+
create_direct_debit_direct_pay_in: %w[POST payins/directdebit/direct],
|
48
|
+
get_pay_in: %w[GET %(payins/#{_param1})],
|
49
|
+
|
50
|
+
get_extended_card_view: %w[GET %(payins/card/web/#{_param1}/extended)],
|
51
|
+
|
52
|
+
create_card_registration: %w[POST cardregistrations],
|
53
|
+
complete_card_registration: %w[PUT %(cardregistrations/#{_param1})],
|
54
|
+
get_card_registration: %w[GET %(cardregistrations/#{_param1})],
|
55
|
+
|
56
|
+
get_card: %w[GET %(cards/#{_param1})],
|
57
|
+
get_users_cards: %w[GET %(users/#{_param1}/cards)],
|
58
|
+
get_cards_by_fingerprint: %w[GET %(cards/fingerprints/#{_param1})],
|
59
|
+
deactivate_card: %w[PUT %(cards/#{_param1})],
|
60
|
+
|
61
|
+
get_users_transactions: %w[GET %(users/#{_param1}/transactions)],
|
62
|
+
get_wallets_transactions: %w[GET %(wallets/#{_param1}/transactions)],
|
63
|
+
get_disputes_transactions: %w[GET %(disputes/#{_param1}/transactions)],
|
64
|
+
get_clients_transactions: %w[GET %(clients/transactions)],
|
65
|
+
get_client_wallets_transactions: %w[GET %(clients/wallets/#{_param1.to_s}/#{_param2.to_s}/transactions)],
|
66
|
+
get_pre_authorizations_transactions: %w[GET %(preauthorizations/#{_param1}/transactions)],
|
67
|
+
|
68
|
+
create_pre_authorization: %w[POST preauthorizations/card/direct],
|
69
|
+
get_pre_authorization: %w[GET %(preauthorizations/#{_param1})],
|
70
|
+
cancel_pre_authorization: %w[PUT %(preauthorizations/#{_param1})],
|
71
|
+
|
72
|
+
create_mandate: %w[POST mandates/directdebit/web],
|
73
|
+
get_mandate: %w[GET %(mandates/#{_param1})],
|
74
|
+
cancel_mandate: %w[PUT %(mandates/#{_param1}/cancel)],
|
75
|
+
get_mandates: %w[GET mandates],
|
76
|
+
get_users_mandates: %w[GET %(users/#{_param1}/mandates)],
|
77
|
+
get_accounts_mandates: %w[GET %(users/#{_param1}/bankaccounts/#{_param2}/mandates)],
|
78
|
+
|
79
|
+
create_pay_out: %w[POST payouts/bankwire],
|
80
|
+
get_pay_out: %w[GET %(payouts/#{_param1})],
|
81
|
+
|
82
|
+
create_kyc_document: %w[POST %(users/#{_param1}/kyc/documents)],
|
83
|
+
upload_kyc_document_page: %w[POST %(users/#{_param1}/kyc/documents/#{_param2}/pages)],
|
84
|
+
submit_kyc_document: %w[PUT %(users/#{_param1}/kyc/documents/#{_param2})],
|
85
|
+
get_users_kyc_documents: %w[GET %(users/#{_param1}/kyc/documents)],
|
86
|
+
get_kyc_documents: %w[GET kyc/documents],
|
87
|
+
consult_kyc_document: %w[POST %(kyc/documents/#{_param1}/consult)],
|
88
|
+
|
89
|
+
create_ubo_declaration: %w[POST %(users/legal/#{_param1}/ubodeclarations)],
|
90
|
+
update_ubo_declaration: %w[PUT %(ubodeclarations/#{_param1})],
|
91
|
+
submit_ubo_declaration: %w[PUT %(ubodeclarations/#{_param1})],
|
92
|
+
|
93
|
+
create_hook: %w[POST hooks],
|
94
|
+
update_hook: %w[PUT %(hooks/#{_param1})],
|
95
|
+
get_hook: %w[GET %(hooks/#{_param1})],
|
96
|
+
get_hooks: %w[GET hooks],
|
97
|
+
|
98
|
+
get_events: %w[GET events],
|
99
|
+
|
100
|
+
create_pay_in_refund: %w[POST %(payins/#{_param1}/refunds)],
|
101
|
+
create_transfer_refund: %w[POST %(transfers/#{_param1}/refunds)],
|
102
|
+
|
103
|
+
update_dispute: %w[PUT %(disputes/#{_param1})],
|
104
|
+
close_dispute: %w[PUT %(disputes/#{_param1}/close)],
|
105
|
+
submit_dispute: %w[PUT %(disputes/#{_param1}/submit)],
|
106
|
+
resubmit_dispute: %w[PUT %(disputes/#{_param1}/submit)],
|
107
|
+
get_dispute: %w[GET %(disputes/#{_param1})],
|
108
|
+
get_users_disputes: %w[GET %(users/#{_param1}/disputes)],
|
109
|
+
get_wallets_disputes: %w[GET %(wallets/#{_param1}/disputes)],
|
110
|
+
get_disputes_pending_settlement: %w[GET disputes/pendingsettlement],
|
111
|
+
get_disputes: %w[GET disputes],
|
112
|
+
|
113
|
+
create_dispute_document: %w[POST %(disputes/#{_param1}/documents)],
|
114
|
+
upload_dispute_document_page: %w[POST %(disputes/#{_param1}/documents/#{_param2}/pages)],
|
115
|
+
submit_dispute_document: %w[PUT %(disputes/#{_param1}/documents/#{_param2})],
|
116
|
+
get_dispute_document: %w[GET %(dispute-documents/#{_param1})],
|
117
|
+
get_disputes_documents: %w[GET %(disputes/#{_param1}/documents)],
|
118
|
+
get_dispute_documents: %w[GET dispute-documents],
|
119
|
+
consult_dispute_document: %w[POST %(dispute-documents/#{_param1}/consult)],
|
120
|
+
|
121
|
+
get_repudiation: %w[GET %(repudiations/#{_param1})],
|
122
|
+
|
123
|
+
create_settlement_transfer: %w[POST %(repudiations/#{_param1}/settlementtransfer)],
|
124
|
+
get_settlement_transfer: %w[GET %(settlements/#{_param1})],
|
125
|
+
|
126
|
+
create_transaction_report: %w[POST reports/transactions],
|
127
|
+
create_wallet_report: %w[POST reports/wallets],
|
128
|
+
get_report: %w[GET %(reports/#{_param1})],
|
129
|
+
get_reports: %w[GET reports],
|
130
|
+
|
131
|
+
replicate_response: %w[GET %(responses/#{_param1})]
|
132
|
+
}
|
133
|
+
|
134
|
+
def_delegators @hash, :[]
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,173 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require_relative '../common/log_provider'
|
3
|
+
|
4
|
+
module MangoApi
|
5
|
+
|
6
|
+
# Manages acquisition and storage of API authorization token.
|
7
|
+
module AuthTokenManager
|
8
|
+
LOG = MangoPay::LogProvider.provide(self)
|
9
|
+
|
10
|
+
class << self
|
11
|
+
|
12
|
+
# Provides a valid authorization token for API calls.
|
13
|
+
def token
|
14
|
+
client_id = MangoPay.configuration.client_id
|
15
|
+
token_valid? && storage.retrieve_for(client_id) || refresh_token
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# Retrieves authorization token storage object.
|
21
|
+
def storage
|
22
|
+
return @storage if @storage
|
23
|
+
init_storage
|
24
|
+
end
|
25
|
+
|
26
|
+
# Initializes storage strategy for OAuth tokens.
|
27
|
+
# Returns the storage object.
|
28
|
+
def init_storage
|
29
|
+
client_id = MangoPay.configuration.client_id
|
30
|
+
dir = MangoPay.configuration.temp_dir
|
31
|
+
@storage = dir ? FileStorage.new : MemoryStorage.new
|
32
|
+
strategy = @storage.class.name.split('::').last
|
33
|
+
location_if_file = dir ? " at '/#{dir}'" : ''
|
34
|
+
LOG.info 'Using {}{} for {} client\'s OAuth tokens',
|
35
|
+
strategy, location_if_file, client_id
|
36
|
+
@storage
|
37
|
+
end
|
38
|
+
|
39
|
+
# Returns true if the current client's
|
40
|
+
# authorization token is valid
|
41
|
+
def token_valid?
|
42
|
+
!token_invalid?
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns true if the current client's
|
46
|
+
# stored token is no longer valid.
|
47
|
+
def token_invalid?
|
48
|
+
token = storage.retrieve_for MangoPay.configuration.client_id
|
49
|
+
token.nil? ||
|
50
|
+
token['expire_time'].nil? ||
|
51
|
+
token['expire_time'] <= Time.now ||
|
52
|
+
token['environment_key'] != environment_key
|
53
|
+
end
|
54
|
+
|
55
|
+
# Provides a configuration-specific hash key.
|
56
|
+
def environment_key
|
57
|
+
config = MangoPay.configuration
|
58
|
+
key = [config.root_url, config.client_id, config.client_passphrase]
|
59
|
+
.join('|')
|
60
|
+
Digest::MD5.hexdigest(key)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Refreshes the stored authorization token.
|
64
|
+
def refresh_token
|
65
|
+
LOG.info 'Refreshing OAuth token'
|
66
|
+
config = MangoPay.configuration
|
67
|
+
unless config.client_id && config.client_passphrase
|
68
|
+
raise 'You must specify your client ID and passphrase'
|
69
|
+
end
|
70
|
+
token = MangoApi::OAuthTokens.create(config)
|
71
|
+
append_data token
|
72
|
+
store_token token
|
73
|
+
token
|
74
|
+
end
|
75
|
+
|
76
|
+
# Appends some useful data to the token object.
|
77
|
+
#
|
78
|
+
# @param +token+ the token object
|
79
|
+
def append_data(token)
|
80
|
+
token['expire_time'] = Time.now + token['expires_in'].to_i
|
81
|
+
token['environment_key'] = environment_key
|
82
|
+
end
|
83
|
+
|
84
|
+
# Stores the OAuth token.
|
85
|
+
#
|
86
|
+
# @param +token+ the OAuth token to be stored
|
87
|
+
def store_token(token)
|
88
|
+
client_id = MangoPay.configuration.client_id
|
89
|
+
storage.store_for client_id, token
|
90
|
+
LOG.info 'OAuth token stored in {} for client {}',
|
91
|
+
storage.class.name.split('::').last, client_id
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# Stores client-specific OAuth tokens in-memory.
|
97
|
+
class MemoryStorage
|
98
|
+
def initialize
|
99
|
+
@token = {}
|
100
|
+
end
|
101
|
+
|
102
|
+
# Retrieves a client-specific OAuth token.
|
103
|
+
#
|
104
|
+
# @param +client_id+ ID of the client whose token to retrieve
|
105
|
+
def retrieve_for(client_id)
|
106
|
+
@token[client_id]
|
107
|
+
end
|
108
|
+
|
109
|
+
# Stores a client-specific OAuth token.
|
110
|
+
#
|
111
|
+
# @param +client_id+ ID of the client for which token is being stored
|
112
|
+
# @param +token+ OAuth token for this client
|
113
|
+
def store_for(client_id, token)
|
114
|
+
@token[client_id] = token
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# Stores client-specific OAuth tokens in temporary files
|
119
|
+
# in the user-specified directory.
|
120
|
+
class FileStorage
|
121
|
+
require 'yaml'
|
122
|
+
|
123
|
+
def initialize
|
124
|
+
@temp_dir = MangoPay.configuration.temp_dir
|
125
|
+
raise 'Path to temporary folder is not defined' unless @temp_dir
|
126
|
+
end
|
127
|
+
|
128
|
+
# Retrieves a client's OAuth token from its storage file.
|
129
|
+
#
|
130
|
+
# @param +client_id+ ID of the client whose OAuth token to retrieve
|
131
|
+
#
|
132
|
+
# noinspection RubyResolve
|
133
|
+
def retrieve_for(client_id)
|
134
|
+
path = file_path(client_id)
|
135
|
+
return nil unless File.exist? path
|
136
|
+
File.open(path, 'r') do |file|
|
137
|
+
file.flock File::LOCK_SH
|
138
|
+
oauth_data = file.read
|
139
|
+
YAML.load oauth_data || nil
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
# Generates the file path to a certain client's OAuth token file.
|
144
|
+
#
|
145
|
+
# @param +client_id+ ID of the client whose file path to generate
|
146
|
+
def file_path(client_id)
|
147
|
+
File.join(@temp_dir, "mangopay_oauth_token_#{client_id}.tmp")
|
148
|
+
end
|
149
|
+
|
150
|
+
# Stores client-specific OAuth token in its own file.
|
151
|
+
#
|
152
|
+
# @param +client_id+ ID of the client whose token is being stored
|
153
|
+
# @param +token+ OAuth token for this client
|
154
|
+
#
|
155
|
+
# noinspection RubyResolve
|
156
|
+
def store_for(client_id, token)
|
157
|
+
ensure_folder_exists MangoPay.configuration.temp_dir
|
158
|
+
File.open(file_path(client_id), 'w') do |file|
|
159
|
+
file.flock File::LOCK_EX
|
160
|
+
file.truncate(0)
|
161
|
+
file.rewind
|
162
|
+
file.puts YAML.dump(token)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
# Creates a folder at the given path if none exists.
|
167
|
+
#
|
168
|
+
# @param +folder+ path at which folder should exist
|
169
|
+
def ensure_folder_exists(folder)
|
170
|
+
FileUtils.mkdir_p folder unless File.directory?(folder)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|