Fix: Add blacklist bypass (#120)

* added

* fixed dialyzer

* minor

* added constant bypass

* fixed format

* removed some tests

* added env for score
This commit is contained in:
Артем 2024-03-21 14:58:30 +03:00 committed by GitHub
parent 872e076d33
commit 5c02fe6ce0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 18 additions and 173 deletions

View File

@ -43,20 +43,18 @@ check_blacklist(#{
field_name = <<"CARD_TOKEN">>,
value = Token
},
Result = issue_call(
DeadLine = woody_deadline:from_timeout(genlib_app:env(hellgate, inspect_timeout, infinity)),
{ok, Check} = issue_call(
'IsBlacklisted',
{Context},
hg_proxy:get_call_options(
Proxy,
Revision
)
),
case Result of
{ok, Check} when is_atom(Check) ->
false,
DeadLine
),
Check;
{exception, Error} ->
error(Error)
end;
check_blacklist(_Ctx) ->
false.
@ -68,7 +66,7 @@ inspect(
domain_revision = Revision
} = Payment,
#domain_Inspector{
fallback_risk_score = FallBackRiskScore,
fallback_risk_score = FallBackRiskScore0,
proxy =
Proxy = #domain_Proxy{
ref = ProxyRef,
@ -82,22 +80,24 @@ inspect(
payment = get_payment_info(Shop, Invoice, Payment),
options = maps:merge(ProxyDef#domain_ProxyDefinition.options, ProxyAdditional)
},
Result = issue_call(
FallBackRiskScore1 =
case FallBackRiskScore0 of
undefined ->
genlib_app:env(hellgate, inspect_score, high);
Score ->
Score
end,
{ok, RiskScore} = issue_call(
'InspectPayment',
{Context},
hg_proxy:get_call_options(
Proxy,
Revision
),
FallBackRiskScore,
FallBackRiskScore1,
DeadLine
),
case Result of
{ok, RiskScore} when is_atom(RiskScore) ->
RiskScore;
{exception, Error} ->
error(Error)
end.
RiskScore.
get_payment_info(
#domain_Shop{
@ -157,12 +157,6 @@ get_payment_info(
payment = ProxyPayment
}.
issue_call(Func, Args, CallOpts) ->
issue_call(Func, Args, CallOpts, undefined, undefined).
issue_call(Func, Args, CallOpts, undefined, _DeadLine) ->
% Do not set custom deadline without fallback risk score
hg_woody_wrapper:call(proxy_inspector, Func, Args, CallOpts);
issue_call(Func, Args, CallOpts, Default, DeadLine) ->
try hg_woody_wrapper:call(proxy_inspector, Func, Args, CallOpts, DeadLine) of
{ok, _} = RiskScore ->

View File

@ -199,6 +199,7 @@ start_app(hellgate = AppName) ->
refunded => {intervals, [1, 1, 1]}
}},
{inspect_timeout, 1000},
{inspect_score, high},
{fault_detector, #{
timeout => 2000,
enabled => false,

View File

@ -167,17 +167,12 @@
-export([adhoc_repair_invalid_changes_failed/1]).
-export([adhoc_repair_force_invalid_transition/1]).
-export([repair_fail_pre_processing_succeeded/1]).
-export([repair_skip_inspector_succeeded/1]).
-export([repair_fail_session_on_processed_succeeded/1]).
-export([repair_fail_suspended_session_succeeded/1]).
-export([repair_fail_session_on_pre_processing/1]).
-export([repair_fail_session_on_refund_succeeded/1]).
-export([repair_complex_first_scenario_succeeded/1]).
-export([repair_complex_second_scenario_succeeded/1]).
-export([repair_fulfill_session_on_processed_succeeded/1]).
-export([repair_fulfill_suspended_session_succeeded/1]).
-export([repair_fulfill_session_on_pre_processing_failed/1]).
-export([repair_fulfill_session_with_trx_succeeded/1]).
-export([repair_fulfill_session_on_refund_succeeded/1]).
-export([repair_fulfill_session_on_captured_succeeded/1]).
@ -454,17 +449,12 @@ groups() ->
adhoc_repair_force_invalid_transition
]},
{repair_scenarios, [parallel], [
repair_fail_pre_processing_succeeded,
repair_skip_inspector_succeeded,
repair_fail_session_on_processed_succeeded,
repair_fail_suspended_session_succeeded,
repair_fail_session_on_pre_processing,
repair_fail_session_on_refund_succeeded,
repair_complex_first_scenario_succeeded,
repair_complex_second_scenario_succeeded,
repair_fulfill_session_on_processed_succeeded,
repair_fulfill_suspended_session_succeeded,
repair_fulfill_session_on_pre_processing_failed,
repair_fulfill_session_with_trx_succeeded,
repair_fulfill_session_on_refund_succeeded,
repair_fulfill_session_on_captured_succeeded
@ -5196,57 +5186,6 @@ repair_fail_cash_flow_building_succeeded(C) ->
]
} = hg_client_invoicing:get_limit_values(InvoiceID, PaymentID, Client).
-spec repair_fail_pre_processing_succeeded(config()) -> test_return().
repair_fail_pre_processing_succeeded(C) ->
Client = cfg(client, C),
PartyClient = cfg(party_client, C),
ShopID = hg_ct_helper:create_battle_ready_shop(
cfg(party_id, C),
?cat(6),
<<"RUB">>,
?tmpl(2),
?pinst(2),
PartyClient
),
InvoiceID = start_invoice(ShopID, <<"rubberduck">>, make_due_date(10), 42000, C),
% Invoice
PaymentParams = make_payment_params(?pmt_sys(<<"visa-ref">>)),
?payment_state(?payment(PaymentID)) = hg_client_invoicing:start_payment(InvoiceID, PaymentParams, Client),
?payment_ev(PaymentID, ?payment_started(?payment_w_status(?pending()))) =
next_change(InvoiceID, Client),
timeout = next_change(InvoiceID, 2000, Client),
ok = repair_invoice_with_scenario(InvoiceID, fail_pre_processing, Client),
?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, _Failure}))) =
next_change(InvoiceID, Client).
-spec repair_skip_inspector_succeeded(config()) -> test_return().
repair_skip_inspector_succeeded(C) ->
Client = cfg(client, C),
PartyClient = cfg(party_client, C),
ShopID = hg_ct_helper:create_battle_ready_shop(
cfg(party_id, C),
?cat(6),
<<"RUB">>,
?tmpl(2),
?pinst(2),
PartyClient
),
InvoiceID = start_invoice(ShopID, <<"rubberduck">>, make_due_date(10), 42000, C),
% Invoice
PaymentParams = make_payment_params(?pmt_sys(<<"visa-ref">>)),
?payment_state(?payment(PaymentID)) = hg_client_invoicing:start_payment(InvoiceID, PaymentParams, Client),
?payment_ev(PaymentID, ?payment_started(?payment_w_status(?pending()))) =
next_change(InvoiceID, Client),
timeout = next_change(InvoiceID, 2000, Client),
ok = repair_invoice_with_scenario(InvoiceID, skip_inspector, Client),
_ = await_payment_cash_flow(low, ?route(?prv(2), ?trm(7)), InvoiceID, PaymentID, Client),
?payment_ev(PaymentID, ?session_ev(?processed(), ?session_started())) =
next_change(InvoiceID, Client),
PaymentID = await_payment_process_finish(InvoiceID, PaymentID, Client),
PaymentID = await_payment_capture(InvoiceID, PaymentID, Client).
-spec repair_fail_session_on_processed_succeeded(config()) -> test_return().
repair_fail_session_on_processed_succeeded(C) ->
Client = cfg(client, C),
@ -5298,67 +5237,6 @@ repair_fail_suspended_session_succeeded(C) ->
?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, Failure})))
] = next_changes(InvoiceID, 3, Client).
-spec repair_fail_session_on_pre_processing(config()) -> test_return().
repair_fail_session_on_pre_processing(C) ->
Client = cfg(client, C),
PartyClient = cfg(party_client, C),
ShopID = hg_ct_helper:create_battle_ready_shop(
cfg(party_id, C),
?cat(7),
<<"RUB">>,
?tmpl(2),
?pinst(2),
PartyClient
),
InvoiceID = start_invoice(ShopID, <<"rubberduck">>, make_due_date(10), 42000, C),
PaymentParams = make_payment_params(?pmt_sys(<<"visa-ref">>)),
?payment_state(?payment(PaymentID)) = hg_client_invoicing:start_payment(InvoiceID, PaymentParams, Client),
?payment_ev(PaymentID, ?payment_started(?payment_w_status(?pending()))) =
next_change(InvoiceID, Client),
timeout = next_change(InvoiceID, 2000, Client),
?assertException(
error,
{{woody_error, {external, result_unexpected, _}}, _},
repair_invoice_with_scenario(InvoiceID, {fail_session, construct_authorization_failure()}, Client)
),
ok = repair_invoice_with_scenario(InvoiceID, fail_pre_processing, Client),
?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, _Failure}))) =
next_change(InvoiceID, Client).
-spec repair_complex_first_scenario_succeeded(config()) -> test_return().
repair_complex_first_scenario_succeeded(C) ->
Client = cfg(client, C),
PartyClient = cfg(party_client, C),
ShopID = hg_ct_helper:create_battle_ready_shop(
cfg(party_id, C),
?cat(6),
<<"RUB">>,
?tmpl(2),
?pinst(2),
PartyClient
),
InvoiceID = start_invoice(ShopID, <<"rubberduck">>, make_due_date(10), 42000, C),
% Invoice
PaymentParams = make_payment_params(?pmt_sys(<<"visa-ref">>)),
?payment_state(?payment(PaymentID)) = hg_client_invoicing:start_payment(InvoiceID, PaymentParams, Client),
?payment_ev(PaymentID, ?payment_started(?payment_w_status(?pending()))) =
next_change(InvoiceID, Client),
timeout = next_change(InvoiceID, 2000, Client),
Scenarios = [
skip_inspector,
{fail_session, construct_authorization_failure()}
],
ok = repair_invoice_with_scenario(InvoiceID, Scenarios, Client),
_ = await_payment_cash_flow(low, ?route(?prv(2), ?trm(7)), InvoiceID, PaymentID, Client),
?payment_ev(PaymentID, ?session_ev(?processed(), ?session_started())) =
next_change(InvoiceID, Client),
PaymentID = await_payment_process_finish(InvoiceID, PaymentID, Client),
PaymentID = await_payment_capture(InvoiceID, PaymentID, Client).
-spec repair_complex_second_scenario_succeeded(config()) -> test_return().
repair_complex_second_scenario_succeeded(C) ->
Client = cfg(client, C),
@ -5484,34 +5362,6 @@ repair_fulfill_session_on_captured_succeeded(C) ->
PaymentID = await_payment_capture_finish(InvoiceID, PaymentID, Reason, Client).
-spec repair_fulfill_session_on_pre_processing_failed(config()) -> test_return().
repair_fulfill_session_on_pre_processing_failed(C) ->
Client = cfg(client, C),
PartyClient = cfg(party_client, C),
ShopID = hg_ct_helper:create_battle_ready_shop(
cfg(party_id, C),
?cat(7),
<<"RUB">>,
?tmpl(2),
?pinst(2),
PartyClient
),
InvoiceID = start_invoice(ShopID, <<"rubberduck">>, make_due_date(10), 42000, C),
PaymentParams = make_payment_params(?pmt_sys(<<"visa-ref">>)),
?payment_state(?payment(PaymentID)) = hg_client_invoicing:start_payment(InvoiceID, PaymentParams, Client),
?payment_ev(PaymentID, ?payment_started(?payment_w_status(?pending()))) =
next_change(InvoiceID, Client),
timeout = next_change(InvoiceID, 2000, Client),
?assertException(
error,
{{woody_error, {external, result_unexpected, _}}, _},
repair_invoice_with_scenario(InvoiceID, fulfill_session, Client)
),
ok = repair_invoice_with_scenario(InvoiceID, fail_pre_processing, Client),
?payment_ev(PaymentID, ?payment_status_changed(?failed({failure, _Failure}))) =
next_change(InvoiceID, Client).
-spec repair_fulfill_session_with_trx_succeeded(config()) -> test_return().
repair_fulfill_session_with_trx_succeeded(C) ->
Client = cfg(client, C),